20210107操作系统复习

第一章

多道批处理系统的定义

​ 用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”;然后由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。

分时系统的定义

​ 在一台主机上连接了多个带有显示器和键盘地终端,以交互方式使用计算机,按照时间片轮转原则实现主机资源共享,是秒级OS。

实时系统地定义

​ 是指系统能及时(或即时)响应外部事件地请求,在规定地时间内完成对该事件地处理,并控制所有实时任务协调一致地运行,是毫秒级OS。

操作系统的定义

​ 操作系统是一组能有效地组织和管理计算机硬件和软件资源,合理的对各类作业进行调度,以及方便用户使用的程序的集合。

操作系统的作用

​ 是配置在计算机硬件上的第一层软件,是对硬件系统地首次扩充,其主要作用是管理好这些设备,提高它们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用。

操作系统的四大特征

并发

​ 并发性,是指两个或多个事件在同一时间间隔内发生。

  • 为提高CPU的工作效率,多道程序同时在内存中,为多道程序环境。
  • 在多道程序环境下,在一段时间内,宏观上有多个程序在同时运行,但在处理机系统中,每一时刻却仅能有一程序执行,故微观上这些程序只能是分时的交替运行。

共享

​ 指系统中的资源可供内存中多个并发执行的进程(线程)共同使用。

  • 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程(线程)使用,但应规定在一段时间内,只允许一个进程访问该资源。
  • 同时访问方式:系统中的某些资源,允许在一段时间内由多个进程“同时”对它们进行访问。这里所谓的“同时”,在单处理机环境下是宏观意义上的,而在微观上,这些进程对该资源的访问是交替进行的。

    并发和共享是多用户(多任务)OS的两个最基本的特征。它们是互为存在的条件。

    1.资源共享是以进程的并发执行为条件的,若系统不允许并发执行也就不存在资源共享问题;

    2.若系统不能对资源共享实施有效管理,以协调好诸进程对共享资源的访问,也必然会影响到诸进程间并发执行的进程,甚至根本无法并发执行。

异步

​ 进程是以人们不可预知的速度向前推进,此即进程的异步性。

虚拟

​ 在OS中,把通过某种技术将一个物理实体变为若干个逻辑上对应的物的功能称为“虚拟”。

  • 时分复用技术:利用某设备唯一用户服务的空闲时间,又转去为其他用户服务,使设备得到最充分的利用。
  • 空分复用技术:利用存储器的空闲空间分区域存放和运行其他的多道程序,以此来提高内存的利用率。

第二章

进程的定义

​ 进程是进程实体(程序段、PCB<进程控制块>、数据段)的运行过程,是系统进行资源分配和调度的一个独立单位。

进程的特征

  • 动态性:进程的实质是进程实体的执行过程,动态性是进程的最基本的特征。
  • 并发性:指多个进程实体同存与内存中,且能在一段时间内同时运行。
  • 独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。
  • 异步性:指进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进。

进程实体的组成

  1. 程序段
  2. 相关的数据段
  3. PCB(进程控制块)

进程的基本状态的定义、转化、转化原因

基本状态的定义

​ 就绪状态(Ready):指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。
​ 执行状态(Running):指进程已获得CPU,其程序正在执行的状态。
​ 阻塞状态(Block):指正在执行的进程由于发生某事件(如I/O、申请缓冲区失败等)暂时无法继续执行时的状态,亦即进程的执行受到阻塞。

基本状态的转化/基本状态的转化原因

20210107操作系统复习_第1张图片
20210107操作系统复习_第2张图片
​ 例:处于就绪状态的进程,在调度程序为之分配处理机之后便可执行,相应地,其状态就由就绪状态转变为执行状态;正在执行的进程(当前进程)如果因分配给它的时间片已完而被剥夺处理机暂停执行时,其状态便由执行状态转为就绪状态;如果因发生某事件,致使当前进程的执行受阻,使之无法继续执行,则该进程状态将由执行状态转变为阻塞状态。

原语

​ 原语是由若干条指令组成,用于完成一定功能的一个进程。
​ 原语的特点是原子操作:指一个操作中的动作要么全做,要么全不做,它是一个不可分割的操作。进程的创建、撤销和就绪等都是由OS的内核中的原语来实现的。

进程的原语操作

