• 操作系统学习笔记——第五章 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,转载请注明出处。

  • 相关阅读:
    [Algorithm] Flowerbox: Dynamic programming
    [CSS 3] Overflow & sticky problem
    [Algorithm] Bottom-up Dynamic programming approch
    高频交易的理论基石 —— 市场微观结构
    固态硬盘windows10安装笔记
    本土高频量化交易大败局:市场所有参与者共同作用的恶性循环
    CER.LIVE Report: Top 25 Decentralized Exchanges by Cybersecurity Score
    如何判断两条轨迹(或曲线)的相似度?
    皮尔逊相关系数实现相似K线及其性能优化
    视频:高盛王牌交易员揭露交易的真相
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/OperatingSystems_StudyNotes_4.html
Copyright © 2020-2023  润新知