7.3 例题解答
例1 I/O软件在设计时需要考虑哪些具体问题?
答:需要考虑的具体问题主要有:
1)设备无关性:应用程序独立于具体使用的物理设备。例如,程序员编写访问磁盘上文件的程序时,与具体的设备无关,不需要修改程序就可以将程序移植到别处运行。
2)出错处理:发生错误时,尽量由低层软件解决而不让高层软件感知,只有低层软件处理不了的错误,才上交高层。
3)统一命名:以系统预先设计统一的逻辑名称对各类设备进行命名,并应用在与设备有关的全部软件模块中。
4)同步/异步传输:I/O软件应该能支持同步传输和异步传输两种工作方式。异步传输是指CPU在启动I/O操作后可继续执行其他工作,直到中断发生。同步传输是指采取阻塞方式,让启动I/O操作的进程挂起等待,直至数据传输完成。
5)缓冲技术:建立数据缓冲区,匹配数据到达速度和离去速度。
例2 现代操作系统中,广泛采用中断驱动方式对I/O设备进行控制。请简述中断处理程序的处理过程。
答:中断处理程序的处理过程对任何一种I/O设备都是基本相同的,主要包括以下几个步骤:
1)检查CPU响应中断的条件是否满足,中断请求如果来自中断源,且CPU允许中断,则CPU响应中断;否则,中断处理无法进行。
2)CPU响应中断后立即关中断,使其不能再次响应其他中断。
3)唤醒被阻塞的驱动进程。
4)保存被中断进程的CPU环境。由硬件将PSW和PC中的内容压栈,保存现场。
5)分析中断原因,由CPU确定中断设备,发送应答信号使该设备撤销中断信号,然后将中断处理程序的入口地址送入PC中,转入相应的设备中断处理程序。
6)执行中断处理程序。
7)恢复被中断进程的CPU现场。
8)开中断,CPU继续执行。
例3 举例说明设备驱动程序是如何将接收到的I/O命令中的抽象请求转换为具体请求的。
答:以磁盘驱动程序为例,当用户程序对磁盘进行访问时,将抽象请求转换为具体请求的过程大致为:
1)将磁盘块号转换为磁盘的盘面、磁道号及扇区号。
2)将设备名(逻辑地址)转换为端口地址(物理地址)。
3)将逻辑操作转化为对相关设备控制器的接口寄存器的读写操作(物理操作)。
例4 用户程序中采用“设备类、相对号”的方式来使用设备有什么优点?
答:用户程序中常采用的“设备类、相对号”的方式,或称为“主设备号和次设备号”方式,可以使设备分配更加灵活:
1)系统只需要从指定的设备类中找出一台“好的且未分配的”设备进行分配。
2)如果分配给用户的设备在使用过程中出了故障,系统可以从同类设备中找到另一台“好的且未分配”的设备来替换。
例5 从系统内部来看,设备文件与普通文件有什么不同之处?
答:设备是一种特殊的文件,每个特殊文件都与特定的设备相关联。设备文件在磁盘上没有数据块,但在文件系统中有一个永久的i节点(基本文件目录数据块),在该节点中存放着设备的很多信息,如标志设备文件的类型是字符设备还是块设备,以及设备的主设备号和次设备号等。
例6 什么是SPOOLing系统中的输入井和输出井?
答:为实现虚拟设备,在磁盘上划出的专用存储空间,用于存放作业的初始信息和执行结果,这部分空间称为“井”,它又分为两部分:用于存放作业的初始信息的井,称为输入井;存放作业执行结果的井,称为输出井。
例7 如何理解“通道可以提高CPU和外设的利用率”?
答:通道只负责管理设备与主存之间数据传输的一切工作,包括启动、结束处理、错误处理、DMA、代码转换、格式化等,这些工作可以使CPU尽可能摆脱I/O负担,可以使CPU执行高速计算而不需要对I/O操作花费时间,大大提高了CPU的利用率。此外,在一个计算机系统中可以有多个通道同时工作,每个通道可以管理多个控制器,而每个控制器又可以控制多个外设,因此多个外设可以同时工作,这样就大大提高了外设的利用率。
例8 设某文件为链接文件,由5个逻辑记录组成,每个逻辑记录的大小与磁盘块大小相等,均为512字节,并以此存放在11、66、13、94、23号磁盘块上。若要读出文件的第1969逻辑字节处的信息,需要访问哪一个磁盘块?
答:要读出文件的1969字节,需要访问第4个磁盘块。因为每个逻辑记录的大小与磁盘块大小相等,1969=512×3+433。
例9 设磁带记录密度为800字符/英寸,每一个逻辑记录为160个字符,块间隙为0.6英寸。现有1500个逻辑记录需要存储,试问:
1)磁带利用率为多少?
2)若要使磁带空间的利用率不少于50%,至少应以多少个逻辑记录为一组?
【分析】
磁带是一种典型的顺序存储设备,由于磁带的启动和停止需要花费一定的时间,因此应在存储的数据记录间留有间隙。为了减少间隙造成的浪费,可以采用成组操作的方法进行存储,即将多个数据记录组成一块,只在块与块之间留有空隙。
答:1)一个逻辑记录占据的磁带长度为:160/800=0.2英寸。
1500个逻辑记录占据的磁带长度为:1500×(0.2+0.6)=1200英寸。
磁带的利用率为:((1500×0.2)/(1500×(0.2+0.6)))×100%=25%。
2)假设以x个逻辑记录为一组,则成组操作后的组数N=1500/x。
1500个逻辑记录连续存放(没有块间隙)时,占据磁带的长度M=1500×0.2。
磁带的利用率=M/(N×0.6+M)=0.5。
计算得出x=3。
因此,至少以3个逻辑记录为一组。
例10 比较I/O端口编址方式与内存映射编址方式的优缺点。
答:I/O端口编址方式是独立编址,存储器和I/O端口在两个独立的地址空间中。其优点是I/O端口的地址码较短,译码电路简单,存储器同I/O端口的操作指令不同,程序比较清晰;存储器和I/O端口的控制结构相互独立,可以分别设计。其缺点是访问I/O空间需要专用的I/O指令,指令数目有限,程序设计的灵活性较差。
内存映射编址方式采用统一编址,存储器和I/O端口共用统一的地址空间,当一个内存地址分配给一个I/O端口后,存储器就不能再占用这个地址。该方式的优点是不需要专用的I/O指令,任何对存储器数据进行操作的指令都可用于I/O端口的数据操作,程序设计比较灵活;由于I/O端口的地址空间是内存空间的一部分,这样,I/O端口的地址空间可大可小,从而使外设的数量几乎不受限制。其缺点是端口地址要占用一部分存储器地址,影响了系统的内存容量;访问I/O端口要同访问内存一样,但由于内存地址较长,导致执行时间增加。
例11 假定有一个磁盘组共100个柱面,每个柱面上有8个磁道,每个盘面被划分成8个扇区。现有一个含有6400个逻辑记录的文件,逻辑记录的大小与扇区大小一致,该文件顺序存放在磁盘上。柱面、磁道、扇区的编号均从“0”开始,逻辑记录的编号也从“0”开始。文件信息从0柱面、0磁道、0扇区开始存放。试问:
1)该文件的第3680个逻辑记录应存放的柱面号、磁道号和扇区号是多少?
2)第78个柱面的第6个磁道的第6个扇区存放了该文件的第几个逻辑记录?
答:1)文件是按柱面→磁道→扇区为序存放在磁盘中的。这里用[]表示求整除的值。mod表示取余运算。
柱面号=[3680/(8×8)]=57。
磁道号=[(3680 mod (8×8))/8]=4。
扇区号=(3680 mod (8×8)) mod 8=0。
2)逻辑记录号=柱面号×每个柱面上的磁道数×每个磁道内的扇区数+磁道号×每个磁道内的扇区数+扇区号=78×8×8+6×8+6=5046。
例12 假设当前磁头臂位于53号柱面上,现有一个请求磁盘服务的队列,先后顺序为:98→183→37→122→14→124→65→67。采用最短寻道时间优先算法,计算移动磁头臂所经过的柱面数。
答:磁头臂移动的顺序为:53→65→67→37→14→98→122→124→183。
磁头臂移动所经过的柱面数为:12+2+30+23+84+24+2+59=236。
例13 磁盘请求柱面按10→22→20→2→40→6→38的次序到达磁盘的驱动器,寻道时每个柱面移动需要6毫秒。写出分别采用以下算法时,磁头臂移动的顺序,并分别计算寻道时间:
1)FCFS算法。2)SSTF算法。3)SCAN算法。
以上所有情况磁头臂均起始于柱面20,且磁头按照柱面由小到大的方向移动。
答:1)采用FCFS算法,移动顺序依次为:20→10→22→20→2→40→6→38。
寻道时间为:146×6=876毫秒。
2)采用SSTF算法,移动顺序依次为:20→22→10→6→2→38→40。
寻道时间为:60×6=360毫秒。
3)采用SCAN算法,移动顺序依次为:20→22→38→40→10→6→2。
寻道时间为:58×6=348毫秒。
例14 假定某磁盘的旋转速度是每圈20毫秒,格式化时每个盘面被分成10个扇区,现有10个逻辑记录存放在同一磁道上。这10个逻辑记录存放的位置如表7-1所示。
处理程序要顺序处理这些记录,每读出一个记录后处理程序要花4毫秒进行处理,然后再顺序读下一个记录并处理,直到处理完这些记录,试问:
1)顺序处理完这10个记录总共花费了多少时间?
2)请给出一种记录优化分布的方案,使处理程序能在最短时间内处理完成这10个记录,并计算优化分布时需要花费的处理时间。
答:1)由题目知:
读一个记录所需时间为:20/10=2毫秒。
每条记录处理时间为4毫秒。
由此可得:
读出并处理完记录A所需要的时间为:2+4=6毫秒。
处理完记录A后,磁盘已转到第4扇区,若要读记录B,还需转过8个扇区后才能到达第2扇区,因此,读出并处理完记录B所需时间为:2×8+2+4=22毫秒。
同理,记录C到记录J和访问记录B一样,都存在8个扇区的空转时间。顺序处理完这10个记录总共花费的时间为:6+22×9=204毫秒。
2)要使处理程序在最短时间内处理完毕,根据1)中的计算过程,将记录B安排在第4扇区上,记录C存放在第7扇区上,按照这个办法,可以得到如表7-2所示的记录优化分布。
这样,每处理完一个记录后刚好转入下一记录所在的扇区,优化分布后需要花费的总时间为:10×(2+4)=60毫秒。
例15 假定现在磁盘的磁头臂处于第8号柱面,有如表7-3所示的6个请求者等待访问磁盘,请列出最省时间的响应次序。
答:本题解答基于这样的假设:在确定移臂次序之后,如果存在访问相同柱面的多个请求,按照先来先服务的原则。根据题意,只要访问的柱面号顺序为7→9→15→20的顺序均为正确答案,需要移动磁头臂的总数为14。因此,最省时间的响应请求次序为2→6→1→4→3→5。