ImageVerifierCode 换一换
格式:PDF , 页数:33 ,大小:823.04KB ,
资源ID:10596084      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10596084.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(2016操作系统实验指导书【Linux】.pdf)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

2016操作系统实验指导书【Linux】.pdf

1、2016操作系统实验指导书【Linux版】 1 操作系统实验指导书(Linux版) 计算机科学与软件学院 2016年 2016操作系统实验指导书【Linux版】 2 实验一 观察Linux进程状态 一、实验目的 在本实验中学习Linux操作系统的进程状态,并通过编写一些简单代码来观察各种情况下,Linux进程的状态,进一步理解进程的状态及其转换机制。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu操作系统,gcc编译器。 三、实验内容和步骤 1、Linux进程状态及其相互转换 Linux中,进程有以下6中状态。 Linux系统中的进程主要有以下六种状态。

2、(1)TASK_RUNNING(可运行状态)。正在运行的进程或在可运行进程队列(run_queue)中等待运行的进程处于该状态。它实际上包含一般操作系统原理教材中所谓进程三种基本状态中的运行态和就绪两种状态。 当CPU空闲时,进程调度程序只在处于该状态的进程中选择优先级最高的进程运行。Linux中运行态的进程可以进一步细分为3种:内核运行态、用户运行态和就绪态。 (2)TASK_INTERRUPTIBLE(可中断阻塞状态)。处于可中断阻塞状态的进程排成一个可中断阻塞状态进程队列,该队列中的阻塞进程在资源有效时,能被信号或中断唤醒进入到运行态队列。 (3)TASK_UNINTERRUPTIBLE

3、(不可中断阻塞状态)。不可中断指的是进程不响应信号。处于不可中断阻塞状态的进程排成一个不可中断阻塞状态进程队列。该队列中的阻塞进程,不可被其他进程唤醒,只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。 (4)TASK_STOP/TASK_TRACED(暂停状态)。当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号,让进程转换到可运行状态。 (5)TASK_DEAD-EXIT_ZOMBIE(僵死状态)。表示进程停止但尚未消亡的一种状态。此时进程已经结束运行并释放掉大部分资源,但父进程尚未收回其PCB。

4、在进程退出时,将状态设为TASK_ZOMBIE,然后发送信号给父进程,由父进程再统计其中的一些数据后,释放它的task_struct结构。处于该状态的进程已经终止运行,但是父进程还没有询问其状态。 (6)TASK_DEAD-EXIT_DEAD(退出状态),处于此状态的进程即将被销毁,EXIT_ DEAD非常短暂,几乎不可能通过ps命令捕捉到。 Linux中进程的状态转换过程如下图所示: 2016操作系统实验指导书【Linux版】 3 可以使用ps命令查看进程在系统中的状态。在ps命令的显示结果中,5中字符分别代表5种不同的进程状态。 (1)R(TASK_RUNNING):可执行状态或运行状态

