cpu通过IO命令控制设备,cpu对设备的控制仅仅可以到达设备控制器,无法直接控制设备。设备无法直接和cpu通信,设备控制器通过中断机制向cpu反馈信息。即这个一个模型:
CPU----IO指令----->设备控制器<---交换数据--->设备
CPU<---中断--------设备控制器<---交换数据--->设备
这个模型的优点是简单且容易理解。尽管,设备种类繁多,设备到主机的连接所经过多个总线控制器(如USB接口的移动硬盘)的数目不同,设备的封装方式多样(如磁盘),IO传输数据是以CPU为核心的中断方式还是以存储器为核心的DMA方式。用这个模型足可以解释系统原理(当然如果你是写driver的话,还得了解更底层的技术细节)。在上面这个模型中可以看到,中断机制和总线结构是多道程序设计的基础。因为多道程序设计的关键是阻塞机制,可以从两点理解阻塞。
从底层计算机组成角度看,多道程序设计的目的是使cpu和设备可以并行工作,避免cpu执行IO操作时的空转和反复查询设备状态时的忙等待,从而提高CPU利用率。在此模型下,cpu和设备控制器之间交换数据,设备控制权和设备之间交换数据。设备控制器起到了隔立缓冲的作用。cpu通过IO指令操作设备控制器中的数据,状态,命令寄存器来间接操作设备。设备控制器和设备完成数据交换之后,设备控制器向CPU发出中断(注意中断源只能是设备控制器,而不是设备本身),cpu响应中断请求,暂停当下的处理,与设备控制器完成数据交换。有这样两种情景:
从os角度看,进程A执行过程中,进行IO操作,IO操作引起进程A阻塞,等待一个外部事件的发生(外部事件发生后,该进程A才可以由阻塞态转为就绪态),同时,上下文切换,另一个进程B获得时间片执行。在此期间,阻塞态的进程A执行低层的IO处理(设备控制器和设备交换数据),进程B执行cpu操作。当进程A完成IO处理后,相应的外部事件(设备控制器发出中断请求信号)发生,当前运行的进程B被中断,进行外部事件处理,cpu和设备控制器之间传输数据,完成后,系统修改阻塞进程A的状态为就绪态。然后,依据剥夺或非剥夺调度算法,选择被中断的进程B,或刚解除阻塞的进程A,或其它就绪进程C执行。
注意上面的描述是以cpu为核心的总线结构,以存储器为为核心的总线结构的道理是一样的。
那么,打印机的例子怎么分析呢? 比如打印的数据位于内存中(以存储器为核心来考虑这个问题),这个过程其实是IO 写的情形。首先,打印进程在内存缓冲去区存储好待打印的部分数据,然后用IO指令操作打印机的控制器,打印进程阻塞,其它进程调度执行,打印机的控制器将内存中待打印的数据传输给打印机的缓存,当打印机控制器完成数据传输之后,向cpu发出中断,cpu中断当前进程的处理,将打印进程修改为就绪态,打印进程获得时间片之后,如果待打印数据全部已经传输完毕,则完成了打印任务,如果还有数据,在继续执行这一个过程直至数据全部传输完毕。打印机读取自身缓存中的数据打印之,这个打印的过程没有cpu的直接参与。
由此看出,IO指令和中断是计算机的神经系统,总线是循环系统。此外,我推测,早期的计算机(单道程序设计)没有阻塞的概念,自然没有中断和设备控制权这样的概念。 理解设备控制器有时候不能从实物角度出发,如移动硬盘,设备控制权和驱动器,磁盘体是封装在一起的,而且,中途还经过 usb总线控制权,PCI,ISA之类的总线控制权,所以这个模型是用来分析问题可以屏蔽底层技术细节,专注于系统原理。像打印机本身就是一个专用的计算机系统,内存和它交换数据可能经过DMA,其他总线控制权,以及打印机控制器。 为什么这种抽象的模型是有效的呢? 因为计算机是系统,你可以站在不同层次还分析问题,你所研究的结构是虚拟化的,底层是透明的。
通过上面分析,可以推理出四个待补充的东西:读者自个完成。
1.多级时序系统,这个里面有一个总线通信控制和计算机时序控制。控制器中指令周期的机器控制方式。
-
2.中断的分类。理解中断需要对中断进行分类,很多人不明白中断是无法对中断分类,os的trap和软中断,同步时间处理和缺页中断,访存时段页管理及其保护引起的中断,IO中断和外部事件处理。时钟中断和时间片轮转调度。
3.IO Read&Write mem Read&Write 四个时序图 。这是总线传输控制部分内容。
4.IO控制方式:程序查询(忙等待),中断(基于字节,以CPU为核心),DMA(基于块,以存储器为核心),通道(IOP,IO处理器,外围处理器,有的书认为IOP就是通道,有的书不这样认为,我们不做区分)。IO传输和控制是计算机的外围处理(peripheral processing)。外围处理的发展趋势有这样的特点:CPU和IO的耦合越来越松散,CPU和IO的越来越相对独立,CPU处理和IO处理越来越并行,从以CPU为核心的总线结构向着以存储器为核心的架构发展。其实,CPU和IO之间的隔离的思想早就在批处理系统流行的年代就有了,而且,相当的成熟,如图所思(选自Tanenbaum的《现代操作系统》机械工业出版社第二版第5页)。SPOOLing技术和通道(IOP)技术与这个思想几乎完全重叠,只是材质和载体变了而已。请分析SPOOLing和通道(IOP)技术相关的知识。
-
6.IO软件层次的研究:
a.硬件(中断仲裁逻辑,中断允许寄存器,IO指令,设备控制器的状态,控制,数据寄存器,设备,数据总线)。如:磁盘,驱动器,控制器,DMA,数据总线,MDR,MAR等等。
b.中断机制(中断请求,中断响应,中断周期,中断允许寄存器,中断屏蔽,中断嵌套,保护断点,保护现场,中断仲裁,中断向量)。如:磁盘IO等等。
c.驱动(OS IO处理内核和中断机制之间的中间件,接受上层的请求调用中断处理程序,设备相关的软件,屏蔽底层硬件具体技术细节)。如:磁盘驱动程序等等。
d.设备无关(硬件资源虚拟化,统一的命名处理,向下一致的驱动接口,向上一致的API接口)。如:逻辑卷,盘符,按路径存取,文件等等。
8.从单道程序到多道程序设计的内存管理的演化历史 。
静态分区
(单)---->
静态分区
(多,针对物理地址空间编程,重定位问题)-------->
动态分区段式管理
(多,段基址寄存器和界限寄寄存器,PSW,驻于内存的进程的所占的存储空间之和必须小于等于物理存储)--------->
swapping
(多,整体的换入换出,驻于内存的单个进程所占的空间小于等于物理存储空间)------->
虚拟存储页式管理
(多,部分(页)的换进换出,单个进程所占的空间可以大于物理存储空间)。
此处几个说法不是很精确,进程所占的空间是指进程的地址空间即程序员的编程所使用的地址空间,而物理存储空间也并非实际的物理存储大小,而是指可物理上寻址的地址空间(如8,16,20,32,64位地址总线对应的不同的可寻址的地址空间),还有一个问题,可能有读者注意到系统软件占用的存储空间,实质上,系统软件占用地址空间位于进程的内核地址空间部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)