操作系统复习1

操作系统概述


计算机系统是由硬件和软件两部分构成的。软件又分成系统软件和应用软件两类,操作系统是一个最基本也是最重要的系统软件。

通道

通道又称I/O处理器,通道使得计算机变成了“假脱机”方式。

1.它具有自己的指令系统和运算控制部件

2.与处理器共享内存资源

3.通道可以受处理器的委托执行通道程序以完成输入输出操作

4.通道的输入输出操作可以同处理器的计算工作完全并行执行,并在输入输出操作完成时向处理器发出中断请求。

操作系统

操作系统是位于硬件层之上、所有其他系统软件层之下的系统软件,通过它管理系统中的各种软件和硬件资源,使他们能够被充分利用,方便用户使用计算机系统。

1.管理系统中的各种资源

2.为用户提供友好的界面

操作系统的重要特性

1.程序的并发性

并发粒度

单CPU:一条机器指令

多CPU:一个指令周期

2.资源的共享性

操作系统与多个用户程序共享系统中的各种资源

3.异步性(由并发派生而来,与并发不是正交关系)

交替的切换点是中断,中断使用户程序切换到操作系统程序,嵌套中断使一段操作系统程序切换到另一段操作系统程序,而中断的发生不确定。

4.虚拟性

1.把一个实的CPU改成多个虚拟CPU

2.内存外村->虚拟存储

3.独占设备+共享设备->虚拟设备

完善

多道批处理和分时系统的出现标志着操作系统已经进入完善阶段。

传统操作系统的三大类别

多道批处理系统、分时系统和实时处理系统是传统操作系统的三大类别,它们分别为通用操作系统的最终形成做好了必要的准备。

操作系统的硬件环境

定时装置

1.绝对时钟:记载实际时间,不发中断,可由特权指令修改。

2.间隔时钟,定时发生中断,间隔ms,多道程序基础保证操作系统获得控制权。

堆与栈

堆属于用户空间,保存程序中的动态变量。

用户栈属于用户空间,可以存取用户函数的内容,也可以传送调用操作系统时需要的参数。

系统栈属于操作系统空间,又叫核心栈,可以保存系统子程序之间的内容,也可以保存中断响应时的中断现场/

硬件的栈指针是多个进程共享的。

特权指令

只能在管态下才能执行的指令称为特权指令

非特权指令

在管态和目态下均可执行的指令称为非特权指令,只与运行程序本身有关,不会影响其他程序和操作系统。

处理器状态

管态

也称为系统态、核心态,是操作系统运行时所处的状态,计算机处于管态时可以执行硬件所提供的全部指令。

目态

也称为用户态,是一般用户程序运行时所处的状态。

状态转换

目态变管态 ,使用中断,中断发生时,中断向量中的处理器状态字应该标识处于管态。

管态变目态,特权指令置程序状态字(PSW)。

中断装置,能够发现并响应中断的硬件机构,具有发现中断和响应中断两个功能。

  • 中断是程序切换的必要条件

进程、线程与作业


多道程序设计引入

1.设备资源利用率提高

2.内存资源利用率提高

3.处理器资源利用率提高

4.自然表达一个程序的内在并行性

进程

可参与并发执行的程序称为进程。

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

进程控制块

进程控制块是标志进程存在的数据结构,其中包含系统对进程进行管理所需要的全部信息。

进程的组成

1.进程控制块,是进程的“灵魂”

建立进程 建立PCB

撤销PCB 撤销进程

2.程序,是进程的“躯体”

代码

数据

堆栈

  • 进程控制块存放在系统空间中,属于操作系统空间,而程序则属于用户空间。
  • 进程的程序(代码和数据)称为进程映像。
  • 系统开销一般是指运行操作系统程序、对系统进行管理所花费的时间和空间

进程上下文

将进程的物理实体与支持进程运行的物理环境合称为进程上下文,进程的切换过程就是进程上下文切换,这属于系统开销的一部分。

进程的队列

1.就绪队列,系统一个或者若干个(调度算法而定)

2.等待队列:每个等待事件一个

3.运行队列,每个CPU一个,一个队列只能有一个进程,多处理器中每个CPU都有一个运行队列,指向运行队列头部的指针被称为运行指示字

进程的类型和属性

系统进程

运行操作系统程序,完成系统管理(服务)功能

