还剩1页未读,继续阅读
文本内容:
《操作系统内核结构》课程报告UNIX_Linux
1、如果几个进程竞争一个缓冲区,内核保证没有一个进程会永远睡眠等待,但并不保证不会出现一个进程一直等待得不到缓冲区的情况发生请重新设计算法getblk以保证一个进程最终能用上一个缓冲区答getblk算法输入文件系统号块号输出现在能被磁盘块使用的上了锁的缓冲区(While(没找到缓冲区)(If(块不在散列队列中)(If(空闲表上无缓冲区)(Sleep(等候“任何缓冲区变为空闲”事件);Continue;))))
2、在通常的目录结构中,对目录项的搜索都是线性的请设计一种新的目录结构,其中各目录项是按其hash值以某种方式排列的,对其中目录项的搜索也是按其hash值来查找的答文件块
3、一个进程可以用“追加写(APPEND)”方式打开一个文件,这表明每次写操作都是从标识当前文件尾的字节偏移量处开始如果一个进程以“追加写”方式打开一个文件,并定位于文件头,会发生什么呢?答
4、设计一个系统调用,该系统调用将一个已存在的文件截为任意给定的大小,并说明实现方法答
5、UNIX系统V允许一个路径名分量最长达14个字符namei算法把一个路径名分量中多余的字节截掉假设保持定长目录项的目录结构,应该怎样设计目录结构和namei算法,才能允许任意长度的目录项名称?答更改文件系统中SFD中文件名的长度以及加大namei中目录变量的字节即可首先,namei判定搜索路径名是从根目录开始的绝对路径名,还是从当前目录开始的相对路径名如果是绝对路径名,则将根目录置为目录变量,否则将当前目录置为目录变量其次,namei以目录变量为依据,搜索到该目录变量所对应的内存i节点,并验证存取许可权如果该目录文件是可以存取的,则依次将该目录变量所对应的目录文件块读入内存,并且顺序搜索与路径名中目录变量的下一个分量相匹配的文件名如果未找到相应的分量,则表明文件系统中不存在相应的文件或路径名有错否则,如果路径名未搜索完毕的话,则namei反复将目录变量沿路径名下移,且重复从搜索目录变量对应i节点开始的上述操作当路径名搜索完毕,且已找到对应文件名时,返回该文件名所对应的内存i节点指针
6、在UNIX的文件系统中,文件的物理存储结构是以索引方式来组织的如果将存储结构改为串联方式,即在每个数据块的末尾加上一个指向下一个数据块的指针,则文件系统应做哪些修改?答
7、如果有10个进程都要对同一个文件进行顺序地读操作,请分析比较这10个进程分别在串行运行和并行运行这两种运行模式下,哪一种的综合效率更高?答:并行运行的综合效率更高,由于对这个文件的访问都是顺序的读操作,所以第一个进程将文件从磁盘上调入内存之后,使用完之后是可以继续供下一个进程访问的;而如果串行运行的话,有可能第一个进程访问完这个文件之后,文件的开头部分已经被置换出内存了,需要重新调入内存;并行运行可以节省的文件在内存和磁盘交换的时间,所以并行运行的综合效率更高
8、下面的代码段创建一个具有两个进程的环int fd
[2];pipefd;dup2fd[0L STDIN_FILEN0;dup2fd[l],STD0UT_FILEN0;close fd[Oj;closefd[l];pipefd;if fork=0dup2fd[l],STD0UT_FILEN0;elsedup2fd
[0],STDIN_FILENO;close fd[O];closefd[l];其中dup2oldfd,newfd函数是把文件描述符oldfd指向的内容复制到文件描述符newfd中,STDIN_FILENO和STD0UT_FILEN0是进程的标准输入和标准输出文件描述符试分析其主要工作过程如果用此结构来建立三个进程的环,又该如何修改该程序?答父进程首先将标准输入、标准输出重定向到第一个管道的读端和写端;然后将标准输出重定向到第二个管道的写端进行了if语句后第二个连续的close前父进程的文件描述符
[0]pipel读
[1]pipe2写
[2]标准错误
[3]pipe2读
[4]pipe2写子进程的文件描述符表
[0]pipe2读
[1]pipel写标准错误
[2]pipe2读
[3]pipel写
[4]由于子进程继承父进程的文件描述符表,这时候它的标准输入和标准输出分别是pipel的读端和写端,然后子进程用自己的代码将标准输入重定向到pipel的读端所以,整个代码运行后是这样的父进程子进程
[0]pipel读【0】pipe2读
[1]pipe2写【1】pipel写
[2]标准错误【2】标准错误从而形成环父进程stdin——>进程stdout——>子进程stdin——>子进程stdout——>父进程stdino。
个人认证
优秀文档
获得点赞 0