程序员人生 网站导航

操作系统精髓与设计原理(原书第6版)——学习笔记(2)

栏目:综合技术时间:2016-08-29 08:33:34

1.3.1 取指令和履行指令

         指令寄存器(InstructionRegisterIR)放置取到的指令。指令中包括肯定处理器要履行的操作位,处理器解释指令并履行对应的操作。大体上,这些操作可分为4类:

  • 处理器-存储器:数据可以从处理器传送到存储器,或从存储器传送到处理器。

  • 处理器-I/O通过处理器和I/O模块间的数据传送,数据可以输出到外部装备,或从外部装备输入数据

  • 数据处理:处理器可以履行很多与数据相干的算术操作或逻辑操作。

  • 控制:某些指令可以改变履行顺序。例如,处理器从地址为149的存储单元中取出1条指令,该指令指定下1条指令应当从地址为182的存储单元中取,这样处理器要把程序计数器设置为182.因此,在下1个取址阶段中,将从地址为182的存储单元而不是地址为150的存储单元中取指令。

假定有1台机用具备图1.3中列出的所有特点,处理器包括1个称为累加器(AC)的数据寄存器,所有指令和数据长度均为16位,使用16位的单元或字来组织存储器。指令格式中有4位操作码,因此最多有16种不同的操作码(由1位106进制数字表示),操作码定义了处理器要履行的操作。通过指令格式的余下12位,可以直接访问的存储器大小为40964k)个字(用3位106进制数表示)。

1.4描写了程序的部份履行进程,显示了存储器和处理器的寄存器的相干部份。给出的程序片断把地址为940的存储单元中的内容与地址为941的存储单元的内容相加,并将结果保存在后1个单元中。这需要3条指令,可用3个取址阶段和3个履行阶段描写:

  1. PC中包括第1条指令的地址为300,该指令内容(值为106进制数1940)被送入指令寄存器IR中,PC1。注意,此处理进程使用了存储器地址寄存器MAR和存储器缓存寄存器MBR。为简单起见,这些中间寄存器没有显示。

  2. IR中最初的4位(第1个106进制数)表示需要加载AC,剩下的12位(后3个106进制数)表示地址为940.

  3. 从地址为301的存储单元中取下1个指令(5941),PC1

  4. AC中之前的内容和地址为941的存储单元中的内容相加,结果保存在AC

  5. 从地址为302的存储单元取下1条指令(2941),PC1

  6. AC中的内容被存储在指令941的存储单元中。