系统进程又叫守护进程,操作系统大部分是需要调用的时候才会执行,但是守护进程没有中断,没有调用,也会执行,是一个无限循环程序。

用户程序

运行用户(应用)程序,为用户服务,但是不一定是用户编写的程序,也可能是编译程序之类的。

无论是系统进程还是用户进程,都具有如下特性。

1.并发性:宏观上同时推进

2.动态性:进程是动态消亡的

3.独立性:线程是调度单位

4.交互性:可以和其他进程直接或者相互作用

5.异步性:每个进程都以其相对独立、不可预知的速度向前推进

6.结构性:每个进程都有一个进程控制块

进程创建、撤销

进程创建

pid=fork()//通过判断返回值pid,子进程和父进程实现分支

子进程由父进程复制而来,代码一致,但是在PCB中,会有区别。

PCB中有两个结构一个是proc结构一个是user结构,proc有十五项信息,系统管理进程时刻需要的信息,常驻内存。

而user结构有30多项进程运行需要的信息,可以和进程一起移到外存。

子进程和父进程在proc结构中的区别是p_pid和p_ppid不同

p_pid进程id

p_ppid父进程Id

它们不是pid

进程创建会建立PCB,分配存储空间,加载程序,入就绪链,子进程和父进程代码一样,为了让它们执行不同的结构,可以使用如下结构

if(pid=0)//如果是子进程

{ execl(prog,arg0,argn-1,…0)}

else{}

这里通过pid识别父进程和子进程,如果是子进程pid为0,excel可以加载索要执行的程序,prog是需要执行的程序,而arg是执行程序参数,数目不限,最后的0表示参数结束,main(argc,argv)中argc就是参数个数n,argv则是arg0…argn-1。

线程撤销

exit(&status),去配资源,撤销PCB,通知父进程,唤醒父进程。

其中status表示程序结束的状态,父进程会等待进程终止pid=wait(&status),没有进程终止则等待终止,如果有终止的就不等待,返回值为子进程的编号。

进程汇聚

在Java语言中,父进程创建子进程之后,可以执行join系统调用,等待子进程结束并与其汇聚,之后父进程继续执行。

线程

线程的概念

线程,又称轻进程,是进程内的一个相对独立的执行流

  • 一般来说,进程是资源的分配单位,线程是CPU的调度单位。

进程是资源的分配单位!线程是CPU的调度单位

与进程相比,线程具有的优点

1.上下文切换速度快

线程只有寄存器和栈不同,动态堆、静态数据、程序代码都是共享的。

每个线程都要有一个属于自己的私用的栈,因为线程是一个执行流,每个执行流都有函数调用,函数之间会有调用,调用之间会有嵌套,所以每个函数都要有自己私用的栈。

2.系统开销小

3.通信容易

线程控制块

TCB

标志线程存在的数据结构,其中保存系统管理线程需要的全部信息。线程共享的内容存在PCB,只有不同的部分在TCB中。

TCB中没有PSW因为一个进程中的线程共享一个PSW,而且缺少地址映射寄存器。

TCB存放位置

用户级线程:目态空间(运行时系统)

核心级线程:系统空间

线程的实现

用户级别线程(ULT)

1.基于library函数,系统不可见

2.线程创建、撤销、状态转换在目态完成

3.TCB在用户空间,每个进程一个系统栈(核心栈)

4.不依赖于操作系统,所以不能真正并行,一个线程阻断其他也不能进程。

核心级别线程(KLT)

1.基于系统调用

2.线程创建、撤销、状态转换由操作系统完成

3.可以并发执行,但是多线程切换慢,调度不能灵活控制。

4.每个线程在系统空间都有一个核心栈,系统空间除去进程表,还专门有一个线程表,可以根据TCB调度不同线程。

5.对于核心级别线程,进程状态不具有实际意义,可以将其省略。

中断与处理器调度


中断

中断是实现多道程序设计的必要条件,在程序运行过程中出现某种紧急事件,必须中止当前正在运行的程序,转去处理此事件,然后再恢复到原来运行的程序,这个过程叫做中断,操作系统是中断驱动的。

中断系统

分为中断装置和中断处理程序。

中断装置做的

1.识别中断源 ,选择优先级最高的中断源

2.保存现场,因为更多是在系统栈中保存程序状态字和指令寄存器,还有一些通用寄存器内容,所以只保存了基础现场信息。

