《操作系统》课程设计说明书.docx

上传人:b****8 文档编号:29831161 上传时间:2023-07-27 格式:DOCX 页数:24 大小:357.86KB
下载 相关 举报
《操作系统》课程设计说明书.docx_第1页
第1页 / 共24页
《操作系统》课程设计说明书.docx_第2页
第2页 / 共24页
《操作系统》课程设计说明书.docx_第3页
第3页 / 共24页
《操作系统》课程设计说明书.docx_第4页
第4页 / 共24页
《操作系统》课程设计说明书.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

《操作系统》课程设计说明书.docx

《《操作系统》课程设计说明书.docx》由会员分享,可在线阅读,更多相关《《操作系统》课程设计说明书.docx(24页珍藏版)》请在冰豆网上搜索。

《操作系统》课程设计说明书.docx

《操作系统》课程设计说明书

 

河南城建学院

《操作系统》课程设计说明书

 

设计题目:

UNIX/Linux文件系统分析

专业:

计算机科学与技术

指导教师:

邵国金耿永军陈红军

班级:

0614082

学号:

061408261

姓名:

贠炳森

同组人:

叶矿辉、陈宇

 

计算机科学与工程系

2011年1月7日

 

前言

在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。

同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。

如何学习和掌握操作系统技术的原理与实际技巧呢?

除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。

但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。

本操作系统课程设计,是给同学提供一个集中实验的机会。

希望同学们通过该设计加深对所学习课程的理解。

本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是RedHatLinux9,言语开发环境是Linux的GNUC或C++。

我做的课程设计是:

Linux/Unix文件系统分析。

在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub系统的源代码,对不同介质上的FAT格式文件系统进行分析。

要求在Linux环境下设计出C语言程序,实现以下功能:

1)分析UNIXSysV/Linux系统引导记录的作用;

2)分析UNIXSysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIXSysV/Linux文件系统内各部分的定位。

3)至少要实现对给定i节点文件的只读访问

 

目录

一.系统环境5

1.1硬件环境5

1.2软件环境5

二.设计目的及要求5

三.总体设计7

四.详细设计8

五.调试与测试8

六.设计中遇到的问题及解决方法8

七.Linux/Unix文件系统分析源程序清单9

7.1头文件9

7.2示例程序12

八.运行结果及分析18

8.1linux文件系统读取18

8.2UNIX文件系统读取20

九.心得体会21

十.参考文献22

Linux/Unix文件系统分析

一.系统环境

1.1硬件环境

cpu为pentium4双线程技术,频率为2.8GHZ,内存为256MB。

1.2软件环境

使用操作系统环境是RedHatLinux9,言语开发环境是Linux的GNUC或C++。

二.设计目的及要求

1、设计目的

学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。

如何学习和掌握操作系统技术的原理与实际技巧呢?

除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。

但由于条件和学时有限,在理论学习过程中没有给提供更多的实验机会。

本操作系统课程设计,是提供了一个集中实验的机会。

应该通过该设计加深对所学习课程的理解。

2、设计要求

按软件工程的思想和方法进行设计,并把它作为一个工程来做。

设计的每一步都有要形成文档,“成品”出来以后要有使用说明书和测试报告。

最后按院方统一要求整理出软件实习“论文”,并分别以电子和书面文档的形式上交。

最后,设计的程序要编译通过,并在验收时进行演示。

本设计的内容是基于《操作系统原理》教材的,但同学们必须对以前的《C语言程序设计》和《数据结构》等内容进行认真的复习。

本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是RedHatLinux9,言语开发环境是Linux的GNUC或C++。

因此,要求课程设计者对Linux操作系统和GNUC或C++有一定的了解。

3、设计内容

在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub系统的源代码,对不同介质上的FAT格式文件系统进行分析。

要求在Linux环境下设计出C语言程序,实现以下功能:

1)分析UNIXSysV/Linux系统引导记录的作用;

2)分析UNIXSysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIXSysV/Linux文件系统内各部分的定位。

3)至少要实现对给定i节点文件的只读访问。

4)建议根据文件读取文件。

文件系统必须完成下列工作:

1)为了合理的存放文件,必须对磁盘等辅助空间(或称文件空间)进行统一管理。

在用户创新新文件时为其分配空闲区,而在用户删除或修改某个文件时,回收和调整存储区。

2)为了实现按名存取,需要有一个用户可见的文件逻辑结构,用户按照文件逻辑结构所给定的方式进行信息的存取和加工。

这种逻辑结构时独立于物理存储设备的。

3)为了便于存放和加工信息,文件在存储和设备上应按一定的顺序存放。

这种存放方式被称为文件物理结构。

4)完成对存放在存储设备上的文件信息的查找。

5)完成文件的共享和提供保护功能。

三.总体设计

四.详细设计

分析UNIXSysV/Linux系统引导记录的作用

UNIXSysV/Linux系统引导记录存放于整个硬盘的第一个扇区,即0柱面0磁头l扇区,也叫做MBR(MaserBootReoofd)扇区,即主引导记录。

