程序员的自我修养

第一章 温故而知新

关键部件: 中央处理器CPU、内存和I/O控制芯片

北桥处理高速设备, 南桥处理低速设备

对称多处理器(SMP)和多核处理器

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

Any problem in computer science can be solved by another layer of indirection

操作系统

多道程序: 某程序无须使用CPU时启动正在等待CPU资源的程序

分时系统: 每个程序运行一段时间以后都主动让出CPU给其他程序,使得一段时间内每个程序都有机会运行一小段时间

多任务系统(Muti-tasking): 更先进的操作系统模式,操作系统接管所有的硬件资源,并且本身运行在一个受硬件保护的级别。所有的应用程序都以进程(Process)的方式运行在比操作系统权限更低的级别,每个进程都有自己独立的地址空间,使得进程之间的地址空间相互隔离。CPU由操作系统统一进行分配,每个进程根据进程优先级的高低都会有机会得到CPU, 如果运行超过一定时间,操作系统会暂停该进程,将CPU资源分配给其他等待运行的进程。这种CPU分配方式即所谓的抢占式(Preemptive),操作系统可以强制剥夺CPU资源并且分配给它认为目前最需要的进程。

设备驱动

硬件驱动(Device Driver)程序:实现操作系统与硬件间的交互,将程序员从硬件细节中解放

硬盘基本存储单位为扇区(Sector),每个硬盘有多个盘片,每个盘片分两面,每面按照同心圆划分为若干磁道,每个磁道划分为若干扇区。每个盘面的同心圆周长不一样,每个不同的磁道扇区数又不同等复杂的硬件细节问题被LBA(Logical Block Address)的方式解决:整个硬盘所有扇区从0开始编号,一直到最后一个扇区,这个扇区编号叫做逻辑扇区号。

文件系统: 保存文件的存储结构,在Linux中读取过程使用read的系统调用实现,文件系统收到read请求后,判断所需读取字节位于哪个逻辑扇区之间,后向硬盘驱动发出读取请求,硬盘驱动程序收到请求后想硬盘发出硬件命令。

内存

直接使用物理地址问题: 地址空间不隔离,内存使用效率低,程序运行的地址不确定。解决: 增加中间层虚拟地址(Virtual Address),通过某种映射方法转为实际物理地址,这样就可以实现虚拟空间地址:每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,这样就有效地做到了进程的隔离。

分段: 把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间