操作系统学习笔记——第五章 I/O设备管理

在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

参考书:《操作系统》谌卫军等,清华大学出版社,2012年5月
参考视频:清航全套计算机专业课视频

目录

第五章 I/O设备管理

1.I/O硬件
2.I/O控制方式
3.I/O软件
4.磁盘

第五章 I/O设备管理

1.I/O硬件

按数据组织分类:

-块设备:以数据块作为信息的存储和传输单位,每个数据块都有一个地址,数据块之间的读写操作是相互独立的,如磁盘;

-字符设备:以字符作为信息存储和传输单位,数据即字符流,无定位无寻址,如鼠标;

问题:CPU如何与设备控制器进行通信?这不是普通的内存访问!

方法有三种:

-I/O独立编址;

-内存映像编址:

-混合编址。

备注:Windows上查看PC机上的I/O端口地址——打开“设备管理器”——>点击“查看”选项卡,点击“按类型列出资源”——>设备管理器列表更新后,点击“输入/输出(I/O)”

到目前为止,已经介绍了I/O设备的类型、设备的控制器、I/O的端口地址。现在的问题是:根据已有的这些知识,现在能否开始编程使用这些I/O设备,完成相应的输入输出功能呢? I/O控制方式

2.I/O控制方式

-程序循环检测方式(Programmed I/O)

基本思路:在程序(设备驱动程序)中通过不断地检测I/O设备的当前状态,来控制I/O操作的完成。具体来说,在进行I/O操作之前,要循环地检测设备是否就绪;在/O操作进行之中,要循环地检测设备是否已完成。从硬件来说,控制I/O的所有工作均由CPU来完成。

也称为繁忙等待方式(busy waiting)或轮询方式(polling)。

缺点:在进行I/O操作时,一直占用CPU时间。

-中断驱动方式(Interrupt-driven I/O)

循环检测的控制方法占用了太多的CPU时间,可能会造成CPU时间的浪费。例如:假设打印机的打印速度为100字符/秒,在循环检测方式下,当一个字符被写入到打印机的数据寄存器中后,CPU需要等待10毫秒才能写入下一个字符。

一种解决的办法:中断驱动的控制方式。

1 //系统调用函数print
2 copy_from_user(buffer,p,count);//p:内核缓冲区
3 enable_interrupts();
4 while(*printer_status_reg!=READY);
5 *printer_data_register=p[0];
6 scheduler();

在执行系统调用函数print时进程是否切换?没有切换,A仍为运行状态,但执行的代码是操作系统代码

 1 //中断处理程序
 2 if(count==0)
 3 {
 4   unblock_user();
 5 }
 6 else
 7 {
 8   *printer_data_register=p[++i];
 9   count--10 }
11 acknowledge_intereupt();
12 return_from_interrupt();

中断驱动方式的基本思路是:用户进程通过系统调用函数来发起I/O操作,并在发起后阻塞该进程,调度其他的进程使用CPU。在I/O操作完成时,设备向CPU发出中断,然在中断处理程序中做进一步的处理。在中断驱动方式下,数据的每次读写还是通过CPU来完成,但是当I/O设备在进行数据处理时,CPU不必等待,可以继续执行其他的进程。

-直接内存访问方式(DMA,Direct Memory Access)

适合大规模数据传输!

I/O读操作的典型过程:

-CPU向设备控制器发出命令,启动读操作;

-设备控制器控制I/O设备完成此次读操作,并将数据保存在设备控制器内部的寄存器或缓冲区中,然后中断CPU;

3.I/O软件

如:打印机


4.磁盘

磁盘硬件

磁盘的硬件结构:磁盘(软盘和硬盘)由一个或多个金属盘片组成,这些盘片组合固定在一根旋转轴上,由同一个马达驱动。每个盘片有上下两个盘面,在盘面上涂有磁性材料,信息就记录在这些盘面上。在每个盘面上方,都有一个磁头,它固定在一个磁头臂上,而磁头臂又固定在一个传动装置上。通过磁头的读写装置,磁盘上的信息可以被写入、读出和修改。

 

