[操作系统学习记录#01]
一、操作系统的分类
操作系统是计算机硬件与用户程序之间的中间层,用于 管理资源、调度任务、提供接口。
常见的主要分支如下:
通用操作系统
代表:Linux、Windows、macOS
面向个人电脑与服务器,功能全面、兼容性强。实时操作系统(RTOS)
代表:FreeRTOS、VxWorks
强调实时响应,用于工业控制、航天、通信设备等。嵌入式操作系统
代表:RT-Thread、Embedded Linux
面向资源受限的嵌入式设备,如智能家居、车载系统。分布式操作系统
负责协调多个节点资源,实现统一调度与通信。
(如:Google Borg、Apache Mesos)专用操作系统
针对特定任务优化,如网络设备、游戏主机、科研系统。
本文主要以Linux0.11和freeRTOS为例
二、计算机组成
让我们先来回顾一下计算机组成原理
常见计算机组成如下:
- CPU:执行程序指令,处理计算与控制任务
- 内存:临时存储程序和数据,支持快速访问
- 存储设备:长期保存数据和程序
- 输入设备:将外部信息传入计算机系统
- 输出设备:将计算机处理结果呈现给外部
- 主板:连接各硬件组件,提供通信通道
- 总线:在各组件间传输数据、地址和控制信号
- 辅助设备
三、微机原理
让我们来回顾一下微机原理中关于CPU结构的知识,在微机原理这门课中,我们学过8086cpu的内部结构,我们知道,在cpu内部有寄存器这种东西,在cpu运行过程中起着至关重要的作用,但是8086并不是我们的重点,我们还是把目光放在32位cpu上,看看它的内部都有什么
x86 CPU 寄存器总览
在 Intel x86 架构中,CPU 内部寄存器主要可分为以下几类:
- 通用寄存器(General Purpose Registers)
- 段寄存器(Segment Registers)
- 指令指针(Instruction Pointer)
- 标志寄存器(EFLAGS)
- 控制寄存器(Control Registers)
🧩 通用寄存器(General Purpose Registers)
| 32位寄存器 | 16位寄存器 | 高8位 | 低8位 | 主要用途 |
|---|---|---|---|---|
| EAX | AX | AH | AL | 累加器(Arithmetic)——主要用于算术运算和函数返回值 |
| EBX | BX | BH | BL | 基址寄存器(Base)——可存放内存地址或通用数据 |
| ECX | CX | CH | CL | 计数寄存器(Count)——用于循环计数、移位指令计数 |
| EDX | DX | DH | DL | 数据寄存器(Data)——乘除法时存放高位数据或中间结果 |
| ESI | SI | — | — | 源地址寄存器(Source Index)——常用于字符串或数组操作 |
| EDI | DI | — | — | 目标地址寄存器(Destination Index)——配合 ESI 使用 |
| EBP | BP | — | — | 基址指针(Base Pointer)——函数调用时定位局部变量 |
| ESP | SP | — | — | 栈指针(Stack Pointer)——始终指向当前栈顶 |
🧭 段寄存器(Segment Registers)
| 寄存器 | 英文名 | 作用 |
|---|---|---|
| CS | Code Segment | 指向当前代码段,存储程序指令 |
| DS | Data Segment | 指向数据段,访问全局变量 |
| SS | Stack Segment | 指向栈段,配合 ESP/EBP 使用 |
| ES | Extra Segment | 额外数据段,用于字符串或内存块操作 |
| FS | — | 通常用于线程本地存储(Thread Local Storage) |
| GS | — | 常用于系统结构访问(如 Linux TCB) |
🕹 指令指针(Instruction Pointer)
| 名称 | 含义 |
|---|---|
| EIP | 存放下一条即将执行的指令地址(自动递增) |
当程序执行跳转(CALL, JMP, RET)时,EIP 的值会被修改。
⚙️ 标志寄存器(EFLAGS)
标志寄存器用于记录运算状态或控制处理器行为。
| 标志位 | 名称 | 含义 |
|---|---|---|
| CF | Carry Flag | 进位标志,用于无符号运算 |
| ZF | Zero Flag | 结果为 0 时置位 |
| SF | Sign Flag | 结果为负时置位 |
| OF | Overflow Flag | 溢出标志,用于有符号数 |
| PF | Parity Flag | 奇偶校验标志 |
| AF | Auxiliary Carry | 辅助进位(用于BCD运算) |
| IF | Interrupt Enable | 是否允许中断 |
| DF | Direction Flag | 字符串操作方向控制 |
🧩 控制寄存器(Control Registers)
主要在操作系统级别使用,用于内存管理与保护模式控制。
| 寄存器 | 作用 |
|---|---|
| CR0 | 启动/关闭保护模式、分页等功能 |
| CR2 | 存储发生页错误(Page Fault)的地址 |
| CR3 | 存放页目录基地址(分页机制使用) |
| CR4 | 控制高级功能(如虚拟8086、SSE等) |
📘 总结
- 我们现在先不用理解全部的寄存器都是做什么的,只需要了解一部分就可以了
- 通用寄存器通常是做运算使用
- 段寄存器在实模式下存储的是基地址,在保护模式下储存的是段选择子,需要搭配内存中的一个表(IDT表)来食用
- 物理地址 = 基地址cs * 16 + 偏移地址eip
- 指令指针寄存器和段寄存器中的cs寄存器配合食用,他们共同指向了cpu将要执行的下一条指令
- 这里着重强调一下通用寄存器中的ESP和EBP,二者都是为了汇编指令push和pop服务,这一点在后面函数调用约定的地方会详细说
四、汇编语言
我觉得应该单开一章,细说一下汇编,c和程序的四段,还有调用约定和堆栈图,不在这里说了