程序的执行方式

顺序方式(*)

内存中只能驻留一个程序,前一个程序结束,后一个程序才能进来,并且有着严格的先后次序

顺序执行的特点

  • 顺序性:程序执行有着明确的先后顺序
  • 封闭性:程序运行时独占所有资源
  • 可再现性:初始条件相同,若程序执行顺序不变,则每次得到的结果一定相同

问题

  • 无法满足高性能

并发执行(***)

并发指一段时间内执行多个程序。多个程序同时进入内存,轮流交替执行

并发执行的特点

  • 间断性:交替执行就是走走停停

  • 失去了封闭性:程序不再独占系统资源

  • 不可再现性:程序执行有多种结果。

并行执行

同一时刻有多个程序执行,只能在多处理机上实现

进程

进程是研究并发方式下,程序的执行。

进程的概念:进程是进程实体的运行过程,是系统进行资源分配和调度的一一个独立单位。

进程实体:由程序段、相关数据段和PCB组成

进程的特征

  • <mark>并发性</mark>, 多个进程在一段时 间内同存于内存中同时运行
  • <mark>动态性</mark>,进程由创建而产生,由调度而执行,由撤消而消亡。
  • 独立性,进程是能独立运行、资源分配、调度的基本单位。
  • 结构性,进程映像由程序、数据、栈和进程控制块( PCB )构成。
  • 异步性,进程按各自独立、不可预知的速度向前推进。

进程的状态

有三个状态

  • 就绪状态:指程序已经处于准备好运行的状态。
  • 执行状态:指程序已经获得CPU,正在执行。
  • 阻塞状态:指程序的执行因为某些原因无法继续执行。

进程控制块(PCB)

  • 用来描述进程的基本情况和活动过程,进而控制和管理进程。(类似于学籍、户口等
  • 进程创建时会建立一个PCB,结束时会收回PCB

进程控制块中的信息

  • 进程标识符:包括内部标识符和外部标识符。
  • 处理机状态:处理机状态包括通用寄存器、程序计数寄存器、程序状态寄存器、栈寄存器信息。
  • 进程控制信息:程序栈和数据地址,同步和通信机制,资源清单,链接指针。
  • 进程调度信息

进程控制块中的组织方式

  1. 线性方式

  2. 链接方式

  3. 索引方式

进程控制

  • 进程控制用于创建、终止、阻塞和唤醒进程。

  • 进程控制由操作系统内核原语来实现。

    原语是由若干条指令组成,用于完成一定功能的一个过程,所有的指令要么全做,要么全不做。(一个函数

用户态:具有较低特权的执行状态,进行执行规定的指令,访问特定的寄存器和存储区。

系统态(内核态):具有较高特权,能执行全部的指令,访问所有的寄存器和存储区。

进程的四个操作

进程的创建

引起进程创建的事件

  • 用户执行应用程序。
  • 用户登录。
  • 启动服务。
  • 程序创建进程。

进程创建的过程(必须要求是原语):

  1. 申请空白PCB
  2. 为新进程分配资源,如内存空间等
  3. 初始化PCB
  4. 将进程插入就绪队列

进程的终止

引起进程终止的事件

  • 正常结束。
  • 异常结束。
  • 外界干预。

进程的终止过程

  • 检查进程状态。

  • 有无子孙需要终止。

  • 归还进程全部资源。

  • 将PCB从进程中移除。

进程的阻塞和进程的唤醒

进程调度概念

处理机调度的层次

  • 高级调度
  • 低级调度
  • 中级调度

引起进程调度的事件

  • 进程终止。
  • 进程创建。
  • 进程阻塞。
  • 进程唤醒。
  • 外部设备中断。

进程切换时需要保存和恢复现场。

进程调度的方式

  • 抢占式调度:允许调度程序根据某种原则,暂停某个占用处理机的进程,抢占已经分配出去的处理机。抢占的原则有优先权原则、短作业优先原则和时间片原则。

  • 非抢占式调度:进程一旦获得处理机,只有在该进程任务完成或因某事件而阻塞时,才让出处理机,决不允许某进程抢占已经分配出去的处理机。(只有时间片用完才能调度

衡量调度算法指标

面向用户(***)

  • 平均周转时间:所有周转时间求平均。
  • 带权周转时间:一个程序的周转时间除以服务的时间。(>=1)
  • 平均带权周转时间:对带权周转时间求平均。

周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔。

面向系统

  • 吞吐量:在单位时间内系统所完成的作业数。
  • 处理机利用率:在过去一 段时间内CPU被占用的时间总和。
  • 各类资源的平衡利用率:保证系统所有的资源被合理利用。

进程调度算法(计算***)

先来先服务调度算法(***)

先来的进程先抢到CPU,有利于长作业,不利于短作业

短作业优先调度算法(***)

在分配时,优先分配给服务时间最短的,降低了系统的平均周转时间,对长作业不利。

只有在抢占的时候,进程的创建才会导致需要重新分配CPU,非抢占式在进程终止的时候分配。

非抢占方式:

抢占式:

高优先权调度算法(***)

按照优先权重分配CPU,优先数越小,优先权越大

高响应比优先调度算法

按照响应比去分配CPU资源,既考虑的作业的先后顺序,又优先照顾短作业,同时不会使长作业等太久

响应比 = 等待时间/服务时间

时间片轮转调度算法(***)

按照先来先服务的将作业放入一个调度队列中,每隔一定的时间片,发生一次调度,一般为10ms到100ms。

假设时间片为2。

多级队列调度算法

优先调度优先级高的

多级反馈队列调度算法

解决了低优先级队列长时间无法调度的问题

线程

为什么提出线程?

  • 进程是资源的拥有者,在并发时,对进程的切换需要有较大时空的开销。
  • 一个进程内全部线程都是在同一个地址空间进行,在并发时可以减少系统的开销。

线程概念:线程是进程的一个实体,是被系统独立调度的基本单位,只拥有少量的资源(如CPU寄存器资源)。

如下图所示,每个线程都会有个栈,一共有三个线程:

线程的特点

  • 一个线程拥有少量的资源,记录在线程控制块中。轻型实体,线程基本上不拥有资源,或者是有较少的资源;
  • 一个进程的所有线程共享进程所拥有的全部资源。
  • 线程是处理机调度的基本单位,多个线程可以并发执行。

线程与进程的比较

线程的实现方式

  • 内核级线程:所有创建、切换等都需要内核的支持,开销较大(适合多处理器系统
  • 用户级线程:可以不需要进入内核态创建,但是切换进程需要进入内核(开销小
  • 组合方式:建立内核级线程与用户级线程的关系。

题目练习