-磁道:当传动装置固定在某个位置时,若盘面旋转一圈,磁头所能访问的圆环区域;

-柱面:在所有盘面上,半径相同的所有磁道即组成一个柱面;

-扇区:每一个磁道被划分为若干个扇区;

-磁盘的访问过程:以扇区作为最小的寻址和存取单位。首先移动传动装置,通过它来移动磁头,从而定位正确的柱面。然后选中相应的磁头,等我们想要的扇区正好路过这个磁头正下方的时候,就可以对它进行访问了。

虚拟磁盘地址

-物理地址:柱面号、盘面号(磁头号)、扇区号:这隐含着两个约束条件:每个柱面上的盘面个数都是一样的;每个磁道上的扇区个数都是一样的。

-考虑到半径不同的磁道,其圆环区域的面积不同,现代磁盘在设计时,把所有磁道按半径大小,划分为若干个环带,在不同环带上,每个磁道所划分的扇区数是不一样的,这就违背了第二个约束条件;

-虚拟地址:把每个磁道多少个扇区等物理细节隐藏在设备内部,对外提供统一的虚拟地址(x,y, z),即虚拟的柱面号、盘面号和扇区号,对内再将其映射为实际的柱面、盘面和扇区(由控制器完成)。

硬盘的格式化可分为三个步骤,即低级格式化、分区和高级格式化。

低级格式化:标出磁道和扇区,在相邻的扇区之间有狭窄的间隙隔开。一个扇区的格式是:相位编码(preamble)+数据区+纠错码(ECC)。

-相位编码:以某个特定的位组合模式开始,向硬件表明这是一个新扇区的开始。还包括柱面号、扇区号、扇区大小等类似信息;

-数据区:由格式化程序确定其大小,一般512;

-纠错码:包含冗余信息,用来纠正读取错误。

分区:用分区软件把整个硬盘划分为若干个逻辑分区,每个分区可视为一个独立的磁盘。在多数计算机上,用第0个扇区来存放一些系统启动代码和一个分区表,记录了每个分区的起始扇区和大小。

高级格式化:对每一个逻辑分区,分别进行一种高级格式化(即通常的格式化操作),生成一个引导块、空闲存储管理结构、根目录和一个空白的文件系统。对不同的分区,可以使用不同的文件系统,如FAT16、FAT32、NTFS等。

磁盘调度算法

磁盘的访问是以扇区作为最小的寻址和存取单位,在访问一个磁盘扇区时,所需的时间主要有:

-柱面定位时间:磁头在磁头臂牵引下,移动到指定柱面的机械运动时间;

-旋转延迟时间:等待指定的扇区旋转到磁头的正下方所需的机械运动时间;它与磁盘转速有关,如:软盘转速可为600rpm(每分钟转速),硬盘可为7,200rpm至10,000rpm;

-数据传送时间:从指定扇区读写数据的时间。

为什么第一种情况,不加17us*300?在于边旋转边读数据,时间重合(6ms/300=20us),20us旋转完一个扇区的同时传送完了一个扇区的数据。

磁盘调度算法

-先来先服务算法

-最短定位时间优先

缺点:如果要访问的扇区位于磁盘中间的柱面上,则比较有利;如果要访问的扇区位于磁盘两侧的柱面上,则不太有利,可能会处于饥饿状态。

-电梯算法

优点:克服了SSTF的缺点,既考虑了距离,同时又考虑了方向,不会有进程处于饥饿状态;

一个性质:对于任何一组访问请求,磁头移动的总距离有一个固定的上界,即柱面总数的两倍。

在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

原文地址:https://www.cnblogs.com/Alliswell-WP/p/OperatingSystems_StudyNotes_4.html