计算机系统漫游
文件
- 文本文件:只由 ASCII 字符构成的文件
- 二进制文件:其它文件
编译系统
图:编译系统
- 预处理阶段
- 编译阶段
- 汇编阶段
- 链接阶段
进程的虚拟空间
虚拟内存是一个抽象概念,它为每一个进程提供了一个假象,即每个进程都在独占地使用主存,每个进程看到的内存都是一致的,称为虚拟地址空间。
图:Linux 进程的虚拟地址空间
- 程序代码和数据
对所有进程来说,代码是从同一固定地址开始。代码和数据区是直接按照可执行目标文件的内容初始化的。代码和数据区在进程一开始运行时就被指定了大小。 - 堆
堆可以在运行时动态地扩展和收缩。 - 共享库
用来存放像 C 标准库和数学库这样的共享库的代码和数据。 - 栈
位于用户虚拟地址空间顶部的是用户栈,编译器用栈来实现函数调用。用户栈在程序执行期间可以动态的扩展和收缩。 - 内核虚拟内存
地址空间顶部的区域是为内核保留的,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。必须调用内核来执行这些操作。
操作系统提供的抽象表示
文件是对 I/O 设备的抽象
虚拟内存是对程序存储器的抽象
进程是对一个正在运行的程序的抽象
虚拟机是对整个计算机的抽象
图:计算机系统提供的一些抽象
计算机系统提供不同层次的抽象表示,来隐藏实际实现的复杂性。
- 7 地址空间
- 9 虚拟内存
- 3 编译器如何使用栈
datalab