操作系统学习笔记

文章目录

  • 一、概述
      • 1、什么是操作系统
      • 2.、操作系统的作用
      • 3、操作系统的发展史
      • 4、操作系统的分类
      • 5、现代操作系统的主要特点
  • 二、进程控制
      • 1、进程的基本概念
      • 2、进程控制的基本概念
      • 3、同步和互斥
      • 4、进程通信
      • 5、线程和管程的基础概念
      • 6、死锁
  • 三、处理机调度
      • 1、作业的基础概念
      • 2、调度基础概念
  • 四、

前言

​ 本篇博客是以《操作系统原理和应用》为基准学习后而写的学习笔记,操作系统这门课程是计算机专业中的基础课程之一,同时也是考研,软考等重要考试的考点之一。那么仅仅是因为操作系统要考才去学习它吗?即使是计算机专业的学生,不学操作系统也照样可以编程写软件。那我们为什么要学呢?当然我们有一千个理由要学,但这里仅列出了几个:

  • 操作系统的功能应用于很多领域。如果开发并发程序:Wed Service、分布式系统和网络,你会发现,这些领域大量使用了操作系统的概念和技术。如果你学好了操作系统,你就会对你做的事情更加有信心
  • 操作系统的技巧也应用于很多领域,如抽象、缓存、并发等。操作系统简单来说就是实现抽象:进程抽象、文件抽象、虚拟存储抽象等。而很多领域也要使用抽象。如数据结构和程序设计就大量使用了抽象,记得抽象数据类型吗?记得抽象类吗?很多地方都要用到缓存。你开发Web应用要不要缓存呢?这些你都需要

学好它不仅能让我们更加深入理解操作系统的运行过程和是实现过程,还能为我们以后的学习打好基础,让我们增大成为一个设计者的可能,不再是一个代码的搬运工。现在就让一起来学习它吧(当中若有错误或纰漏,请指正)

附课后习题答案: 传送门

持续更新中……

一、概述

1、什么是操作系统

操作系统目前没有统一的理解。个人理解:操作系统是起着资源管理器功能,负责系统中的硬件及软件资源的管理的系统软件

一般认为的操作系统的定义:管理计算机系统软件、硬件资源,控制程序执行,改善人机界面,并合理组织计算机工作流程和为用户提供简便使用环境的系统软件

2.、操作系统的作用

在多任务和多用户环境下分配管理计算机系统中硬件资源和软件资源。将计算机底层的细节对用户抽象化,大大降低使用计算机的门槛

操作系统在计算机系统中所处的位置:

操作系统学习笔记_第1张图片

​ 软件(Software): 是一系列按照特定顺序组织的计算机数据和指令的集合。一般软件分为系统软件、应用软件、以及介于二者之间 的软件。例如:常用的部落冲突、微信都属于应用软件,操作系统属于系统软件,而GUI图形用户界面是介于二者之间的软件。
​ 硬件(Hardware):是计算机硬件的简称,是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。 例如:常见的有显卡、鼠标、键盘等属于硬件。

3、操作系统的发展史

操作系统发展史
采用机器语言和汇编语言
手工操作阶段
采用批处理系统
监督程序阶段
批处理实现作业的自动过渡
执行系统阶段
多道批处理系统
多道程序系统阶段
发展阶段 特点
手工操作阶段 (1)用户独占全机,(2)CPU等待人工操作 //上机用户独占计算机全部资源,手工操作时,用户必须熟悉计算机各器件的所有细节,若某一环节出错,所有操作需重新开始
监督程序阶段 (1)对重复操作实现自动控制,(2)可以识别和装入所需程序,(3)能处理作业间的自动过度和自动定序,(4)可同时提交多个作业 //磁带需要人工装卸,批处理过程中出错,用户无法干预,只能重新执行
执行系统阶段 借助通道和中断技术扩大了原有的监督程序,提供了输入和输出的控制功能
多道程序系统阶段 (1) 多道性。 内存中同时有多个作业并发执行 (2) 宏观上并行。同时进入系统的多道程序都处于运行过程总,它们或与不同时刻开始,或在不同时刻结束,但在某段时间内总体上来看是同时运行的 (3)微观上串行。在内存中的多个作业的运行顺序与其进入内存的顺序无关(4)多道技术会延长作业周转时间
  • 批处理系统的基本设计思想:操作员将若干用户的作业中相似的操作合并成一批,例如:输入、输出操作,在设备准备好后,启动一个常驻于内存的程序——监督程序(Monitor),然后由监督程序自动控制完成这批作业的执行

  • 多道批处理系统的基本设计思想:将用户的作业先在外排队,形成一个后背队列,有作业调度程序按照一定的策略从中选择若干作业进入内存,这写进入内存中的作业共享系统中的所有资源,交替使用处理器(CPU)。相对批处理系统,可以提高CPU的利用率,充分发挥计算机硬件的并行性。


