罗泽兵 发表于 2024-4-15 08:35:30

17.第17节课第六章输入输出系统

那么我们看一下一个呢是顺序中断那么一个顺序中断处理那么依次呢进行处理这样一个中断一个是嵌套中断那么说我们的嵌套中断呢就是如果优先级高的这样一个进,高优先级高的这样一个中断呢可以抢占正在运行的优先级低的这样一个处理机那么这个时候呢,当优先级较高的这样一个,中断了到来的时候呢那么这个时候呢就暂就暂停,对低优先级中断的这样一个处理转去处理了高优先级的这样一个,运行过程的使用方式的,执行运用的这样一个使用方使用使用使用情况,那么我们接下来看一下中断处理程序当一个进程请求io操作时该进程呢将被挂起直到io操作了完成io io设备完成io操作后,设备控制器呢便向cpu发出一个中断请求cpu响应后呢便转向中断处理程序中断处理程序执行相应的处理处理完后呢解除相应进程的阻塞状态,我们来看一下,中断处理程序的处理过程呢可以分为几个步骤首先呢是测定,是否有被响应的中断信号每当设备完成一个字符或者字或者数据块,那这样一个读入或者输出的时候呢设备控制器变向处理机发送一个中断请求信号请求处理器呢将设备呢,不入,已读请求处理器呢将设备已读入的数据呢传送到内存的缓冲区中或者请求处理器呢将要输出的数据呢传送给设备控制器,

程序每当执行到当前指令时呢处理器呢都要测试是否有被响应的中断信号若没有就继续进行下一条指令若有了则停止原来进程的执行转去执行,中断处理程序把控制器的处理权呢控制权呢交给中断处理程序那么进行运行进行进行使用那么进行运用的这样一个部分,第二个呢第二步呢是保护中断进程的cpu环境在把控制权交给中断处理程序之前,需要先保护被中断进程的cpu环境以便呢以后能恢复运行需要保存的呢是从中断现场恢复到当前进程运行所需要的信息,通常呢由硬件自动将处理器状态字饱和保存在继程序计数器中的下一条指令的地址呢保存在中断保留区中,然后呢把中断且进程的cpu现场信息比如说包括所有的cpu寄存器,等内容呢都放入中断债中因为在中断处理时候呢可能会用到这些寄存器那么这是我们的,保护被中断进程的cpu环境的这样一个部分接下来呢转入相应的设备处理程序由处理器呢对多个中断源进行测试以确定呢引起本次中断的io设备,并向提供中断信号的设备呢发送确认信号,那么在设备收到确定信号后呢就立即取消它所发出的中断请求信号然后呢将相应的设备中断处理程序的入口地址呢装入到程序计入器中,这样当处理器运行的时候呢便可自动的转向中断处理程序接下来第四步进行中断处理对不同的设备呢有不同的中断处理程序该程序呢首先从设备控制器中读出设备状态,以判断此时中断了是否正常完成还是异常结束如果是正常结束了中断程序了便做结束处理假如说这次是,变作结束处理若是异常中断则根据发生异常的原因呢做相应的处理第五步呢是恢复cpu的现场并退出中断,当c当中断处理完成以后呢需要恢复cpu的现场退出中断那么但此时呢是否会返回到被中断的进程呢取决于两个因素,第一个本中断了是否采用了屏蔽中断方式如果是了就会采返回被中断的进程是,