1.3.2  I/O函数


         I/O模块可以直接与处理器交换数据。正如处理器可以通过指定存储单元的地址来启动对存储器的读和写1样,处理器也能够从I/O模块中读取数据或向I/O模块写入数据。

         在某些情况下,允许I/O模块直接与内存产生数据交换,以减轻在完成I/O任务进程中的处理器负担。此时,处理器允许I/O模块具有从存储器中读或向存储器中写的特权,这样I/O模块与存储器之间的数据传送无需通过处理器完成。I/O模块对存储器发出读或写的命令,而免去了处理器负责数据交换的任务,这个操作称为直接内存存取(Direct Memory AccessDMA.

 

1.4 中断

         所有计算机都提供允许其他模块(I/O、存储器)中断处理器正常处理进程的机制。图表1.1列出最多见的中断种别。

         这里给出个实例,假定1个1GHzCPUPC机,大约每秒履行10亿条指令。1个典型的硬盘的速度是7200/分,这样大约旋转半转的时间是4ms,处理比这要快4百万倍。

         1.5a显示了这类事件状态。用户程序在处理进程中交织着履行1系列WRITE调用。竖实线表示程序代码段,代码段123表示不触及I/O指令序列。WRITE调用要履行1个I/O程序,此I/O程序是1个系统工具程序,由它履行真实的I/O操作。此I/O程序由3部份组成:

  • 图中标记为4的指令序列用于为实际的I/O操作做准备。这包括赋值将要输出到特定缓存区的数据,为装备命令准备参数。

  • 实际的I/O指令。如果不使用中断,当履行此命令时,程序必须等待I/O装备履行要求的函数(或周期性地检查I/O装备的状态或轮询I/O装备)。程序可能通过简单地重复履行1个操作的方式进行等待,以肯定I/O操作是不是完成

  • 图中标5的指令序列,用于完成操作。包括设置1个表示操作成功或失败的标记。

虚线代表处理器履行的路径;也就是说,这条线显示了指令履行的顺序。当遇到第1条WRITE指令以后,用户程序被中断,I/O程序开始履行。在I/O程序履行完成以后,WRITE指令以后的用户程序立即恢复履行。

1.4.1  中断和指令周期

         处理器可以在I/O操作的履行进程中履行其他指令。斟酌图1.5b所示控制流,用户程序到达系统调用WRITE处,但触及的I/O程序仅包括准备代码和真实的I/O命令。在履行完指令后,控制返回到用户程序。在这期间,外部装备从计算机存储器接收数据并打印。这类I/O操作和用户程序中指令的履行是并发的。

         当外部装备准备好从处理器接收更多的数据时,该外部装备的I/O模块给处理器发送1个中断要求信号。这时候处理器做出响应,暂停当前程序,转去处理服务于特定I/O装备的程序,这个程序称作中断处理程序。在对该装备的服务响应完成后,处理器恢复本来的履行。图1.5b中“X”表示产生中断的点。PS:中断可以在主程序中的任何位置产生,而不是在1条特定的指令处。

         从用户程序的角度看,中断打断了正常履行的序列。当中断处理完后,在恢复履行(见图1.6)。用户程序其实不需要为中断添加任何特殊的代码,处理器和操作系统负责挂起用户程序,然后在同1个地方恢复履行。

         为适应中断产生的情况,在指令周期中要增加1个中断阶段,如图1.7所示(与图1.2对比)。

         在中断阶段中,处理器检查是不是有中断产生,即检查是不是出现中断信号。如果没有中断,处理器继续运行,并在取指周期取当前程序的下1条指令;如果有中断,处理器挂起当前程序的履行,并履行1个中断处理程序。这个中断程序通常是操作系统的1部份,它肯定中断的性质,并履行所需要的操作。

         为进1步理解在效力上的提高,图1.8,它是关于图1.5a和图1.5b中控制流的时序图。图1.5b和图1.8假定I/O操作的时间相当短,小于用户程序中写操作之间完成指令的时间。2更典型的情况是,特别是对照较慢的装备如打印机来讲,I/O操作比履行1系列用户指令的时间要长的多,图1.5c显示了这类时间状态。这类情况,用户程序在由第1次调用产生的I/O操作完成之前,就到达了第2次WRITE调用。如果使用户在这1点挂起,当前面的I/O操作完成后,才能继续新的WRITE调用,也才能开始1次新的I/O操作。图1.9给出了在这类情况下使用中断和不使用中断的时序图,可以看到I/O操作在未完成时与用户指令的履行有所堆叠。

1.4.2 中断处理

         中断激活了很多事件,包括处理器硬件中的事件和软件中的事件。图1.10显示经典型的序列,当I/O装备完成1次I/O操作时,产生以下硬件事件:

  1. 装备给处理器发出1个中断信号

  2. 处理器在响应中断前结束当前指令的履行,如图1.7

  3. 处理器对中断进行测定,肯定存在未响应的中断,并给提交中断的装备发送确认信号,确认信号允许该装备取消它的中断信号

  4. 处理器需要为把控制权转移到中断程序中去做准备。首先,需要保存从中断点恢复当前程序所需要的程序,要求的最少信息包括程序状态字(PSW)和保存在程序中的程序计数器中的下1条要履行的指令地址(PC),它们被压入系统控制栈中。

  5. 处理器把响应此中断的中断处理程序入口地址装入程序计数器中。可以针对每类中断有1个中断处理程序,也能够针对每一个装备和每类中断各有1个中断处理程序,这取决于计算机系统结构和操作系统设计。如果有多个中断处理程序,处理器就必须决定调用哪个,这个信息可能已包括在最初的中断信号中,否则处理器必须给发中断的装备发送要求,以获得含有所需信息的响应。

         1旦完成程序计数器的装入,处理器则继续到下1个指令周期,该指令周期也是从取指开始。由于取指是由于程序计数器的内容决定的,因此控制被转移到中断处理程序,该程序的履行引发1下操作:

  1. 与被中断程序相干的程序计数器和PSW被保存到系统栈中,另外,还有1些其他信息被当作正在履行程序的状态的1部份。特别需要保存处理器寄存器的内容,由于中断处理程序可能会用到这些寄存器,因此所有这些值和任何其他的状态信息都需要保存。在典型情况下,中断处理程序1开始就在栈中保存所有寄存器内容。图1.11a给出了1个简单的例子。在这个例子中,用户程序在履行地址为N的存储单元中的指令以后被中断,所有寄存器的内容和下1条指令的地址(N+1,1共M个字,被压入控制栈中。栈指针被更新指向新的栈顶,程序计数器被更新指向中断服务程序的开始。

  2. 中断处理程序现在可以开始处理中断,其中包括检查与I/O操作相干的状态信息或其他引发中断的事件,还可能包括I/O装备发送附加命令或应对。

  3. 当中断处理结束后,被保存的寄存器值从栈中释放并恢复到寄存器中,如图1.11b

  4. 最后的操作时从栈中恢复PSW和程序计数器的值,其结果是下1条要履行的指令来自前面被中断的程序。

保存被中断程序的所有状态信息并在以后恢复这些信息,非常重要,由于中断其实不是程序调用的历程,它可以在任什么时候候产生,可以在用户程序履行进程中的任何1点上产生,它的产生是不可预测的。

1.4.3 多个中断

         处理多个中断有两种方法。第1种方法是当正在处理1个中断时,制止再产生中断。制止中断的意思是处理器将对任何新的中断要求信号不予理会。如果在这期间产生了中断,通常中断保持挂起,当处理器再次允许中断时,再由处理器检查。因此,当用户程序正在履行并且有1个中断产生时,立即制止中断;当中断处理程序完成后,在恢复用户程序之前再允许中断,并且由处理器检查是不是还有中断产生。这类方法所有中断都严格按顺序处理(图1.12a)。

         这类方法的缺点是没有斟酌相对优先级和时间限制的要求。例如,当来自通讯线的输入到达时,可能需要快速接收,以便为更多的输入让出空间。如果在第2批输入到达时第1批还没有处理完,就有可能由于装备的缓冲区装满或溢出2丢失数据。

 

             第2种方法是定义中断优先级,允许高优先级的中断打断低优先级的中断处理程序的运行(图1.12b)。例如,假定1个系统有3个I/O装备:打印机、磁盘和通讯线,优先级顺次为245,图1.13给出了可能的顺序[TANE06]。用户程序在t=0时开始,在t=10时产生1个打印机中断;用户信息被放置到系统栈中并开始履行打印机中断服务例程(Iterrrupt Service RoutineIRS);当这个例程仍在履行时,t=15时产生了1个通讯中断,由于通讯线的优先级高于打印机,必须处理这个中断,打印机ISR被打断,其状态被压入栈中,并开始履行通讯IRS;当这个程序正在履行时,又产生了1个磁盘中断(t=20),由于这个中断的优先级比较低,它被挂起,通讯ISR运行直到结束。

         当通讯ISR完成后(t=25),恢复之前关于履行打印机ISR的处理状态。但是,在履行这个例程中的任何1条指令前,处理器必须完成高优先级的磁盘中断,这样控制权转移给磁盘ISR。只有当这个例程也完成时(t=35),才恢复打印机ISR。当打印机ISR完成时(t=40),控制终究返回到用户程序。

1.4.4 多道程序设计

         假定处理器履行两道程序。1道程序从存储器中读数据并放入外部装备中,另外一道是包括大量计算的利用程序。处理器开始履行输出程序,给外部装备发送1个写命令,接着开始履行其他利用程序。当处理器处理很多程序时,履行顺序取决于它们的相对优先级和它们是不是在等待I/O。当1个程序被中断时,控制权转移给中断处理程序,1旦中断处理程序完成,控制权可能其实不立即返回到用户程序,而可能转移到其他待运行的具有高优先级的程序。终究,当本来被中断的用户程序变成最高的优先级时,它将被重新恢复履行。这类多道程序轮番履行的概念称作多道程序设计。

1.5 存储器的层次结构

          计算机存储器的设计目的可以归纳成3个问题:多大的容量?多快的速度?多贵的价格?“多大的容量”的问题从某种意义上来讲是无止境的,存储器有多大的容量,便可能开发出相应的利用程序使用它。“多快的速度”的问题相对易于回答,为到达最好的性能,存储器的速度必须能够跟得上处理器的速度。当处理器正在履行指令时,我们不希望它会由于等待指令或操作数而暂停。最后1个问题,对1个实际的计算机系统,存储器的价格与计算机其他部件的价格相比应当是公道的。

         在任什么时候候,实现存储器系统会用到各种各样的技术,但各种技术之间常常存在着以下关系:

  • 存取时间越快,每个“位”的价格越高。

  • 容量越大,每个“位”的价格越低。

  • 容量越大,存取速度越慢。

设计者面临的困难时很明显的,由于需求是较大的容量和每个“位”较低的价格,因此设计者通常希望使用能够提供大容量存储的存储器技术。但是为满足性能要求,又需要使用昂贵的、容量相对照较小而具有快速存取时间的存储器。

解决这个困难的方法是,不依赖于单1的存储组件或技术,而是使用存储器的层次结构。1种典型的层次结构如图1.14所示:

当沿着这个层次结构从上往下看,会得到以下情况:

  1. 每个“位”的价格递减

  2. 容量递增

  3. 存取时间递增

  4. 处理器访问存储器的频率递减

因此,容量较大、价格较便宜的慢速存储器是容量较小、价格较贵的快速存储器的后备。这类存储器的层次结构能够成功的关键在于低层访问频率递减。

假定处理器存取两级存储器,第1级存储器的容量为1000个字节,存取时间为0.1μs;第2级存储器包括100000个字节,存取时间为1μs。假设需要存取第1级存储器中的1个字节,则处理器可以直接存取此字节;如果这个字节位于第2级存储器,则此字节首先需要转移到第1级存储器中,然后再由处理器存取。为简单起见,我们疏忽了处理器用于肯定这个字节是在第1级存储器还是在第2级存储器所需时间。如图1.15给出反应这类模型的1般曲线模型。

         此图表示了2级存储器的平均存取时间是命中率H的函数,H定义为对较快存储器(如高速缓存)的访问次数与对所有存储器的访问次数的比值,T1是访问第1级存储器的存取时间,T2是访问第2级存储器的存取时间。可以发现,当第1级存储器的存取次数所占比例较高时,总的平均存取时间更接近于第1存储器的存取时间而不是第2级存储器的存取时间。

         例如,假定有95%的存储器存取(H=0.95)产生在高速缓存中,则访问1个字节的平均存取时间可表示为:

         此结果非常接近于快速存储器的存取时间。因此仅当条件a)到d)使用时,原则上可以实现该策略。通过使用各种技术手段,现有的存储器系统满足条件a)到c),而且条件d)通常也是有效的。

 

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