拓展:计算机的发展史:

第一代计算机(1945——1955):电子管和手工操作

第二代计算机(1955——1965):晶体管和批处理系统。1956年诞生最早的批处理操作系统 GM-NAA I/O。

第三代计算机(1965——1980):集成电路芯片和多道程序设计技术

第四代计算机(1980——1990):大规模集成电路芯片和传统操作系统

4、操作系统的分类

  1. 批处理操作系统 Batch Processing Operating System

    • 定义:采用批处理方式工作的操作系统通常称为批处理操作系统(Batch Processing Operating System)。批处理操作系统根据程序的执行方式可以分为 单道批处理操作系统(也称早期批处理)和多道批处理操作系统。

    • 目标高效率

    • 特点

      • 批处理操作系统的特点:(1)系统资源利用率高(2)作业吞吐量大(3)交互性能差。作业周转时间较长,且不允许用户任意改动,不利于程序的开发和调试

      • 单道批处理操作系统的特点:(1)单道性。一次只能将一个作业装入内存中(2)顺序性。磁带上的一批作业是按其顺序装入内存的(3)自动性。在监督程序的控制下作业自动执行,无需人工干预。//经历:联机批处理–>脱机批处理

      • 多道批处理操作系统的特点:相对单道批处理操作系统的特点 单道性变为了多道性

  2. 分时操作系统 Time Sharing Operating System

    • 定义:采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统
    • 目标:具有良好的交互性及时性
    • 特点
      • 同时性。宏观上可以认为是多个用户同时在使用一个CPU,微观上在不同的时间片轮流使用CPU
      • 交互性。用户可以根据系统响应结果进一步提出新请求
      • 独占性。用户感觉不到计算机在服务其用户,就像一人独占整个计算机系统
      • 及时性。用户提出的请求能够被及时响应
  3. 实时操作系统 Real-Time Opearting System

    • 定义:指能够及时响应用户请求,并严格按照规定时间完成对请求事物的处理,同时能够控制所用实时设备和实时任务协调一致地工作的一种操作系统
    • 目标高可靠性安全性即时性
  4. 通用操作系统

  5. 网络操作系统

  6. 分布式操作系统

5、现代操作系统的主要特点

二、进程控制

1、进程的基本概念

为什么引入进程这个概念?

多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序

的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本

身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面

上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如

实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概

念。

程序执行的方式分为两种:顺序执行并发执行