是否采用的是中断嵌套方式如果没有优先级更高的中断的请求io那么中断完成后呢仍会返回被中断的进程否则呢系统将优先处理,更高的中断请求,那么如果是要返回被中断的进程可以保存在可将保存在中断债中的中断进程的现场信息取出并装入到相应的寄存器中,其中呢包括程序下一次要执行的指令的地址处理器状态字以及呢各通用寄存器和段寄存器的内容这样呢当处理器再执行本程序时呢,便可以了将下从下一个位置这样一个位置开始了最终返回到被中断的程序那么这是我们中断处理流程的这样一个方式,那么io操作完成后呢驱动程序必须检查此次io是否发生了错误,并向上层软件呢报告最终向调用者呢报告本次io的执行情况那么这是我们的中断的这样一个处理的这样一个io的这样一个,这样一个io操作的这样一个部分接下来我们再看一下设备驱动程序设备驱动程序呢,通常又称设备,处理程序呢通常又称为设备驱动程序它是io设备它是io系统与高层与设备控制器之间的通信程序其主要任务呢是接受上层软件发来的抽象io要求,比如说读和写命令再把它转换为具体的要求后呢发送给设备控制器启动设备去执行反过来呢它也将由设备控制器发来的信号呢传送给上层软件,那么由于驱动程序呢与硬件密切相关所以呢应该为每一类设备呢配一种驱动程序比如说打印机和显示器呢就要配,不同的这样一个驱动程序那么接下来我们看一下驱动程序的功能,驱动程序的功能呢为了实现io系统呢与在高层与设备控制器之间的工的通信,io设备呢它的驱动程序呢应具有这样一些功能比如说接收由与设备无关软件发来的命令和参数并将命令中的抽象要求转化为与设备相关的底层,

操作序列,还有一个功能呢是检查用户io请求的合法性了解io设备的工作状态传递与io设备操作有关的参数设置设备的工作方式,以及还有的功能呢是发出io命令如果设备空闲则立即启动io设备完成指定的io操作如果设备忙碌则将请求者的请求呢,挂在设备队列上进行等待还有的功能呢是及时响应设备控制器发来的中断请求并根据其中断类型调用相应的中断处理程序来进行处理,那么这是驱动设备驱动程序的功能那么接下来我们看一下设备驱动程序的特点设备驱动程序呢属于低级的系统历程它与一般的应用程序呢及系统程序之间有着,明显的差异那么系统驱动程驱动程序呢是实现在与设备无关的软件和设备控制器之间通信和转换的程序,也就是说它将抽象的io请求呢转换成具体的io操作后呢完成传送给控制器又把控制器中所记录的设备状态和io操作完成情况,反映给请求io的进程,另外呢驱动程序与设备控制器及io设备的硬件特性的紧密相关对于不同类型的设备应配置不同的驱动程序但可以为多个终端呢配置一个终端驱动程序,驱动程序呢与io设备所采用的io控制方式呢密切相关常用的io方式呢是中断驱动与adma方式,由于驱动程序与硬件密切相关因而呢其中的一部分呢必须由汇编人员编写那么目前有许多驱动程序呢基本已经固化在rm中,就是我们的只读存储器,驱动程序呢应该允许可重入一个正在运行的驱动程序呢通常会在一次调用完成前呢再次被调用,接下来我们看一下设备的处理方式设备的处理方式呢在不同的操作系统中所采用的设备处理方式并不相同根据在设备处理时是否设置进程,以及设置什么样的进程呢把设备处理方式呢分为了三类第一类呢是为每一类设备设置一个进程,

