目录
- 一、程序执行流程
- 二、进程的执行状态
- 三、进程信息记录
- 3.1 proc结构体
- 3.2 user结构体
- 四、内存分配
- 4.1 代码段
- 代码段如何管理?
- 4.2 数据段
- 4.3 虚拟地址空间
- 4.4 交换地址
- APR构成
- APR数量
- APR切换
内容来源:《Unix内核源码剖析》
一、程序执行流程
- 为程序建立 #进程 并分配内存
- 将程序从磁盘读入内存
- 进程使用独立的虚拟地址控制,这就需要用到[[MMU控制器]]进行转换
二、进程的执行状态
-
#用户模式 对应用户进程
-
#内核模式 对应内核进程
-
CPU通过 #PSW 改变运行模式
-
模式切换时映射到 #虚拟地址 的物理内存区域也随之切换,通过 #MMU 实现
-
关于限制内存访问地址:
- 用户进程无法加载内核进程的内存空间,因此也无法执行内核所能实现的功能
- 限制原因:内核提供的功能对系统影响很大(如涉及硬件操作),必须严加限制
- 用户进程为了访问内核功能必须通过 #系统调用 实现
- 处理器变化:用户模式-》内核模式-》用户模式
三、进程信息记录
- 记录进程状态信息和控制信息等
- 每个进程会分配一组proc和user结构体
3.1 proc结构体
- 来自哪里?(proc.h)
- 数组
proc[]
中的每个元素分别对应一个进程 - 相当于用这个数组串起进程信息,后续遍历查询,选择下一个执行的程序
- 数组
proc[]
长度多少?(param.h)- proc[] 的 长度 决定了 在 系统 中 可以 同时 存在 的 进程 上限。长度 由 常量 NPROC 定义。
- 为何常驻内存?
- #proc结构体 管理者进程的状体、执行优先级的进程相关的经常被内核访问的信息,放在内存中加快访问速度
3.2 user结构体
- 用于管理进程打开的文件或目录等信息
- 当进程被换出到内存空间时,对应的user结构体也被移出内存
四、内存分配
- 进程通过虚拟地址访问被分配的物理内存
4.1 代码段
4.2 数据段
-
用于存放程序使用的变量数据
-
是否会被共享?
- 不共享,各个进程独立
- 不共享,各个进程独立
-
数据 段的物理地址和长度分别由
proc. p_ addr
和proc. p_ size
表示。 -
内核栈区:
- 内核模式处理时的临时工作区
- USIZE在(param.h)中定义
-
数据区域:
- 存放全局变量或 #bss 等静态变量
- 进程动态管理内存的堆(相当于提前为进程分配静态变量,运行时动态管理)
- 什么是扩展堆区?(从虚拟地址的低位向高位方向进行)
-
栈区域;
- 暂时存放函数的参数、局部数据
- 长度根据需要自动扩展(从虚拟地址的最高位向低位方向进行)
4.3 虚拟地址空间
虚拟地址空间 | 16bit虚拟地址 | 64kb容量 |
---|---|---|
物理地址空间 | 18bit物理地址 | 256kb容量 |
进程的虚拟地址空间:
- 代码段在最低地址
- 数据区在8kb为边界对齐
- 栈区在最高地址
- 数据区域和栈区中间为生长区域
虚拟地址空间在不同进程中的体现:
- 代码段可以共用(需要时)(代码段运行时只读的)
- 数据段相互独立
为何使用虚拟地址?
- 程序能自定地址点,不受物理内存限制(开发人员不用考虑底层问题)
- 便于实现对内存的访问
- 限制越界访问(MMU触发异常)
- 提高内存使用效率
Unix V6的虚拟地址与物理内存的对应关系?
- 代码段和数据段本身与连续的物理内存区域相对应
- 进程被分配了代码段及数据段的两个连续的物理内存区域
- 未进行将细小的物理内存区域的集合映射为连续的虚拟地址区域的处理。
4.4 交换地址
- MMU通过APR寄存器将虚拟地址转化为物理地址
APR构成
- PAR
bit | 11~0 |
---|---|
含义 | 基地址 |
- PDR
bit | 14~8 | 6 | 3 | 2~1 |
---|---|---|---|---|
含义 | 页内块的数量 | 更新标志 | == 1时按高位向低位方向分配 | 页的访问控制方法;01只读、11读写、00未分配 |
APR数量
- PDP-1/40拥有两套APR
通过PSW切换当前模式,可以在硬件MMU上切换APR,进而切换虚拟地址空间 - APR共八组,0到7编号,1组APR对应1页
APR切换
- 内核将进程使用的APR设定适当的值以保证各进程拥有独立的虚拟空间
- 用户进程APR的值保存在user结构体中,当进程执行时读取值到用户进程用APR中
虚拟地址说明:
- 高3bit对应页(APR)
如何通过变量u(0140000)访问user结构体?
- 内核对供内核使用的APR做了相应的设定
- 编号为6的PAR设为执行进程的数据段的物理地址
u
指向内核空间第六页的起始位置