免费智能真题库 > 历年试卷 > 嵌入式系统设计师 > 2014年下半年 嵌入式系统设计师 上午试卷 综合知识
  第48题      
  知识点:   I/O控制方式   设备管理
  章/节:   嵌入式操作系统基础知识       

 
以下关于设备管理及虚设备技术的叙述中,不正确的是(48)。
 
 
  A.  设备管理主要有分配设备、回收设备、输入、输出等
 
  B.  虚设备技术主要是为了提高设备的利用率以及使独立设备共享化
 
  C.  虚设备技术是指用一类设备来模拟另一类设备的技术
 
  D.  设备与计算机之间数据交换的控制方式主要有两种:程序控制和I/O中断
 
 
 

 
  第53题    2012年下半年  
   44%
应用程序利用系统调用打开IO设备时,通常使用的设备标识是(53)。
 
   知识点讲解    
   · I/O控制方式    · 设备管理
 
       I/O控制方式
        I/O设备的控制方式主要有三种:程序循环检测、中断驱动和直接内存访问。
               程序循环检测方式
               程序循环检测方式的基本思路是:在程序当中,通过不断地检测输入/输出设备的当前状态,来控制一个输入/输出操作的完成。具体来说,在进行输入/输出操作之前,要循环地去检测该设备是否已经就绪。如果是,就向控制器发出一条命令,启动这一次的输入/输出操作。然后,在这个操作的进行过程中,也要循环地去检测设备的当前状态,看它是否已经完成。总之,在I/O操作的整个过程中,控制I/O设备的所有工作都是由CPU来完成的。这种方式也称为是繁忙等待方式或轮询方式。它的缺点主要是:在进行一个输入/输出操作的时候,要一直占用着CPU,这样就会浪费CPU的时间。
               下图是循环检测方式的一个例子。假设I/O地址采用的是内存映像编址方式,现在需要在打印机上打印一个字符串“ABCDEFGH”。对于操作系统来说,要完成这个任务,其实很简单,只要把这8个字符一个接一个地送到打印机设备的I/O端口地址就可以了。如下图(a)所示,这8个字符被保存在系统内核的一个缓冲区当中,并用指针p来指向它们。status_reg这个内存单元对应于打印机控制器里面的状态寄存器,data_register这个内存单元对应于它的数据寄存器,现在要做的事情,就是把这8个字符一个接一个地放到数据寄存器当中。
               
               程序循环检测方式的例子
               上图(b)是相应的程序。它的基本思路是:逐个地去打印字符。在打印一个字符之前,首先用一个while语句来检测打印机的当前状态,看它是否已经就绪。如果还没有就绪,就在这里循环等待;如果已经就绪,就把当前的字符送入到打印机的数据寄存器当中。在本例中,由于采用了内存映像的编址方式,因此,在程序员眼中,状态寄存器和数据寄存器都被看成是普通的内存单元,对它们的访问也是普通的赋值操作,不需要专门的I/O指令。但是这个赋值操作的功能和普通的赋值操作不同,它相当于是给打印机发出了一个命令,让它去打印一个字符。另外,每次打印完一个字符后,都要重新判断设备是否就绪。因为相对于CPU来说,打印机是一个慢速设备,它在执行打印命令时,不可能像CPU那么快,而是需要一定的时间来完成。因此,当CPU把一个字符交给它之后,必须循环等待一段时间,才能去处理下一个字符。
               中断驱动方式
               中断驱动方式的基本思路是:当一个用户任务需要进行输入/输出操作时,会去调用相应的系统调用函数,由这个函数来发起输入/输出操作,并将当前任务阻塞起来,然后调度其他的任务去使用CPU。当所需的输入/输出操作完成时,相应的设备就会向CPU发出一个中断,系统在中断处理程序当中,如果发现还有数据需要处理,就再次启动输入/输出操作。在中断驱动的控制方式下,数据的每一次读写还是通过CPU来完成,只不过当输入/输出设备在进行数据处理时,CPU不必在那里等待,而是可以去执行其他的任务。
               仍以打印字符为例,如下图所示,在中断驱动方式下,对于用户程序来说,它所做的事情可能是:把需要打印的字符串放到一个缓冲区buffer中,然后调用一个系统调用函数print。在print系统调用中,首先把用户缓冲区中的字符串复制到系统内核的字符数组p当中,然后打开中断。接下来是一个循环检测语句,判断打印机的当前状态是否就绪。当打印机就绪后,就把第一个字符放到数据寄存器里面去打印。接下来,未等该字符打印完,就去调用系统的调度器,选择另一个就绪任务去运行。而当前的这个任务,就会被阻塞起来。
               
               中断驱动示例
               当打印机完成一个字符后,将向CPU发出一个中断。在中断处理程序当中,首先判断一下,如果所有的字符都已打印完,那么就去阻塞队列中,把用户任务唤醒,使它处于就绪状态。如果还有字符需要打印,就直接把下一个字符复制到打印机的数据寄存器当中,启动打印操作,而不需要再去循环地判断打印机是否就绪。接下来是一些后继处理,先向中断控制器发出一个确认信号,然后结束中断处理程序,返回到被中断的那个任务。
               直接内存访问方式
               直接内存访问(Direct Memory Access,DMA)方式的基本思路是:让DMA控制器来代替CPU,完成输入/输出设备与内存之间的数据传送,从而释放CPU时间,去运行其他的任务。
               仍以打印字符为例,如下图所示。在DMA控制方式下,用户程序所做的事情是完全相同的,即把字符串复制一个缓冲区buffer当中,然后调用系统打印函数。在打印函数当中,首先也是把buffer当中的字符串复制到系统内核的缓冲区当中。然后对DMA控制器进行编程,设置它的各个寄存器的内容,包括内存起始地址、需要打印的字符个数、数据传输的方向等。之后,打印函数就完成了任务,因此就调用系统的调度程序,选择另一个就绪任务去运行,而当前的这个任务就会被阻塞起来。接下来,当CPU正在执行这个新任务的同时,DMA控制器会与设备控制器进行交互,把需要打印的字符,逐个地送到打印机控制器当中。在所有的字符都打印完之后,就向CPU发出一个中断,表明这一次的I/O操作已经全部完成了。因此,在中断处理程序里面,已经没有什么实质性的工作。先是向中断控制器发出一个确认信号,然后唤醒刚才被阻塞的任务。
               
               直接内存访问的例子
               采用DMA控制方式的最大优点是减少了中断的次数。原本每打印一个字符,都要产生一次中断,而现在当所有的字符都打印完后,才会产生一个中断,从而减少了中断处理的开销。
 
       设备管理
        现代计算机系统中配置了大量外围设备。一般说,计算机的外围设备分为两大类:一类是存储型设备,如磁带机、磁盘机等。以存储大量信息和快速检索为目标,它在系统中作为主存储器的扩充,所以,又称为辅助存储器;另一类是输入输出型设备,如显示器、卡片机、打印机等。它们把外界信息输入计算机,把运算结果从计算机输出。
        为了方便用户使用各种外围设备,设备管理要达到提供统一界面、方便使用、发挥系统并行性,提高I/O设备使用效率等目标。为此,设备管理通常应具有以下功能:
        (1)外围设备中断处理。
        (2)缓冲区管理。
        (3)外围设备的分配。
        (4)外围设备驱动调度。
               I/O硬件原理
               作为操作系统的设计者,立足点主要是针对如何利用I/O硬件的功能为程序设计提供一个方便用户的实用接口,而并非研究I/O硬件的设计、制造和维护。
                      输入/输出系统
                      通常把I/O设备及其接口线路、控制部件、通道和管理软件称为I/O系统,把计算机的主存和外围设备的介质之间的信息传送操作称为输入输出操作。按照输入输出特性,I/O设备可以划分为输入型外围设备、输出型外围设备和存储型外围设备三类。
                      输入/输出控制方式
                      输入输出控制在计算机处理中具有重要的地位,为了有效地实现物理I/O操作,必须通过硬、软件技术,对CPU和I/O设备的职能进行合理分工,以调解系统性能和硬件成本之间的矛盾。按照I/O控制器功能的强弱以及和CPU之间联系方式的不同,可把I/O设备的控制方式分为四类:询问方式、中断方式、DMA方式、通道方式。
                      询问方式
                      询问方式又称为程序直接控制方式,在这种方式下,输入输出指令或询问指令测试一台设备的忙闲标志位,决定主存储器和外围设备是否交换一个字符或一个字。询问方式的主要缺点在于一旦CPU启动I/O设备,便不断查询I/O的准备情况,终止了原程序的执行。CPU在反复查询过程中,浪费了宝贵的CPU时间;另一方面,I/O准备就绪后,CPU参与数据的传送工作,此时CPU也不能执行原程序,可见CPU和I/O设备串行工作,使主机不能充分发挥效率,外围设备也不能得到合理使用,整个系统的效率很低。
                      中断方式
                      中断机构引入后,外围设备有了反映其状态的能力,仅当操作正常或异常结束时才中断中央处理机。实现了一定程度的并行操作,这叫程序中断方式。
                      DMA方式
                      虽然程序中断方式消除了程序查询方式的忙式测试,提高了CPU资源的利用率,但是在响应中断请求后,必须停止现行程序转入中断处理程序并参与数据传输操作。如果I/O设备能直接与主存交换数据而不占用CPU,那么,CPU资源的利用率还可提高,这就出现了直接存储器存取(Direct Memory Access,DMA)方式。
                      在DMA方式中,主存和I/O设备之间有一条数据通路,在主存和I/O设备之间成块传送数据过程中,不需要CPU干预,实际操作由DMA直接执行完成。
                      目前,在小型、微型机中的快速设备均采用这种方式,DMA方式线路简单,价格低廉,但功能较差,不能满足复杂的I/O要求。因而,在中大型机中使用通道技术。
                      通道方式
                      通道方式是DMA方式的发展,它又进一步减少了CPU对I/O操作的干预,是对多个数据块,而不是仅仅一个数据块,及有关管理和控制的干预。同时,为了获得中央处理器和外围设备之间更高的并行工作能力,也为了让种类繁多,物理特性各异的外围设备能以标准的接口连接到系统中,计算机系统引入了自成独立体系的通道结构。通道的出现是现代计算机系统功能不断完善,性能不断提高的结果,是计算机技术的一个重要进步。
                      通道又称输入输出处理器。它能完成主存储器和外围设备之间的信息传送,与中央处理器并行地执行操作。采用通道技术主要解决了输入输出操作的独立性和各部件工作的并行性。由通道管理和控制输入输出操作,大大减少了外围设备和中央处理器的逻辑联系。从而,把中央处理器从琐碎的输入输出操作中解放出来。
               I/O软件原理
               I/O软件的总体设计目标是:高效率和通用性。高效率是不言而喻的,在改善I/O设备的效率中,最应关注的是磁盘I/O的效率。通用性意味着用统一标准的方法来管理所有设备,为了达到这一目标,通常,把软件组织成一种层次结构,低层软件用来屏蔽硬件的具体细节,高层软件则主要向用户提供一个简洁、规范的界面。
               为了合理、高效地解决以上问题,操作系统通常把I/O软件组织成以下四个层次。
               (1) I/O中断处理程序(底层)。
               (2)设备驱动程序。
               (3)与设备无关的操作系统I/O软件。
               (4)用户层I/O软件。
                      输入/输出中断处理程序
                      中断是应该尽量加以屏蔽的概念,应该放在操作系统的底层进行处理,以便其余部分尽可能少地与之发生联系。
                      当一个进程请求I/O操作时,该进程将被挂起,直到I/O操作结束并发生中断。当中断发生时,中断处理程序执行相应的处理,并解除相应进程的阻塞状态。
                      输入输出中断的类型和功能如下:
                      (1)通知用户程序输入输出操作沿链推进的程度。此类中断有程序进程中断。
                      (2)通知用户程序输入输出操作正常结束。当输入输出控制器或设备发现通道结束、控制结束、设备结束等信号时,就向通道发出一个报告输入输出操作正常结束的中断。
                      (3)通知用户程序发现的输入输出操作异常,包括设备出错、接口出错、I/O程序出错、设备特殊、设备忙等,以及提前中止操作的原因。
                      (4)通知程序外围设备上重要的异步信号。此类中断有注意、设备报到、设备结束等。当输入输出中断被响应后,中断装置交换程序状态字引出输入输出中断处理程序。
                      设备驱动程序
                      设备驱动程序中包括了所有与设备相关的代码。每个设备驱动程序只处理一种设备,或者一类紧密相关的设备。
                      笼统地说,设备驱动程序的功能是从与设备无关的软件中接收抽象的请求并执行。一条典型的请求是读第n块。如果请求到来时驱动程序空闲,则它立即执行该请求。但如果它正在处理另一条请求,则它将该请求挂在一个等待队列中。
                      执行一条I/O请求的第一步,是将它转换为更具体的形式。例如对磁盘驱动程序,它包含:计算出所请求块的物理地址、检查驱动器电机是否在运转、检测磁头臂是否定位在正确的柱面等。简而言之,它必须确定需要哪些控制器命令以及命令的执行次序。
                      一旦决定应向控制器发送什么命令,驱动程序将向控制器的设备寄存器中写入这些命令。某些控制器一次只能处理一条命令,另一些则可以接收一串命令并自动进行处理。
                      与硬件无关的操作系统I/O软件
                      尽管某些I/O软件是设备相关的,但大部分独立于设备。设备无关软件和设备驱动程序之间的精确界限在各个系统都不尽相同。对于一些以设备无关方式完成的功能,在实际中由于考虑到执行效率等因素,也可以考虑由驱动程序完成。
                      下面罗列了一般由设备无关软件完成的功能:
                      (1)对设备驱动程序的统一接口。
                      (2)设备命名。
                      (3)设备保护。
                      (4)提供独立于设备的块大小。
                      (5)缓冲区管理。
                      (6)块设备的存储分配。
                      (7)独占性外围设备的分配和释放。
                      (8)错误报告。
                      设备无关软件的基本功能就是执行适用于所有设备的常用I/O功能,并向用户层软件提供一个一致的接口。
                      用户空间的I/O软件
                      尽管大部分I/O软件属于操作系统,但是有一小部分是与用户程序链接在一起的库例程,甚至是在核心外运行的完整的程序。系统调用,包括I/O系统调用通常先是库例程调用。如下C语言程序语句:
                      
                      中,所调用的库函数write将与程序链接在一起,并包含在运行时的二进制程序代码中。这一类库例程显然也是I/O系统的一部分。
                      此类库例程的主要工作是提供参数给相应的系统调用并调用之。但也有一些库例程,它们确实做非常实际的工作,例如格式化输入输出就是用库例程实现的。C语言中的一个例子是printf函数,它的输入为一个格式字符串,其中可能带有一些变量,它随后调用write,输出格式化后的一个ASCII码串。与此类似的scanf,它采用与printf相同的语法规则来读取输入。标准I/O库包含相当多的涉及I/O的库例程,它们作为用户程序的一部分运行。
               Spooling系统
               外围设备联机操作(Simultaneous Peripheral Operations On Line, Spooling),简称为Spooling系统或假脱机系统。所谓Spooling技术实际上是用一类物理设备模拟另一类物理设备的技术,是使独占使用的设备变成多台虚拟设备的一种技术,也是一种速度匹配技术。
               如下图所示为Spooling系统的组成和结构。为了实现联机同时外围操作功能,必须具有能将信息从输入设备输入到辅助存储器缓冲区域的“预输入程序”;能将信息从辅助存储器输出缓冲区域输出到输出设备的“缓输出程序”以及控制作业和辅助存储器缓冲区域之间交换信息的“井管理程序”。
               
               Spooling系统的组成和结构
               为了存放从输入设备输入的信息以及作业执行的结果,系统在辅助存储器上开辟了输入井和输出井。“井”是用作缓冲的存储区域,采用井的技术能调节供求之间的矛盾,消除人工干预带来的损失。
               预输入程序的主要任务是控制信息从输入设备输入到输入井存放,并填写好输入表以便在作业执行中要求输入信息量,可以随时找到它们的存放位置。
               系统拥有一张作业表用来登记进入系统的所有作业的作业名、状态、预输入表位置等信息。每个用户作业拥有一张预输入表用来登记该作业的各个文件的情况,包括设备类、信息长度及存放位置等。
               输入井中的作业有4种状态:
               (1)输入状态:作业的信息正从输入设备上预输入。
               (2)收容状态:作业预输入结束但未被选中执行。
               (3)执行状态:作业已被选中,它可从输入井读取信息可向输出井写信息。
               (4)完成状态:作业已经撤离,该作业的执行结果等待缓输出。
               作业表指示了哪些作业正在预输入,哪些作业已经预输入完成,哪些作业正在执行等。作业调度程序根据预定的调度算法选择收容状态的作业执行,作业表是作业调度程序进行作业调度的依据,是Spooling系统和作业调度程序共享的数据结构。
               磁盘调度
               磁盘是可供多个进程共享的设备。当多个进程都请求访问磁盘时,为了保证信息的安全,系统每一时刻只允许一个进程启动磁盘进行I/O操作,其余的进程只能等待。因此,操作系统应采用一种适当的调度算法,使各进程对磁盘的平均访问(主要是寻道)时间最小。磁盘调度分为移臂调度和旋转调度两类,首先是进行移臂调度,然后再进行旋转调度。由于访问磁盘最耗时的是寻道时间,因此磁盘调度的目标应使磁盘的平均寻道时间最少。
                      移臂调度
                      移臂调度有若干策略,“电梯调度”算法是简单而实用的一种算法。按照这种策略每次总是选择沿臂的移动方向最近的那个柱面;如果沿这个方向没有访问的请求时,就改变臂的移动方向,使用移动频率极小化。每当要求访问磁盘时,操作系统查看磁盘机是否空闲。如果空闲就立即移臂,然后将当前移动方向和本次停留的位置都登记下来。如果不空,就让请求者等待并把它要求访问的位置登记下来,按照既定的调度算法对全体等待者进行寻查定序,下次按照优化的次序执行。如果有多个盘驱动器的请求同时到达时,系统还必须有优先启动哪一个盘组的I/O请求决策。
                      旋转调度算法
                      当移臂定位后,有多个进程等待访问该柱面时,应如何决定这些进程的访问顺序?这就是旋转调度所要考虑的问题,显然系统应该选择延迟时间最短的进程对磁盘的扇区进行访问。当有若干等待进程请求访问磁盘上的信息时,旋转调度应考虑如下情况:
                      (1)进程请求访问的是同一磁道上的不同编号的扇区。
                      (2)进程请求访问的是不同磁道上的不同编号的扇区。
                      (3)进程请求访问的是不同磁道上具有相同编号的扇区。
                      对于(1)和(2)的情况,旋转调度总是让首先到达读写磁头位置下的扇区先进行传送操作;对于(3)的情况,旋转调度可以任选一个读写磁头位置下的扇区进行传送操作。
   题号导航      2014年下半年 嵌入式系统设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第48题    在手机中做本题