虚拟内存的三个结构:mm_struct、vma_struct、页目录/页表
进程是动态创建的 --> 复制 fork / 克隆 clone;最初的进程(0号进程) --> 静态做一个
进程的生命周期:① 进程创建 --> ② 进程执行影加载 --> ③资源分配(包括进程的虚拟内存) --> ④进程调度(分配或回收进程的 CPU) --> 进程终止(CPU 通过中断或时钟中断拿回控制权)
进程间:互斥、同步、通信。
1、进程管理的核心是处理器资源额分配,所以进程管理又称为处理器调度(处理器的分配和回收)。
处理器分配给只等待处理器的程序。
单道程序 --> CPU 按顺序、逐条执行程序中的指令
多道程序 --> 并发、资源共享
Process 进程、Thread 线程 --> 多个线程共用一个进程的资源,一个进程中可以有多个线程。
进程 = 程序 + 数据 + 档案
①进程用于执行程序。创建一个进程必须执行程序。②一个进程可以值运行一个程序,也可在运行期间更换程序;一个程序可被多个进程同时运行。③所有程序都是在进程中执行,包括操作系统。
2、进程控制块PCB
为进程建立的档案 --> PCB(Process Control Block)进程控制块
Linux --> task_struct ;ucore --> proc_struct
(1)PCB 是进程存在的唯一标识,含有进程的描述信息和控制信息:
① 进程标示,即进程名
pid —— 进程标识符;uid —— 用户标识符;gid —— 用户所属的组标识符。
② 进程状态
Ready —— 就绪状态:具备运行条件,只等待 CPU
Blocked —— 封锁状态(阻塞/等待/挂起/睡眠):因等待某种资源或事件暂时不能运行
Running —— 运行状态:已获得 CPU,正在执行程序。
③ 资源分配情况 :已获得的内存,已打开的文件等
④ 调度关系 :优先级 priority、进程类型、时间片 time slice
⑤ 进程现场信息 :CPU 现场,包括各种寄存器的值
⑥ 族系关系
⑦ 通信信息 :进程间的同步、互斥关系,锁、信号量等
⑧ 各类统计信息
⑨ 安全信息
(2)进程的 PCB 必须驻留在系统内存区中。组织 PCB 的方法有:
① PCB 结构数组 ②PCB 向量表(指针数组)③ PCB 链表(单就绪队列)④ PCB 链表(多就绪队列) ⑤ 其他结构 eg:红黑树
Ucore 中 PCB --> hash 表 hash_list;Ucore 中所有进程的队列 --> proc_list
Linux 原来用过向量表,现在用红黑树
3、ucore 结构
① state ——状态,ucore 定义了四个状态:
Linux 差不多,就是等待状态分了几种。
② mm —— 虚拟内存,课为空
③ context —— 进程上下文,通用寄存器。
④ kstack —— 进程的系统堆栈,连续的2个物理页,8k
⑤ tf —— 中断帧指针,系统堆栈的栈顶
⑥ CR3 —— 页目录,可为 boot_pgdir
⑦ current —— 指向当前运行进程 PCB