以32位系统为例, Linux为每个进程分配0-4G(2^32)虚拟地址空间,低3G为用户空间,高1G为内核空间
cpu为什么使用虚拟地址空间与物理地址空间映射?
1. 方便编译器和操作系统安排程序的地址分布: 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区
2. 方便进程隔离:不同进程使用的虚拟地址彼此隔离,一个进程中的代码无法更改正在由另一进程使用的物理内存
3. 方便OS使用内存: 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。
当物理内存的供应量变小时,内存管理器会将物理内存页(通常为4KB)保存到磁盘文件,数据或代码页会根据需要在物理内存与磁盘之间移动
- 内核区
- PCB进程控块
PCB是操作系统核心中的一种数据结构,主要表示进程状态。作用是使一个多道程序环境下不能独立运行的程序,成为一个独立运行的基本单位或与其他进程并发执行的进程。(操作系统根据PCB对并发执行的进程进行控制和管理)
- PCB结构体记载信息(常用部分)
- 进程ID: 系统中每个进程的唯一ID
- 程序计数器: 之后需要运行的指令地址
- 进程状态: new、就绪(ready)、运行(running)、挂起(waiting)、停止(blocked)等
- 当前工作目录
- 输入输出状态:配置进程使用I/O设备
- CPU排班法: 优先级、排版队列等指针以及其他参数
- 用户ID和组ID
- 会话和进程组
- 信号相关的信息
- umask掩码
- 文件描述符表: 文件描述符表为数组,大小为1024(0-1023)。每个位置代表可以打开一个文件, 除位置0(STDIN_FILENO标准输入),1(STDOUT_FILENO标准输出),2(STDERR_FILENO标准错误),默认状态为打开;有1021个文件描述符供用户打开,且优先使用当编号最小的空闲文件描述符
- 进程可使用的资源上限
- PCB组织方式
- 线性表方式: 不论进程的状态如何,将所有的PCB连续地存放在内存的系统区。这种方式适用于系统中进程数目不多的情况。
- 索引表方式: 该方式是线性表方式的改进,系统按照进程的状态分别建立就绪索引表、阻塞索引表等。
- 链接表方式: 系统按照进程的状态将进程的PCB组成队列,从而形成就绪队列、阻塞队列、运行队列等。