搜档网
当前位置:搜档网 › 实验五 文件系统

实验五 文件系统

实验五 文件系统
实验五 文件系统

实验五 Linux文件系统实验

实验目的

学习Linux中文件系统的使用,理解链接、权限的概念和使用;掌握常用的文件系统的系统调用,加深对文件系统界面的理解。

实验内容

1.学习文件链接的概念和使用(步骤一)

2.学习文件权限的概念和管理机制,并学会使用(步骤三)

3.学习和文件相关的系统调用和库函数,进行若干编程练习(步骤四,至

少完成两例)

实验步骤

一、文件链接与复制(hard link)

1.使用vi a创建一个文件a

2.使用ln a b命令创建一个链接

使用cp a c创建一个复制版本

观察3个文件的大小、时间、属主(owner)等属性

3.修改文件a

4.观察文件b的内容,观察文件c的内容,观察3个文件的大小、时间、属主(owner)等属性

5.使用ls –li命令,观察文件a, b, c的inode编号

6.使用rm a删除文件a

7.观察文件b, c是否仍然存在,内容如何

8.使用rm b删除文件b,再观察文件b, c是否存在

二、Linux中与文件系统相关的系统调用

1.通过使用man命令,查阅以下的系统调用的使用手册。

1)文件操作

open, close, read, write, seek

creat, truncate, mknod, dup, dup2

link, unlink, rename, symlink

chmod, chown, umask

fcntl, flock, fstat, lstat, stat, utime

fsync, fdatasync

2)目录操作

mkdir, chdir, rmdir

readdir, getdents

3)库函数

fopen, fclose, fread, fwrite, fscanf, fprintf, fseek ,ftell, feof等

2.文件系统的系统调用的编程练习

利用上面的系统调用,试写出自己的命令程序,完成以下功能(要求:1)-7)至少完成5例,8)-10)至少完成2例):

1)如何创建一个文件?

2)如何删除一个文件? (rm 命令)

3)如何将一个文件拷贝到另一个文件? (cp 命令)

4)如何重命名一个文件? (mv file命令)

5)如何截断一个文件(或使其长度为零)?How to truncate a file (or make it

be of length zero)?

6)如何向一个文件中追加内容?

7)如何锁定一个文件? (read lock, write lock)

8)如何创建一个目录? (mkdir 命令)

9)如何删除一个目录? (rmdir 命令)

10)如何遍历一个目录(或称浏览该目录下所有文件?)?(ls –lR 命令)

实验5 Linux文件系统实验

实验五 Linux文件系统实验 实验内容: 1.仔细阅读以下代码; 2.画出系统功能框图 3.程序注释 4.运行程序,写出程序执行结果,并分析说明。 #include #include #include #include #include #include #include #include #define MAX 128 int chmd(); int chmd () { int c; mode_t mode=S_IWUSR; printf(" 0. 0700\n 1. 0400\n 2. 0200 \n 3. 0100\n "); //还可以增加其它权限printf("Please input your choice(0-3):"); scanf("%d",&c); switch(c) { case 0: chmod("file1",S_IRWXU);break; case 1: chmod("file1",S_IRUSR);break; case 2: chmod("file1",S_IWUSR);break; case 3: chmod("file1",S_IXUSR);break; default:printf("You have a wrong choice!\n"); } return(0); } main() { int fd; int num; int choice;

