线程的实现方式
- 内核级线程:操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位
- 用户级线程:用户级线程中,线程切换可以在用户态下完成,无需操作系统干预
多线程模型
- 多对一模型:多个用户级线程映射到一个内核级线程,每个用户级线程对应一个内核级线程
- 优点:线程切换在用户空间即可完成,系统开销小,效率高
- 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高,多个线程不可在多核处理机上并行运行
- 一对一模型:一个用户级线程映射到一个内核级线程
- 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强,多线程可在多核处理机上并行执行
- 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大
- 多对多模型:n 用户线程映射到 m 个内核级线程(n >= m)每个用户进程对应 m 个内核级线程
- 克服了多对一模型并发度不高的缺点,又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点
调度的基本概念
处理机调度:从 就绪队列 中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行
- 高级调度:按一定的原则从外存上处于后备队列的作业中挑选一个(或多个)作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),以使它获得竞争处理机的权利。调入时会建立相应的PCB,调出时才撤销PCB
- 中级调度:就是要决定将哪个处于挂起状态的进程重新调入内存。
引入 虚拟内存技术 之后,可将暂时不能运行的进程调至外存等待,等它重新具备了运行条件再重新调入内存,这样是为了提高 内存利用率 和 系统吞吐量。暂时调到外存等待的进程状态为 挂起状态
一个进程可能会被多次调出、调入内存,因此 中级调度 发生的 频率 要比高级调度 更高
- 低级调度(进程调度):按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度,进程调度的频率很高,一般几十毫秒一次。
调度算法的评价指标
- 系统吞吐量:单位时间内完成作业的数量,公式 = 总共完成的作业 / 总共花费的时间
- 周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔
- 响应时间:指从用户提交请求 到 首次产生响应所用的时间