block/进程阻塞过程

​ 阻塞是进程自身的一种主动行为。

  1. 进入block过程后,由于进程还处于执行状态,所以应立即停止执行,把进程控制块中的现行状态由“执行‘改为阻塞;
  2. 将PCB插入阻塞队列;
  3. 调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换;
  4. 保留被阻塞进程的处理机状态,按新进程的PCB中的处理机状态设置CPPU的环境。

wakeup/进程唤醒过程

​ block原语和wakeup原语是一对作用刚好相反的原语。

  1. 把被阻塞的进程从等待该事件的阻塞队列中移除,将其PCB中出现的现行状态由阻塞改为就绪;
  2. 将该PCB插入到就绪队列中。

suspend/挂起原语

​ 原有状态不变,在原有状态之前加入“静止”二字。
​ 将内存中的进程调入外存中。

active/激活原语

​ 原有状态不变,在原有状态之前加入“活动”二字。
​ 将外存中的进程调入内存中。

进程同步:完成

​ 具体的看超星上的题目,第二章《进程的描述与控制》。
​ wait、signal代码体

typedef struct{//表示资源的数目和进程列表
	int value;//资源的数目
	struct process_control_block*list;//队列
}semaphore;
//wait(S)和signal(S)操作
wait(semaphore *S){P//分配 操作(Passeren)
  S->value--;//资源数目减一
  if(S->value<0)block(S->list);//资源不够就阻塞
}
signal(semaphore *S){//回收 V操作(Vrijgeven)
  S->value++;//资源数目加一
  if(S->value<=0)wakeup(S->list);//有等待进程就唤醒
}

线程的定义、进程与线程的区别

​ 线程是调度和分配的单位。

作用

  1. 线程是调度的基本单位。
  2. 引入线程可提高程序并发执行的程度,可进一步提高系统效率。
  3. 线程的切换可能引起进程的切换。

进程与线程的区别

引入线程的操作系统后,进程是资源的分配单位,线程是调度和分派的单位。

线程的切换代价小于进程。

线程只拥有一点必不可少的、能保证独立运行的资源。进程拥有系统资源。

进程通信的分类

能传送大量数据的的高级通信工具机制分为

  1. 共享存储器系统
  2. 消息传递系统
  3. 管道通信系统

第三章

调度算法

周转时间=完成时间-到达时间
带权周转时间=周转时间/服务时间

  • 先来先服务算法
    1. 先来先服务调度算法容易实现,但是比较适合CPU繁忙性作业。
    2. 先来先服务算法一般与其他算法相结合。
  • 短作业优先算法
    1. 需要预估作业的运行时间,而且非常影响算法。
    2. 对长作业不利。
  • 高响应比优先调度算法(非抢占式)(动态优先权)
    1. 优先权=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
    2. 为每个作业引入一个动态优先级,即优先级是可以改变的,令它随等待时间延长而增加,使长作业的优先级在等待期间不断的增加,等到足够时间后,必然有机会获得处理机。
  • 时间片轮转算法
    1. 时间片太小,利于短作业的完成,但是切换频繁,开销很大,时间片太大,就会退化为先来先服务算法,不能体现交互性。
    2. 时间片非常关键,典型的做法是将时间片设置成一次典型的交互所需要的事件。

死锁的定义

如果一组进程中的每一个进程都在等待仅有该组进程中的其他进程才能引发的事件,那么该组进程是死锁的(Deadlock)。

死锁的必要条件

  1. 互斥条件
    • 进程对资源的使用是排他性的。
  2. 请求和保持条件
    • 进程已经保持了一个资源,但是还要继续申请其他资源。
  3. 不可抢占条件
    • 进程获得资源后,在未使用完成之前,不能被抢占。
  4. 循环等待条件
    • 资源的循环链。

预防死锁的方法

使四个必要条件不能成立,但由于互斥条件使设备的固有属性,不能改变。

  1. 摒弃“请求和保持”条件;
  2. 摒弃“不抢占”条件;
  3. 摒弃“环路等待”条件;

银行家算法

Available可用资源数

Max最大需求数

Allocation已分配数

Need还需求数

Request资源请求数

设Requesti是进程Pi的请求向量,如果Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:

(1) 如果Requesti[j]≤Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。

