第五章 输入/输出管理5.1 I/O管理概述5.1.1 I/O设备1.设备的分类按信息交换的单位分类块设备传输速率较高可寻址0即可随机地读/写任意块。如磁盘字符设备传输速率慢不可寻址再输入/输出时常采用中断驱动方式。如鼠标、键盘虚拟设备采用虚拟技术将一台独占设备转换为若干逻辑设备2.I/O接口 I/O接口也称设备控制器是CPU与设备之间的“桥梁”实现设备和计算机之间的数据交换。它接收CPU发出的命令控制设备工作使CPU从设备控制事务中解脱出来设备控制器与CPU的接口。用于实现CPU与设备控制器之间的通信。接口有三类信号线数据线、地址线、控制线设备控制器与设备的接口。设备控制器可连接一个或多个设备因此控制器中有一个或多个设备接口每个接口可传输数据、控制、状态三种类型的信号I/O逻辑。识别CPU发出的信号并向设备发出命令。设备控制器的主要功能有①接收和识别命令②数据交换包括CPU和控制器之间的数据传输以及控制器和设备之间的数据传输③标识和报告设备的状态以供CPU处理④地址识别⑤数据缓冲⑥差错控制3.I/O接口的类型按数据传送方式可分为并行接口和串行接口按主机访问I/O设备的控制方式可分为程序查询接口、中断接口、DMA接口等按功能选择的灵活性可分为可编程接口、不可编程接口4.I/O端口I/O端口是指设备控制器中可被CPU直接访问的寄存器主要有三类数据寄存器用于缓存从设备送来的输入数据或从CPU送来的输出数据状态寄存器保存设备的执行结果或状态信息供CPU读取控制寄存器由CPU写入以便启动命令或更改设备模式I/O端口的编址方式编址之后CPU才能访问到独立编址独立编址是指为每个端口分配一个I/O端口号。I/O端口的地址空间与主存地址空间是两个独立的地址空间两者范围可以重叠。只有操作系统使用特殊的指令才能访问端口用户不能访问。优点I/O端口数少只需少量地址线使I/O端口译码简单寻址速度快。使用专用I/O指令可使程序更加清晰缺点I/O指令少只提供简单的传输操作所以程序设计的灵活性差。CPU需要提供两组独立的存储器和设备的读/写控制信号增加了控制的复杂性统一编址内存映射I/O统一编制是指将主存地址空间分出一部分给I/O端口编址I/O端口和主存单元在同一地址空间的不同分段中根据地址范围就能区分访问的是I/O端口还是主存单元因此无需设置专门的I/O指令优点不需要专门的指令使得CPU访问的操作更加灵活方便端口由较大的编址空间缺点端口地址占用了部分主存地址空间使主存的可用容量变小。译码电路更加复杂降低了寻址速度5.1.2 I/O控制方式I/O控制是控制设备和主机之间的数据传送。宗旨是减少CPU对I/O控制的干预1.程序直接控制方式CPU对I/O设备的控制采取轮询的方式。不断向向设备控制器发出指令测试设备状态直到设备可用优点简单易于实现缺点CPU长时间等待I/O设备CPU利用率低2.中断驱动方式当I/O设备被占用时将等待I/O的进程阻塞CPU切换到其他进程执行。当I/O完成后控制器向CPU发出一个中断信号CPU转去执行中断处理程序处理该中断。处理中断的过程中CPU从I/O控制器中读一个字的数据传送到CPU寄存器。接着CPU恢复等待I/O的进程的运行环境继续执行注意①CPU会在每个指令周期的末尾检查中断②中断处理过程中需要保存、恢复进程的运行环境这个过程需要一定的时间开销。如果中断发生的频率太高会降低系统性能优点CPU和I/O设备可并行工作CPU利用率提升缺点数据传输的单位是字每个字在I/O设备与内存之间的传输都需要经过CPU而频繁的中断处理会消耗较多的CPU时间3.DMA方式DMA方式又叫直接存储器存取主要用于块设备的I/O控制。在I/O设备和内存之间建立直接的数据交换通路彻底解放CPU数据的传送单位是“块”数据的流向是从设备直接放入内存或直接从内存到设备不再需要经过CPU仅在传送一个或多个数据块的开始和结束时才需要CPU干预DMA控制器命令/状态寄存器CR。暂存从CPU发来的I/O命令或设备的状态信息内存地址寄存器MAR。在输入时表示数据应放在内存中的什么位置输出时表示要输出的数据放在内存中的什么位置数据计数器DC。存放本次要读/写的字节数数据寄存器DR。暂存从设备到内存或从内存到设备的数据工作流程 CPU向DMA控制器发出指令启动DMA控制器然后继续其他工作。之后CPU就将I/O控制权交给DMA控制器由DMA控制器负责数据传输。DMA控制器直接与内存交互每次传送一个字。整个数据传送结束后DMA控制器向CPU发送一个中断信号。每次读写一个或多个块只能是连续的多个块且这些块读入内存后在内存中也必须是连续的。若需要读入离散的数据块或读入的数据需要离散存放时需要发出多个指令优点提高了CPU和I/O设备的并行性。数据传输效率提高缺点CPU每发出一条I/O指令只能读/写一个或多个连续的数据块4.通道控制方式I/O通道是一种特殊的处理机可执行一系列通道指令CPU只需向通道发送一条I/O指令指明通道程序在内存中的位置这次用哪一个通道程序和要访问的I/O设备通道收到指令后执行通道程序完成规定的I/O任务后向CPU发出中断请求。通道控制设备控制器设备控制器控制设备执行。 通道与一般处理机的区别是通道指令类型单一没有自己的内存与CPU共享内存 通道与DMA方式的区别DMA需要CPU控制传输的数据块的大小、传输的内存位置而通道方式中这些信息由通道控制。每个DMA控制器只能对应一台设备与内存传输数据而一个通道可用控制多台设备与内存的数据交换每次读写一组数据块优点可实现CPU、通道、I/O设备的并行工作资源利用率高缺点需要专门的通道硬件支持总结I/O 控制方式完成一次读/写的过程CPU干预频率每次I/O的数据传输单位数据流向程序直接控制方式CPU发出I/O命令后需要不断轮询极高字设备→CPU→内存内存→CPU→设备中断驱动方式CPU发出I/O命令后可以做其他事本次I/O完成后设备控制器发出中断信号高字设备→CPU→内存内存→CPU→设备DMA方式CPU发出I/O命令后可以做其他事本次I/O完成后DMA控制器发出中断信号中块设备⇄内存通道控制方式CPU发出I/O命令后可以做其他事。通道会执行通道程序以完成I/O完成后通道向CPU发出中断信号低一组块设备⇄内存5.1.3 I/O软件层次结构用户层软件实现与用户交互的接口用户可直接调用在用户层提供的与I/O操作有关的库函数对设备进行操作。设备独立性软件 用于实现用户程序与设备驱动器的统一接口、设备命名、设备保护以及设备的分配与释放等同时为设备管理和数据传送提供必要的存储空间 设备独立性也称设备无关性是指应用程序所用的设备不局限于某个具体的物理设备。在应用程序中使用逻辑设备名来请求使用某类设备而在系统执行时必须将逻辑设备名映射成物理设备名设备独立性软件设在驱动程序之上用于实现设备独立性设备驱动程序与硬件直接相关每类设备需要设置一个设备驱动程序。负责具体实现系统对设备发出的操作指令驱动I/O设备工作。通常以进程的形式存在设备驱动程序向上层用户程序提供一组标准接口设备具体的差别被设备驱动程序所封装中断处理程序当I/O操作完成时设备控制器发送一个中断信号CPU响应中断后根据中断类型号找到相应的中断处理程序进行处理处理完成后再返回被中断的进程5.1.4 应用程序I/O接口应用程序要访问字符设备、块设备、网络设备时所需要调用的系统调用接口是不同的I/O接口的分类1字符设备接口字符设备传输速率低不可寻址在输入输出时通常采用中断驱动方式使用get和put操作从缓冲区获取或输出字符顺序存取2块设备接口数据的存取和传输以数据块为单位传输速率高、可寻址。磁盘设备的I/O常采用DMA方式块设备接口隐藏了磁盘的二维结构每个扇区的地址需要用磁道号和扇区号来表示该接口将所有扇区从0到n-1依次编号将二维结构变为了一种线形序列内存映射接口通过内存的字节数组来访问磁盘而不提供读/写磁盘操作。映射文件到内存的系统调用返回包含文件副本的一个虚拟内存地址。只在需要访问内存映像时才由虚拟存储器实际调页3网络设备接口用于传输网络数据包操作系统提供的网络I/O接口为网络套接字接口套接字接口socket的系统调用使应用程序创建的本地套接字连接到远程应用程序创建的套接字connect系统调用通过此连接发送和接收数据socket系统调用需指明网络协议阻塞I/O和非阻塞I/O阻塞I/O应用程序发出I/O系统调用进程需转为阻塞态等待如字符设备接口——从键盘读入一个字符get非阻塞I/O应用程序发出I/O系统调用系统调用可迅速返回进程无需阻塞等待。如块设备接口——往磁盘写数据5.2 设备独立性软件当处理机和外部设备的速度差异较大时有什么办法可用解决这个问题5.2.1 设备独立性软件也称与设备无关的软件是I/O系统的最高层软件它下层是设备驱动程序5.2.2 高速缓存与缓冲区缓冲区可以缓和CPU与I/O设备间速度不匹配的矛盾减少CPU的中断频率解决基本数据单元大小数据粒度不匹配的问题磁盘高速缓存利用内存中的存储空间来暂存从磁盘中读出的一系列盘块总的信息磁盘高速缓存在逻辑上属于磁盘物理上是驻留在内存中的盘块访问高速缓存比访问磁盘速度更快单缓冲当用户进程发出I/O请求后操作系统在内存中为之分配一个缓冲区通常缓冲区的大小为一个块。只有缓冲区满后才能取出数据只有缓冲区空时才能读入数据 假设将数据从设备输入缓冲区的时间为T数据从缓冲区传输到工作区的时间为MCPU对数据的处理时间为C则处理每块数据的平均时间为Max(C,T)M双缓冲操作系统在内存中分配两个缓冲区缓冲区1满时可以将数据读入工作区同时缓冲区2可从I/O设备输入数据 假设初始缓冲区2满缓冲区1空讨论TCM和TCM两种情况则每块数据的平均处理时间为Max(CM, T)双缓冲区可实现两台主机之间双向的数据传送循环缓冲循环缓冲包括多个大小相等的缓冲区多个缓冲区链接成一个循环队列。循环缓冲中设置in和out两个指针in指向第一个可以输入数据的空缓冲区out指向第一个提取数据的满缓冲区输入输出时in和out指针沿链接方向循环移动缓冲池缓冲池包含多个缓冲区按使用情况可以分为空缓冲区、输入队列由空缓冲区链接成的队列、输出队列由满缓冲区俩你今儿而成的队列此外还有四种工作缓冲区①收容输入数据hin②收容输出数据hout③提取输入数据sin④提取输出数据sout5.2.3 设备分配与回收设备分配概述设备分配是指根据用户的I/O请求分配所需的设备。分配总原则是充分发挥设备的使用效率尽可能的让设备忙碌且不引发进程死锁设备分配的数据结构设备控制表DCT系统为每个设备配置一张DCT设备类型设备标识符即物理设备名每个设备在系统中的物理设备名是唯一的设备状态忙/闲指向控制器表的指针每个设备由一个控制器控制该指针指向对的控制器表重复执行次数或时间重复执行次数达到规定值仍不成功时才认为此次I/O失败设备队列的队首指针指向正在等待该设备的进程队列由进程PCB组成的队首控制器控制表COCT每个设备控制器都对应一张COCT操作系统根据其中的信息对控制器进行操作和管理。每个控制器由一个通道控制通过表项可以找到相应通道的信息通道控制表CHCT每个通道对应一张CHCT。操作系统跟CHCT的信息对通道进行操作和管理。通过表项可以找到该通道管理的所有控制器信息系统设备表SDT整个系统只有一张SDT。它记录已连接到系统中的所有物理设备的情况每个设备对应一个表目设备分配时应考虑的因素1设备的固有属性独占设备分配给进程后应由进程独占共享设备可同时分配给多个进程虚拟设备可共享如SPOOLing技术将打印机改造成共享设备2设备分配算法FCFS算法。根据进程对某个设备提出请求的先后顺序将进程排成队列优先将设备分配给队首进程最高优先级优先算法。优先级高的进程排在队列前面优先级相同的采用FCFS原则排队3设备分配中的安全性在设备分配过程中应防止死锁安全分配方式。每个进程分配一个设备后立即将进程阻塞直到其I/O完成并释放设备资源后才将其唤醒。破坏了请求和保持条件不会死锁。但CPU和I/O设备只能串行工作不安全分配方式。进程分配了I/O设备后可继续执行还可以发出新的I/O请求只有某个请求得不到满足时才会将进程阻塞。CPU和I/O可以并行工作但可能引起死锁可使用银行家算法避免死锁设备分配的步骤①根据据进程请求的物理设备名查找SDT②根据SDT找到DCT若设备忙碌则将进程阻塞并将进程PCB挂到设备等待队列中不忙碌则将设备分配给进程③根据DCT找到COCT若控制器忙碌则将进程阻塞并将进程PCB挂到控制器等待队列中不忙碌则将控制器分配给进程④根据COCT找到CHCT若通道忙碌则将进程阻塞并将进程PCB挂到通道等待队列中不忙碌则将通道分配给进程只有设备、控制器、通道都分配成功时才算分配成功之后便可以启动I/O设备进行数据传输逻辑设备名到物理设备名的映射上述分配方法需要用户提供物理设备名不灵活设备利用率不高因此在系统中设置一张逻辑设备表将逻辑设备名映射到物理设备名逻辑设备表LUT的每个表项包括逻辑设备名、物理设备名、设备驱动程序的入口地址 当进程用逻辑设备名请求分配设备时系统会为其分配一台相应的物理设备并在LUT中建立一个表目填上对应信息之后再使用该逻辑设备名时可直接通过LUT寻找对应的物理设备及其驱动程序系统中可采用两种方式设置逻辑设备表整个系统只设置一张、为每个用户设置一张5.2.4 SPOOLing技术为了缓和CPU高速性与I/O设备低速性之间的矛盾引入假脱机技术。脱机技术由外围控制机控制输入时先将数据读入磁带再由磁盘读入内存输出时先将数据输出到磁带再由磁带写回纸带有点古早了一、SPOOLing系统的组成如下输入井和输出井 在磁盘上开辟出的两个存储区域。模拟脱机输入/输出时的磁盘用于I/O收容设备输入的/进程输出的数据。一个进程的输入输出数据保存为一个文件所有进程的输入输出文件链接成一个输入输出队列输入缓冲区和输出缓冲区 在内存中开辟的两个缓冲区。输入缓冲区用于暂存设备送来的数据以后再传送到输入井。输出缓冲区暂存从输出井送来的数据以后再传送到输出设备输入进程和输出进程 输入进程用于模拟脱机输入时的外围控制机将数据从输入缓冲区放到输入井中CPU需要时自行读入内存。输出设备模拟脱机输出时的外围控制机将数据从内存传送到输出井输出设备空闲时再将输出井中的数据经输出缓冲区输出至输出设备井管理程序 用于控制作业与磁盘井之间的信息交换SPOOLing技术是用空间换时间的技术二、共享打印机打印机是独占式设备可通过SPOOLing技术改造成“共享设备”假脱机管理进程要为每个进程先做如下工作1.在磁盘缓冲区中为进程申请一个空闲盘块并将要打印的数据暂存其中2.为用户进程申请一张空白的用户请求打印表并将用户的打印要求填入其中再将该表挂到假脱机文件队列上 对用户来说提交的打印请求并没有被立刻执行而是将数据即时存入缓冲区让用户意味被打印了待打印机空闲后将等待队列中队首的打印请求调入打印SPOOLing系统的特点提高I/O速度将独占设备改造为共享设备实现了虚拟设备功能5.2.5 设备驱动程序接口 设备驱动程序是I/O系统的上层与设备控制器之间的通信程序其主要任务是接收上层应用发来的抽象I/O请求如read、write将它们转换为具体要求后发送给设备控制器进而使其启动设备执行任务反之它也将设备控制器发来的信号传送给上层应用设备驱动程序的功能接收上层软件发来的命令和参数并将抽象要求转换为与设备相关的具体要求检查用户I/O请求的合法性发出I/O命令若设备空闲立即启动它完成指定I/O操作若设备忙则将请求者的PCB挂到设备队列上等待及时响应由设备控制器发来的中断请求并根据中断类型调用相关中断处理程序设备驱动程序的特点设备驱动程序与设备采用的I/O控制方式紧密相关常用的I/O控制方式是中断驱动方式和DMA方式设备驱动程序与硬件紧密相关对于不同的类型的设备应配置不同的设备驱动程序目前很多设备驱动程序的基本部分已固化在ROM中设备驱动程序允许同时多次调用执行5.3 磁盘和固态硬盘5.3.1 磁盘可以通过(柱面号盘面号扇区号)定位一个物理地址读写磁盘数据块的过程如下根据柱面号移动磁头臂让磁头移动到对应的柱面激活对应盘面的磁头当磁盘旋转时磁头从对应扇区上划过从而完成对指定扇区的读/写磁盘的分类固定头磁盘、活动头磁盘固定盘磁盘、可换盘磁盘5.3.2 磁盘的管理磁盘初始化磁盘出场时只有一个个磁道(1)低级格式化物理格式化为一个磁盘划分扇区。 每个扇区通常由头部、数据区和尾部组成。头部和尾部包含了一些磁盘控制器的实用信息其中利用磁道号、磁头号、扇区号来标志一个扇区利用CRC字段对扇区进行校验(2)将磁盘分区分盘每个分区由若干柱面组成(3)进行逻辑格式化高级格式化创建文件系统。将初始的文件系统数据结构存储到磁盘上这些数据结构包括空闲的空间和已分配的空间以及一个初始为空的目录建立根目录、对保持空闲磁盘块信息的数据结构进行初始分区将磁盘分区引导块计算机启动时需要允许初始化程序自举程序它初始化CPU、寄存器、设备控制器和内存等接着启动操作系统。 在ROM中装入自举装入程序将完整功能的引导程序保存在磁盘的启动块上。启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘 引导ROM中的代码指示磁盘控制器将引导块读入内存然后开始执行它可以从非固定的磁盘位置加载整个操作系统并且开始运行操作系统。下面以Windows为例来分析引导过程。Windows允许将磁盘分为多个分区有一个分区为引导分区它包含操作系统和设备驱动程序。Windows系统将引导代码存储在磁盘的第0号扇区它称为主引导记录(MBR)。引导首先运行ROM中的代码这个代码指示系统从MBR中读取引导代码。除了包含引导代码MBR还包含一个磁盘分区表和一个标志(以指示从哪个分区引导系统)如图5.20所示。当系统找到引导分区时读取分区的第一个扇区称为引导扇区并继续余下的引导过程包括加载各种系统服务。坏块磁盘的扇区可能损坏坏了咋办呢对于简单的磁盘可手动处理坏块在FAT表上会标明因此程序不会使用它们对于复杂的磁盘控制器维护磁盘内的坏块列表。低级格式化将一些块保留作为备用操作系统看不到这些块。控制器可以采用备块来逻辑地替换坏块称为扇区备用5.3.3 磁盘调度算法磁盘的存取时间寻道时间Ts将磁头移动到指定磁道需要的时间假设启动磁头臂的时间为s磁头匀速移动跨越一条磁道的时间为m需要跨越n条磁道则寻道时间启动磁头臂的时间s磁头移动到指定磁道的时间mnTs mnsT_s~mnsTsmns旋转延迟时间Tr通过旋转磁盘将磁头移动到目标扇区所需要的时间。设磁盘转速为r(转/秒或转/分)则平均旋转延迟时间Tr12∗1r12rT_r\frac{1}{2}*\frac{1}{r}\frac{1}{2r}Tr21∗r12r1传输时间Tt从磁盘读出或向磁盘写入数据所需的时间取决于每次读写的字节数b和磁盘转速r假设r为磁盘每秒的转数N为一个磁道上的字节数则传输时间为TtbrNT_t\frac{b}{rN}TtrNb总存取时间TaTaTs12rbrNT_aT_s\frac{1}{2r}\frac{b}{rN}TaTs2r1rNb其中寻道时间占大头于磁盘调度算法密切相关磁盘调度算法(1)先来先服务(FCFS)算法根据进程请求访问磁盘的先后顺序进行调度优点公平当访问的磁道较集中时性能不错缺点访问的磁道分散时性能很差平均寻道时间长(2)最短寻道时间优先(SSTF)算法每次选择离当前磁头最近的磁道使每次的寻道时间最短优点性能较好平均寻道时间短缺点会产生饥饿现象(3)扫描(SCAN)算法磁头只能向一个方向移动只有磁头移动到最外侧磁道时才允许向内移动只有磁头移动到最内侧磁道时才允许向外侧移动不会产生饥饿(4)循环扫描(C-SCAN)算法只有磁头朝某个特定方向移动时才处理磁道访问请求而返回时直接快速移动至起始端而不处理任何请求SCAN算法和C-SCAN算法存在缺陷当磁头到达最大/最小访问磁道后即可返回无需到达磁盘端点对此提出LOOK算法和C-LOOK算法当磁头到达最远端的请求时即可返回如无特别说明SCAN算法和C-SCAN算法默认为LOOK算法和C-LOOK算法减少延迟时间的方法磁头读完一块扇区后不能立刻读取下一块扇区需要等待一定的处理时间而此时磁盘继续选择下一块扇区就错过磁头只有能磁盘再转一圈回来才能再次读取浪费时间所以不能让逻辑上相邻的扇区在物理上也相邻对此可以采用交替编号的方法此外当需要连续访问两个盘面时访问完第一个盘面后需要等待一定的处理时间才能读取第二个盘面但此时盘面仍在选择会导致磁头错过下一个盘面的第一个扇区 对此可以使用错位命名的方法即将上下两个盘面对应位置的编号错开编号这样访问完第一个盘面后盘面旋转过一定的处理时间后正好可以将新盘面的一号扇区转到磁头下提高磁盘I/O速度的方法采用磁盘高速缓存调整磁盘请求顺序提前读。在读磁盘当前块时将下一磁盘块也读入内存缓冲区延迟写。仅在缓冲区首部设置延迟写标志然后释放此缓冲区并将其链如空闲缓冲区链表的首部当其他进程申请到此缓冲区时才真正将缓冲区数据写入磁盘优化物理块的分布虚拟盘。指利用内存空间去仿真磁盘又叫RAM盘。常用于存放临时文件采用磁盘阵列RAD。因为可以采用并行交叉存取能大幅度提高磁盘I/O速度5.3.4 固态硬盘 SSD固态硬盘的特性固态硬盘是一种基于闪存技术的存储器。由一个或多个闪存芯片和闪存翻译层组成。闪存翻译层将来自CPU的逻辑块号翻译成物理块号通过电路实现了随机访问。每个逻辑块号对应块中的一个页每个块有多个页数据读取是以页为单位进行的以块为单位擦除只有当这一页所属的一块被整个擦除后才能往这一页中写入数据读取很快但写入很慢。原因是写入可能引起块的擦除同时若只需要向块中的部分页中写入还需要先将这一块中其他有用的数据复制到其他页中然后才能擦除原来的页并写入磨损均衡固态硬盘的闪存的擦写寿命是有限的因此引入磨损均衡技术(1)动态磨损均衡。写入数据时优先选择擦除次数少的新闪存块(2)静态磨损均衡。就算没有数据写入SSD也会监测并自动进行数据分配让老的闪存块承担以读为主的存储任务。同时让较新的闪存块承担以写为主的任务
【操作系统】第五章 输入/输出管理
发布时间:2026/7/18 6:00:10
第五章 输入/输出管理5.1 I/O管理概述5.1.1 I/O设备1.设备的分类按信息交换的单位分类块设备传输速率较高可寻址0即可随机地读/写任意块。如磁盘字符设备传输速率慢不可寻址再输入/输出时常采用中断驱动方式。如鼠标、键盘虚拟设备采用虚拟技术将一台独占设备转换为若干逻辑设备2.I/O接口 I/O接口也称设备控制器是CPU与设备之间的“桥梁”实现设备和计算机之间的数据交换。它接收CPU发出的命令控制设备工作使CPU从设备控制事务中解脱出来设备控制器与CPU的接口。用于实现CPU与设备控制器之间的通信。接口有三类信号线数据线、地址线、控制线设备控制器与设备的接口。设备控制器可连接一个或多个设备因此控制器中有一个或多个设备接口每个接口可传输数据、控制、状态三种类型的信号I/O逻辑。识别CPU发出的信号并向设备发出命令。设备控制器的主要功能有①接收和识别命令②数据交换包括CPU和控制器之间的数据传输以及控制器和设备之间的数据传输③标识和报告设备的状态以供CPU处理④地址识别⑤数据缓冲⑥差错控制3.I/O接口的类型按数据传送方式可分为并行接口和串行接口按主机访问I/O设备的控制方式可分为程序查询接口、中断接口、DMA接口等按功能选择的灵活性可分为可编程接口、不可编程接口4.I/O端口I/O端口是指设备控制器中可被CPU直接访问的寄存器主要有三类数据寄存器用于缓存从设备送来的输入数据或从CPU送来的输出数据状态寄存器保存设备的执行结果或状态信息供CPU读取控制寄存器由CPU写入以便启动命令或更改设备模式I/O端口的编址方式编址之后CPU才能访问到独立编址独立编址是指为每个端口分配一个I/O端口号。I/O端口的地址空间与主存地址空间是两个独立的地址空间两者范围可以重叠。只有操作系统使用特殊的指令才能访问端口用户不能访问。优点I/O端口数少只需少量地址线使I/O端口译码简单寻址速度快。使用专用I/O指令可使程序更加清晰缺点I/O指令少只提供简单的传输操作所以程序设计的灵活性差。CPU需要提供两组独立的存储器和设备的读/写控制信号增加了控制的复杂性统一编址内存映射I/O统一编制是指将主存地址空间分出一部分给I/O端口编址I/O端口和主存单元在同一地址空间的不同分段中根据地址范围就能区分访问的是I/O端口还是主存单元因此无需设置专门的I/O指令优点不需要专门的指令使得CPU访问的操作更加灵活方便端口由较大的编址空间缺点端口地址占用了部分主存地址空间使主存的可用容量变小。译码电路更加复杂降低了寻址速度5.1.2 I/O控制方式I/O控制是控制设备和主机之间的数据传送。宗旨是减少CPU对I/O控制的干预1.程序直接控制方式CPU对I/O设备的控制采取轮询的方式。不断向向设备控制器发出指令测试设备状态直到设备可用优点简单易于实现缺点CPU长时间等待I/O设备CPU利用率低2.中断驱动方式当I/O设备被占用时将等待I/O的进程阻塞CPU切换到其他进程执行。当I/O完成后控制器向CPU发出一个中断信号CPU转去执行中断处理程序处理该中断。处理中断的过程中CPU从I/O控制器中读一个字的数据传送到CPU寄存器。接着CPU恢复等待I/O的进程的运行环境继续执行注意①CPU会在每个指令周期的末尾检查中断②中断处理过程中需要保存、恢复进程的运行环境这个过程需要一定的时间开销。如果中断发生的频率太高会降低系统性能优点CPU和I/O设备可并行工作CPU利用率提升缺点数据传输的单位是字每个字在I/O设备与内存之间的传输都需要经过CPU而频繁的中断处理会消耗较多的CPU时间3.DMA方式DMA方式又叫直接存储器存取主要用于块设备的I/O控制。在I/O设备和内存之间建立直接的数据交换通路彻底解放CPU数据的传送单位是“块”数据的流向是从设备直接放入内存或直接从内存到设备不再需要经过CPU仅在传送一个或多个数据块的开始和结束时才需要CPU干预DMA控制器命令/状态寄存器CR。暂存从CPU发来的I/O命令或设备的状态信息内存地址寄存器MAR。在输入时表示数据应放在内存中的什么位置输出时表示要输出的数据放在内存中的什么位置数据计数器DC。存放本次要读/写的字节数数据寄存器DR。暂存从设备到内存或从内存到设备的数据工作流程 CPU向DMA控制器发出指令启动DMA控制器然后继续其他工作。之后CPU就将I/O控制权交给DMA控制器由DMA控制器负责数据传输。DMA控制器直接与内存交互每次传送一个字。整个数据传送结束后DMA控制器向CPU发送一个中断信号。每次读写一个或多个块只能是连续的多个块且这些块读入内存后在内存中也必须是连续的。若需要读入离散的数据块或读入的数据需要离散存放时需要发出多个指令优点提高了CPU和I/O设备的并行性。数据传输效率提高缺点CPU每发出一条I/O指令只能读/写一个或多个连续的数据块4.通道控制方式I/O通道是一种特殊的处理机可执行一系列通道指令CPU只需向通道发送一条I/O指令指明通道程序在内存中的位置这次用哪一个通道程序和要访问的I/O设备通道收到指令后执行通道程序完成规定的I/O任务后向CPU发出中断请求。通道控制设备控制器设备控制器控制设备执行。 通道与一般处理机的区别是通道指令类型单一没有自己的内存与CPU共享内存 通道与DMA方式的区别DMA需要CPU控制传输的数据块的大小、传输的内存位置而通道方式中这些信息由通道控制。每个DMA控制器只能对应一台设备与内存传输数据而一个通道可用控制多台设备与内存的数据交换每次读写一组数据块优点可实现CPU、通道、I/O设备的并行工作资源利用率高缺点需要专门的通道硬件支持总结I/O 控制方式完成一次读/写的过程CPU干预频率每次I/O的数据传输单位数据流向程序直接控制方式CPU发出I/O命令后需要不断轮询极高字设备→CPU→内存内存→CPU→设备中断驱动方式CPU发出I/O命令后可以做其他事本次I/O完成后设备控制器发出中断信号高字设备→CPU→内存内存→CPU→设备DMA方式CPU发出I/O命令后可以做其他事本次I/O完成后DMA控制器发出中断信号中块设备⇄内存通道控制方式CPU发出I/O命令后可以做其他事。通道会执行通道程序以完成I/O完成后通道向CPU发出中断信号低一组块设备⇄内存5.1.3 I/O软件层次结构用户层软件实现与用户交互的接口用户可直接调用在用户层提供的与I/O操作有关的库函数对设备进行操作。设备独立性软件 用于实现用户程序与设备驱动器的统一接口、设备命名、设备保护以及设备的分配与释放等同时为设备管理和数据传送提供必要的存储空间 设备独立性也称设备无关性是指应用程序所用的设备不局限于某个具体的物理设备。在应用程序中使用逻辑设备名来请求使用某类设备而在系统执行时必须将逻辑设备名映射成物理设备名设备独立性软件设在驱动程序之上用于实现设备独立性设备驱动程序与硬件直接相关每类设备需要设置一个设备驱动程序。负责具体实现系统对设备发出的操作指令驱动I/O设备工作。通常以进程的形式存在设备驱动程序向上层用户程序提供一组标准接口设备具体的差别被设备驱动程序所封装中断处理程序当I/O操作完成时设备控制器发送一个中断信号CPU响应中断后根据中断类型号找到相应的中断处理程序进行处理处理完成后再返回被中断的进程5.1.4 应用程序I/O接口应用程序要访问字符设备、块设备、网络设备时所需要调用的系统调用接口是不同的I/O接口的分类1字符设备接口字符设备传输速率低不可寻址在输入输出时通常采用中断驱动方式使用get和put操作从缓冲区获取或输出字符顺序存取2块设备接口数据的存取和传输以数据块为单位传输速率高、可寻址。磁盘设备的I/O常采用DMA方式块设备接口隐藏了磁盘的二维结构每个扇区的地址需要用磁道号和扇区号来表示该接口将所有扇区从0到n-1依次编号将二维结构变为了一种线形序列内存映射接口通过内存的字节数组来访问磁盘而不提供读/写磁盘操作。映射文件到内存的系统调用返回包含文件副本的一个虚拟内存地址。只在需要访问内存映像时才由虚拟存储器实际调页3网络设备接口用于传输网络数据包操作系统提供的网络I/O接口为网络套接字接口套接字接口socket的系统调用使应用程序创建的本地套接字连接到远程应用程序创建的套接字connect系统调用通过此连接发送和接收数据socket系统调用需指明网络协议阻塞I/O和非阻塞I/O阻塞I/O应用程序发出I/O系统调用进程需转为阻塞态等待如字符设备接口——从键盘读入一个字符get非阻塞I/O应用程序发出I/O系统调用系统调用可迅速返回进程无需阻塞等待。如块设备接口——往磁盘写数据5.2 设备独立性软件当处理机和外部设备的速度差异较大时有什么办法可用解决这个问题5.2.1 设备独立性软件也称与设备无关的软件是I/O系统的最高层软件它下层是设备驱动程序5.2.2 高速缓存与缓冲区缓冲区可以缓和CPU与I/O设备间速度不匹配的矛盾减少CPU的中断频率解决基本数据单元大小数据粒度不匹配的问题磁盘高速缓存利用内存中的存储空间来暂存从磁盘中读出的一系列盘块总的信息磁盘高速缓存在逻辑上属于磁盘物理上是驻留在内存中的盘块访问高速缓存比访问磁盘速度更快单缓冲当用户进程发出I/O请求后操作系统在内存中为之分配一个缓冲区通常缓冲区的大小为一个块。只有缓冲区满后才能取出数据只有缓冲区空时才能读入数据 假设将数据从设备输入缓冲区的时间为T数据从缓冲区传输到工作区的时间为MCPU对数据的处理时间为C则处理每块数据的平均时间为Max(C,T)M双缓冲操作系统在内存中分配两个缓冲区缓冲区1满时可以将数据读入工作区同时缓冲区2可从I/O设备输入数据 假设初始缓冲区2满缓冲区1空讨论TCM和TCM两种情况则每块数据的平均处理时间为Max(CM, T)双缓冲区可实现两台主机之间双向的数据传送循环缓冲循环缓冲包括多个大小相等的缓冲区多个缓冲区链接成一个循环队列。循环缓冲中设置in和out两个指针in指向第一个可以输入数据的空缓冲区out指向第一个提取数据的满缓冲区输入输出时in和out指针沿链接方向循环移动缓冲池缓冲池包含多个缓冲区按使用情况可以分为空缓冲区、输入队列由空缓冲区链接成的队列、输出队列由满缓冲区俩你今儿而成的队列此外还有四种工作缓冲区①收容输入数据hin②收容输出数据hout③提取输入数据sin④提取输出数据sout5.2.3 设备分配与回收设备分配概述设备分配是指根据用户的I/O请求分配所需的设备。分配总原则是充分发挥设备的使用效率尽可能的让设备忙碌且不引发进程死锁设备分配的数据结构设备控制表DCT系统为每个设备配置一张DCT设备类型设备标识符即物理设备名每个设备在系统中的物理设备名是唯一的设备状态忙/闲指向控制器表的指针每个设备由一个控制器控制该指针指向对的控制器表重复执行次数或时间重复执行次数达到规定值仍不成功时才认为此次I/O失败设备队列的队首指针指向正在等待该设备的进程队列由进程PCB组成的队首控制器控制表COCT每个设备控制器都对应一张COCT操作系统根据其中的信息对控制器进行操作和管理。每个控制器由一个通道控制通过表项可以找到相应通道的信息通道控制表CHCT每个通道对应一张CHCT。操作系统跟CHCT的信息对通道进行操作和管理。通过表项可以找到该通道管理的所有控制器信息系统设备表SDT整个系统只有一张SDT。它记录已连接到系统中的所有物理设备的情况每个设备对应一个表目设备分配时应考虑的因素1设备的固有属性独占设备分配给进程后应由进程独占共享设备可同时分配给多个进程虚拟设备可共享如SPOOLing技术将打印机改造成共享设备2设备分配算法FCFS算法。根据进程对某个设备提出请求的先后顺序将进程排成队列优先将设备分配给队首进程最高优先级优先算法。优先级高的进程排在队列前面优先级相同的采用FCFS原则排队3设备分配中的安全性在设备分配过程中应防止死锁安全分配方式。每个进程分配一个设备后立即将进程阻塞直到其I/O完成并释放设备资源后才将其唤醒。破坏了请求和保持条件不会死锁。但CPU和I/O设备只能串行工作不安全分配方式。进程分配了I/O设备后可继续执行还可以发出新的I/O请求只有某个请求得不到满足时才会将进程阻塞。CPU和I/O可以并行工作但可能引起死锁可使用银行家算法避免死锁设备分配的步骤①根据据进程请求的物理设备名查找SDT②根据SDT找到DCT若设备忙碌则将进程阻塞并将进程PCB挂到设备等待队列中不忙碌则将设备分配给进程③根据DCT找到COCT若控制器忙碌则将进程阻塞并将进程PCB挂到控制器等待队列中不忙碌则将控制器分配给进程④根据COCT找到CHCT若通道忙碌则将进程阻塞并将进程PCB挂到通道等待队列中不忙碌则将通道分配给进程只有设备、控制器、通道都分配成功时才算分配成功之后便可以启动I/O设备进行数据传输逻辑设备名到物理设备名的映射上述分配方法需要用户提供物理设备名不灵活设备利用率不高因此在系统中设置一张逻辑设备表将逻辑设备名映射到物理设备名逻辑设备表LUT的每个表项包括逻辑设备名、物理设备名、设备驱动程序的入口地址 当进程用逻辑设备名请求分配设备时系统会为其分配一台相应的物理设备并在LUT中建立一个表目填上对应信息之后再使用该逻辑设备名时可直接通过LUT寻找对应的物理设备及其驱动程序系统中可采用两种方式设置逻辑设备表整个系统只设置一张、为每个用户设置一张5.2.4 SPOOLing技术为了缓和CPU高速性与I/O设备低速性之间的矛盾引入假脱机技术。脱机技术由外围控制机控制输入时先将数据读入磁带再由磁盘读入内存输出时先将数据输出到磁带再由磁带写回纸带有点古早了一、SPOOLing系统的组成如下输入井和输出井 在磁盘上开辟出的两个存储区域。模拟脱机输入/输出时的磁盘用于I/O收容设备输入的/进程输出的数据。一个进程的输入输出数据保存为一个文件所有进程的输入输出文件链接成一个输入输出队列输入缓冲区和输出缓冲区 在内存中开辟的两个缓冲区。输入缓冲区用于暂存设备送来的数据以后再传送到输入井。输出缓冲区暂存从输出井送来的数据以后再传送到输出设备输入进程和输出进程 输入进程用于模拟脱机输入时的外围控制机将数据从输入缓冲区放到输入井中CPU需要时自行读入内存。输出设备模拟脱机输出时的外围控制机将数据从内存传送到输出井输出设备空闲时再将输出井中的数据经输出缓冲区输出至输出设备井管理程序 用于控制作业与磁盘井之间的信息交换SPOOLing技术是用空间换时间的技术二、共享打印机打印机是独占式设备可通过SPOOLing技术改造成“共享设备”假脱机管理进程要为每个进程先做如下工作1.在磁盘缓冲区中为进程申请一个空闲盘块并将要打印的数据暂存其中2.为用户进程申请一张空白的用户请求打印表并将用户的打印要求填入其中再将该表挂到假脱机文件队列上 对用户来说提交的打印请求并没有被立刻执行而是将数据即时存入缓冲区让用户意味被打印了待打印机空闲后将等待队列中队首的打印请求调入打印SPOOLing系统的特点提高I/O速度将独占设备改造为共享设备实现了虚拟设备功能5.2.5 设备驱动程序接口 设备驱动程序是I/O系统的上层与设备控制器之间的通信程序其主要任务是接收上层应用发来的抽象I/O请求如read、write将它们转换为具体要求后发送给设备控制器进而使其启动设备执行任务反之它也将设备控制器发来的信号传送给上层应用设备驱动程序的功能接收上层软件发来的命令和参数并将抽象要求转换为与设备相关的具体要求检查用户I/O请求的合法性发出I/O命令若设备空闲立即启动它完成指定I/O操作若设备忙则将请求者的PCB挂到设备队列上等待及时响应由设备控制器发来的中断请求并根据中断类型调用相关中断处理程序设备驱动程序的特点设备驱动程序与设备采用的I/O控制方式紧密相关常用的I/O控制方式是中断驱动方式和DMA方式设备驱动程序与硬件紧密相关对于不同的类型的设备应配置不同的设备驱动程序目前很多设备驱动程序的基本部分已固化在ROM中设备驱动程序允许同时多次调用执行5.3 磁盘和固态硬盘5.3.1 磁盘可以通过(柱面号盘面号扇区号)定位一个物理地址读写磁盘数据块的过程如下根据柱面号移动磁头臂让磁头移动到对应的柱面激活对应盘面的磁头当磁盘旋转时磁头从对应扇区上划过从而完成对指定扇区的读/写磁盘的分类固定头磁盘、活动头磁盘固定盘磁盘、可换盘磁盘5.3.2 磁盘的管理磁盘初始化磁盘出场时只有一个个磁道(1)低级格式化物理格式化为一个磁盘划分扇区。 每个扇区通常由头部、数据区和尾部组成。头部和尾部包含了一些磁盘控制器的实用信息其中利用磁道号、磁头号、扇区号来标志一个扇区利用CRC字段对扇区进行校验(2)将磁盘分区分盘每个分区由若干柱面组成(3)进行逻辑格式化高级格式化创建文件系统。将初始的文件系统数据结构存储到磁盘上这些数据结构包括空闲的空间和已分配的空间以及一个初始为空的目录建立根目录、对保持空闲磁盘块信息的数据结构进行初始分区将磁盘分区引导块计算机启动时需要允许初始化程序自举程序它初始化CPU、寄存器、设备控制器和内存等接着启动操作系统。 在ROM中装入自举装入程序将完整功能的引导程序保存在磁盘的启动块上。启动块位于磁盘的固定位置。具有启动分区的磁盘称为启动磁盘或系统磁盘 引导ROM中的代码指示磁盘控制器将引导块读入内存然后开始执行它可以从非固定的磁盘位置加载整个操作系统并且开始运行操作系统。下面以Windows为例来分析引导过程。Windows允许将磁盘分为多个分区有一个分区为引导分区它包含操作系统和设备驱动程序。Windows系统将引导代码存储在磁盘的第0号扇区它称为主引导记录(MBR)。引导首先运行ROM中的代码这个代码指示系统从MBR中读取引导代码。除了包含引导代码MBR还包含一个磁盘分区表和一个标志(以指示从哪个分区引导系统)如图5.20所示。当系统找到引导分区时读取分区的第一个扇区称为引导扇区并继续余下的引导过程包括加载各种系统服务。坏块磁盘的扇区可能损坏坏了咋办呢对于简单的磁盘可手动处理坏块在FAT表上会标明因此程序不会使用它们对于复杂的磁盘控制器维护磁盘内的坏块列表。低级格式化将一些块保留作为备用操作系统看不到这些块。控制器可以采用备块来逻辑地替换坏块称为扇区备用5.3.3 磁盘调度算法磁盘的存取时间寻道时间Ts将磁头移动到指定磁道需要的时间假设启动磁头臂的时间为s磁头匀速移动跨越一条磁道的时间为m需要跨越n条磁道则寻道时间启动磁头臂的时间s磁头移动到指定磁道的时间mnTs mnsT_s~mnsTsmns旋转延迟时间Tr通过旋转磁盘将磁头移动到目标扇区所需要的时间。设磁盘转速为r(转/秒或转/分)则平均旋转延迟时间Tr12∗1r12rT_r\frac{1}{2}*\frac{1}{r}\frac{1}{2r}Tr21∗r12r1传输时间Tt从磁盘读出或向磁盘写入数据所需的时间取决于每次读写的字节数b和磁盘转速r假设r为磁盘每秒的转数N为一个磁道上的字节数则传输时间为TtbrNT_t\frac{b}{rN}TtrNb总存取时间TaTaTs12rbrNT_aT_s\frac{1}{2r}\frac{b}{rN}TaTs2r1rNb其中寻道时间占大头于磁盘调度算法密切相关磁盘调度算法(1)先来先服务(FCFS)算法根据进程请求访问磁盘的先后顺序进行调度优点公平当访问的磁道较集中时性能不错缺点访问的磁道分散时性能很差平均寻道时间长(2)最短寻道时间优先(SSTF)算法每次选择离当前磁头最近的磁道使每次的寻道时间最短优点性能较好平均寻道时间短缺点会产生饥饿现象(3)扫描(SCAN)算法磁头只能向一个方向移动只有磁头移动到最外侧磁道时才允许向内移动只有磁头移动到最内侧磁道时才允许向外侧移动不会产生饥饿(4)循环扫描(C-SCAN)算法只有磁头朝某个特定方向移动时才处理磁道访问请求而返回时直接快速移动至起始端而不处理任何请求SCAN算法和C-SCAN算法存在缺陷当磁头到达最大/最小访问磁道后即可返回无需到达磁盘端点对此提出LOOK算法和C-LOOK算法当磁头到达最远端的请求时即可返回如无特别说明SCAN算法和C-SCAN算法默认为LOOK算法和C-LOOK算法减少延迟时间的方法磁头读完一块扇区后不能立刻读取下一块扇区需要等待一定的处理时间而此时磁盘继续选择下一块扇区就错过磁头只有能磁盘再转一圈回来才能再次读取浪费时间所以不能让逻辑上相邻的扇区在物理上也相邻对此可以采用交替编号的方法此外当需要连续访问两个盘面时访问完第一个盘面后需要等待一定的处理时间才能读取第二个盘面但此时盘面仍在选择会导致磁头错过下一个盘面的第一个扇区 对此可以使用错位命名的方法即将上下两个盘面对应位置的编号错开编号这样访问完第一个盘面后盘面旋转过一定的处理时间后正好可以将新盘面的一号扇区转到磁头下提高磁盘I/O速度的方法采用磁盘高速缓存调整磁盘请求顺序提前读。在读磁盘当前块时将下一磁盘块也读入内存缓冲区延迟写。仅在缓冲区首部设置延迟写标志然后释放此缓冲区并将其链如空闲缓冲区链表的首部当其他进程申请到此缓冲区时才真正将缓冲区数据写入磁盘优化物理块的分布虚拟盘。指利用内存空间去仿真磁盘又叫RAM盘。常用于存放临时文件采用磁盘阵列RAD。因为可以采用并行交叉存取能大幅度提高磁盘I/O速度5.3.4 固态硬盘 SSD固态硬盘的特性固态硬盘是一种基于闪存技术的存储器。由一个或多个闪存芯片和闪存翻译层组成。闪存翻译层将来自CPU的逻辑块号翻译成物理块号通过电路实现了随机访问。每个逻辑块号对应块中的一个页每个块有多个页数据读取是以页为单位进行的以块为单位擦除只有当这一页所属的一块被整个擦除后才能往这一页中写入数据读取很快但写入很慢。原因是写入可能引起块的擦除同时若只需要向块中的部分页中写入还需要先将这一块中其他有用的数据复制到其他页中然后才能擦除原来的页并写入磨损均衡固态硬盘的闪存的擦写寿命是有限的因此引入磨损均衡技术(1)动态磨损均衡。写入数据时优先选择擦除次数少的新闪存块(2)静态磨损均衡。就算没有数据写入SSD也会监测并自动进行数据分配让老的闪存块承担以读为主的存储任务。同时让较新的闪存块承担以写为主的任务