计算机组成

  1. 中央处理器
  2. 内存
  3. I/O设备

如果把计算机想象成一个餐厅的话,中央处理器就是那个厨师。而内存就是厨师的案板。I/O设备是所有其他非必要组成部分的统称,它对应餐厅里面的所有其他物品。

操作系统的角色

桥梁

从某种角度看,操作系统算是硬件和软件之间的桥梁。操作系统封装了一系列对底层硬件的操作集,并提供了易用的接口给用户。这样,用户便可以安全快捷地使用丰富的应用程序以及开发。

拓展机

也可以把系统看作是一个拓展机,它主要的两个工作是虚拟化(virtualization)和抽象化(Abstraction)。想想看,如果一个用户要读写某个文件,从底层的角度来看它的操作十分枯燥和复杂:

  1. 找到文件所在的磁盘位置
  2. 如果有必要,清理内存以得到足够的空间来读写信息
  3. 移动磁盘的读取装置
  4. 检查是否超出了读取的界限
  5. 检查是否超出了内存
  6. 获取读取文件并传送到内存

操作系统可以运用抽象化,把这些操作细节隐藏掉,并且提供一个简单的接口给用户。譬如:用户只要输入read("/path/to/file")便可获取文件。

所谓虚拟化,就是对不同的进程模拟出一个虚拟的接口来供这些进程使用。对进程来说,它们得到资源都是操作系统虚拟出来的。比如说操作系统会模拟一个内存地址给进程读写,但是实际上物理的内存地址和模拟出来的内存地址位置是不一样的。

资源管理

操作系统同时也是一个庞大的资源管理器。最好的资源管理例子就是多任务处理:一个CPU在不同的程序之间来回变换使得多个程序可以同时作业。用我们餐厅的例子来说,就是这个厨师懂得掌握统筹时间,运用等待某一个菜完成的过程中制作其它的菜。

操作系统的结构

操作系统十分复杂。其中有一些特别重要的功能是必不可少的,这些功能被称之为内核。CPU的指令分为两种,一种是特权指令(privileged instruction),一种是非特权指令(non-privileged instruction)。出于安全考虑,特权指令只能由系统内核使用。为了保证这样的安全性,CPU会处于两种状态之间的任意一种,即内核态(Kernel mode)和用户态(User mode)。在内核态中,CPU可以执行特权指令和非特权指令,而用户态只能操作非特权指令。

kernel

那些和各种硬件沟通的操作, 都由系统内核来完成。操作系统经过层层封装和抽象,并提供了安全便捷的系统调用库(System Libraries Calls)。在这个基础上,更多其他的库(General Libraries)被封装并提供给程序调用。当然了,上层的的库也是可以直接执行CPU指令的,但仅局限于非特权指令。