操作系统初期全部是采用顺序执行的方式去处理作业,但是这种执行方式并不能充分利用CPU,从而诞生出并发执行这种作业处理方式。在提高CPU利用率的同时也带来了一系列资源分配问题,以及间断性1、失去封闭性2、不可在现性3

  • 定义:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。

    它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。进程是资源分配和调度的基本单位进程就是一个正在执行的程序。拓展:进程和线程的区别

    进程的组成:代码+数据+环境

    • 一段可以执行的代码
    • 代码运行所需的相关数据(常量,变量,工作区,缓冲区)
    • 代码运行时的环境
  • 顺序执行的特点

    • 顺序性。程序严格按照顺序执行
    • 环境的封闭性。执行中的程序独占所有系统资源,不受外界因素的干扰
    • 结果的可在现性。一个程序在初始条件不改变的情况下,无论在什么环境中、什么时间段运行,最终都是同样的结果
  • 并发执行的特点

    • 并发性。宏观上一个CPU可以同时执行多个程序
    • 共享性。多个程序可以同时共享同一个资源,环境不在是封闭性的了
    • 制约性。并发执行同时执行多个程序时,为了避免死锁需要程序间具有相互制约的关系
    • 结果的非可在现性。多个程序共享同一资源时,它们之间是能够相互影响,相互联系的,导致结果的非可在现性

    并发和并行的区别:并发是多个进程轮流占用CPU,并行是多个CPU同时运行多个进程。

  • 程序和进程的区别和联系

    • 程序是静态的,而进程是动态的,且进程具有生存周期
    • 进程的特征是并发的,而程序没有
    • 操作系统分配资源以进程为单位
    • 进程和程序之间存在多对多关系。一个程序可以创建多个进程,同时当一个进程在执行过程中,加载(调用了)其他程序,那么这个进程就同时包含了多个程序的运行
  • 进程的状态

    • 新建。新创建一个进程,此时进程还未加载到主存中。操作系统为该进程分配系统资源、初始化PCB。

    • 运行。该进程正在被执行。进程拥有了 CPU资源其他所需资源

    • 就绪。进程做好了运行准备,只要获得CPU就能够被执行。进程拥有了其他所需资源,但还没拥有CPU资源。

    • 阻塞(又称等待)。进程在等待某些事件,如:I/O操作。进程 既没有CPU资源没有其他所需资源

    • 消亡(又称终止)。进程被执行完毕,或者是进程被撤销,或者由于某种原因自动停止,如:进程所需的系统资源不足

  • 进程的标识PCB 进程控制块(Process Control Block)也称进程表(Process Table)

    PCB是进程存在的唯一标识,是操作系统对进程进行控制、管理和调度的依据,它在进程创建时产生,在进程撤销或进程消亡后消失

2、进程控制的基本概念

  • 什么是进程控制?

进程控制是实现进程各状态间的转换

  • 进程控制的作用是什么?

对系统中的 所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能

  • 怎么实现进程控制?

