《现代操作系统(中文第四版)》课后习题 第一章(部分)
(受AlphalINF邀请,接着写16-26题)
16、在用户程序进行一个系统调用,以读写磁盘文件时,该程序提供指示说明了所需要的文件,一个指向数据缓冲区的指针以及计数。然后,控制权转给操作系统,它调用相关的驱动程序。假设驱动程序启动磁盘并且直到中断发生才终止。在从磁盘读的情况下,很明显,调用者会被阻塞(因为文件中没有数据)。在向磁盘写时会发生什么情况?需要把调用者阻塞一直等到磁盘传送完成为止吗?
有可能。向磁盘写时,如果调用者取回控制,在最终发生写操作时立刻重写数据,将会写入错误的数据
数据。但是如果驱动程序在返回前将数据复制到一个专用的缓冲器,那么调用者可以继续执行。另
外,可以允许调用者继续,当缓冲器被调用时,给它一个信号,不过这很麻烦并且容易出错。
17、什么是陷阱指令?在操作系统中它的用途。
陷阱指令就是将一个处理器的执行模式从用户模式切换到内核模式。这个指令允许用户程序调用操作系统内核中的函数。
18、分时系统中为什么需要进程表?在只有一个进程存在的计算机中,需要进程表吗?
进程表是为了存储当前被挂起、或者是被延迟和阻塞的进程状态。现代个人计算机有许许多多的进程在进行,即使当用户什么事都没做、什么程序都没有在运行时。它们需要检查更新,下载邮件以及许多其他的事。在单一进程的系统中不需要进程表,因为单一进程从不挂起。
19、说明有没有理由在一个非空的目录中安装一个文件系统。如果这样做,如何做?
有可能有理由,装配文件系统会使得装配目录中已有的任何文件都不可访问,所以装配点通常是空的。然而,系统管理人员可能需要将位于被装配目录中非常重要的文件复制到装配点,以至于它们在进行设备检查和修理时,可以在紧急事件中的普通路径找到这些文件。
20、对于下列系统调用,给出引起失败的条件:fork,exec以及unlink.
如果进程表中没有空闲的槽(或者没有内存和交换空间),fork将失败。如果所给的文件名不存在,或者不是一个有效的可执行文件,exec将失败。如果将要解除链接的文件不存在,或者调用unlink的进程没有权限,unlink将失败。
21、下列资源能使用哪种多路复用(时间、空间或者两者皆可):CPU、内存、磁盘、网卡、打印机、键盘以及显示器?
时间复用:CPU、网卡、打印机、键盘。
空间复用:内存、磁盘。
两者:显示。
22、在count = write(fd, buffer,nbytes);调用中,是否能将函数返回值传递给 count变量而不是nbtes变量?如果能,为什么?
调用可能失败,比如fd不正确,那么将返回-1。而磁盘满的时候,调用也失败,因为这时不可能写入被请求的字节数。而在正确的终止时,会总是返回nbytes。
23、有一个文件,其文件描述符是fd,内含下列字节序列:3,1,4,1,5,9,2,6,5,3,5。有如下系统调用:
lseek(fd, 3, SEEK_SET);
read(fd, &buffer, 4);
其中lseek调用寻找文件中的字节3。在读操作完成之后,buffer中的内容是什么?
答案:1、5、9、2
24、假设一个10MB的文件在磁盘连续扇区的同一个轨道上(轨道号:50)。磁盘的磁头臂此时位于第100号轨道。要想从磁盘上找回这个文件,需要多长时间? 假设磁头臂从一个柱面移动到下一个柱面需要1ms,当文件的开始部分存储在的扇区旋转到磁头下需要5ms,并且读的速率是100MB/s。
答:找到文件需要的时间=1ms*50(移动到50号磁道的时间)+ 5 ms (旋转到文件开始部分存储在的扇区的时间)+10/200*1000ms(读取10MB的时间)=105ms
25、块特殊文件和字符特殊文件的基本差别是什么?
块特殊文件包含被编号的块,每一块都可以独立地读取或者写入。而且定位任意块和开始读出或写入是很容易的。但是这对于字符特殊文件是不可能的。
26、在图1-7的例子中库调用称为read,而系统调用自身称为read,这两者都有相同的名字是正常的吗? 如果不是,哪一个更重要?
系统调用实际上没有名称,除了在文件中这样描述外。当库例程陷入内核时,它将系统调用号码放入寄存器或者堆栈中。这个号码通常用于一张表的索引。这里没有使用任何名称。另一方面,库例程的名称是非常重要的,因为它将用于程序中。