进程

进程的概念

进程包括:

  • 程序代码,也叫文本段
  • 数据段全局变量
  • 程序计数器,处理机寄存器
  • 栈:局部变量,函数参数,返回地址
  • 堆:动态分配的内存

进程是资源分配的基本单位,

不同的进程虽然可能执行同一段程序代码,但它们拥有各自独立的地址空间和资源。

程序是静态的,进程是动态的。

程序是被动的,而进程是主动的。

一个程序可以对应多个进程。

进程的状态

进程的状态包括:

  • 新建态:进程正在创建
  • 就绪态:进程已分配到必要的资源,等待CPU时间片
  • 运行态:进程正在使用CPU
  • 阻塞态:进程等待某个事件发生(如I/O完成)
  • 终止态:进程执行完毕或被强制终止

进程时间片用完后进入就绪态

进程等待I/O等事件进入阻塞态

缺页会进入阻塞态

进程控制块 PCB

内核中用于操作系统管理进程的数据结构

包含:

  • 进程标识符 PID
  • 进程状态
  • 程序计数器
  • CPU寄存器
  • CPU调度信息:进程优先级,调度队列的指针等
  • 内存管理信息
  • I/O状态信息:I/O设备列表,打开文件列表
  • 记账信息:用户CPU时间,系统CPU时间,内存使用情况等

进程调度

长期调度程序:决定哪些进程进入就绪队列,从磁盘的缓冲区中选择进程装入内存,低频

中期调度程序:将进程从内存调出到磁盘,并在合适时机选择一些进程重新装入内存,从中断处继续执行

短期调度程序:决定哪个进程获得CPU时间片,高频

上下文切换

进程的上下文用进程的PCB表示

将CPU从一个进程切换到另一个进程时,保存和恢复进程状态的过程 context switch

内核在进程间进行上下文切换时,首先需要将当前进行的状态保存在对应的PCB中,包括CPU寄存器中的内容,堆,用户栈,内存管理信息,数据,文本,然后需要将下一个进程中的PCB中的内容取出来设置到相应的寄存器中

进程操作

进程创建

fork()系统调用创建子进程

exec()系统调用用新程序替换进程的内存空间

wait()系统调用等待子进程终止

父进程的返回值>0,即子进程的进程标志符,子进程=0

进程终止

exit()系统调用终止进程

进程通信

共享内存

无限缓冲 unbounded buffer

有限缓冲 bounded buffer

消息传递

直接通信

间接通信:通过邮箱

同步 阻塞

异步 非阻塞

线程

线程的概念

线程是进程的一个实体,是CPU调度和分派的基本单位

线程包括:

  • 线程ID
  • 程序计数器
  • 寄存器

与同一进程的其他线程共享:

  • 代码段
  • 数据段
  • 其他操作系统资源
线程独有和共享的资源

多线程模型

多对一模型:用户级线程映射到单个内核线程

多个线程的管理是由线程库在用户空间完成的,一个线程阻塞了系统调用,整个进程都会阻塞 多对一模型

一对一模型:每个用户级线程对应一个内核线程

有更好的并发性,但创建和管理线程的开销更大 一对一模型

多对多模型:多个用户级线程映射到多个内核线程

允许程序创建任意数量的用户级线程,同时也允许多个线程并发运行在多个处理器上 多对多模型

线程库

线程库提供创建和管理线程的API