通过原语实现进程控制(利用原语进行的操作叫做原子操作,也称原子操作


拓展:

原语的定义

原语是系统态下执行的一种特殊的系统程序,通过系统调用的方式提供原语接口,采用开/关中断来实现。

原语的特点

  • 原语由内核完成。因为开/关中断指令的权限很大
  • 原语的执行不能被中断。因为原语是以系统调用的方式提供原语接口,采用屏蔽中断的方法实现的。屏蔽中断指令属于内核指令,是不会被中断的(除停电外),系统调用指令是能够被中断的。

原语的分类

  • 创建原语。用于创建进程

申请空白的PUB,为新进程分配所需资源,初始化PCB,将PCB插入到就绪状态。

  • 阻塞原语。将新建或运行状态中的进程加入到等待队列,使之成为阻塞态

从PCB集合中找到需要阻塞进程的PCB,保护进程运行现场,将其PCB状态信息修改为“阻塞态”,主动放弃CPU,暂停进程的运行,同时将其PCB插入到相应的等待队列中。

  • 唤醒原语。将阻塞状态中的进程转换成就绪状态

从PCB集合中找到需要唤醒进程的PCB,将他从等待队列中移除,将其PCB状态修改为就绪态,并将该PCB插入到就绪队列中。

  • 撤销原语。

从PCB集合中找到需要终止进程的PCB,(若进程正在运行,立即剥夺其CPU,将CPU分配给其他进程,同时终止其所有子进程)将该进程拥有的所有资源归还给父进程或操纵系统,最后删除它的PCB。

操作系统中进程状态的转换示意图
创建原语
操作系统分配完资源
进程被调度
撤销原语
阻塞原语
唤醒原语
时间片用完
终止态
引起进程撤销的事件
运行态
就绪态
创建态
引起进程创建的事件
阻塞态

CPU的状态

  • 系统态(又叫管态、内核态、核心态、特权态):能执行一切指令,访问所有的寄存器和存储区

  • 用户态 (又叫目态、普通态):具有较低特权的执行状态,仅能执行规定的指令,访问指定的寄存器和存储区;一般情况下,应用程序只能在用户态运行,不能去执行OS指令和访问OS区域,这样可以防止应用程序对OS的破坏

3、同步和互斥

  1. 临界区和临界资源

    • 定义:把一次只允许访问一个进程的资源称为临界资源,访问临界资源的程序段称作临界区。

      对临界资源的访问要遵循以下原则:

      • 有空让进。若临界区没有进程时,应当允许一个进程进入
      • 忙则等待。若临界区已经存在一个进程时,应当禁止其他进程进入
      • 有限等待。应当保证需要进入临界区的进程能够在有限时间内能够进入临界区
      • 让权等待。当进程不能进入所需的临界区时,应当释放CPU,让其他有需要的进程进入

      临界区位置示意图:(进入区和退出区分别对应上锁和解锁)

      操作系统学习笔记_第2张图片

  2. 进程的互斥和同步

    为什么要引入互斥和同步概念?

    因为现代操作系统具有并发性的特点,导致操作系统中的进程具有异步性的特征。异步性是指:各并发执行的程序一各自独立的、不可预知的速度向前推进。这就导致我们不能认为的控制并发执行中进程的先后顺序,但是对于一些事物,如:写数据,和读数据是必须具有顺序的,只有先进行写的操作,才能执行读的操作,而同步就是专门解决这类问题而必须引入的概念。

    同时现代操作系统具有共享性的特点,这就导致多个进程都需要进入临界区使用临界资源,而临界资源只能被其中一个进程使用,需要等其中一个进程使用完后释放该资源后,下一个进程才能继续使用,于是我们就引入互斥这一概念来描述进程使用临时资源时的这一行为。

    这些概念的引入,其实就是为了更好地描述某种关系或者规律,解决某类问题,从而能够制造出更好用的操作系统

  • 定义

    • 互斥:多个进程同时访问临界资源而产生的制约关系(间接制约关系)
    • 同步:多个进程中发生的事件存在某种时序关系,需要进程间的相互合作,共同协调完成而产生的制约关系(直接制约关系)

    经典的互斥和同步问题

    • 哲学家进餐问题:相邻哲学家之间存在互斥。互斥表现在:相邻哲学家不能同时取筷子
    • 读者和写者问题:两者之间存在同步。同步表现在:要先读入数据,才能修改数据,两者具有先后顺序且需要共同协作
    • 生产者和消费者问题:两者既存在互斥又存在同步。互斥表现在:当缓冲区为满时,消费者进程在取数据的同时生产者进程不能产生数据;当同步表现在:当缓冲区中有生产者进程产生的数据,消费者进程才能取数据(体现时序关系),且它们要共同协作才能完成任务
  1. 互斥和同步的实现:
互斥和同步的实现
软件实现方法
单标志法
双标志先检查法
双标志后检查法
Peterson算法
硬件实现方法
中断屏蔽法
TestAndSet,TS指令/TSL指令
Swap指令,XCHG指令
信号量实现
  1. 信号量

    • 什么是信号量

      信号量是荷兰数学家Dijkstra于1965年设计THE操作系统是提出的概念。

      信号量(Semphore)是用来管理临界资源的,可以代表资源的实体数。它表示系统中某一类可用资源的数量,是一个整型量。

    • 信号量的作用: (设信号量Semphore的值用value表示)

      • 可以用来实现进程间的同步和互斥

      • 可以用来记录当前可用资源的实体数(当value≥0时,value表示当前可用资源的实体数)

      • 可以用来记录当前等待进程的个数(当value<0时,|value|表示当前等待使用该资源的进程数)

    • 信号量的操作

      同年在Dijkstra提出信号量概念的同时,它也相应的提出信号量的相关操作定义,有两种操作,P、V取自荷兰语passeren(经过)和verhogen(增加)的首字母

      • P操作:对信号量进行减一操作,等价于:value–;
      • V操作:对信号量进行加一操作,等价于:value++;
    • 信号量实现互斥时应当注意

      • 同一进程的信号量实现的P、V操作都必须成对出现
      • P操作应紧靠临界区的头部,V操作应紧靠临界区的尾部(P操作总是执行在V操作的前面)
      • 临界区的代码尽可能的短,不能有死循环
    • 信号量实现同步时应当注意

      • 同一信号量实现的P、V操作都必须成对出现(成对要求没有互斥时那么严格,可以是不同进程之间的成对)
      • 信号量初值与相应资源的数量有关,也与P、V操作出现的位置有关
      • 使用信号量时,要先分析进程之间的制约关系,确定信号量的种类

4、进程通信

  1. 定义:指进程间的数据传输(或信息的交换)。

  2. 分类

    操作系统学习笔记_第3张图片

    拓展:

    • 消息缓冲机制通信技术由Hansen提出,基本思想是:根据“生产者——消费者关系”原理,利用公用消息缓冲区实现进程间的通信。使用该机制通信时应注意:
      • 在发送进程将消息写入缓冲区时和把缓冲区的消息挂入消息队列时,应禁止其他进程对缓冲区消息队列的访问;同理在接收进程取消息时,也需要禁止其他进程对缓冲区消息队列的访问
      • 当缓冲区没有消息时,接收进程不能接收到任何消息
    • 邮箱机制:通过把消息抽象成一封封信,将一个共享数据结构抽象成邮箱,每个邮箱由一个唯一的标识符,当两个或两个以上的进程有一个共享的邮箱是,它们就能够进行通信。使用邮箱机制时应注意:
      • 发送进程发送消息时,邮箱至少有一个空格来存放该消息
      • 接收进程接收消息时,邮箱至少有一个消息来发送
    • 高级通信有三种模式:共享内存模式(也属于间接通信)、消息传递模式、共享文件模式。并发进程因共享资源而相互发送消息属于低级通信(利用信号量实现的通信也属于低级通信)
  3. Linux中的IPC通信

    Linux中IPC通信的种类:

    1. 管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有公共祖先的进程之间进行通信
    2. 命名管道(FIFO):命名管道克服了管道没有名字的限制,同时除了具有管道的功能外(也是半双工),它还允许无亲缘关系进程间的通信。命令管道在文件系统中有对应的文件名。命令管道通过命令mkfifo或系统调用mkfifo来创建
    3. 软中断:信号是软件层次上对中断机制的一种模拟是比较复杂的通信方式,用于通知接收进程有某种事件发生了,除了进程间通信外,进程还可以发送信号给进程本身(软中断信号必须提前预置,然后才可以在程序运行中捕获)
    4. 消息队列:消息队列是消息的链接表,包括Posix消息队列和system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程可以读走队列中的消息。消息队列克服了信号承载信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点
    5. 共享内存:使得多个进程可以访问同一块内存空间,是最快的IPC形式。是针对其他通信机制运行效率低而设计的。往往与其他通信机制,如信号量结合使用,来达到进程间的同步及互斥
    6. 内存映射:内存映射允许任何多个进程间通信每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它
    7. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段
    8. 套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信

5、线程和管程的基础概念

  • 线程

    • 定义是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位

    • 作用:保证进程并发,减少对并发进程的管理和切换开销,让用户使用相对简单

    • 线程和进程的关系

      • 线程是进程的一部分,是进程内的一个执行单元,也是CPU调度的基本单位
      • 线程共享它所在进程的的所有资源。它不能独立拥有这些资源,但线程可以有自己独立的少量信息(如程序计数器、寄存数组和栈,还有的有一些私有数据)
      • 进程和线程都能并发执行。线程间的关联性比进程间的关联性要大,并发过程都需要协调同步执行
      • 进程的切换开销很大,线程的切换开销很小。因为进程切换涉及相关资源的保存和地址空间的变法,而线程是共享同一个进程的资源和地址空间的,将不涉及资源的保存和地址空间的变化
    • 线程的分类

      • 核心级线程: 指由内核管理的线程。

        用户应用程序通过API和系统调用(system call)来访问。

      • 用户级线程: 指不需要内核支持而在用户程序(用户空间)中实现的线程。

        其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。

      • 用户级线程相较于核心级线程的优缺点:(核心级线程的优缺点于它恰恰相反)

        优点

        1)线程切换开销小。同一线程间的切换不需要内核的干预

        2)可操作性高。用户级线程的调度可以由用户自己单独设置一个调度算法,于操作系统的调度算法无关

        3)应用范围更广。用户级线程可以在一个不支持线程的操作系统上运行

        缺点

        1)并发性低。将其中一个线程被操作系统阻塞时,会导致该进程中的其他线程也被阻塞

        2)不适用于多处理器系统上运行

  • 线程的标识:线程控制块(Thread Control Block,TCB)是线程存在的唯一标识。它是与进程的控制块(PCB)相似的子控制块,只是TCB中所保存的线程状态比PCB中保存少而已。

    :核心级线程和 核心线程 的区别!核心线程是指它所属进程是 核心进程 的线程。核心级线程是包括核心线程的。

  • 管程

    Dijkstra在1965年引入了信号量这个概念,很好的解决了进程同步和互斥的描述性问题,但是不够完美,因为信号量的大量操作分布在各个进程中不便于管理,于是他又于1971年提出了秘书进程这一概念,用来集中管理信号量实现不同进程对同一临界资源的互斥使用。后来经过完善总结,在1974年和1977年由Hore和Hansen提出了管程

    • 定义:指关于共享资源的数据及对其的所有操作
    • 组成:管程内部的共享变量、管程内部的条件变量、管程内部进行执行的进程、以及对于局部和管程内部的共享数据设置初始值的语句
    • 特点
      • 模块化。管程是一个基本程序单位,可以单独编译
      • 抽象数据类型。管程是一种特殊的数据类型,其中不仅有数据,还有对数据操作的代码
      • 信息掩码。管程是半透明的,管程中的函数实现了某些功能,在管程外部是无法知道这些功能是怎么实现的

