操作系统(1) 计算机系统漫游
1.1 信息就是位+上下文
信息的最小单位是位(bit),即二进制数字0或1。位是信息的基本构建块,用于表示最简单的二元状态。在数字系统中,信息通过位的组合进行编码和传输。
1.2 程序被其他程序翻译成不同的格式
hello程序的生命周期从高级C语言程序写起,因为这种形式能够被人对读懂,为了在在系统上运行hello程序,每条C语句都必须被其他程序转化为一系列的低级机器语言程序。

1.预处理阶段
预处理阶段由预处理器完成,主要处理源代码中的预处理指令。宏定义展开、头文件包含、条件编译等操作都在此阶段进行。例如#include指令会被替换为对应文件内容,#define定义的宏会被展开。预处理后的代码通常以.i或.ii为扩展名。
2.编译阶段
编译器将预处理后的代码转换为汇编代码。此阶段进行语法分析、语义分析、优化等一系列操作,生成与特定硬件架构相关的低级中间代码。编译阶段会检查语法错误,如类型不匹配或未声明的变量。生成的汇编代码通常以.s为扩展名。
3.汇编阶段
汇编器将汇编代码转换为机器码,生成目标文件。目标文件包含二进制指令和符号表等元数据,但尚未解决外部引用。不同平台的目标文件格式不同,例如Linux使用ELF格式,Windows使用PE格式。目标文件通常以.o或.obj为扩展名。
4.链接阶段
链接器将一个或多个目标文件合并,解析外部符号引用,生成可执行文件或库。静态链接在编译时完成,动态链接在运行时完成。链接阶段会处理函数和变量的地址分配,解决跨文件的依赖关系。最终生成的可执行文件格式取决于操作系统。
1.3编译系统是如何工作的
1.编译系统的基本流程
编译系统将高级语言代码转换为可执行机器代码,通常分为多个阶段。每个阶段处理特定任务,最终生成目标文件或可执行程序。
词法分析:词法分析器将源代码分解为一系列标记。这些标记包括关键字、标识符、运算符和分隔符等。例如,代码 int x = 5; 会被分解为标记 int、x、=、5 和 ;。
语法分析:语法分析器根据语言的语法规则检查标记序列是否构成合法的程序结构。生成抽象语法树(AST),表示代码的层次结构。例如,x = 5 会被解析为一个赋值表达式节点。
语义分析:语义分析器检查程序是否符合语言规范,如类型匹配、变量声明等。例如,确保赋值语句两边的类型兼容,或函数调用参数数量正确。
中间代码生成:编译器将AST转换为中间表示(IR),如三地址码或LLVM IR。IR是一种与机器无关的低级表示,便于后续优化和翻译。
目标代码生成:代码生成器将优化后的IR转换为目标机器的汇编代码。这一阶段涉及寄存器分配、指令选择和内存管理。
1.4系统的硬件组成
1.核心组件与功能
| 组件 | 功能与作用 |
|---|---|
| CPU | 包含程序计数器(PC,记录下一条指令地址)、寄存器文件(临时存储数据)、算术 / 逻辑单元(ALU,执行运算)和总线接口(与系统总线交互),是系统的 “运算与控制核心”。 |
| 主存储器 | 存储程序指令和数据,通过内存总线与 I/O 桥连接,是 CPU 直接访问的 “临时数据仓库”。 |
| I/O 桥 | 连接系统总线、内存总线和 I/O 总线,负责不同总线间的信号转换与数据转发,是硬件组件的 “通信枢纽”。 |
| I/O 总线及外设 | 包括 USB 控制器(连接鼠标、键盘)、图形适配器(驱动显示器)、磁盘控制器(管理磁盘存储)等,负责与外部设备的交互,实现输入输出功能。 |
2. 总线的作用与分类
- 系统总线:连接 CPU 与 I/O 桥,传输 CPU 与其他组件的控制、地址和数据信号。
- 内存总线:连接 I/O 桥与主存储器,专门用于 CPU 与内存之间的高速数据传输。
- I/O 总线:连接 I/O 桥与各类外设(如 USB、图形适配器、磁盘控制器),支持外设与系统的通信。
3. 图示的典型应用场景
- CPU 通过 I/O 总线与磁盘控制器交互,从磁盘中读取 “hello” 可执行文件到主存储器。
- CPU 从主存储器中取出指令(由 PC 指向),经 ALU 执行运算,通过寄存器文件暂存数据,完成程序的逻辑执行。
- 执行过程中如需与外设交互(如输出结果到显示器),则通过 I/O 桥和 I/O 总线,由图形适配器驱动显示器完成显示。

1.5操作系统管理硬件资源
1. 进程
- 定义:进程是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。
- 组成:每个进程包含独立的内存空间(代码段、数据段、堆、栈)、文件描述符、信号处理机制等资源,以及一个或多个线程。
- 特点:进程拥有独立的资源集合,进程间相互隔离,通信需通过专门的机制(如管道、共享内存、消息队列)。
2. 线程
- 定义:线程是进程内的一个执行单元,是操作系统进行调度(CPU 分配)的基本单位。
- 组成:线程共享所属进程的内存空间和资源(如代码段、数据段、文件描述符),但拥有独立的栈空间和寄存器状态。
- 特点:线程间共享进程资源,通信便捷(直接访问共享内存),但需同步机制(如锁、信号量)避免资源竞争。
3.核心区别(进程 vs 线程)
| 维度 | 进程(Process) | 线程(Thread) |
|---|---|---|
| 资源分配 | 拥有独立资源(内存、文件描述符等),资源开销大 | 共享进程资源,仅拥有独立栈和寄存器,资源开销小 |
| 独立性 | 进程间完全独立,一个进程崩溃不影响其他进程 | 线程属于同一进程,一个线程崩溃可能导致整个进程崩溃 |
| 通信方式 | 需通过进程间通信(IPC)机制(如管道、消息队列) | 直接访问共享内存,通信简单但需同步 |
| 切换开销 | 切换时需保存 / 恢复整个进程的资源状态,开销大 | 切换时仅需保存 / 恢复线程私有数据,开销小(约为进程的 1/10~1/100) |
| 调度单位 | 操作系统资源分配的基本单位 | 操作系统 CPU 调度的基本单位 |
| 创建 / 销毁速度 | 较慢(需分配资源) | 较快(共享资源,仅初始化线程私有数据) |
4虚拟内存
定义:虚拟内存为每个程序提供一个独立的虚拟地址空间(通常为4GB或更大),而实际物理内存(如8GB)通过硬件和操作系统动态映射。
- 关键组件:
- 页面:内存被划分为固定大小的块(如4KB,即4096字节)。页面大小通常为2^n字节,其中n=12(因为2^12 = 4096)。
- 页表:一个数据结构,存储虚拟页号到物理帧号的映射关系。
- 磁盘交换区:当物理内存不足时,操作系统将不常用的页面换出到磁盘(如SSD或HDD)。
5.文件