3.引出中断处理程序,将中断向量对应的PSW’, PC’送入寄存器。

  • 中断向量在初始化时就设置好了。
中断寄存器和中断字
  • 用于保存与中断事件相关信息的寄存器称为中断寄存器
  • 中断寄存器中的内容叫做中断字,有些中断没有中断字,比如时钟中断,没有中断字,但是IO中断有中断字,存储的是中断信息。
中断类型

不是每个中断源都有一个中断处理程序,而是每类中断事件都有一个中断处理程序,当中断处理方法相同的时候,可以共用同一个中断处理程序。

强迫性中断:正在运行的程序不期望的,无法预知的
自愿性中断,正在运行的程序有意识安排的,是显式调用。

自愿性中断可以有系统调用(高级语言形式)fd=open(),或者是访管指令(准备参数、svc n(n表示不同模式)、去返回值)

中断嵌套

如果系统在处理一个中断事件的过程中又响应了新的中断,则称发生中断嵌套,理论上中断嵌套层数是没有限制的,新的中断应该优先级更高,具体实现:中断响应后立即屏蔽不高于当前中断优先级的中断源。

系统栈

我们使用系统栈来进行现场恢复和现场保存,系统栈区的位置由系统而定。

系统栈的作用

1.保存现场的一些信息,如程序状态字和指令计数器,还有通用寄存器的内容,这些信息是根据需要保存的。

2.传送操作系统子程序之间相互调用的参数、返回值和地址,这与用户程序使用用户栈的情形相仿,可以看出中断相当于一个子程序调用。

中断屏蔽

硬件系统提供了中断屏蔽指令,利用中断屏蔽指令可以暂时禁止中断源向处理器发出中断请求,当然,在需要的时候可以利用硬件指令解除被屏蔽的中断源。

中断响应逻辑

中断响应后一般需要进一步保存现场

1.关中断(屏蔽所有中断)

2.进一步保存现场(通用寄存器等)

3.开中断(开放更高优先级中断)

4.中断处理

5.关中断(屏蔽所有中断)

两种现场
中断现场

中断现场保存在系统栈中

进程切换现场

进程切换现场保存在进程PCB中

等待和剥夺都是操作系统完成的,因此等待和剥夺均发生在核心态,因而保存在PCB中的现场都是核心级的现场,而非目态程序的现场。

中断分析

1.关于等待

何时等待?处于核心态,无嵌套中断或者有嵌套中断。

等待几次?可能多次

什么级别现场?核心级别现场(在PCB)

2.关于剥夺

和等待相似。

提问:为什么PSW和PC需要一条指令完成

答:进程的程序状态字PSW和指令计数器PC的内容必须由一条指令同时恢复,这样才能保证系统状态由管态转到目态的同时,控制转到上升进程的断点继续执行。

处理器调度

处理器调度是指CPU资源在可运行实体之间的分配。

处理器调度过程

1.保存下降进程现场

系统级别现场->PCB

2.选择上升进程,按照处理器调度算法

3.恢复上升进程的现场

系统级别现场从PCB->寄存器

阵发期

1.CPU阵发期:对处理器的一次连续使用称为CPU阵发期

2.I/O阵发期:对设备的一次连续使用称为I/O阵发期

处于CPU阵发期的进程所需要的处理时间称为阵发时间,不同进程的CPU阵发时间不同,同一进程在不同CPU阵发期的CPU阵发时间也不同。

非剥夺式调度

就绪进程不可以从运行进程中抢占CPU获得处理器进程运行,直到结束或等待。

剥夺式调度

就绪进程可以从运行进程手中抢夺CPU获得处理器进程运行直到结束、等待或出现优先级更高的(创建了高优先级的或者唤醒了更高优先级的)。

调度算法指标

如果作业 J i J_i Ji进入系统的时间为 t s t_s ts,完成时刻为 t f t_f tf,则作业的周转时间为 T = t f − t s T=t_f-t_s T=tfts

作业的周转时间也就是作业等待时间和处理时间(阵发时间)之和,作业平均周转时间 T ‾ = 1 n ∑ i = 1 n T i {\overline{T}=\frac{1}{n}\sum^n_{i=1}T_i} T=n1i=1nTi

如果做作业 J i J_i Ji的周转时间为T,所需运行时间为R,则定义 W = T R W=\frac{T}{R} W=RT为该作业的带权周转时间。