6、死锁

  • 定义:指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象(若无外力作用,它们都将无法推进下去)。死锁的根本原因是系统资源的不足

  • 死锁产生的必要条件

    • 互斥。多个并发进程同时使用同一个互斥资源
    • 不可剥夺。进程所占有的资源没有使用完是不可被其他进程抢占的
    • 部分分配。操作系统允许并发进程每次只请求自己所需资源的一部分
    • 环路。操作系统中并发进程对资源的占有和请求形成一个环路

    其中,互斥是资源的固有特性,要想解决死锁需要从其它三个方面出发。

  • 解决死锁的方法

    • 死锁的预防

      • 静态分配:将所有的互斥资源一次性分配给所需的进程(通过破坏部分分配条件实现死锁预防,资源利用率非常低)
      • 有序分配:将所有的互斥资源进行编号,进程只能通过序号的递增顺序来逐个申请资源。(通过破坏环路条件实现死锁的预防,资源利用率很低)
    • 死锁的避免

      主要使用算法来实现,推荐文章<^_^> => 银行家算法的实现和详解

    • 死锁的检测和修复

      • 原理:让操作系统设置专门的机构,该机构能够及时检测死锁,并且在死锁发生后能通过外力破坏死锁的某个必要条件,从而使陷入死锁中的进程得到修复

      • 死锁修复的方法:

        1)撤销产生死锁的所有进程。(实现很简单,但弊端也很明显,会浪费掉已执行进程的时间,还有可能会因为异常进程的退出导致系统的瘫痪)

        2)逐个撤销死锁的进程,直到解除死锁解除为止。(撤销顺序可以按死锁进程占有资源的多少来确定)

        3)逐个剥夺死锁进程所占有的资源,重新分配给其他进程,直到解除死锁为止