主引导记录在计算机引导过程中起着举足轻重的作用,计算机在按下电源键以后,开始执行主板BI0S程序,进行完一系列检测和配置以后,开始按BI0S中设定的系统引导顺序引导系统。

BIOS执行完自己的程序后如何把执行投交给硬盘呢。

交给硬盘后叉执行存储在哪里的程序呢?

其实,称为MBR的扇区中的一段代码起着举足轻重的作用。

MBR不随操作系统的不同而小同,即不同的操作系统町能会存在相同的MBR.即使不同,MBR也不会夹带操作系统的性质,具有公共引导的特性。

对文件系统的操作参看程序源代码。

实现对磁盘文件的访问,实现读写、查看文件系统的存取信息,对应各个i节点的相关信息,以及各个i节点的排列情况,使用户能清楚的看到文件系统磁盘结构。

更加了解计算机文件系统的工作流程。

五.调试与测试

(1)通过输入命令ccchengxu.c将文件编译为可执行文件a.out,通过输入命令./a.out加参数执行文件。

(2)判断命令行参数进行操作,当参数为./a.outus51k.img时进行Linux文件系统读取,当参数为../a.outxxenix.img时进行Unix文件系统读取。

(3)判断是否有第四个参数,若没有,则提示输入i节点号并实现对给定i节点文件的只读访问。

六.设计中遇到的问题及解决方法

在设计程序时。

我们按自己的理解编写了一个超级块和inode节点的结构体。

然后放在主程序中去读取信息,但是运行的结果大出我们的预料。

没有按我们的预期读出文件系统的信息,而是输出了一堆乱码,我们有经过查资料最后终于解决了问题,程序输出正常。

七.Linux/Unix文件系统分析源程序清单

7.1头文件

#include

typedef__s16s16;

typedef__u16u16;

typedef__s32s32;

typedef__u32u32;

typedefu16sysv_ino_t;

/*Blocknumbersare24bit,sometimesstoredin32bit.

OnCoherentFS,theyarealwaysstoredinPDP-11manner:

theleast

significant16bitscomelast.

*/

typedefu32sysv_zone_t;

/*Amongtheblocks...*/

/*XenixFS,CoherentFS:

block0isthebootblock,block1thesuper-block.

SystemVFS:

block0containsboththebootsectorandthesuper-block.*/

/*Thefirstinodezoneissb->sv_firstinodezone(1or2).*/

/*Amongtheinodes...*/

/*0isnon-existent*/

#defineSYSV_BADBL_INO1/*inodeofbadblocksfile*/

#defineSYSV_ROOT_INO2/*inodeofrootdirectory*/

/*Xenixsuper-blockdataondisk*/

#defineXENIX_NICINOD100/*numberofinodecacheentries*/

#defineXENIX_NICFREE100/*numberoffreeblocklistchunkentries*/

structxenix_super_block{

u16s_isize;/*indexoffirstdatazone*/

u32s_fsize;//__packed2__;/*totalnumberofzonesofthisfs*/

/*thestartofthefreeblocklist:

*/

u16s_nfree;/*numberoffreeblocksins_free,<=XENIX_NICFREE*/

u32s_free[XENIX_NICFREE];/*firstfreeblocklistchunk*/

/*thecacheoffreeinodes:

*/

u16s_ninode;/*numberoffreeinodesins_inode,<=XENIX_NICINOD*/

sysv_ino_ts_inode[XENIX_NICINOD];/*somefreeinodes*/

/*locks,notusedbyLinux:

*/

chars_flock;/*lockduringfreeblocklistmanipulation*/

chars_ilock;/*lockduringinodecachemanipulation*/

chars_fmod;/*super-blockmodifiedflag*/

chars_ronly;/*flagwhetherfsismountedread-only*/

u32s_time;//__packed2__;/*timeoflastsuperblockupdate*/

u32s_tfree;//__packed2__;/*totalnumberoffreezones*/

u16s_tinode;/*totalnumberoffreeinodes*/

s16s_dinfo[4];/*deviceinformation?

?

*/

chars_fname[6];/*filesystemvolumename*/

chars_fpack[6];/*filesystempackname*/

chars_clean;/*setto0x46whenfilesystemisproperlyunmounted*/

chars_fill[371];

s32s_magic;/*versionoffilesystem*/

s32s_type;/*typeoffilesystem:

1for512byteblocks

2for1024byteblocks

3for2048byteblocks*/

};

/*SystemVFScomesintwovariants:

*sysv2:

SystemVRelease2(e.g.Microport),structureelementsaligned

(2).

*sysv4:

SystemVRelease4(e.g.Consensys),structureelementsaligned(4).

*/

#defineSYSV_NICINOD100/*numberofinodecacheentries*/

#defineSYSV_NICFREE50/*numberoffreeblocklistchunkentries*/

/*SystemV4super-blockdataondisk*/