(2) 如果Requesti[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。

(3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:

Available[j]=Available[j]-Requesti[j];

Allocation[i,j]=Allocation[i,j]+Requesti[j];

Need[i,j]=Need[i,j]-Requesti[j];

(4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

检测死锁的方法

  1. 资源分配图
    • 圆圈代表进程,方框代表资源。
    • 找出既不孤立,也不阻塞的进程,消除其所有连接边。
  2. 死锁定理
    • S为死锁状态的充分条件:当且仅当S状态的资源分配图是不可完全简化的。
    • 简化方法:

      (1) 找出一个既不阻塞又非独立的进程结点P i ,P i 可获得所需资源直至运行完毕,再释放其所占有的全部资源,相当于消去Pi所有的请求边和分配边,使之成为孤立结点。

      (2) 重复上述步骤,若能使所有的进程结点都成为孤立结点,则称该图是可完全简化的;否则,则称该图不可完全简化。

  3. 死锁检测中的数据结构

第四-五章

固定分配分区的管理方式

基本思想:

将内存用户空间划分为若干个固定大小的区域,称为分区,每个分区中只装入一道作业,这样便可以实现几道作业并发运行。

划分分区的方法:

  1. 分区大小相等, 所有的内存分区大小相等。
  2. 分区大小不等。

具体实现:

  1. 将分区按大小排队
  2. 建立分区使用表,表项包括:①分区号②分区起始地址③分区大小④分区状态
  3. 当程序装入时,由内存分配程序检索分区使用表
  4. 若找到符合要求的分区,则完成内存分配,并进行标记;
  5. 若未找到,则拒绝内存分配。

动态分区分配方式

动态分区分配是根据进程的实际需要,动态地为之分配内存空间。

初始内存用户区全部为空闲,然后到达一个进程,为其分配相应要求的空间。

分区个数、分区大小不固定。

首次适应算法(first fit,FF)

算法要求空闲分区链以地址递增的次序链接。

在分配内存时,从链首开始顺序查找,直至找到一个大小能满足的空闲分区位置;若找不到,则分配失败。

循环首次适应算法(next fit,NF)

该算法是对FF算法的改进,在分配内存时,从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个大小能满足的空闲分区位置;若找不到,则分配失败。

最佳适应算法(best fit,BF)

指每次为作业分配内存时,总是把能满足要求,又是最小的空闲区分配给作业,避免“大材小用”。该算法要求把所有的空闲区按其容量从小到大的顺序形成一链表。

这个算法从局部看似乎是最佳的,但是每次分配后,剩余下来的空闲区总是最小的,会留下很多碎片。

最坏适应算法(worst fit,WF)

最坏适应分配算法要扫描整个空闲分区表或链表,而且算法要求把所有的空闲区按其容量从大到小的顺序形成一链表,然后总是挑选一个最大的空闲区分割给作业使用。

其优点是产生碎片的几率最小,但是缺乏大的空闲区。

动态分配分区的回收过程

  1. 回收内存块前后无空闲块
  2. 回收内存块前有后无空闲块
  3. 回收内存块前无后有空闲块
  4. 回收内存块前后均有空闲块

基本分页存储管理思想、地址结构、页表的作用、逻辑地址到物理地址的转换

管理思想

进程的逻辑地址空间按照一定的大小分成若干个页面

内存的物理地址空间按照同样的大小分成若干个

将若干个页面装入到多个不相邻的物理块中,就称为分页存储。

地址结构

20210107操作系统复习_第3张图片

页表的作用

基本作用是将用户地址空间中的逻辑地址映射为内存空间中的物理地址。

逻辑地址到物理地址的转换

若已知一个逻辑地址空间中的地址为A ,页面大小为L,则页号P和页内地址d可按下式求得:

P= INT [A/L]

d=[A] MOD L

物理地址=块号*块大小(页面大小)+块内地址(页内地址)

例题1:

如果程序中的逻辑地址为7,怎么转换成物理地址呢?页面大小为4.
页号 7/4=1
页内地址 7%4=3
所以块号为2,
2*4+3=11

例题2:

如果程序中的逻辑地址为3470,怎么转换成物理地址呢?页面大小为1024。页表如下:
页号 3470/1024=3
页内地址 3470%1024=398
所以块号为8,
8*1024+398=8590

基本分段存储管理思想、地址结构、段表的作用、逻辑地址到物理地址的转换

管理思想

把自己的作业按照逻辑关系划分若干个段,每个段都从0开始编址,并有自己的名字和长度。

地址结构

段号 段内地址
31-----16 15-----0

段表的作用

实现逻辑段到物理内存区的映射。

逻辑地址到物理地址的转换

物理地址=段的基地址+段内地址

逻辑地址为5,则其物理地址为多少?

段号 段内地址
1 1

由此得出段的基地址为6

基地址 段内地址
5 1

物理地址=段的基地址+段内地址=6+1=7

分页和分段的区别

  1. 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
  2. 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
  3. 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。

段页式存储管理思想

分页存储管理系统是为了更好的提高内存的使用率,分段能够更好的满足用户的需要,所以可以综合起来,形成一种新的存储管理方式—段页式存储管理方式。

虚拟存储器的定义、理论基础

定义

虚拟存储器是指具有请求调入功能和置换功能,能够从逻辑上对内存容量加以扩充的一种存储器系统。

理论基础

在程序运行之前没有必要将其全部装入内存,仅需要将当前运行的少数页面或者段装入内存里,其余的留在硬盘上,等需要时再调入。如果内存已满,再按照某种策略将原有的内容置换出去。

请求分页存储管理思想、地址结构、页表、逻辑地址到物理地址的转换、置换算法(三个)、缺页中断

管理思想

将基本的分页存储管理与虚拟存储器相结合起来的存储管理方式称为请求分页存储管理方式。

在请求分页存储管理方式下,只需要调入程序的部分页进入到内存空间中。所以除了基本的分页存储管理,还需要增加请求调入页面功能和页面置换功能。

置换算法

  1. 先进先出(FIFO)页面置换算法

    该算法总是淘汰最先进入内存的页面,即选择在内存中停留时间最久的页面予以淘汰。该算法实现简单,但是置换率较高。

  2. 最佳(Optimal)置换算法

    该算法所选择的被淘汰页面,将是以后永不使用的,或者是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。

  3. 最近最久未使用算法 (LRU)

    根据页面调入内存后的使用情况进行决策的,它总是选择最近最久未使用的页面予以淘汰。该算法是一种比较好的算法,但是需要较多硬件的支持。

缺页中断

  1. 每当所要访问的页面不在内存中,便产生一缺页中断,请求OS将所缺的页面调入内存。
  2. 需要保护CPU环境、分析原因、转入到缺页中断处理程序执行。
  3. 缺页中断就算指令执行期间,也要立即被响应。
  4. 一条指令在执行期间可能产生多次缺页中断。

第六章

I/O层次:设备无关性、驱动程序

设备无关性

编程时要用打印机,只要写打印机的逻辑名字。

应用程序中所使用的设备,不局限于使用某个具体的物理设备,这个称为设备无关性。

优点:I/O设备可以更换,而且应用程序也不需要修改。

驱动程序

  1. 主要工作就是传输。
  2. 驱动程序将对硬件操作定义为若干个函数。
  3. 驱动程序与硬件紧密相关。

驱动程序的主要任务就是启动指定设备,完成上层指定I/O工作。(先启动打印机,然后将函数转化为打印机听得懂的命令,打印机中设备控制器的命令格式,比如某个寄存器的操作,这个跟硬件本身相关。)

缓冲区的管理方式及并行时间段

假脱机技术的定义

引入多道程序后,可以利用其中的一道程序来模拟时脱机输入输出操作时外围控制机的功能,这样的技术称作为SPOOLing技术,或者称为假脱机技术。

磁盘调度策略

先来先服务

这是一种最简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。

该算法的优点是公平,简单,且每个进程的请求都能依次的得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。

最短寻道时间优先算法

该算法选择这样的进程:其要求访问的磁盘与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。
该算法相比先来先服务算法有更好的寻道性能,曾被广泛使用。但是会产生“饥饿”现象,距离较远的磁道可能长时间得不到访问。

扫描算法(电梯算法)

扫描(SCAN)算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头当前的移动方向。该算法的调度过程如电梯运行,所以又称电梯算法。

例如:

当磁头正在自里向外移动时,扫描算法所考虑的下一个访问对象,是在当前磁道之外,又是距离最近的。这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁臂换向为自外向里移动。

该算法可以避免饥饿现象,且访问效率高。

循环扫描算法

循环扫描算法规定磁头单向移动。

例如:

只是自里向外移动,当磁头一道最外的磁道并访问后,磁头立即返回到最里的欲访问的磁道。也就是将最小磁道紧接着最大磁道构成循环,形成循环扫描。

磁头单向移动可以克服以下问题:当磁头刚从里向外移动过某一磁道时,恰有一进程请求访问此磁道,这时该进程必须等待,待磁头从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被严重地推迟。

第七-八章

文件的定义

文件是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为具有结构文件和无结构文件两种。

文件的逻辑结构定义

从用户观点出发所观察到的文件组织形式,它独立于文件的物理特性,称为文件的逻辑结构。

文件的逻辑组织形式:顺序文件、索引文件、索引顺序文件

  1. 顺序文件:指由一系列记录按某种顺序排列所形成的文件,其中的记录可以是定长记录或可变长记录。
  2. 索引文件:指可变长记录文件建立一张索引表,为每个记录设置一个表项,以加速对记录的检索速度。
  3. 索引顺序文件,这是顺序文件和索引文件相结合的产物,在为每个文件建立一张索引表时,为一组记录中的第一个记录建立一个索引表项。

文件的物理结构定义

连续组织方式,链接组织方式,索引组织方式,都是系统将文件存储在外存上所形成的一种存储组织形式,是用户不能看见的,称为文件的物理结构。

文件物理结构及其组织形式

连续组织方式(连续存储空间)

为每一个文件分配一组相邻接的盘块,这样的外存存储方式称为:连续组织方式。

优点:

  1. 访问连续文件比较容易(只要连续的访问盘块就可以)
  2. 访问速度快(上一块到下一块移动距离短)

缺点:

  1. 必须事先知道文件的长度,但是有些文件是动态增长的。
  2. 空间会浪费(小空间无法分配)
  3. 不能做插入和删除操作。

链接组织方式(离散存储空间)

将文件装到多个离散的盘块中,再通过每个盘块上的链接指针,将多个离散的盘块链接成为一个链表,称为链接组织方式。

优点:

删除、插入等操作非常容易,无需事先知道文件的大小。

缺点:

FAT文件分配表占内存较大,浪费空间。

索引组织方式(一级索引)(离散存储空间)

索引组织方式:为每个文件分配一个索引块,把文件存储的盘块号记录在内,将目录项指向索引块即可。

例题1:假设盘块是512 B,每个盘块号占4B,则一个盘块能存放多少个盘块号 ?所指向的文件内容块最多是多少个?所能存储的文件容量最大是多少?

盘块号个数:512/4=128(个)块

文件内容块:128个块

最大文件容量:128*512=64KB

优点:

能够较快的查找文件,且灵活的进行插入和删除操作。

例题2:某文件系统采用多级索引结构,若磁盘块的大小为512B,每个块号需占3B,那么根索引采用一级索引时的文件最大长度为()KB;采用二级索引时的文件最大长度为()KB.

A 85 B 170 C 512 D 1024
A 512 B 1024 C14450 D28900

答:

A

盘块个数:512B/3B=170个

一级索引文件长度:170* 512B = 87040B = 85KB
C
二级索引文件长度:170 * 170 * 512B = 14450KB

例题3:设文件索引节点有8个地址项,每个地址项大小为4B,其中5个地址项为直接地址索引,2个地址项为一级间接索引,1个地址项为二级间接索引。磁盘索引块和磁盘数据块大小为1KB。若要访问文件的逻辑块号分别为8和518(块号从0开始)。

A 直接地址索引和一级间接地址索引

B 直接地址索引和二级间接地址索引

C 一级间接地址索引和二级间接地址索引

D 一级间接地址索引和一级间接地址索引

答:C

直接地址索引:5个逻辑块:0~4

一级间接索引:1KB/4B=256 256*2=512逻辑块:5~516

二级间接索引:256^2=65536逻辑块:517~66051

文件的FCB、目录、索引结点

FCB(文件控制块)

对系统中的大量文件施以有效的管理,在文件控制块中,通常包含三类信息,即基本信息、存取控制信息和使用信息。

目录

把PCB(文件控制块)的有序集合称为文件目录,即一个PCB(文件控制块)就是一个文件目录项。

索引节点

将文件名和文件信息分开,然后用一个数据结构存放文件信息,这个数据结构称为索引结点。

外存的管理方式:位示图

位示图是利用二进制的1位来表示磁盘中一个盘块的使用情况。值为0,表示空闲,值为1,表示已分配。
20210107操作系统复习_第4张图片

盘块号=n*(i-1)+j-1;

n为一行的位数,i,j为行标和列标。

行号=(盘块号 )DIV n+1

列号=(盘块号)MOD n+1

例题:如果是第35个盘块,是存放在第几行,第几列?如果是第23个盘块,是存放在第几行,第几列?

35,第三行,第四列

23,第二行,第八列

位示图法-盘块的分配

  1. 顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位(“0”表示空闲时)。
  2. 将所找到的一个或一组二进制位, 转换成与之相应的盘块号。假定找到的其值为“0”的二进制位,位于位示图的第i行、第j列,则其相应的盘块号应按下式计算:b=n(i-1)+j-1, n代表每行的位数。
  3. 修改位示图, 令map[i,j]=1。

位示图法-盘块的回收

  1. 将回收盘块的盘块号b转换成位示图中的行号和列号。 转换公式为:

    i=(b)DIV n+1

    j=(b)MOD n+1

  2. 修改位示图, 令map [i,j]=0。

例题2:若8个字长(假设字长为32位)组成的位示图管理磁盘空间,用户归还一个块号为100的盘块时,它对应位示图的位置是()(行列号均从1开始,块号从1开始)。

A 行号为3,列号为5

B 行号为4,列号为4

C 行号为3,列号为4

D 行号为4,列号为5

答:B

行号:i==(b-1)DIV n+1=(100-1)/32+1=3+1=4

列号:j=(b-1)MOD n+1=(100-1)%32+1=3+1=4

第九章

系统调用

定义

系统调用(System Call)提供了用户程序和OS内核之间的接口,是用户程序获得OS服务的唯一途径。

实际编程中,离不开系统调用。

内核函数

  1. 处理I/O请求:sys_read、sys_write、sys_open、sys_close
  2. 进程:sys_fork、sys_execve、sys_kill
  3. 时间:sys_time、sys_settimeofday
  4. 内存:sys_mmap、sys_brk

与函数调用对比

  1. 如果系统调用的实现机制与函数调用一样,则:

    (1)应用程序自己也可以直接操作硬件。(CALL 需要知道函数入口)

    (2)严重的安全隐患:一个应用程序出现错误,可能导致整个计算机系统崩溃

    启发:系统调用的执行需要进行CPU工作模式的切换。

  2. 用户程序可以调用内核的任意函数,甚至可以绕过OS的检查,抢占硬件资源。

    启发:保证用户程序只能从给定的位置调用内核。

运行状态

为了安全性考虑,为了防止应用程序对OS的破坏,应用程序和OS的内核是运行在不同的状态。

从给定位置调用内核

OS的所有系统调用,都是通过同一个中断入口来是实现的。比如,Linux是80H。

内核函数都有一个唯一的编号,系统调用时,将编号放入指定寄存器或者内存即可,即为中断号。

系统调用–过程

用户程序使用系统调用过程(Linux):

−push size/将数据块大小压入堆栈/

−push buf/将缓冲区指针压入堆栈/

−push fd; /将文件名压入堆栈/

−push num;/将read的系统调用编号压入堆栈/

−int 80h;

−add esp, 10h

− iret

例题:read系统调用的执行过程

  1. 调用read库函数
  2. 存储系统调用的编号到寄存器中,并通过中断指令,请求执行OS代码
  3. 从固定点OS_entry进入OS内核,通dispatcher执行系统调用
  4. syscall_handler结束,返回到OS_entry
  5. CPU执行iret返回到用户空间库函数中;
  6. 库函数执行完返回用户程序,继续执行下一条语句

API

为了方便用户编程,为了提高程序的移植性,提出了应用程序API(Application Programming interface)。

用户态、核心态

操作系统在系统态运行,而应用程序只能在用户态运行。在实际运行过程中,处理机会在系统态和用户态间切换。

你可能感兴趣的:(大学课程期末复习,操作系统)