三、处理机调度

引言

​ 在操作系统中,处理机包括中央处理器,主存储器,输入-输出接口,加接外围设备就构成完整的计算机系统。处理机是处理计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件。程序是描述处理机完成某项任务的指令序列。指令则是处理机能直接解释、执行的信息单位。早期的操作系统都是单一进程,随着科技的发展,和为了提高资源的利用率,现代操作系统普遍采用并发执行,同时进程数量也多于CPU的数量,这就导致各进程需要互斥的使用处理机,所以处理机的好坏决定了计算机的性能

1、作业的基础概念

  • 定义:是用户借助计算机系统所做的一个计算机问题或一次事物处理的完整过程

  • 作业的状态

    • 提交态:作业处在输入设备进入外存的过程
    • 收容态:作业处在外存中,但未被调度程序选中
    • 执行态:作业被调度程序选中后,进入内存中后被系统分配资源、创建进程,然后CPU处理相应作业产生的进程
    • 完成态:作业被完成但占用的资源未被完全释放的过程
    内存
    外存
    作业被调度
    进程被调度
    执行态
    就绪队列
    后备队列
    收容态
    提交态
    完成态

    :后备队列是作业调度的中间过程,此时的作业正在等待被就调度程序调度;就绪队列是进程调度的中间过程,此时进入内存中的作业被创建进程、分配完资源等着进入CPU(可以回看第二章进程控制的基本概念加深理解)

  • 作业的标识:作业控制块(Job Control Block,JCB)功能类似PCB,JCB是作业存在的唯一标识,是操作系统对作业进行控制、管理和调度的依据,它在作业提交时产生,在作业完成或撤销时消失

  • 作业和进程的关系

    • 作业是任务实体,进程是完成任务的执行实体
    • 一个作业对应一个或多个进程
    • 作业只有在执行态才会产生进程,作业完成或撤销进程消亡

