1.进程的引入
由于单道处理程序对 CPU 利用率太低(程序在进行IO操作时,CPU 处于空闲状态)。于是引入了多道处理程序,由于 CPU 要在多个程序间切换执行,于是引入了一个概念:进程。
进程记录执行中程序的状态(寄存器数据、进程状态、调度相关信息…)。这样我们对操作系统就有了一个宏观的视图,操作系统只需要把这些进程记录好,按照合理的次序推进(分配资源、进行调度)。
所以说进程是操作系统分配资源的最小单位。
2.线程的引入
虽然我们引入了进程已经可以完成多道处理程序来提高 CPU 利用率。假设一个进程需要并发执行,就需要fork()
出多个进程进行执行,由于每个进程独享一块地址空间,那么在进程调度的时候,就需要切换虚拟内存映射表(涉及到内存管理),这样就会产生额外的开销。
为了减少进程间切换产生的开销,于是引入了线程。一个进程可以包含多个线程,当然一个进程也算是一个主线程。还是上面的问题,当一个程序并发执行时,线程间切换只需要修改 PC 指针指向的地址,对于内存映射表是不需要切换的。
所以说线程是CPU调度的最小单位。