CSAPP随笔: 操作系统管理硬件
操作系统看作是应用程序和硬件之间的一层软件,两个基本功能:1. 防止失控的应用程序滥用硬件。2. 向应用程序提供 简单一致 的机制来控制不同级别的硬件设备。
操作系统的抽象概念:
文件 是对 I/O设备 的抽象表示,向应用程序提供了一个统一的视图,虚拟内存 是对 主存及磁盘I/O设备 的抽象, 进程 是对 处理器主存及I/O设备 的抽象表示。
进程 可以让 处理器 看上去 只处理 系统内存中的代码及数据。
并发运行:通过处理器在 进程间的切换 来实现 两个进程的 指令交错执行,每个进行看上去独占硬件资源。
什么是上下文?操作系统保持跟踪进程运行所需的所有状态信息,(PC,寄存器文件的当前值及主存的内容)。
上下文切换的过程:1. 保存当前进程的上下文 2. 恢复新进程的上下文 3. 控制权传递到新进程。 4. 开始新的进程。
线程:进程 由 多个执行单元 线程 组成, 每个 线程 运行在进程的 上下文中, 共享相同的 代码及 全局数据。相比 进程,更容易共享数据,更高效。
虚拟内存: 让进程看到的内存是一致的,每个进程独占的使用主存。 地址空间最上面 保留给操作系统的代码及数据, 底部区域存放的是用户进程定义的代码及数据。
分区介绍:
0. 代码从同一固定地址开始。
1. 代码及数据区:存放C的全局变量,按照目标文件内容初始化。其大小 在进程 开始运行时被指定。
2. 堆:大小在运行时可以调整。
3. 共享库:中间部分存放 如 C标准库和数学库 的代码和数据。
4. 栈:位于 用户 虚拟地址的 顶部,用于编译器实现函数调用,在执行期可以动态的缩放,函数调用时,栈会增长,函数返回时,栈会收缩。
5. 内存虚拟内存: 虚拟地址顶部 为内核保留,禁止读写或直接调用内核代码定义的函数,必须由内核执行该区域的代码。
虚拟内存运作的软硬件交互: 硬件翻译处理器生成的地址,将 进程虚拟内存的内容 存放到 磁盘中,用主存 作为 磁盘的 高速缓存。
指令集架构: 对实际处理器硬件的抽象。
进程: 对正在运行程序的抽象。
虚拟机:对整个计算机的抽象, 包括 操作系统,处理器及程序。