第二类设备第二类方式呢是会在整个系统中设置一个io进程第三种方式呢是不设置专门的设备处理进程那么这是设备处理的方式,我们来看一下设备驱动的处理过设备驱动程序的这样一个处理过程设备驱动程主要任务呢是启动指定设备完成上层指定的io操作但在启动之前,应完成必要的准备工作比如说检查设备状态是否有盲等在完成所有的准备工作后呢才向设备控制器呢发送一条启动命令,好吧我们来看一下对io接下来我们看一下对io设备的控制方式,随着,我们操作我们设我们系统的发展呢对设备的控制早期采用的是轮巡的可编程io方式后来发展为使用中断的可编程io方式,那么随着dma控制器的出现呢从以字节为单位,改改为以数据块为单位进行传输大大的改善了设备的io性能io通道的出现呢又使对io操作的组织和数据的传输呢都能独立的进行无需cpu的干预,接下来我们看一下这四这四种对io设备的控制方式首先我们来看一下使用轮循的可编程io方式,处理器呢对io设备的控制呢采用轮巡的可编程方式也就是说处理器向控制器发出一条io指令启动输入设备的输入数据时同时要把状态寄存器的忙闲标志并列置为一,然后不断的测试bz却为轮询当bz等于零一时表示输入g了尚未输入完一个字符,处理器呢应该继续对该标志进行测试直至bz等于零表明输入机已将输入数据而送入控制器的数据寄存器中于是处理器呢将数控数据控寄存器的数据取出,送入内存指定单元这样呢便完成了一个字符的io接着再去启动下一个,读数据的这样一个部分并值b列等于一这是我们轮循的这样一个方式,在城市io方式当中呢cpu的大部分时间呢都处于等待io设备完成输入的循环测试当中造成了对cpu的很大浪费,

在这种方式中呢cpu之所以要不断的测试io设备的状态是因为在cpu中呢无中断机构,使io设备呢无法在cpu报告它已完成了一个字符的输入操作那么第二种方式呢是使用中断的可编程io方式,那么当前呢对io设备的控制广泛的采用中断可编程io方式也就是说当进程要启动某个io设备工作的时候呢,便由cpu向相应的设备控制器发出一条io命令然后立即返回执行原来的任务设备控制器呢于是按照该命令的要求去控制,去控制指定io设备这个时候呢cpu与io设备呢并行操作,比如说在输入时当设备控制器收到了cpu发来的读命令后便去控制相应的设备,读入数据一旦数据了进入数据寄存器控制器呢便通过控制线呢向cpu发出一个中断信号由cpu检查输入过程呢是否出错如果没有出错变相控制器呢,发出取走输入的信号再由通过控制器使数据线将输入写入数据内存的指定单元那么这是我们的使用终端的可编程方式,那么接下来我们再看一下直接存储器直接存储器访问方式直接存储器访问方式呢称又称之为dma方式,那么虽然中断io了,比程序io呢更加有效但它仍然以是以字为单位进行io的每当完成一个字的io时控制器呢便要向cpu请求一次中断,老板又说采用中断驱动io完成的c完成方式时的cpu是以次为单位进行的如果将这种方式用于快设备的io呢,显然是极其低效的好吧比如说为了从磁盘读出一kb的数据块需要中断一k次,为了进一步减少cpu对io的干预从而引进了直接存储器访问方式那么这种方式的特点呢,是该数据传输了基本单位是数据块也就是说在cpu和io设备之间每次至少传送一个数据块,

第二个特点呢是指传送的数据呢是从设备直接进入内存那么或者相反第三个特点呢是仅在传送一个或多个数据块时候开始和结束的时候呢,才需要设pc cpu进行干预整块数据的传输呢是在控制器的控制下完成进行的因此呢dma方式呢,比较较比较中断驱动方式呢又进一步的提高了cpu与io设备之间的并行操作程度,那么这是我们的dmv操作的方式,那么我们来看一下dma它的这样一个工作原理,当cpu呢要从磁盘呢读入一种数据时要向磁盘控制器发出一条读命令该命令呢被送往命令寄存器cr中同时呢,需要将本次读入数据呢在内存的起始地址呢送入内存寄存器中mar中这样读入的字字,字字数呢输入数据计算计数器dc中还需将磁盘的原地址呢,直接送至dma控制器的io控制逻辑上然后呢启动dma控制器进行数据传输以后呢cpu便可去执行其他的任务整个数据传输过程呢由dma控制器控制,当dma控制器呢已从磁盘中读读入一个字的数据并送入数据控制器dl后,再挪用一个存储器周期将该字节呢传送至mar所指的这样一个内存单元中然后对mar,这种加一将dc内容减一若减一后dc内容内容不为零表示传送未完成便继续进行下一个字的这样一个传输否则呢由dma控制器发出中断请求那么这是我们dma的这样一个,工作流程那么最后呢我们看一下通道控制方式,那么虽然dmv方式呢比起中断方式来呢已经显著减少了cpu的干预那么既以由自为单位的干预了减少到以数据块为单位的干预,当cpu呢每发出一条指令时也只能去读写一个连续的数据块当我们需要一次去多读取多个数据块且将它们分别传送到不同的类型区域中呢或者相反时,