structsysv4_super_block{

u16s_isize;/*indexoffirstdatazone*/

u16s_pad0;

u32s_fsize;/*totalnumberofzonesofthisfs*/

/*thestartofthefreeblocklist:

*/

u16s_nfree;/*numberoffreeblocksins_free,<=SYSV_NICFREE*/

u16s_pad1;

u32s_free[SYSV_NICFREE];/*firstfreeblocklistchunk*/

/*thecacheoffreeinodes:

*/

u16s_ninode;/*numberoffreeinodesins_inode,<=SYSV_NICINOD*/

u16s_pad2;

sysv_ino_ts_inode[SYSV_NICINOD];/*somefreeinodes*/

/*locks,notusedbyLinux:

*/

chars_flock;/*lockduringfreeblocklistmanipulation*/

chars_ilock;/*lockduringinodecachemanipulation*/

chars_fmod;/*super-blockmodifiedflag*/

chars_ronly;/*flagwhetherfsismountedread-only*/

u32s_time;/*timeoflastsuperblockupdate*/

s16s_dinfo[4];/*deviceinformation?

?

*/

u32s_tfree;/*totalnumberoffreezones*/

u16s_tinode;/*totalnumberoffreeinodes*/

u16s_pad3;

chars_fname[6];/*filesystemvolumename*/

chars_fpack[6];/*filesystempackname*/

s32s_fill[12];

s32s_state;/*filesystemstate:

0x7c269d38-s_timemeansclean*/

s32s_magic;/*versionoffilesystem*/

s32s_type;/*typeoffilesystem:

1for512byteblocks

2for1024byteblocks*/

};

 

/*SystemV/Coherentinodedataondisk*/

structsysv_inode{

u16i_mode;

u16i_nlink;

u16i_uid;

u16i_gid;

u32i_size;

union{/*directories,regularfiles,...*/

unsignedchari_addb[3*(10+1+1+1)+1];/*zonenumbers:

max.10datablocks,

*then1indirectionblock,

*then1doubleindirectionblock,

*then1tripleindirectionblock.

*Thenmaybea"filegenerationnumber"?

?

*/

/*namedpipesonCoherent*/

struct{

charp_addp[30];

s16p_pnc;

s16p_prx;

s16p_pwx;

}i_p;

}i_a;

u32i_atime;/*timeoflastaccess*/

u32i_mtime;/*timeoflastmodification*/

u32i_ctime;/*timeofcreation*/

};

 

/*

*SystemV/V7/CoherentFSinodedatainmemory

*/

structsysv_inode_info{

u32i_data[10+1+1+1];/*zonenumbers:

max.10datablocks,

*then1indirectionblock,

*then1doubleindirectionblock,

*then1tripleindirectionblock.

*/

};

7.2示例程序

#include

#include

#include

#include

#include

#include"sysvfs.h"

#include

main(intargc,char**argv)

{

inti,j,k,typ,fd,L=5;

char*file_sys,*tmp,buff[1024],buff_i[1025];

structsysv4_super_block*sbu;

structxenix_super_block*sbx;

structsysv_inode*inode;

intinode_size,inode_no,blk_size;

inti_start,d_start;

longll;

ulongi_add[13];

if(argc<3){

fprintf(stderr,"Usage:

\n\t%argv[0]u|xfilesystem\n",argv[0]);

exit

(1);

}

switch(argv[1][0]){

case'U':

case'u':

typ=1;

break;

case'X':

case'x':

typ=2;

break;

default:

typ=0;

}

file_sys=argv[2];

if((fd=open(file_sys,O_RDONLY))==-1){

fprintf(stderr,"FileSystem'%s'OPENerror!

\a\n",file_sys);

exit

(2);

}

if(lseek(fd,typ*512,SEEK_SET)!

=typ*512){

fprintf(stderr,"FileSystem'%s'SEEKerror!

\a\n",file_sys);

close(fd);exit(3);

}

if(read(fd,buff,512*typ)!

=512*typ){

fprintf(stderr,"FileSystem'%s'READerror!

\a\n",file_sys);

close(fd);exit(4);

}

if(typ==1)gotounix_;

if(typ==2)gotoxenix_;

exit(100);

unix_:

sbu=(structsysv4_super_block*)buff;

printf("indexoffirstdatazone:

%x\n",sbu->s_isize);

printf("s_pad0:

%x\n",sbu->s_pad0);

printf("totalnumberofzonesofthisfs:

%x\n",sbu->s_fsize);

printf("/*thestartofthefreeblocklist:

*/\n");

printf("numberoffreeblocksins_free,<=SYSV_NICFREE:

%x\n",sbu->s_nfree);

printf("s_pad1:

%x\t%ud\n",sbu->s_pad1,sbu->s_pad1);

printf("/*thecacheoffreeinodes:

*/\n");

printf("numberoffreeinodesins_inode,<=SYSV_NICINOD:

%x\n",sbu->s_ninode);

printf("s_pad2:

%x\n",sbu->s_pad2);

printf("somefreeinodes:

\n");

printf("/*locks,notusedbyLinux:

*/\n");

printf("timeoflastsuperblockupdate:

%x\n",sbu->s_time);

printf("totalnumberoffreezones:

%x\n",sbu->s_tfree);

pri

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1