【更新中】Operating System Concepts读书笔记——计算机系统结构【2】

文章目录

  • 一、计算机组织形式
    • 1.1 总线与驱动
    • 1.2 中断
      • 1.2.1 概览
      • 1.2.2 实现
    • 1.3 存储结构
    • 1.4 I/O结构

更新了恐龙书到第10版,本篇笔记主要对应书中的1.2部分。

一、计算机组织形式

1.1 总线与驱动

  计算机通过**系统总线(System Bus)将各类设备连接,通过驱动程序(Driver)**理解硬件设备,实现操作系统对硬件的操作。
【更新中】Operating System Concepts读书笔记——计算机系统结构【2】_第1张图片

1.2 中断

  考虑一个程序进行I/O操作的情况。为了启动IO,设备驱动器首先加载需要参与的寄存器到设备控制器中,然后检查寄存器中的数据,决定下一步要做的事情(如接受一个键盘字符输入)。在完成了将数据加载后,如加载设备中的信息到内存,设备控制器通知设备驱动已经完成。驱动然后交还控制给操作系统,交还一般会返回一些信息,比如数据,比如指向内存数据的指针。
Q:考虑上述过程设备控制器是如何通知驱动程序已经完成的。
A:通过中断

1.2.1 概览

  中断的过程如其名,即在CPU上下文中插入一个中断服务,最后再恢复回去。它大概包含以下过程及概念:

  • 中断由系统总线通知CPU,中断非常频繁,所以CPU要立即处理中断。
  • 每个计算机都有自己的中断机制,中断后需要迅速转移控制(CPU时间、CPU操作)给中断控制程序(例程)。
  • 通常使用一个包含指针的表存储中断控制程序地址信息,这个表也成为中断向量表(因为存储了中断程序地址)。这个表本身是一个数组,数组下标是中断编号,所以可以快速索引。
  • 中断向量表不是由一个进程所有,而是存储在低地址空间中(为什么放低地址是考虑到硬件读取字长有限的问题,地址分割可参见这篇博文《Linux内核是如何分割你的RAM的(划分物理地址)》)
  • 中断过程必须保留中断前的所有状态信息,比如中断程序要修改寄存器的值,需要提前保存。在中断执行结束后再加载这些状态信息,仿佛未发生过中断。

1.2.2 实现

  CPU有一个硬件的中断感知线Interrupt request line,专门感知中断信号,CPU每运行完一个指令都会通过这个line检查中断。
  CPU检查到中断后,会利用这个中断编号去检索中断向量表,迅速转移到中断处理例程(Interrupt handler routine)中去。
  Interrupt handler routine首先提前保存好它要修改的信息(例如:某些要使用的寄存器上的数据),然后判断中断发生原因并执行处理,然后执行return_from_interrupt函数返回结果,回到之前的状态。


  整个状态可以用CPUInterrupt handler routine,及与它们相关的几个动词联系起来:

  • 设备控制器通过Interrupt request line发送信号到CPU从而*发起*中断。
  • CPU捕获中断,分派中断给Interrupt handler routine
  • Interrupt handler routine服务设备,清除中断。

该过程如下图所示:
【更新中】Operating System Concepts读书笔记——计算机系统结构【2】_第2张图片


  中断机制让CPU拥有了异步处理的能力(CPU在等待设备的时间里可以忙别的东西)。现在操作系统拥有更多的能力:

  1. 在CPU处理关键进程的时候可以延迟中断的处理。
  2. 更加高效的分派中断处理程序。
  3. 建立基于优先级的多级中断,优先处理高级别中断。

  现代操作系统实现这些功能通过CPU和中断控制硬件(Interrupt Control Hardware)。


  大部分的CPU拥有两条Interrupt request line

  • 处理无法掩盖(处理)的中断(non-maskable):无法处理,例如内存错误
  • 可以掩盖(处理)的中断(maskable):CPU可以取消(忽略)的中断,很多的设备控制器就走这条。

  中断向量表的作用是快速索引Interrupt handler routine,但是真实情况下这个表纯使用数组可能会相当巨大,所以在实现的方面才用了线性表的方式(索引+一一遍历)。(不熟悉数据结构的话可以查询线性表或哈希表之类的实现),下图是Intel CPU的中断向量表,0~31为nonmaskable的内容。
【更新中】Operating System Concepts读书笔记——计算机系统结构【2】_第3张图片


  作为总结,中断是操作系统实现异步的核心机制。设备控制器和硬件错误引发了中断。现代操作系统为了优先处理高级别的中断,操作系统建立了一整套处理中断的系统。因为中断在操作系统中出现的相当频繁,所以高效的中断处理程序非常重要。

1.3 存储结构

1.4 I/O结构

你可能感兴趣的:(操作系统)