则需由cpu呢分别发出多条io指令以及呢进行多次中断处理才能完成那么这个时候呢我,那么通道方式呢是dma方式的发展它可进一步的减少cpu的干预那么既把一一个数据块的读写的,为减为对一组数据块的读写的有关控制了,和管理的单位的这样一个干预同时呢又可实现cpu通道与io设备三者的并行操作从而更有效的提高整个系统的资源利用率,通道呢是通过执行通道程序并与设备控制器共同实现对io设备的控制的通道程序呢是有一系列的通道指令通称为通道命令所构成的,通道指令呢与一般的机器指令不同在它的每条指令中呢都包含了有操作码内存地址技术通道程序位结束位,记录结束标志了就这样一些部分那么这是我们的通道指令的这样一些部分的这样一个内容,接下来我们看一下与设备无关的io软件为了方便用户和提高,操作系统可适应性和扩展性在现在的操作系统的io设备io系统中呢都增加了与设备无关的io软件以实现设备独立性也称之为设备无关性,它的含义呢是应用程序中所使用的设备不局限于某个具体的物理设备那么大家呢要记住这个概念,设备无关性呢它的含义呢是应用程序中所使用的设备不局限于使用某个具体的物理设备这是我们设备无关性它的这样一个意义,那么与设备无关系软件的基本概念呢以物理设备名使用设备在早期的操作系统中呢应用程序在使用操io设备时都使用设备的物理名称,这使得了应用程序与系统中的这样一个物理设备呢直接相关,那么为了实现与设备的无关性而引入了设备逻辑设备和物理设备两个概念逻辑设备呢是设备的抽象名,在应用程序中用逻辑设备名呢,

使用设备呢虽然方便了用户但是系统呢却只设为物理名称因此呢在实际执行时还需必须使用物理名称因此呢在系统中呢,需要具备将逻辑设备名转换成某某物理设备名的这样一个功能,接下来我们看一下与设备无关的软件与设与设备无关的i软件呢是io系统的最高层软件在它的下面呢是设备驱动软件,期间的界限呢因操作系统和设备的不同而有所差异比如说本来一些邮件由设备独立性软件实现的功能那么可以由设备驱动实现那么这样的差异呢主要是出于对操作系统设备独立性和设备驱动程序运行效率的,多方面因素的考虑这样一个部分那么总的来说呢在与设备无关的软件中呢包括了执行与所有设备共有操作的这样一些软件啊,那么比如说有这样一个设备驱动的统一接口缓冲管理差错管差错控制,对设备独立的分配与回独立设备的分配与回收以及呢对独立于设备的逻辑数据块那么设备驱动程序的统一接口呢为了使所有的设备的驱动程序呢有着统一的接口,一方面呢要求每个设备驱动程序与操作系统之间有着相同的接口或者相近的接口这样会使添加一个新设备驱动程序呢变得容易同时呢在很大程度上呢方便开发人员呢,对设备驱动程序的编制另一方面呢要将抽象的设备名应用映射到适当的驱动程序上,或者说将抽象的设备名呢转为具体的物理名称并进一步的找到相应物理设备的驱驱动程序入口此外呢还应对设备进行保护禁止用户直接访问设备,以防止无权用户的这样一个使用,缓冲管理呢无论是字符设备还是快设备它们的运行速度呢都远低于cpu的速度为了缓和cpu和io设备之间的矛盾,提高cpu的利用率那么在现代操作系统中呢都分别为字符设备和快设备配置了相应的缓冲区缓冲区有多种形式如单缓冲区双缓冲区,循环缓冲区公用缓冲池那么这些呢我们在之后呢我们会为大家讲这样一个部分以满足了不同需要的不同情况的需要,操作控制呢由于设备中有了许多的机械和电器设备那么它们比主机呢更容易出现故障那么这样呢就使io操作绝大多数错误的都与设备有关,

