进程: 进行中的程序

进行中的程序与磁盘中的静态程序不一样. 进程是描述一个运行中的程序. 进程 = 资源(映射表) + 多个执行指令序列(线程) 进程只能在内核. 要分配资源, 访问文件.

  • 有开始, 结束
  • 走走停停(切换)
  • 需要记录

为了充分使用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

多进程的合作

生产者与消费者 进程同步 不能随意切换进程, 必须同步进程合理切换.