本书主讲兼容x86指令集的32位cpu的个人计算机
- 早期cpu的频率和内存差不多,都很慢,所以都连接在总线(BUS)上。但I/O设备的速度更慢,为了协调I/O设备与总线之间的速度,也为了能够让cpu能够和I/O设备通信,一般每个设备都会有一个I/O控制器,硬件通过控制器和总线通信。
- 后来CPU的频率发展很快,为了协调cpu、内存、和高速的图形设备(GPU),出现了高速的北桥芯片。
- 同时将相对低速的设备都接入到南桥,由南桥汇总后和北桥进行数据交换。
- 传输速率高最大数据传输率为132MB/s,当数据宽度升级到64位,数据传输率可达264MB/s。
- 硬件每18个月翻一倍的定律到2004年已经失效,cpu的频率基本被限制在4GHZ。
- 多CPU的计算机,常见一种形式:SMP 对称多处理器,解每个CPU在OS中所处的地位和发挥的作用是一样的。多处理器是比较奢侈的行为,于是厂商开始将多个处理器共享比较昂贵的缓存部件,只保留多个核心,并以一个处理器的外包出手,这就是多核处理器(Multi-core Processer)
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。
- 每个层间通信的协议一般称为接口
- 虚拟机是在操作系统和硬件之间增加了一层虚拟层。
- 应用程序电筒API,由运行库提供。运行库使用OS提供的系统调用接口
- 系统调用接口在实现中往往以软件中断的方式提供。
- Windows以)0X2E号中断作为system call interface
- 硬件厂商负责提供硬件规格,操作系统和驱动的开发者根据硬件编程接口来编写OS和Drivers
- 几乎所有的现代OS都是多任务OS,OS接管所有的硬件资源,本身隐形在受硬件保护的级别。进程的权限均低于OS。
- 每个进程都有自己独自的地址空间,进程间相互隔离。
- 在Unix中,硬件设备被抽象成了普通的文件。
- 在Windows中,图形硬件被抽象成了GDI,生意和多媒体设备被抽象成了Directx对象,磁盘被抽象成了普通的文件系统。
- 驱动经常是和OS kernel 运行在特权级,驱动一般为硬件厂商开发。OS指定太接口和框架,硬件厂商遵循。
- 一个扇区为512字节
- x86平台上共有65536个硬件端口寄存器,不同的硬件被分配到不同的I/O端口地址。CPU有两条专门的指令”in” “out”来实现硬件端口的读和写。P13
- 程序直接运行在物理内存有以下几个缺点:
- 地址空间不隔离
- 内存使用效率低
- 程序运行的地址不确定
- 增加中间层,通过某些映射,将虚拟地址转换成实际的物理地址。
- 所谓地址控件是一个比较抽象的东西。相当以一个很大的数组,如32为的地址空间的大小为2^32 =4GB。0x00000000~0xFFFFFFFF
- 地址空间分两种: 虚拟地址空间和物理地址空间。物理地址空间只有一个。即物理内存。每个进程都有自己的虚拟空间。
- 分页的基本方法是把地址人为的分为固定大小的页,每页大小有硬件的决定,一般PC机选择4KB作为单页的大小。
- 我们把进程的虚拟地址空间按页分割,把常用的数据和代码页装载到内存中,把不常用的代码和数据保存在磁盘中。当进程需要用到不指向物理内存的页时,硬件会捕捉到这个信息,也就是页错误。然后OS接管进程,将存在硬盘中的数据载入内存,并和物理内存建立映射关系。
- 在页映射模式下,CPU发出的是虚拟地址,即程序看到的是虚拟地址,经过MMU(Memory Managenment Unit)转换后变成物理地址,