那么错误呢可以分为两类一种呢是暂时性错误一种呢是持久性错误暂时性错误呢是因发生暂时性事件引起的,可以通过尝试从事操作来纠正持久性错误呢是由持久性故障引起的持久性故障呢那么容易发现,有的错误呢只要重新执行相应的程序呢就会出现在同样的错误要排除持久性错误呢通常需要查询发现错误的原因,那么?那么使用这样一些运用的这样一些使用部分那么接下来呢对设备对独立设备的分配与回收在系统中呢有两类设备独占设备和共享设备,对于独占设备呢为了避免中心城对独占设备的争夺必须由系统来统一分配不允许新城来独自使用每当进城需要使用某设备时呢必须先提出申请,操作系统在接到对设备的请求后呢先对进程所请求的独占设备呢进行检查看是否呢是否空闲如果空闲了才把该设备呢分配给请求进程否则呢进程将被阻塞,放入该设备的请求队列中等待等待其他进程呢释放该设备的时候呢再将,队列中的第一个进程唤醒该进程呢得到设备后呢继续运行那么第五个呢是独立于设备的逻辑数据块那么不同类型的设备其数据交换,单位也是不同的读取和传输速率也是不相同的如设字符型设备呢以单个字符为单位快设备呢是以一个数据块为单位,据同一类型的设备呢其实数据交换的单位也是有差异的比如说不同磁盘由于扇区大小的不同可能造成数据块大小的不一致,设备独立性软件呢能够隐藏这些差异而被逻辑设备引使用并向高层软件呢提供大小统一的逻辑数据块,那么这是我们的,与设备无关的软件这样一个部分,系统呢为了实现对独占设备的分配必须在系统中配置相应的数据结构设备分配中的数据结构呢在用于设备分配的数据结构中,

记录了对设备控制器所进行控制所需要的信息,在进行设备分配时呢需要这样一些数据结构比如说设备控制表dct系统呢为每一个设备控,资都配置了一个设备控制表用来记录设备的情况那么设备控制表中呢除了有,用于只是设备类型的字段type和设备控制,设备标志字段deceived之外呢那么还有其他的字段比如说设备队列,设备队列对手指针忙闲标志与设备连接的控制器表指针重复执行次数那么这样一些部分,那么控制器通道控制表和系统设备表,那么控制器控制表呢co ct系统为每一个控制器呢都设置了用于记录控制器情况的控制器控制表,通通道控制表了chc t每个通道呢都有一张通道控制表设备系统设备表sdt,这是系统范围的数据结构记录了系统中全部设备的情况每个设备的这样一个表目其中包括了有设备类型设备标志符,设备控制表以及和设备驱动程序的入口项那么这样一些部分那么系统呢在设备分配时呢应该考虑一些因素那么在系统在分配时呢应该考虑这些因素,比如说系统的固有属性设备的分配算法设备分配中的安全性那么这样一些部分,设备的固有属性呢可以分为三种对他们采取不同的分配策略比如说独占设备的分配策略共享设备的分配策略,虚拟设备的分配策略那么这些不同的分配策略以及呢对于我们设备分配算法呢通常只采用两种分配算法第一种呢是先来先服务,第二种呢是优先级较高者那么优先,

