理解操作系统之进程和线程

2018-10-16  本文已影响0人  涂印

在操作系统中,设定了进程和线程的概念去描述程序并发执行逻辑。本文属于研究进程和线程的入门级文章。主要从以下五个方面介绍进程以及线程的相关概念。

一丶进程和线程的定义

二丶操作系统中对进程和线程的描述

1. 进程和线程实体描述
进程和线程均是OS中的运行实体,都是调度和分派的基本单位。

2. 进程和线程的状态描述

进程状态

三丶进程的多层调度
从硬盘上的可执行文件摇身转为内存中的执行进程涉及到如下两层调度
(1)作业调度:作业调度是将硬盘上执行文件调度到内存中成为进程的过程,经历过该调度的进程处于就绪状态等待分配CPU资源。当有多个作业请求调度时,有许多经典算法可以采用

(2)进程调度:进程调度是指在就绪队列中排队的就绪进程获取CPU时间片资源的过程。进程调度算法是需要介绍的重点,从较大的方向上分,其主要包括两类:

  1. 基于优先权调度的算法,该调度算法主要区分以下四种概念

    • 静态优先权调度:静态优先权是指,该进程所分配的优先权在运行的过程中是不可变化的,从始至终就是初始化的大小。
    • 动态优先权调度:进程调度的优先权可以依据运行时的情况动态改变。比如提高排队时间过长的进程优先权。这样能避免饥饿进程。
    • 抢占式调度:当前执行进程的优先权若小于排队进程进程的优先权,当前执行进程将让出CPU时间,退出执行。
    • 非抢占式调度:当前进程一旦获取了CPU执行时间后,便不会因为优先权的原因让出CPU时间。除非主动结束执行或者遇见异常情况。
  2. 基于时间片轮转调度算法
    基于时间片的调度算法将就绪进程排列成一个队列,为队列中每个就绪进程分配指定的时间片资源。若在规定的时间片内进程未执行完毕,那么该进程将再次加入队列的尾部等待下一次时间片资源分配。上述只是基于时间片的调度算法的一般思想,在实际工业场景下过于粗糙。下面介绍一种较为常用的多级反馈队列调度算法具有更大的实用价值

  1. 从图中可知,该算法拥有N个用于调度的就绪队列。当进程刚进入就绪状态时时,首先进入1级就绪队列等待CPU分配时间片资源。若未在当前时间片资源内执行完毕,那么进入2级就绪队列。后续调度过程以此类推。
  2. 只有1级就绪队列中没有任何进程时,2级就绪队列中的进程才能调度之CPU。
  3. 从高级就绪队列中调度到CPU时,会获取更多的时间片资源。TN>T3>T2>T1.

多级反馈调度算法,其优越性一般体现在如下三点:

  1. 适用于较短的交互型任务。交互型任务一般只需要较短的执行时间能在1级队列中完成,需要极低的响应延迟
  2. 在多级调度的过程中,短作业最多在1-2个时间片轮转中可以调度完成。周转时间任然较短
  3. 长作业,可以轮转到高级就绪队列中,这样或许更多CPU执行时间。不至于因为短作业过程,长作业分配不到CPU资源而导致饥饿。

三丶进程/线程之间同步机制

进程与进程之间的同步,线程和线程之间的同步基本一致。本文以线程和线程之间的同步为例子介绍同步概念。

3. 读者-写者问题
对于一个文件,存在多个线程同时读取以及多个线程同时写入。在这种条件下要求对文件的访问不能混乱。那么要求读线程和写线程必须满足如下要求:

四丶如何避免进程/线程之间的死锁

本节从线程的角度来介绍死锁。线程死锁是线程同步不当导致的问题。本节将从线程死锁原因,线程死锁的必要条件,以及规避线程死锁的三个方面来分析。
1. 线程死锁产生的原因
以哲学家就餐问题,来研究线程死锁原因

2. 线程死锁产生的必要条件
死锁发生具有四个必备条件,当能够同时满足这四个条件时,便有可能发生死锁。

3. 避免死锁的方法

五丶进程/线程之间通信机制

进程/线程之间的同步其实是一种通信机制,但是同步机制只是一种小规模的数据通信。此处介绍的通信机制是应对较大规模的数据传输。此处以进程之间的通信机制为例介绍

上一篇下一篇

猜你喜欢

热点阅读