带权周转时间不小于1

平均带权周转时间= W ‾ = 1 n ∑ i = 1 n W i = 1 n ∑ i = 1 n T i R i \overline{W}=\frac{1}{n}\sum^n_{i=1}W_i=\frac{1}{n}\sum^n_{i=1}\frac{T_i}{R_i} W=n1i=1nWi=n1i=1nRiTi

平均周转时间一般衡量同一作业流执行不同调度算法的调度性能。

平均带权周转时间一般衡量不同作业统一调度算法的调度性能。

算法

性能指标有 到达时间 运行时间 开始时间 完成时间 周转时间 带权周转时间

1.先到先服务算法(first come first service,FCFS)

2.短作业优先算法(short job first,SJF)

3.最短剩余时间优先算法(shortest remaining time next,SRTN)(可剥夺)

4.最高响应比优先算法(highest response ratio next,HRN)
R R = B T ( b u r s t t i m e 阵 法 时 间 / 运 行 时 间 ) + W T ( 等 待 时 间 ) B T RR=\frac{BT(burst time阵法时间/运行时间)+WT(等待时间)}{BT} RR=BTBT(bursttime/)+WT

5.最高优先数优先算法(highest priority number first),进程控制块中有一个由数字表示的优先数。(可剥夺)

6.循环轮转算法(round-robin RR),系统为每个进程规定一个时间片,一般几十毫秒或者几百毫秒。

循环轮转算法特别适合分时系统。

7.分类排队算法(MLQ),分为实时(HPF)、分时(RR)、批处理(HPF)。

8.反馈排队算法,每个队列中使用循环轮转算法。

实时调度

满足实时任务各自时间约束条件的调度称为实时调度。

实时任务按照发生规律可以分为以下两类

1.随机性实时任务:由随机事件触发,其发生时刻不确定

2.周期性实时任务:每隔固定事件发生一次

按照事件约束强弱分为硬实时和软实时

1.硬实时,必须满足任务截止期的要求

2.软实时,期望满足截止期要求,但是错过截止期仍然可以容忍。

对于周期性实时任务来说,令 C i C_i Ci为任务 P i P_i Pi的处理事件, T i T_i Ti为任务 P i P_i Pi的发生周期,则任务 P 1 , P 2 . . . . . , P n P_1,P_2.....,P_n P1,P2.....,Pn可调度的必要条件为
∑ i = 1 n C i T i ≤ 1 \sum^n_{i=1}\frac{C_i}{T_i}\leq1 i=1nTiCi1

调度算法

相关概念: 就绪时间 处理时间 完成截止期 发生周期

1.最早截止期调度(earliest deadline first,EDF),上面的条件是调度可以进行的充要条件,剥夺式

2.单调速率调度(RMS),非剥夺式调度,发生频率越高,调度级别越高,实现简单

需要满足条件
∑ i = 1 n C i T i ≤ n ( 2 1 n − 1 ) \sum^n_{i=1}\frac{C_i}{T_i}\leq{n(2^{\frac{1}{n}}-1)} i=1nTiCin(2n11)
3.最小裕度优先调度(minimum laxity first)

L(裕度)=D(任务截止期)-(T(当前时间)+D(剩余处理事件))

裕度为0的时候立即分配任务,该算法可调度的充分条件和最早截止期调度一样。

习题


问:硬件将处理器划分为两种,即管态和目态,这样做会给操作习题的设计带来什么好处?

答:便于设计安全可靠的操作系统。管态和目态是计算机硬件为保护操作系统免受用户程序的干扰和破坏而设置的两种状态。通常操作系统在管态下运行,可以执行所有机器指令;而用户程序在目态下运行,只能执行非特权指令。如果用户程序企图在目态下执行特权指令,将会引起保护性中断,由操作系统终止该程序的执行,从而保护了操作系统。

问:中断向量内的处理器状态字应当标明管态还是目态?为什么

答:应当标明管态。该状态由系统初始化程序设置,这样才能保证中断发生后进入操作系统规定的中断处理程序。

问:中断与程序并发之间的关系是什么?

答:中断是程序并发的前提条件。如果没有中断,操作系统不能获得系统控制权,也就无法按照调度算法对处理器进行重新分配,一个程序将一直运行到结束而不会打断。

问:为什么无法确定用户堆栈段的长度?

