Linux 调度 —— 进程与线程

#Linux #schedule #BasicKnowledge

进程

进程是计算机资源分配最小的单位,是CPU分配资源的基本单位,具有独立的内存

切换需要切换上下文

  • 需要切换内存映射表(MMU)
  • 进程栈大小随机,但比线程栈大

线程

线程是计算机调度最小的单位,也是程序执行的最小单位。

线程的内存描述符直接指向父进程的描述符。线程间切换代价比较小,不需要切换映射表(MMU),只是指令间的切换即可,比较轻量级。线程的栈在主进程的堆中。

  • 只需切换各种寄存器
  • 线程共享地址空间
  • 线程栈固定大小,默认 8M ,默认值由操作系统确定, ulimit -a 查看, ulimit -s 修改

同一进程内的线程间共享:

细节

关于 MMU : [[Linux 内存 —— 内存分页、分段]]

内存管理是以进程为单元,线程的栈在主进程的堆中。[[Linux 内存 —— 堆和栈]]

上下文切换开销

  • 寄存器状态保存、恢复
  • 缓存失效
  • 陷入内核态开销