2、调度基础概念

  • 高级调度(又称作业调度、宏观调度):将外存后备队列中的作业调度进内存中,同时负责收回内存和已分配的资源,时间单位通常是min、h、day
  • 中级调度(又称交换调度、平衡负载调度、中程调度):将外存中的进程和内存中的进程进行对调。当内存中没有足够空间是,将进程从内存移到外存,当内存有足够空间时,再将合适的进程换入内存,等待进程调度
  • 低级调度(又称进程调度、微观调度):将内存中就绪队列中的进程调度执行进入运行态,时间单位通常是ms
  • 线程调度:按照特定机制为多个线程分配CPU的使用

作业调度包括了进程调度,进程调度发生在作业的执行态;进程调度包括线程调度,线程调度(只针对于具有多线程的进程而言)发生在进程调度的整个过程期间

  • 调度算法

    相关计算和基础概念可以参考:调度算法相关计算 好文值得推荐

  • FCFS:

    • 优点:实现简单,对每个作业/进程都公平
    • 缺点:CPU利用率极低,调度不稳定(当一开始就遇到特别长的作业/进程时……)
  • PS:

    • 优点:能够很好的区分作业/进程的轻重缓急
    • 缺点:实现复杂(需要考虑的因素太多了)
  • SJF:

    • 优点:实现简单,相对FCFS能够较好提高CPU效率
    • 缺点:对短作业有利 ,对长作业不利,调度不稳定,系统很难估算作业的执行时间
  • HRN:

    • 优点:相对SJF能够更好的提交CPU的利用效率,调度相对稳定
    • 缺点:系统开销大(因为要花多余的时间去计算响应比)
  • SPF:

    • 优点:实现简单,相对FCFS能够较好提高CPU效率
    • 缺点:对短进程有利 ,对长进程不利,调度不稳定,系统很难估算作业的执行时间
  • RR:

    • 优点:CPU利用率很高

    • 缺点:不稳定(时间片的选取要合理,时间片过大,退化成FCFS;时间片过小,进程频繁切换系统开销大)

拓展;

多级反馈调度算法(Round Robin With Mulitiple Feedback,RRMF):将不同优先级的队列分成若干组,每组具有相同的时间片,然后按RR算法进行调度。优点:既能使高优先级的作业得到响应又能使短作业(进程)迅速完成;缺点:实现复杂

四、

磁盘调度算法 优点 缺点
FCFS算法 公平、简单 平均寻道距离大,仅应用在磁盘I/O较少的场合
SSTF算法 性能比“先来先服务”好 不能保证平均寻道时间最短,可能出现“饥饿”现象
SCAN算法 寻道性能较好,可避免“饥饿”现象 不利于远离磁头一端的访问请求
C-SCAN算法 消除了对两端磁道请求的不公平 实现较为复杂

  1. 如果现在并发执行两个不同程序的A操作和B操作,两个不同程序的A操作和B操作根本没啥关系,但是它们是并发执行的,执行了A操作,但是B因为其他原因没有执行完毕,则A操作对应的那个程序也无法继续向下执行,必须等待B操作执行完毕。 ↩︎

  2. 并发执行的程序,系统中的资源都是共享的,而这些资源的状态也由这些程序来改变,致使其中一个程序运行时,其环境必然受到其他程序影响。 ↩︎

  3. 因为程序运行的速度不同,程序的运行对环境也相互影响,则程序多次执行,虽然它们的初始条件相同,但是运行的结果却个不同。 ↩︎

你可能感兴趣的:(大学课程,linux)