先来先服务呢该算法是根据租进程呢对某设备提出的请求的先后次序将这些进程呢排序成一个设备请求队列,设备分配程序呢总是把设备首先分配给对手进程优先级高者优先呢在利用该算法形成设备队列时将优先级高的进程呢排在设备,对列前面面而对于优先级相同的io请求呢则按照先来先服务的原则来进行排队,那么接下来设备分配中的安全性从进程运程的安全性的角度上来考虑呢设备分配有两种方式第一种呢是安全分配方式第二种呢是不安全分配方式,安全分配方式呢是每当进程发出io请求后便进入阻塞状态直到其io操作了完成才被唤醒在采用该策略时呢一旦进程已获得了某种设备后变阻塞,便不能为其申请任何资源而在它阻塞时呢又不保持任何资源因此呢屏弃了此所产生的四个必要条件之一的请求和表示条件,所以说设备分配是安全的那么缺点呢是cpu和设备呢是顺序工作的不安全分配方式呢在这种分配方式中,进程在发出io请求后呢仍然继续运行需要时又发出第二个io请求第三个io请求等紧当进程所有的设设备的,当紧张进程所请求的设备呢已被利益进程占用时才进入阻塞状态那么该策略的优点呢是一个进程呢可同时操作多个设备使进程的推进迅速,其缺点呢是分配不安全因可能因此呢因为它可能具备请求和保持条件从而可能造成死锁因此呢在设备分配程序中应对本次的设备分配呢是否会发生死锁进行安全性计算,紧张计算结果呢说明分配是安全的情况下呢才进行设备分配,接下来我们看一下独占设备,那这样一个分配程序基本的分配程序呢,那么当某进程提出io请求后设备的分配程序呢可按照这些步骤呢进行分配,首先呢是分配设备第二个呢是分配设备控制分配控制器第三步呢是分配通道那么这样一个步骤,

好吧我们看一下设备分置期的改进那么在这样一个例子当中呢进程是以物理设备名提出io请求的如果所指定的设备呢已分配给其他进程则分配失败,或者说上面的这些设备分配程序啊不具有与设备无关性未获得设备的独立性呢进程应该使用逻辑设备门请求io,逻辑设备名的物理设备名印象的实现呢逻辑设备名,逻辑设备表lut在逻辑设备表的每个表目中呢包含了三项逻辑设备名物理设备名和设备驱动程序的入口地址,逻辑设备表的设置问题呢在设系统中可采用两种方式设置逻辑设备表第一种方式呢是在整个系统中只设置一张lut第二种方式呢是为每个用户呢设置一张lut,那么接下来我们再看一下用户层的io软件那么一般而言呢大部分的io软件呢都放在操作系统内部但仍有一部分呢在用户层其中呢包含与用户层就联系在一起的互函数,以及呢完全用于内核之外的假脱机系统这样一个部分,那么我们看一下系统调用与库函数一方面呢为了使租进程能够,有序的使用,能够顺利的使用这样一个,io设备并且能保护设备的安全性不允许运行在用户态的应用进程呢去直接调用运行在核心态系统态的操作系统过程,另一方面呢应用进程在运行时又必须取得操作系统的提供的服务否则呢应用程序呢无法运行为了解决这样一个矛盾,操作系统呢在使用过程中呢引入了一个中介过程系统调用,应用程序呢可以通过它间接调用操作系统的io过程对io设备呢进行操作,系统中呢有多种,

系统调用它们的实践方法呢基本是相同的,那么事实上呢由操作系统向用户提供的所有功能用户进程呢都必须通过系统调用来获取又或者说系统调用呢是应用程序,取得操作系统所有服务的唯一途径,在c语言和unix系统中系统调用呢与各系统调用所使用的布函数呢之间呢几乎是一一对应的,那么微软定义了一套过程称为v三二api的应用程序接口应用程序员呢利用他们取得操作系统服务该接口呢与实际的系统调用呢并不一一对应,应用用户程序呢通过调用对应的库函数呢使用系统调用这些库函数与调用程序联系在一起并嵌入在运行时装入内存的二进制程序当中,


页: [1]
查看完整版本: 17.第17节课第六章输入输出系统