深入理解计算机系统-计算机系统漫游
- 有ASCII构成的文件称为文本文件,其他的文件称为二进制文件。
- 利用直接存储器存取(DMA,将在第6章中讨论)技术,数据可以不通过处理器而直接从磁盘到达主存。
- L1和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件技术实现的。
- 程序的运行过程
- 系统的硬件组成
- 总线:贯穿整个系统的一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。
- I/O设备:I/O(输入/输出)设备是系统与外部世界的联系通道。包括键盘,鼠标,显示器,磁盘。每个I/O设备都通过一个控制器或适配器与I/O总线相连。适配器和控制器的区别主要在于它们的封装方式。控制器是I/O设备本身或者系统的主印制电路板(通常称作主板)上的芯片组。而适配器则是一块插在主板插槽上的卡。无论如何,它们的功能都是在I/O总线和I/O设备之间传递信息。
- 主存:主存是由一组动态随机存取存储器(DRAM)芯片组成的。主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
- 处理器:是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新程序计数器,使其指向下一条指令。
- 加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容。
- 存储:从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容。
- 操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。
- 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。
- 存储设备层次结构
- 操作系统管理硬件
- 操作系统看成是应用程序和硬件之间插入的一层软件。所有应用程序对硬件的操作尝试都必须通过操作系统。
- 操作系统有两个基本功能:
- 防止硬件被失控的应用程序滥用;
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
- 操作系统通过进程,虚拟主存,文件来实现其基本功能
- 进程
- 进程是操作系统对一个正在运行的程序的一种抽象。
- 操作系统保持跟踪进程运行所需的所有状态信息。这种状态,也就是上下文,比如PC,寄存器文件的值,以及主存的内容。
- 从一个进程到另一个进程的转换是由操作系统内核(kernel)管理的。内核是操作系统代码常驻主存的部分。
- 虚拟主存
- 虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。
- 每个虚拟主存看到的虚拟地址空间由大量精确定义的区构成。每个区都有特定的功能。从最低的地址开始,逐步向上为:
- 程序代码与数据:对于所有进程来说,代码是从同一固定地址开始,紧接着是和C全局变量相对应的数据位置。
- 堆。代码和数据区后紧跟着的是运行时堆。代码和数据区在进程一开始运行时就被指定了大小,但是当调用像malloc和free这样的c语言库函数时,堆可以在运行时动态的扩展和收缩。
- 共享库。大概在地址空间的中间部分是用来存放像c语言标准库和数学库这样的共享库的代码和数据的区域。
- 栈。位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用,和堆一样,用户栈可以在运行期间进行扩展和收缩。特别低,当我们调用一个函数时,栈就会增长,从一个函数返回时,栈就会收缩。
- 内核虚拟内存。地址空间顶部的区域是为内核保留的。不允许应用程序读写这个区域的内容或者直接调用内核区域直接定义的函数。相反,它们必须调用内核来执行这些操作。
- 文件
- 文件就是字节序列。每个I/O设备包括磁盘,键盘,显示器甚至网络都可以看成是文件。系统中的所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件来实现的。
- 文件向应用程序提供了一个统一的视图。
- Amdahl定律
- 并发与并行