答:用户堆栈段的长度主要取决于这些因素:(1)用户进程(线程)中子程序(函数)之间的嵌套调用深度;(2)子程序参数和局部变量的数量和类型(3)动态变量的使用。这些在进程运行前无法确定,由此导致用户堆栈段的长度无法预先准确确定。

问:何为并行?何为并发?在单处理器系统中,下述并行和并发现象那些可以发生?

并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

单处理器不可能发生的并行事件是:进程与进程之间的并行。

可能发生的有:

1.进程和进程之间的并发

2.处理器与设备之间的并行

3.处理器与通道之间的并行

4.通道与通道之间的并行

5.设备与设备之间的并行

问:操作系统为用户和上层软件提供那种界面形式?相应界面形式适用于那种应用环境?

界面形式包括:1.交互终端命令或GUI2.作业控制语言3.系统调用命令

交互终端命令或GUI适合动态编辑和调试程序,作业控制语言适合计算量大的程序,系统调用命令是应用程序和操作系统交互的界面。

问:为何引入多道程序设计?在多道程序系统中,内存中作业的道数是否越多越好?

答:引入多道程序设计技术是为了提高计算机系统资源的利用率。在多道程序系统中,内存中作业的道数并非越多越好。一个计算机系统中的内存、外设等资源都是有限的,只能容纳适当数量的作业,作业道数增加将导致对资源的竞争激烈,进程切换频繁,系统开销增大,从而导致系统执行缓慢,系统效率下降。

问:试比较Linux系统中fork()与clone()两个系统调用之间的差异。

答 :fork()用于创建子进程,子进程与父进程具有各自独立的地址空间。子进程地址空间内容通过从父进程处复制得到。clone()用于创建子进程(线程),父子之间可以共享存储空间。

问:何谓系统开销?

答:运行操作系统程序,实现系统管理所花费的事件和空间称为系统开销。例如:操作系统的内核要占用空间,页面调度时需占用设备资源并耗费处理器时间,进程切换时也要占用处理器时间。

问:为什么说中断是进程切换的必要条件,但不是充分条件?

答:假如在时刻 T 1 T_1 T1与时刻 T 2 T_2 T2之间发生了进程切换,则在时刻 T 1 T_1 T1于时刻 T 2 T_2 T2之间一定执行了处理器调度程序,而处理器调度程序是操作系统底层中的一个模块,运行于管态,说明两个时刻之间处理器状态曾由目态转换到管态。由于中断是系统由目态转到管态的必要条件,所以在时刻 T 1 T_1 T1与时刻 T 2 T_2 T2之间一定发生过中断,也就是说,中断是进程切换的必要条件,然而中断不是进程切换的充分条件。,比如一个进程把消息发给另一个进程,会通过中断,未必会进程去切换。

问:中断发生后,硬件中断装置保证处理器进入管态,这种说法准确吗?

答:不准确:中断发生后,硬件中断装置会引出中断处理程序,中断处理程序是否运行于管态取决于PSW中的处理器状态位,该位的值是在操作系统初始化时设置的,只有初始化程序正确设置该状态位的前提下,才能保证中断后系统进入管态。

问:如果没有中断,是否能够实现多道程序设计?为什么?

答:不能,因为一个程序一旦被调度执行,就将一直执行下去,中间不可能被打断,不可能达到多个进程交替执行的并发目的。

问:下列中断源哪些通常是可以屏蔽的,那些是通常不可屏蔽的?

(1)输入输出中断 可以屏蔽

(2)访管中断 不可屏蔽

(3)时钟中断 可以屏蔽

(4)掉电中断 不可屏蔽

问:下列那些中断事件可由用户自行处理,哪些可由操作系统中断处理程序统一处理?为什么?

(1)溢出 (2)地址越界 (3)除数为0(4)非法指令 (5)掉电

答:一般来说,只影响应用程序自身的中断,可由用户自行处理,比如1和3,其他的可能影响其他用户或者操作系统的中断只能由操作系统中断处理程序统一处理。

问:进程控制块包括哪些内容?

答:(1)通用寄存器(2)PSW PC SP(3)用户栈和系统栈(4)进程控制块(5)地址映射寄存器

问:在使用时间片轮转算法的分时操作系统中,各个终端用户所占处理器的事件总量是相同的吗?

答:不一定,因为处理器是分配给进程(线程)的,而不同终端用户可能由不同数量的线程。

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值