进程: 进行中的程序
进行中的程序与磁盘中的静态程序不一样. 进程是描述一个运行中的程序. 进程 = 资源(映射表) + 多个执行指令序列(线程) 进程只能在内核. 要分配资源, 访问文件.
- 有开始, 结束
- 走走停停(切换)
- 需要记录
为了充分使用CPU
一次IO操作对应数百万(很多很多)次CPU计算操作. 为了充分合理使用CPU, 需要多个进程交替执行. – [并发]
多进程是操作系统的核心
操作系统的核心就是记录, 管理, 合理推进多个进程. 使用计算机就是启用多个进程.
多进程的组织
PCB + 状态 + 队列
PCB(Proess Control Block)
记录进程信息的数据结构. 便于切回时继续执行.
状态
- 就绪态
- 阻塞态
- 运行态
就绪态 ——–>> 运行态 \ / \ / 阻塞态
队列
- 就绪队列 PCB1 – PCB3 – PCB5
- 磁盘等待队列 PCB2 – PCB4 – PCB6
多进程的交替
队列 + 调度 + 切换
void schedule()
{
pNew = getNext(ReadyQueue); // 调度
switch_to(pCur, pNew); // pCur, pNew PCB
}
把当前进程保存起来, 切入另一个的进程.
void swtich_to(pCur, pNew)
{
pCur.ax = CPU.ax;
pCur.bx = CPU.bx;
// ...
pCur.cs = CPU.cs;
pCur.retpc = CPU.pc;
CPU.ax = pNew.ax;
CPU.bx = pNew.bx;
// ...
CPU.cs = pNew.cs;
CPU.pc = pNew.retpc;
}
多进程的内存管理
通过映射表实现内存地址空间的分离.
进程1 内存地址[100] —> 进程1的映射表 —-> 物理内存 780 进程2 内存地址[100] —> 进程2的映射表 —-> 物理内存 1260
多进程的合作
生产者与消费者 进程同步 不能随意切换进程, 必须同步进程合理切换.