char buffer[MAX]; struct stat buf; char* path="/bin/ls"; char* argv[4]={"ls","-l","file1",NULL}; while(1) { printf("********************************\n"); printf("0. 退出\n"); printf("1. 创建新文件\n"); printf("2. 写文件\n"); printf("3. 读文件\n"); printf("4. 修改文件权限\n"); printf("5. 查看当前文件的权限修改文件权限\n"); printf("********************************\n"); printf("Please input your choice(0-6):"); scanf("%d",&choice); switch(choice) { case 0:close(fd); exit(0); case 1: fd=open("file1",O_RDWR|O_TRUNC|O_CREAT,0750); if(fd==-1) printf("File Create Failed!\n"); else printf("fd = %d\n",fd); break; case 2: num=read(0,buffer,MAX); write(fd,buffer,num); break; case 3: read(fd,buffer,MAX); write(1,buffer,num); break; case 4: chmd (); printf("Change mode success!\n"); break; case 5: execv(path,argv); break;

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、实验内容: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作 4、算法与框图 ?因系统小,文件目录的检索使用了简单的线性搜索。 ?文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ?程序中使用的主要设计结构如下:主文件目录和用户文件目录( MFD、UFD); 打开文件目录( AFD)(即运行文件目录) 文件系统算法的流程图如下

三、工具/准备工作: 在开始本实验之前,请回顾教科书的相关内容。并做以下准备: 1) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

操作系统实验题目2

实验报告撰写要求实验报告要求具有以下内容: 一、实验目的 二、实验内容 三、实验要求 四、算法流程图 五、给出测试数据及运行结果 六、实验体会或对改进实验的建议

实验1 进程调度(2学时) 一、实验目的 通过实验加强对进程调度算法的理解和掌握。 二、实验内容 编写程序实现基于优先级的时间片轮转调度算法。 三、实验要求 1、假定系统有5个进程,每个进程用一个进程控制块PCB来代表,进程控制块的结构如下图1.1所示: 图1.1 其中: 进程名:作为进程的标识,假设五个进程的进程名分别为p1,p2,p3,

p4,p5。 指针:进程按顺序排成循环链表,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。 要求运行时间:假设进程需要运行的单位时间数。 已运行时间:假设进程已经运行的单位时间数,初值为0。 状态:可假设有两种状态,就绪状态和结束状态。进程的初始状态都为就绪状态。 2、每次运行所设计的处理器调度程序调度进程之前,为每个进程随机确定它的要求运行时间。 3、此程序是模拟处理器调度,因此,被选中的进程并不实际启动运行,而是执行 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位时间。 4、在所设计的程序中应有显示语句,能显示每次被选中的进程名以及运行一次后进程队列的变化。

实验2 银行家算法(2学时) 一、实验目的 理解银行家算法,掌握进程安全性检查的方法及资源分配的方法。 二、实验内容 编写程序实现银行家算法,并验证程序的正确性。 三、实验要求 编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。 例子:某系统有A、B、C、D 4类资源共5个进程(P0、P1、P2、P3、P4)共享,各进程对资源的需求和分配情况如下表所示。 现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个,请按

操作系统实验实验1

广州大学学生实验报告 1、实验目的 1.1、掌握进程的概念,明确进程的含义 1.2、认识并了解并发执行的实质 2.1、掌握进程另外的创建方法 2.2、熟悉进程的睡眠、同步、撤消等进程控制方法 3.1、进一步认识并发执行的实质 3.2、分析进程竞争资源的现象,学习解决进程互斥的方法 4.1、了解守护进程 5.1、了解什么是信号 5.2、INUX系统中进程之间软中断通信的基本原理 6.1、了解什么是管道 6.2、熟悉UNIX/LINUX支持的管道通信方式 7.1、了解什么是消息 7.2、熟悉消息传送的机理 8.1、了解和熟悉共享存储机制 二、实验内容 1.1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 1.2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及 'son ……',父进程显示'parent ……',观察结果,分析原因。 2.1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容 2.2、利用wait( )来控制进程执行顺序 3.1、修改实验(一)中的程序2,用lockf( )来给每一个进程加锁,以实现进程之间的互斥 3.2、观察并分析出现的现象 4.1、写一个使用守护进程(daemon)的程序,来实现: 创建一个日志文件/var/log/Mydaemon.log ; 每分钟都向其中写入一个时间戳(使用time_t的格式) ; 5.1、用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 5.2、用软中断通信实现进程同步的机理

实验5 文件系统管理

广东技术师范学院实验报告 学院:计算机科学学 院 专业:物联网工程班级: 12物 联网 成绩: 姓名:邓文龙学号:08 组别:组员: 实验地点:工业中心204 实验日期:2014.03.26 指导教师签名: 实验5项目名称:文件系统管理 1、实验目的 理解Linux系统中的文件系统基本结构,掌握各种访问和管理文件以及文件系统的基本命令。 2、实验内容 2.1 文件系统管理的基本概念 文件系统(file system)是指操作系统中用于管理文件信息的软件机构。借用维基百科里面关于文件系统的解释(https://www.sodocs.net/doc/fe10770116.html,/wiki/文件系统):计算机的文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。 文件系统既要建立在一定的物理存储设备上,但却是一个逻辑上的概念。对用户来说,关于文件的各种操作及访问都需要通过文件系统进行,文件系统成为用户和存储设备之间的一个重要界面。本实验主要讨论在Linux系统中文件以及文件系统管理的各种操作。 文件系统管理主要包括两大部分的内容,一部分是结合文件系统的基本特性,对文件系统作必要的设置,监控文件系统的基本使用状态,另一部分则是对文件的各类管理操作。这些都是从软件层面上对文件系统进行管理。部分最基本的shell命令已经之前的实验中有所介绍。 2.2文件系统 2.2.1文件系统的层次结构(补充教材6.4.1节) 文件系统表达了一种组织文件的方式。一般地,UNIX文件系统采用的都是一种所谓树状的层次结构,称为“根文件系统”。如下图所示,树根以“/”表示,

操作系统实验5文件系统:Linux文件管理

实验5 文件系统:Linux文件管理 1.实验目的 (1)掌握Linux提供的文件系统调用的使用方法; (2)熟悉文件和目录操作的系统调用用户接口; (3)了解操作系统文件系统的工作原理和工作方式。 2.实验内容 (1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:*********** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 复制文件 5. 修改文件权限 6. 查看文件权限 7. 创建子目录 8. 删除子目录 9. 改变当前目录到指定目录 10. 链接操作 *********** 代码: #include #include #include #include #include #include #include #include void menu(void); void openfile(void); void writefile(void); void readfile(void); void copyfile(void); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); void ylj(void); int main() { int choose; int suliangjin=1;

menu(); scanf("%d",&choose); while(choose!=0) { switch(choose) { case 1:openfile();break; case 2:writefile();break; case 3:readfile();break; case 4:copyfile();break; case 5:chmd();break; case 6:ckqx();break; case 7:cjml();break; case 8:scml();break; case 9:ggml();break; case 10:ylj();break; } menu(); scanf("%d",&choose); } return 0; } void menu(void) { printf("文件系统\n"); printf("1.创建新文件\n"); printf("2.写文件\n"); printf("3.读文件\n"); printf("4.复制文件\n"); printf("5.修改文件权限\n"); printf("6.查看文件权限\n"); printf("7.创建子目录\n"); printf("8.删除子目录\n"); printf("9.改变目前目录到指定目录\n"); printf("10.链接操作\n"); printf("0.退出\n"); printf("请输入您的选择...\n"); } void openfile(void) { int fd; if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

操作系统实验2

武汉工程大学计算机科学与工程学院 《操作系统》实验报告 专业班级13计工01班实验地点计工403机房学生学号1305120610 指导教师张立 学生姓名李敏实验时间2014-10-19 /2014- 10-26 实验项目实验二、创建线程及线程通信 实验类别操作性()验证性()设计性(√)综合性()其它实 验 目的及要求(1)熟悉Windows中的线程及进程的创建 (2)掌握利用Windows中的同步机制实现线程同步及通信。 成绩评定表 类别评分标准分值得分合计 上机表现积极出勤、遵守纪律 主动完成实验设计任务 30分 实验报告及时递交、填写规范 内容完整、体现收获 70分 说明: 评阅教师:张立 日期: 2015 年 11 月 1 日

实验内容 一、实验内容 要求:创建线程,利用互斥实现线程共享变量通信。 示例程序:Thread.exe 简要说明: 1、点“创建线程”按钮,创建两个线程,一个线程不断对一个变量加1, 结果显示在第一个文本框中。另一个线程不断对另一个变量减1,结果显示在第二个文本框中。这两个线程之间没有交互,仅用于演示线程的创建。 2、演示线程互斥,点“线程互斥”按钮,创建两个线程,一个线程不断循 环,每次循环对共享变量x做100次加1操作(这100次加1操作作为一个临界区CSa),另一个线程不断循环,每次循环对共享变量x做100次减1操作(这100次减1操作作为一个临界区CSb),结果显示在第三个文本框中。可以看到结果是从0到100,然后又从100回到0。可见CSa 和CSb两个临界区是互斥的。 3、除了没有互斥,其它同2,结果显示在第四个文本框中。可见CSa和CSb 两个临界区的执行是有交叉的,CSa的执行可能被CSb打断,CSb的执行也可能被CSa打断 二、源代码 UINT ThreadA(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadA(); return 0; } UINT ThreadB(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadB(); return 0; } UINT ThreadC(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadC(); return 0; } UINT ThreadD(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadD(); return 0;

操作系统实验报告_实验五

实验五:管道通信 实验内容: 1.阅读以下程序: #include #include #include main() { int filedes[2]; char buffer[80]; if(pipe(filedes)<0) //建立管道,filedes[0]为管道里的读取端,filedes[1]则为管道的写入端 //成功则返回零,否则返回-1,错误原因存于errno中 err_quit(“pipe error”); if(fork()>0){ char s[ ] = “hello!\n”; close(filedes[0]); //关闭filedes[0]文件 write(filedes[1],s,sizeof(s)); //s所指的内存写入到filedes[1]文件内 close(filedes[1]); //关闭filedes[0]文件 }else{ close(filedes[1]); read(filedes[0],buffer,80); //把filedes[0]文件传送80个字节到buffer缓冲区内 printf(“%s”,buffer); close(filedes[0]); } } 编译并运行程序,分析程序执行过程和结果,注释程序主要语句。

2.阅读以下程序: #include #include #include main() { char buffer[80]; int fd; unlink(FIFO); //删除FIFO文件 mkfifo(FIFO,0666); //FIFO是管道名,0666是权限 if(fork()>0){ char s[ ] = “hello!\n”;

实验四 文件系统实验报告

实验四文件系统实验 一 . 目的要求 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二 . 例题: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4、算法与框图: ①因系统小,文件目录的检索使用了简单的线性搜索。 ②文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ③程序中使用的主要设计结构如下: 主文件目录和用户文件目录( MFD、UFD) 打开文件目录( AFD)(即运行文件目录)

文件系统算法的流程图如下: 三 . 实验题: 1、增加 2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。 #include #include #include #include #define MAXSIZE 100 #define ADDSIZE 50 #define PT elem+l-> length #define N 4 typedef struct term{/*班级和学期的结构体*/ char class1[10]; char term1[10]; }term; typedef struct student{/*学生成绩信息的结构体*/ term st;/*班级和学期结构体放于此结构体中*/ char num[10]; char name[12]; float course[4]; float total; float average; int bit; }lnode,*stu; typedef struct{ lnode *elem;/*指向上个结构体的指针*/ int size;/*最大能放lnode结构体成员的个数*/ int length;/*当前长度*/ }sqack,*sq; sqack *l; void init(void)/*动态分配存储空间*/ { l-> elem=(stu)malloc(MAXSIZE*sizeof(lnode)); l-> length =0; l-> size=MAXSIZE; } void input(void)/*输入学生的信息*/ { lnode *newbase,*p; char cla[10],ter[10],ch; int n,i; if(l-> length> =l-> size){ newbase=(stu)realloc(l-> elem,(l-> size +ADDSIZE)*sizeof(lnode));/*追加存储空间*/ l-> elem =newbase; l-> size +=ADDSIZE; } p=l-> elem; do { printf( "输入班级和学期(学期用这种格式,如2005年上学期2005 1,2005年下学期2005 2;先输入班级,回车后再输入学期)\n "); gets(cla); gets(ter); printf( "要输入多少个名单?"); scanf( "%d ",&n); printf( "输入学生的成绩\n学号\t姓名\t科目1\t科目2\t科目3\t科目4\n "); for(i=0;i num ,p-> name,p-> course[0],p-> course[1],p-> course[2],p-> course[3]); strcpy(p-> st.class1,cla); strcpy(p-> st.term1,ter); ++l-> length ; } printf( "要继续吗?(y/n) ");

操作系统实验二

操作系统实验实验二进程管理 学号 1215108019 姓名克帆 学院信息学院 班级 12电子2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: 由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的容、堆栈容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标 识数。 ②位置信息。指出进程的程序和数据部分在存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。

操作系统实验二

操作系统实验 实验二进程管理 学号 1215108019 姓名李克帆 学院信息学院 班级 12电子 2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验内容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告内容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: I/完时间片 进程调 I/请

由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的内容、堆栈内容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些内容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标识数。 ②位置信息。指出进程的程序和数据部分在内存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。就 执行阻塞 程度为进程指定一个优先级,优先级用优先数表示。 ⑤进程现场保护区。当进程状态变化时(例如一个进程放弃使用CPU),它需要将当时的CPU现场保护到内存中,以便再次占用CPU时恢复正常运行,有的系统把要保护的CPU 现场放在进程的工作区中,而PCB中仅给出CPU现场保护区起始地址。 ⑥资源清单。每个进程在运行时,除了需要内存外,还需要其它资源,如I/O设备、外存、数据区等。这一部分指出资源需求、分配和控制信息。 ⑦队列指针或链接字。它用于将处于同一状态的进程链接成一个队列,在该单元中存放下一进程PCB首址。 ⑧其它信息。 这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。 2、程序流程图。

操作系统实验---文件系统

实验报告 实验题目:文件系统 姓名: 学号: 课程名称:操作系统 所在学院:信息科学与工程学院 专业班级:计算机 任课教师:

实验项目名称文件系统 一、实验目的与要求: 1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。 2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。 3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。 4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 二、实验设备及软件: 一台PC(Linux系统) 三、实验方法(原理、流程图) 试验方法 (1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。主目录和子 目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建文件,可以编号存储于磁盘上。如file0,file1,file2…并以编号作为物理地 址,在目录中登记。 文件系统功能流程图 图1.文件系统总体命令分析

图 2.登录流程图图 3. ialloc流程图 图4.balloc流程图图5.密码修改流程图

图6.初始化磁盘 图 7.显示所有子目录 dir/ls 操作流程图

图8.创建文件 creatfile 、创建目录 mkdir 流程图 图9.改变当前路径 cd 操作流程图

实验原理 1.文件操作 ◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。具体流程图查看第二节,系统流程图设计部分。 ◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。具体流程图查看第二节,系统流程图设计部分。 ◆ls 显示当前目录下所有目录的模块,输入 ls 命令,回车 ,即会在屏幕上显示当前目录下的所有目录。在该过程中要判断该目录中是否为空,如果为空就没有必要执行该操作了。执行操作时,要调用 readdir (INode inode )函数 ,先读入文件内容到 content 里面,然后直接输出。如果子目录里面还有子目录,则通过递归,一并输出来。具体流程图查看第二节,系统流程图设计部分。 ◆chmod 改变文件权限模块,输入 chmod 命令,回车,输入文件名,回车,即会根据不同类别的用户在屏幕上提示要改变哪一类用户的权限。如果是文件拥有者执行该操作,他可以选择修改自己、其他用户的权限;如果是文件所属组成员执行该操作,他可以选择修改自己、其他用户的权限;如果是其他用户执行该操作,他只能选择修改自己的权限;在该过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了。执行操作时,要判断对该文件有没有执行写操作的权利,没有就不能进行。具体流程图查看第二节,系统流程图设计部分。 ◆cd 改变当前所在目录的模块。输入 cd,回车,相应的字符串,回车,则会根据输入字符串的不同跳转到不同的目录下。如果字符串是‘ .’ ,则到当前目录;如果字符串是‘ ..’ ,则到父目录;如果字符串是‘/’ ,则到根目录;如果字符串是当前目录下的子目录,则到该子目录;如果字符串是一个决定路径,则到该绝对路径。当然在执行的时候要判断有没有该子目录或者该绝对路径,如果没有的话,就不能执行。具体流程图查看第二节,系统流程图设计部分。 2. 用户操作 ◆login 用户注销模块,输入 login ,回车,当前用户就退出了,需要重新登录。 ◆pw 用户修改口令模块,输入 pw ,回车,则会提示输入原始密码,输入正确了才可以提示输入新密码,并且要求新密码输入两次,两次一样了才能通过修改密码成功。具体流程图查看第二节,系统流程图设计部分。 ◆logout 用户退出系统模块,输入 logout ,回车,系统自动退出。

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验五

操作系统 实验报告 哈尔滨工程大学

一、实验概述 1. 实验名称 进程的同步 2. 实验目的 1.使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。 2.调试跟踪EOS信号量的工作过程,理解进程同步的原理。 3.修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 3. 实验类型 验证 二、实验环境 OS Lab 三、实验过程 3.1 准备实验 按照下面的步骤准备本次实验: 1. 启动OS Lab。 2. 新建一个EOS Kernel项目。 3. 生成EOS Kernel项目,从而在该项目文件夹中生成SDK文件夹。 4. 新建一个EOS应用程序项目。 5. 使用在第3步生成的SDK文件夹覆盖EOS应用程序项目文件夹中的SDK文件夹。 3.2 使用EOS的信号量解决生产者-消费者问题 按照下面的步骤查看生产者-消费者同步执行的过程: 1. 使用pc.c文件中的源代码,替换之前创建的EOS应用程序项目中EOSApp.c文件内的源代码。 2. 按F7生成修改后的EOS应用程序项目。 3. 按F5启动调试。OS Lab会首先弹出一个调试异常对话框。 4. 在调试异常对话框中选择“否”,继续执行。 5. 立即激活虚拟机窗口查看生产者-消费者同步执行的过程。 6. 待应用程序执行完毕后,结束此次调试。 3.3 调试EOS信号量的工作过程 3.3.1 创建信号量 按照下面的步骤调试信号量创建的过程:

1. 按F5启动调试EOS应用项目。OS Lab会首先弹出一个调试异常对话框。 2. 在调试异常对话框中选择"是",调试会中断。 3. 在main函数中创建Empty信号量的代码行(第77行) EmptySemaphoreHandle=CreateSemaphore(BUFFER_SIZE, BUFFER_SIZE, NULL); 添加一个断点。 4. 按F5继续调试,到此断点处中断。 5. 按F11调试进入CreateSemaphore函数。可以看到此API函数只是调用了EOS内核中的PsCreateSemaphoreObject函数来创建信号量对象。 6. 按F11调试进入semaphore.c文件中的PsCreateSemaphoreObject函数。在此函数中,会在EOS内核管理的内存中创建一个信号量对象(分配一块内存),而初始化信号量对象中各个成员的操作是在PsInitializeSemaphore函数中完成的。 7. 在semaphore.c文件的顶部查找到PsInitializeSemaphore函数的定义(第19行),在此函数的第一行(第39行)代码处添加一个断点。 8. 按F5继续调试,到断点处中断。观察PsInitializeSemaphore函数中用来初始化信号量结构体成员的值,应该和传入CreateSemaphore函数的参数值是一致的。 9. 按F10单步调试PsInitializeSemaphore函数执行的过程,查看信号量结构体被初始化的过程。打开"调用堆栈"窗口,查看函数的调用层次。 3.3.2 等待、释放信号量 等待信号量(不阻塞) 生产者和消费者刚开始执行时,用来放产品的缓冲区都是空的,所以生产者在第一次调用WaitForSingleObject函数等待Empty信号量时,应该不需要阻塞就可以立即返回。按照下面的步骤调试: 1. 删除所有的断点(防止有些断点影响后面的调试)。 2. 在eosapp.c文件的Producer函数中,等待Empty信号量的代码行 (144)WaitForSingleObject(EmptySemaphoreHandle, INFINITE); 添加一个断点。 3. 按F5继续调试,到断点处中断。 4. WaitForSingleObject 函数最终会调用内核中的PsWaitForSemaphore函数完成等待操作。所以,在semaphore.c文件中PsWaitForSemaphore函数的第一行(第68行)添加一个断点。 5. 按F5继续调试,到断点处中断。 6. 按F10单步调试,直到完成PsWaitForSemaphore函数中的所有操作。可以看到此次执行并没有进行等待,只是将Empty信号量的计数减少了1(由10变为了9)就返回了。 如图所示,empty的初始值为10。 在完成PsWaitForSemaphore函数中的所有操作后empty的值变成了9。 释放信号量(不唤醒) 1. 删除所有的断点(防止有些断点影响后面的调试)。

实验五 文件管理

课程名称:操作系统 课程类型:必修 实验项目名称:文件管理 实验题目:设计一个多用户的文件系统 一、实验目的 随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、实验要求及实验环境 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系) 1.程序流程图

2.逻辑设计 使用线性表表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。该结构需支持以下操作:在尾部插入,查找,修改,在任意位置删除。3、物理设计 char UserName[SizeOfUser][SizeOfUserName];//用户ID long User;//当前用户标志 struct InfoOfFile { char Name[SizeOfFileName];//文件名 bool safe[3];//Read,Write,Execute long status;//ready,open; }UFD[SizeOfUser][SizeOfFile];

相关主题