5、(2)S(TASK_INTERRUPTIBLE):可中断阻塞状态,可响应中断、接收信号(如SIGKILL) (3)D( TASK_ UNINTERRUPTIBLE):不可中断阻塞状态,只能响应中断 (4)T( TASK_ STOPPED/ TASK_ TRACED):暂停状态或跟踪状态 (5)Z( TASK_ DEAD/EXIT_ZOMBIE):退出状态,进程成为僵尸进程 注:在状态字符后面如果带+(如S+),表示进程是前台运行,否则是后台运行。 2 观察进程状态 (一)查看“运行”状态(R) 创建一个C程序,如run_status.c,运行一段长循环, 编译链接,后台运行该程序(后接 /作业

6、号 int reach_time; /作业抵达时间 int need_time; /作业的执行时间 int privilege; /作业优先权 float excellent; /响应比 int start_time; /作业开始时间 int wait_time; /等待时间 int tr_time; /周转时间 double wtr_time; /带权周转时间 int run_time; /作业累计已执行时间 int visited; /作业是否被访问过 bool isreached; /作业是否已抵达 job; 2016操作系统实验指导书【Linux版】 14 重要函数说明 void re

7、ad_Jobdata();/读取数据文件; void initial_jobs(); /初始化所有作业信息; int findEarlyJob(job jobs,int count);/找到执行时间最短的作业; void SFJschedulejob(job jobs,int count);/短作业优先算法 用到的函数有: fopen(文件名,使用文件方式);/打开文件 fscanf(文件指针,格式字符串,输入列表);/格式化读入; fclose(文件指针);/关闭文件 (二)实验内容 运行程序参考代码(如下所示) 2016操作系统实验指导书【Linux版】 15 2016操作系统实验指导书【

8、Linux版】 16 2016操作系统实验指导书【Linux版】 17 要求: 1、通过程序的打印信息来检查作业信息的读入是否正确。 2、运行FCFS算法,检查其运算结果是否正确 3、根据下图所示补充最短作业优先代码,并计算其等待时间和周转时间。 4、参考以上算法的实现方法,编写时间轮转算法和高响应比优先算法。 注:请把以上4个要求的程序实现及运行结果写在实验报告中。 四、实验总结 请总结一下本次实验的收获、教训和感受,结合课本内容谈一下你对操作系统中输出/输出设备管理的理解。 2016操作系统实验指导书【Linux版】 18 实验五 Linux内存分配 一、实验目的 1、了解Linux内存的

9、分配和虚拟内存管理的原理,学习如何使用malloc动态申请内存,了解动态申请与静态申请的区别。 2、深入理解Linux的内存布局:代码段、数据段、BSS段、堆栈段、堆 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu操作系统,gcc编译器。 三、实验内容和步骤 第一部分:编程分析Linux中内存动态申请与内存静态申请的区别 要求: 1、编写一个Linux C程序,在该程序中使用定义一个全局变量,以及使用malloc申请一段内存(可大于物理内存大小,理论上在32位系统中可以申请小于3G空间,但由于malloc要求申请连续的空间,所以能申请到的空间一般在2G以下

10、)。 2、打印出全局变量的起始地址,以及malloc分配的内存的地址; 3、观察运行结果,并分析说明结果的地址是否是物理地址。 函数参考: (1)#include void *malloc(unsigned int num_bytes); 动态分配长度为num_bytes的连续内存空间,如成功,返回分配地址,否则返回NULL,使用完毕后,要使用free函数释放 (2)void free(void* pmem); 释放内存,注意释放后,应将pmem置成NULL,防止误用 参考程序: 实验报告要求: 贴出试验结果,总结从试验观察到的结果,分析结果的地址是否为物理地址,分析静态分配为什么地址不变。结

11、合操作系统课程中讲授的原理,写出本次实验的心得体会。 2016操作系统实验指导书【Linux版】 19 第二部分:进一步了解Linux内存的分配和虚拟内存管理的原理、了解Linux的内存布局:代码段、数据段、BSS段、堆栈段、堆。 要求: 1、编写一个Linux C程序,在该程序中定义初始化全局变量、未初始化全局变量、初始化静态变量、未初始化静态变量、局部变量、使用malloc分配的局部变量 2、打印出各种变量的的起始地址 参考资料: (1)在32位Linux系统中,每个进程的虚拟地址空间大小为4G,这4G空间被人为划分成用户空间与内核空间。默认情况下,用户空间从0到3G(0xC0000000

12、),内核空间占据3G到4G。 (2)用户进程通常情况下只能访问用户空间虚拟地址,不能访问内核空间虚拟地址。 (3)3G的用户空间进一步细化为代码段、数据段、BSS段、堆、栈等5种内存段,如下图所示。 .TEXT段:存放代码; .DATA段:存放已经初始化的全局变量和static变量; .BSS段:存放未初始化的全局变量和static变量; HEAP:堆,动态内存分配区,堆在进程地址空间中是自低地址向高地址增长; STACK:栈,函数参数传递、局部变量等都放在栈中,栈由高地址向低地址增长。 注:代码段、数据段和BSS段长度在编译之后确定。而HEAP和STACK栈随着程序的运行动态变化。 参考程序

13、: #include #include /定义两个初始化的全局变量 int data_var0 = 10; int data_var1 = 10; /定义两个未初始化的全局变量 int bss_var0; int bss_var1; int main() /分别定义一个初始化和一个未初始化的静态变量 static int data_var2 = 10; static int bss_var2; /定义两个局部变量 2016操作系统实验指导书【Linux版】 20 int stack_var0 = 1; int stack_var1 = 1; int stack_var2 = 1; printf

14、(“-TEXT Segment-n“); printf(“Address of main: %pn“, main); printf(“-DATA Segment-n“); printf(“Address of data_var0: %pn“, printf(“Address of data_var1: %pn“, printf(“Address of data_var2: %pn“, printf(“-BSS Segment-n“); printf(“Address of bss_var0(BSS Segment): %pn“, printf(“Address of bss_var1(BSS

15、Segment): %pn“, printf(“Address of bss_var2(BSS Segment): %pn“, printf(“-STACK Segment-n“); printf(“Address of stack_var0: %pn“, printf(“Address of stack_var1: %pn“, printf(“Address of stack_var2: %pn“, /使用malloc分配三个大小为1024B的内存 char* heap_var0 = (char*)malloc(1024); char* heap_var1 = (char*)malloc(1

16、024); char* heap_var2 = (char*)malloc(1024); /使用malloc分配三个大小为512MB的内存 char* mmap_var0 = (char*)malloc(1024 * 1024 * 512); char* mmap_var1 = (char*)malloc(1024 * 1024 * 512); char* mmap_var2 = (char*)malloc(1024 * 1024 * 512); printf(“-HEAP Segment-n“); if(heap_var0) printf(“Address of heap_var0:%pn“

17、, heap_var0); free(heap_var0); heap_var0 = NULL; if(heap_var1) printf(“Address of heap_var1:%pn“, heap_var1); free(heap_var1); heap_var1 = NULL; if(heap_var2) printf(“Address of heap_var2:%pn“, heap_var2); free(heap_var2); heap_var2 = NULL; printf(“-mmap-n“); if(mmap_var0) printf(“Address of mmap_va

18、r0:%pn“, mmap_var0); free(mmap_var0); mmap_var0 = NULL; if(mmap_var1) printf(“Address of mmap_var1:%pn“, mmap_var1); free(mmap_var1); mmap_var1 = NULL; if(mmap_var2) printf(“Address of mmap_var2:%pn“, mmap_var2); free(mmap_var2); mmap_var2 = NULL; 2016操作系统实验指导书【Linux版】 21 return 0; 实验报告要求: (1)贴出试验结果

19、。 (2)分析实验结果产生的原因,总结从实验观察到的结果。 (3)结合操作系统课程中讲授的原理,写出本次实验的心得体会。 2016操作系统实验指导书【Linux版】 22 实验六 页面置换模拟程序设计 一、实验目的 1、通过软件模拟页面置换过程,加深对请求页式存储管理实现原理的理解 2、理解和掌握OPT、FIFO和LRU三种页面置换算法,深入分析三者之间的优缺点。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu操作系统,gcc编译器。 三、实验内容和步骤 参考设计思路 (1)重要数据结构 页表数据结构 typedef struct int vmn; int

20、 pmn; int exist; int time; vpage_item; vpage_item page_tableVM_PAGE; 页表是虚地址向物理地址转换的依据,包含虚页号所对应的实页号,是否在物理内存中。 页表中增加了一个time项,用于替换算法选择淘汰页面,在不同的替换算法中,time含义不一样。 在LRU算法中,time为最近访问的时间。该虚页每访问一次,time置为当前访问时刻,淘汰页面时,淘汰time值最小的,即最久没有被使用的。 在FIFO算法中,time为该虚页进入内存的时间。只有当该虚页从外存进入内存时,才置该标志。淘汰页面时,淘汰time值最小的,即最早进入内存的虚

21、页。 在OPT算法中,time没有任何意义。 物理页位图数据结构 vpage_item * ppage_bitmapPM_PAGE; 物理页位图是用于记录物理页是否被使用,用于物理页内存的分配。正常情况下是一个数组,元素值为0时,代表相应物理页没有装入任何虚页,值为1时,代表该物理页装入虚页。但为方便替换算法检索要替换出去的虚页,数组的每个元素值为当前放在该物理页的页表项的指针。若值为NULL,则表示该物理页没有被占用,当值不为NULL时,表示正在占用该物理页的虚页。 指令相关数据结构 /每条指令信息 typedef struct int num; int vpage; int offset;

22、 int inflow; instr_item; 2016操作系统实验指导书【Linux版】 23 /指令数组 instr_item instr_arrayTOTAL_INSTR; /指令流数据结构 struct instr_flow instr_item *instr; struct instr_flow *next; ; /指令流头数据结构 struct instr_flow_head int num; struct instr_flow *next; ; struct instr_flow_head iflow_head; 每条指令包括指令号、该指令所属虚页及页内偏移(这两项可以根据指令

23、号计算出来,增加这两项是为了方便编程)。inflow是一个辅助项,用于构建指令流。 本题要求,按照规则生成的指令流中,应包含所有的共320条指令。但每次随机生成的指令号,可能已在指令流中,因此最终指令流中的指令数可能远远超过320条指令。 设置inflow的目的是为了便于统计是否320条指令均已加入到指令流中。在该条指令加入到指令流中时,如果inflow为0,表示该指令尚未在指令流中,则统计数加1;如果inflow为1,表示该指令已经加入过指令流,该指令虽然再次加入指令流,但统计数不增加。这样,当统计计数为320时,表示所有的指令均已加入到指令流中。 struct instr_flow为指令流

24、数据结构,struct instr_flow_head始终指向指令流的头,其中num用于指令流中指令数量计数,用于计算缺页率。 (2)主程序,如下图所示。 开始结束页表、物理位图、指令流初始化生成指令流选择置换算法,运行,并统计缺页率,为便于比较同一指令流情况下,各种替换算法的缺页率,可依次选择不同的置换算法进行运行,但使用新的置换算法运行之前,需要重置页表和物理位图(3)指令流生成流程 指令流的生成按照实验要求生成,其算法流程如下图所示。 2016操作系统实验指导书【Linux版】 24 结束开始随机产生一条指令 ,放入指令流中,指令计数s Total+1所有指令均已在指令流中?即Total

25、=320?如果指令 不是最后一条指令,则 指令s s+1放入指令流中,指令计数Total+1如果 不为 ,则随机生成 范围内(前地址部分)的指令 ,s 0 0,s-1 s将其放入到指令流中。如果 没在指令流中出现过,则s Total+1如果 不为最后一条指令,则将 放入到指令流中,s s+1如果 没在指令流中出现过,则s Total+1如果 不为最后一条指令,则随机生成 范围内s+1 s+2,319(后地址部分)的指令 ,将其放入到指令流中,s如果 没在指令流中出现过,则s Total+1如果 不为最后一条指令,则将 放入到指令流中,s s+1如果 没在指令流中出现过,则s Total+1(4

26、)物理内存分配流程 物理内存分配时,需要根据当前置换算法选择淘汰页面。其算法流程下图所示。 2016操作系统实验指导书【Linux版】 25 开始结束根据置换算法,选择被淘汰的页更新物理页位图是否存在空闲物理页?NOYES更新被淘汰的虚页的页表项,如果在位所对应的物理页,以及访问信息 等time更新新进入内存的虚页的页表项,如存在位、所对应的物理页,以及访问信息 等time(5)运行流程图,如下图所示。 开始所有指令是否均已运行获取指令流链表中下一条指令该指令所在虚页是否已经在内存中为其分配物理内存,缺页数增加更新虚页访问信息(time)计算并打印缺页率结束NOYES(6)三种置换算法 OPT

27、算法:在当前指令的后续指令流中,寻找已在内存中的虚页,哪个最远才被使用,反2016操作系统实验指导书【Linux版】 26 过来,如果先找到最近三个(物理页面总数为4)也在内存中的虚页,则剩下的那个虚页肯定就是最远才被使用的虚页,该虚页被淘汰,其物理内存分配给当前指令所在的虚页。 FIFO算法:在已在物理内存中的虚页中,寻找time最小的虚页(最早进入物理内存的虚页),该虚页即是被淘汰的虚页。 LRU算法:思想同FIFO算法,但time最小的虚页含义是最久没有被使用的虚页。 在这三种置换算法中,OPT的算法稍微复杂一些,下图给了该算法的程序流程图。 开始将没有搜索到的虚页淘汰,其物理页面被分配

28、出去结束设置计数变量 ,顺着指令流查找时,如果第一found=0次找到某个已经在内存中的虚页,则 ,如果found+1 found=3总物理页数为 ),则剩下的那个已在物理内存中的虚页,( 4是要被替换的虚页获取当前指令的下一条指令该指令为空或found=3?该指令所在虚页已在内存中?如果是第一次找到该虚页,则found+1YESYESNONO注:程序实例代码请见附件。 实验报告要求: (1)贴出试验结果。 (2)分析实验结果产生的原因,总结从实验观察到的结果。分析三种置换算法的缺页率的差异。 (3)结合操作系统课程中讲授的原理,写出本次实验的心得体会。 2016操作系统实验指导书【Linux

29、版】 27 实验七 EXT文件系统模拟设计 一、实验目的 本实验通过设计一个模拟文件系统,加深理解EXT文件系统内部功能及内部实现。 二、实验环境 硬件环境:计算机一台,局域网环境; 软件环境:Linux Ubuntu操作系统,gcc编译器。 三、实验内容和步骤 参考设计思路 本实验模拟Linux EXT文件系统,在内存中实现一个简易的二级文件系统。 1、文件系统布局 本模拟文件系统布局参考EXT文件系统中一个块组的布局,做了最简化的模拟,把原本一个块组中的布局看作是整个文件系统的布局,如下图所示。 1块 1块 1块 m块 n块 超级块 块位图 inode 位图 inode表 数据块 其中内容

30、简介如下: (1)超级块:占1个块(假设块的大小为512B),保存文件系统的信息,如可用空间、可用inode节点等信息。 (2)块位图:以位图方式保存文件系统中所有块的使用信息,占一个块,则文件系统能管理的最大磁盘空间为5128512B=2MB。本模拟文件系统申请了2MB内存,在最简化地模拟磁盘空间。 (3)inode位图:以位图方式保存索引节点被使用的情况,占一个块,则理论上文件系统支持的最大索引节点数为5128=4k个。本模拟文件系统限制支持最大文件及目录数为1024个。 (4)inode表:每个inode保存一个文件或目录的除了名字之外的属性信息。inode表所占的物理块的大小由文件系统

31、支持的文件数量以及每个inode节点的大小决定。 (5)数据块:数据块保存文件及目录的信息。 2、超级块 本模拟文件系统超级块仅定义了该文件系统已用、未用的inode数,以及已用、未用的block数。 3、索引节点及目录项 本模拟文件系统中,目录也被认为是一个文件,每个文件占用一个索引节点,索引节点保存文件或目录的属性。 struct d_inode unsigned char i_type; unsigned char i_mod; unsigned short i_size; short i_addrMAX_FILE_BLOCK; ; 每个文件所占用的物理块由i_addr定义,为了简化起见

32、,没有采用EXT文件系统中的混合索引结构,而是采用了最简单的直接索引结构。 2016操作系统实验指导书【Linux版】 28 对于文件来说,物理块中保存的文件内容,i_size定义了该文件的长度,而对于目录来说,物理块保存的是该目录下的所有文件及子目录的目录项,i_size定义了该目录下文件及子目录的数量。目录项数据结构如下所示。 struct direct_item char d_nameFILENAME_LEN; unsigned short d_inode; ; 本模拟文件系统中,根目录默认占用inode表中第0个目录项。目录项在数据块中成组连续存储;成组存储指的是:如果数据块剩余空间不

33、足以存储一个目录项,则该块空间不被使用,需要为该项目分配新的数据块,然后再存储。连续存储指的是:所有目录项在数据块中连续顺序存储,如果中间某文件或目录被删除,后续的目录项应上移,而如果上移之后,某数据块没有存储任何目录项,则该数据块应被释放。 4、文件打开机制 为避免每次访问文件时都从外存查找文件目录,文件系统都设立了文件打开机制,将当前使用的文件信息保存在内存中。本模拟文件系统借鉴这种机制,在内存中设立文件打开表,保存要操作文件的索引节点信息、访问属性以及文件的读写位置等信息。 文件打开表数据结构如下所示。 struct f_inode unsigned char f_valid; unsi

34、gned char f_oflagl unsigned short f_nodeid; unsigned short f_pos; ; struct f_inode fopen_tableMAX_OPEN_FILE; 在常用的文件系统中,具有相同inode和读写属性的打开文件在文件打开表中占一项。也即对于同一个文件,如果具有不同的打开属性,在文件打开表中占多个文件打开表项,采用这种方式,是便于文件读写权限控制。本模拟文件系统也采用该原则。 每个打开的文件在文件打开表中的位置,为该打开文件的文件描述符fd,后续的读写操作都应以该值代表要操作的文件,这与C语言中文件的操作是相符合的。即要对文件进行

35、操作,首先必须打开文件,得到文件描述符,后续的读、写操作都以该描述符代表要操作的文件,文件使用完毕后,应使用close操作关闭文件,即清除该文件在文件打开表中的内容。 在一般的文件系统中,对文件进行读写之后,会更改文件的读写位置。本模拟文件系统并没有实现这一功能,需要用户执行seek操作,来更改文件读写位置。 5、文件保护机制 本模拟文件系统提供了一个简单的文件读、写保护机制。保护机制主要体现在一下两个方面:文件的读写属性以及文件打开读写属性。 (1)文件读写属性。每个文件均具有读写属性:只读、只写以及读写。执行文件OPEN操作时,对于只读文件,只能以读的方式打开,对于只写文件,只能以写的方式

36、打开,对于可读写文件,可以以只读、只写或读写的方式打开。 (2)文件打开读写属性。文件打开读写属性控制着对文件的访问,如果文件以只读方式打开,则只能读文件,文件以只写方式打开,则只能写文件,而文件如果以读写方式打开,则既可以读,也可以写。 本模拟文件系统中,每个文件建立时,默认为读写属性,模拟文件系统提供chmod操作,可2016操作系统实验指导书【Linux版】 29 以更改文件的读写属性。 6、用户管理 为便于用户管理,本模拟文件系统设立一个用户表,存放用户信息,保存在根目录下user文件中,其中包括用户名及密码,以及用户子目录的inode号,便于用户登录后,访问该用户的子目录。用户表如下

37、所示。 struct user_info short u_id; unsigned short u_inode; char u_nameUSERNAME_LEN; char u_pwdPASSWD_LEN; ; struct user_info_tableUSER_NUMBER; 为了简单起见,本模拟文件系统支持user0user5共6个用户,每个用户密码同用户名。每个用户登录后,自动转到该用户的子目录。 7、文件操作 用户首先必须输入用户和密码登录文件系统,才能进行后续的操作。本模拟文件系统提供一下操作命令。 (1)help:显示命令帮助信息。 (2)dir: 列出用户目录下的文件信息,包括

38、文件类型(目录和文件)、文件名、文件长度、文件读写属性、文件inode号、文件占用的首块号。 (3)create:创建文件。 (4)delete:删除文件,文件被打开时,不能删除。 (5)open:打开文件,返回文件描述符。 (6)close:关闭文件。 (7)read:读文件,必须以文件描述符作为文件参数。 (8)write:写文件,必须以文件描述符作为文件参数。 (9)seek:更改文件的读写开始位置,-1表示文件尾。 (10)chmod:更改文件读写属性。 (11)logout:退出登录,退出后,可以新的用户名及密码登录。 (12)exit:退出文件系统。 8、重点流程 本实验中的模拟文

39、件系统功能比较多,仅介绍其中的几个重点模块的流程。 (1)文件系统格式化 该功能模块主要完成模拟磁盘的内存分配以及超级块、块位图、inode位图的初始化以及根目录创建。流程如下图所示。 2016操作系统实验指导书【Linux版】 30 开始使用 分配 内存空间,以模拟磁盘,并将其清零malloc 2MB初始化超级块结束创建根目录初始化块位图,在块位图中将超级块、块位图、索引节点位图以及索引节点表所占的物理块的 置为bit 1(2)创建根目录 根目录的创建与普通文件及子目录的创建类似,不同的是,普通文件及子目录创建时,需要修改其父目录内容,而根目录没有父目录,具体流程如下图所示。 开始为根目录分配索引节点,并将索引节点位图中对应位置 。分配的索引节点号应为1 0结束根据索引节点号以及数据块号初始化对应的索引节点表中对应信息为根目录分配一个空余的数据块,并将块位图中对应的位置1

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报