操作系统篇

操作系统篇

计算机系统概述

img

什么是操作系统

控制和管理整个计算机系统硬件和软件资源,合理组织、调度计算机的工作与资源分配,进而为用户和其他软件提供方便接口和环境的程序集合。

  • 作为计算机资源的管理者
    • 处理机管理
    • 存储器管理
    • 文件管理
    • 设备管理
  • 为用户提供计算机软硬件的接口
    • 命令结构
    • 程序结构(系统调用)
    • GUI
  • 作为扩充机器存在,在裸机的基础上,增加了一层软件,增加了计算机的易用性和,方便用户使用,成为虚拟机器或扩充机器

特征:

并发性:指两个或多个事件在同一时间间隔内发生;(并行性:在同一时刻…)
共享性:系统中的资源可供内存中多个并发执行的进程共同使用;
虚拟性:把一个物理上的实体变成若干个逻辑上的对应物;
异步性:进程的执行并不是一气呵成的,而是以不可预知的速度向前推进.

简述处理机的两种状态

CPU只能执行两种性质的程序:操作系统内核程序、用户自编程程序
内核程序是应用程序的管理者,为了严格区分两种程序,操作系统在具体实现上划分了用户态(目态)核心态(管态),CPU在用户态下只能执行非特权指令,而在核心态下可以执行特权指令(I/O指令、置中断指令)

中断和异常?

1.中断的引入——为了支持CPU和设备之间的并行操作

中断也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断、时钟中断等。这一类中断通常是与当前执行的指令无关的事件。

2.异常的引入——表示CPU执行指令本身时出现的问题

异常也称内中断、例外或陷入,指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、缺页异常等。对异常的处理一般要依赖与当前程序的运行现场,不能被屏蔽。

中断的处理流程:关中断,保存断点,引出中断服务程序,保存现场和屏蔽字,开中断,执行中断服务程序,关中断,恢复现场和屏蔽字,开中断、中断返回。

系统调用是什么?与一般过程调用有何区别?

答:系统调用是操作系统与应用程序之间的接口,它是用户程序间接操作计算机资源的唯一途径。
一般过程调用工作在用户态,通过过程调用语句实现,可以无限制嵌套调用;
系统调用运行在核心态,通过访管中断进入,不可以嵌套调用。

运行状态不同

运行状态不同。系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。

调用方法不同

调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。

返回问题

返回问题。在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析――是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。

进程管理

img

简述进程与线程

在多道程序环境下,允许多个程序并发执行,失去了封闭性,拥有了间断性和不可重复性,为了更好的描述和控制,引入进程的概念,实现操作系统的并发性和共享性。进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。
早期,进程在操作系统的中拥有独立的资源,但进程的切换会是计算机利用率下降,需要引入轻量级进程,就是线程。线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,每条线程执行不同的任务。

进程与线程的区别:

进程是资源的分配和调度单位,线程是CPU调度和分派单位
线程依赖于进程,一个进程至少拥有一个线程
进程拥有自己独立的地址空间,线程共享进程的地址空间
进程是拥有系统资源的一个独立单位,线程不拥有资源
进程间切换开销远大于线程
多线程程序中一个线程崩溃,整个程序就崩溃了;多进程程序一个进程崩溃,不会影响其他进程

简述进程和程序的区别

  • 程序是静态的,进程是动态的;程序是永久的,进程是程序在数据集上的一次执行,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤销而消亡,是暂时的
  • 进程具有并发性,而程序没有
  • 进程是竞争计算机资源的单位,程序不是
  • 进程和程序不是一一对应的:一个程序可以对应多个进程(多个进程执行同一个程序);一个进程可以执行一个或多个程序
  • 程序仅是指令的有序集合。而进程则是由程序、数据和进程控制块组成。

进程的通信方式?

1.共享内存

顾名思义,共享内存就是两个进程同时共享一块内存,然后在这块内存上的数据可以共同修改和读取,达到通信的目的。

2.无名管道

无名管道是半双工的通信方式;并且只能在具有亲缘关系的进程之间使用(亲缘关系是指进程间的父子关系,兄弟关系等),具有亲缘关系的进程在创建时同时拥有一个无名管道的句柄,可以进行读写;无名管道不存在磁盘节点,只存在与内存中用完即销毁。

3.命名管道

命名管道也是半双工的通信方式;可以在不具有亲缘关系的进程间通信;有名管道存在磁盘节点,有对应的FIFO文件,凡是可以访问该路径的文件的进程均可以进行通信。

4.消息队列

消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5.套接字

套接字是网络编程的api,通过套接字可以不同的机器间的进程进行通信,常用于客户端进程和服务器进程的通信。

6.信号

信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个),它也是用户进程之间通信和同步的一种原始机制。一个键盘中断或者一个错误条件(比如进程试图访问它的虚拟内存中不存在的位置等)都有可能产生一个信号。Shell也使用信号向它的子进程发送作业控制信号。

进程5状态:

创建态、就绪态、运行态、阻塞态、终止态

img

操作系统创建进程后,进程从创建态转到就绪态,开始竞争CPU资源
当进程获得CPU,进程就由就绪态转到运行态;
当一个时间片到程序还没执行完,操作系统将进程从运行态转到就绪态;
当进程请求I/O设备时,进程主动从运行态转到阻塞态;
当I/O结束中断时,该进程从阻塞态转到就绪态,重新竞争处理机;
当程序正常执行结束,进程进入终止态。

父子进程是否可以并发运行?

答:可以,父进程创建子进程后,子进程也成为了一个可以独立运行的单位,虽然子进程继承了父进程的全部资源,但是只要两个进程创建的程序和数据没有冲突,则它们可以并发运行。

进程的调度算法有哪些?

1.先来先服务 first-come first-serverd(FCFS)

按照请求的顺序进行调度。非抢占式,开销小,无饥饿问题,响应时间不确定(可能很慢);
对短进程不利,对IO密集型进程不利。

2.最短作业优先 shortest job first(SJF)

按估计运行时间最短的顺序进行调度。非抢占式,吞吐量高,开销可能较大,可能导致饥饿问题
对短进程提供好的响应时间,对长进程不利

3.优先级调度算法

为每个进程分配一个优先级,按优先级进行调度。为了防止低优先级的进程永远等不到调度,可以随着时间的推移增加等待进程的优先级。

4.时间片轮转

将所有就绪进程按 FCFS 的原则排成一个队列,用完时间片的进程排到队列最后。抢占式(时间片用完时),开销小,无饥饿问题,为短进程提供好的响应时间;
若时间片小,进程切换频繁,吞吐量低;若时间片太长,实时性得不到保证。

5.最高响应比优先

响应比 = 1+ 等待时间/处理时间。同时考虑了等待时间的长短和估计需要的执行时间长短,很好的平衡了长短进程。非抢占,吞吐量高,开销可能较大,提供好的响应时间,无饥饿问题。

6.多级反馈队列调度算法

设置多个就绪队列1、2、3...,优先级递减,时间片递增。只有等到优先级更高的队列为空时才会调度当前队列中的进程。如果进程用完了当前队列的时间片还未执行完,则会被移到下一队列。
抢占式(时间片用完时),开销可能较大,对IO型进程有利,可能会出现饥饿问题。

同步和互斥?

1.同步

多个进程因为合作而使得进程的执行有一定的先后顺序。比如某个进程需要另一个进程提供的消息,获得消息之前进入阻塞态;

2.互斥

多个进程在同一时刻只有一个进程能进入临界区

同步表现为直接制约,如管道通信,一个进程写,一个进程读,它们是相互制约的。
互斥表现为间接制约,比如多个进程同时请求打印机(无SPOOLing技术时)

进程进入临界区的调度准则:

1.空闲让进 当无进程处于临界区,可允许一个请求进入临界区的进程立即进入自己的临界区
2.忙则等待 当已有进程进入自己的临界区,所有企图进入临界区的进程必须等待
3.有限等待 对要求访问临界资源的进程,应保证该进程能在有限时间内进入自己的临界区
4.让权等待 当进程不能进入自己的临界区,应释放处理机

进程同步相关概念

为什么需要进程同步:进程有时候会和其他进程共享一些资源,比如内存、数据库等。当多个进程同时读写同一份共享资源的时候,可能会发生冲突。因此需要进程的同步,多个进程按顺序访问资源。

互斥量 Mutex:互斥量是内核对象,只有拥有互斥对象的线程才有访问互斥资源的权限。因为互斥对象只有一个,所以可以保证互斥资源不会被多个线程同时访问;当前拥有互斥对象的线程处理完任务后必须将互斥对象交出,以便其他线程访问该资源;

信号量 Semaphore:信号量是内核对象,它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。信号量对象保存了最大资源计数当前可用资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就减1,只要当前可用资源计数大于0,就可以发出信号量信号,如果为0,则将线程放入一个队列中等待。线程处理完共享资源后,应在离开的同时通过ReleaseSemaphore函数将当前可用资源数加1。如果信号量的取值只能为0或1,那么信号量就成为了互斥量;

事件 Event:允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。事件分为手动重置事件和自动重置事件。手动重置事件被设置为激发状态后,会唤醒所有等待的线程,而且一直保持为激发状态,直到程序重新把它设置为未激发状态。自动重置事件被设置为激发状态后,会唤醒一个等待中的线程,然后自动恢复为未激发状态。

临界区 Critical Section:指的是访问资源的那段代码任意时刻只允许一个线程对临界资源进行访问。拥有临界区对象的线程可以访问该临界资源,其它试图访问该资源的线程将被挂起,直到临界区对象被释放。

非抢占式调度与抢占式调度

非抢占式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生进程调度进程调度某事件而阻塞时,才把处理机分配给另一个进程

抢占式:操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其他就绪进程的调度方式

死锁问题

在这里插入图片描述

死锁的概念:在2个或多个并发进程中,如果每个进程持有某有资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。

通俗地讲,就是2个或多个进程被无限期地阻塞、相互等待的一种状态。

死锁产生的原因:系统资源不足,**进程推进顺序非法

产生死锁的必要条件:

1.互斥条件:一个资源每次只能被一个进程使用
  
2.不可剥夺条件:进程已获得资源,在未使用完之前,不能被其他进程强行剥夺,只能主动释放
  
3.请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
  
4.循环等待条件:即进程集合{p0,p1,p2,p3……pn};p0正在等待p1占用的资源,p1正在等待p2占用的资源,pn正在等待p0占用的资源。
  
只要上述一个条件不成立,就不会发生死锁。

要使一个系统不发生死锁,一般可采用哪些方法?简述它们的实现原理。

死锁预防:破坏死锁的四个必要条件中的一个或几个,来预防死锁的发生;
死锁避免:将系统分为安全和不安全状态,每当系统为进程分配资源时都要检测系统是否会进入不安全状态,若会,则停止分配,进入等待状态;
死锁检测:若不加任何限制措施,系统可在为进程分配资源的同时,记录下来进程的请求和分配信息,然后按某种算法计算系统是否会发生死锁;
死锁解除:系统发生死锁时通常采用杀掉进程或剥夺进程资源的方法使系统解除死锁。

饥饿和死锁的区别

  • 进入饥饿的进程可以只有一个,但死锁进程必须大于两个
  • 处于饥饿的进程可以是一个就绪进程,但死锁进程一定是阻塞进程

银行家算法

银行家算法是一种避免死锁的算法,它的原理是避免系统进入不安全状态从而避免死锁。在分配资源之前,它会检查资源是否充足,如果充足,它会试分配资源,再检查此时系统是否处于安全状态,如果处于安全状态,那么就正式分配资源,否则拒绝分配资源。

什么是安全状态?当系统不安全时就是系统进入了死锁状态吗?

答:安全状态是指系统按照某种进程顺序,为进程分配资源,使得每个进程都能获取所需的最大资源,并顺利完成。
不是,但是死锁状态一定是不安全状态

内存管理:

img

存储器管理应具有的功能

存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用存储器,提高存储器的利用率以及在逻辑上扩充存储器。

  • 内存的分配与回收
  • 地址变换(将逻辑地址变换为物理地址
  • 扩充内存(通过虚拟存储技术,在逻辑上扩充内存)
  • 内存保护(保证在内存中的各作业都在自己的存储空间下运行,互不干扰)

将用户程序变为可在内存中执行程序的步骤

  • 编译:编译程序将用户程序编译成为若干个目标模块
  • 链接:将目标模块和相关库函数链接成一个完整的装入模块
  • 装入:由装入程序将装入模块装入内存中运行

程序有哪几种装入方式?又有哪几种链接方式?

答:装入方式:绝对装入、静态重定位、动态重定位。
链接方式:静态链接、装入时动态链接、运行时动态链接。

覆盖技术和交换技术

覆盖技术,将内存分为一个固定区和若干个覆盖区,固定区存放最活跃的程序段,固定区中的程序不会在运行过程中调入调出;覆盖区中的程序段在运行过程中根据需要进行调入调出。
交换技术,内存紧张情况下,将某些进程换出内存,称为挂起,但该进程的PCB仍驻留内存,换出的程序存放在磁盘上的对换区。
区别:覆盖技术是同一个进程中交换技术是在不同进程之间

为了实现动态重定位需要哪些硬件?

答:至少需要在系统中增设一个重定位寄存器,用来存放正在执行作业的内存地址,每次访问数据时,由硬件自动将相对地址与重定位寄存器中的起始地址相加,形成实际的物理地址。

固定分区(nxedpartitioning)。

​ 固定式分区的特点是把内存划分为若干个固定大小的连续分区。分区大小可以相等:这种作法只适合于多个相同程序的并发执行(处理多个类型相同的对象)。分区大小也可以不等:有多个小分区、适量的中等分区以及少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。

优点:易于实现,开销小。

缺点主要有两个:内碎片造成浪费;分区总数固定,限制了并发执行的程序数目。

动态分区(dynamic partitioning)

​ 动态分区的特点是动态创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。与固定分区相比较其优点是:没有内碎片。但它却引入了另一种碎片——外碎片。动态分区的分区分配就是寻找某个空闲分区,其大小需大于或等于程序的要求。若是大于要求,则将该分区分割成两个分区,其中一个分区为要求的大小并标记为“占用”,而另一个分区为余下部分并标记为“空闲”。分区分配的先后次序通常是从内存低端到高端。动态分区的分区释放过程中有一个要注意的问题是,将相邻的空闲分区合并成一个大的空闲分区。

分区分配算法

最先适配法(nrst-fit): 从前往后,依次寻找适配的分区

按分区在内存的先后次序从头查找,找到符合要求的第一个分区进行分配。该算法的分配和释放的时间性能较好,较大的空闲分区可以被保留在内存高端。但随着低端分区不断划分会产生较多小分区,每次分配时查找时间开销便会增大。

下次适配法(循环首次适应算法 next fit): 从上次分配分区的下一个分区开始查找

按分区在内存的先后次序,从上次分配的分区起查找(到最后{区时再从头开始},找到符合要求的第一个分区进行分配。该算法的分配和释放的时间性能较好,使空闲分区分布得更均匀,但较大空闲分区不易保留。

最佳适配法(best-fit):找最合适的分区适配

按分区在内存的先后次序从头查找,找到其大小与要求相差最小的空闲分区进行分配。从个别来看,外碎片较小;但从整体来看,会形成较多外碎片优点是较大的空闲分区可以被保留。

最坏适配法(worst- fit):

按分区在内存的先后次序从头查找,找到最大的空闲分区进行分配。基本不留下小空闲分区,不易形成外碎片。但由于较大的空闲分区不被保留,当对内存需求较大的进程需要运行时,其要求不易被满足。

具体图解可参考https://blog.csdn.net/cm_cyj_1116/article/details/53518790

在可变分区管理中,需要哪些硬件机制?

答:采用可变分区方式管理时,一般均采用动态重定位方式装入作业;
地址变换要靠硬件支持,主要是两个寄存器:基址寄存器和限长寄存器,这两个值确定了一个分区的位置和大小;
限长寄存器存放作业所占分区的长度;
基址寄存器则存放作业所占分区的起始地址;
地址转换时:根据逻辑地址与限长值比较,如果不有超过这个值,表示访问地址合法,再加上基址寄存器中的值就得到了绝对地址了,否则形成“地址越界”中断。

页面置换算法有哪些?

1.最佳(OPT)置换算法

从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。 即被淘汰页面是以后永不使用或最长时间内不再访问的页面。

2.先进先出(FIFO)置换算法

是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。 即优先淘汰最早进入内存的页面。(往前看)

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

这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。 即淘汰最近最长时间未访问过的页面。(往前看)

4.时钟(CLOCK)置换算法

什么是页表和快表,有什么作用?

页表指出逻辑地址中的页号与所占主存块号的对应关系。作用:页式存储管理在用动态重定位方式装入作业时,要利用页表做地址转换工作。快表就是存放在高速缓冲存储器的部分页表。它起页表相同的作用。由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。

分段分页方式的比较

1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;或者说,分页仅仅是由于系统管理的需要,而不是用户的需要(也是对用户透明的,用户不知道具体操作)。段是信息的逻辑单位,它含有一组其意义相对完整的信息(比如数据段、代码段和堆栈段等)。分段的目的是为了能更好的满足用户的需要(用户也是可以使用的)。

2)页的大小固定且由系统确定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,通常由编辑程序在对源程序进行编辑时,根据信息的性质来划分。

3)分页的作业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符(线性地址的16进制表示),即可表示一地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名(比如数据段、代码段和堆栈段等),又需给出段内地址。

4)页和段都有存储保护机制。但存取权限不同:段有读、写和执行三种权限;而页只有读和写两种权限

注:分页之所以以是一维的,原因du在于分页的大小是zhi固定的,dao且页码之间是连续的,操作zhuan的时候只需shu给出一个地址,就能够根据所给地址的大小与页面大小计算出在页码和页内地址,粗略举例,比如页面大小是4KB,给一个地址为5000,可以算出所在页码是2,页内地址是5000-4000=1000,即在第二页的第1000个位置。 而分段的因为每段的长度不一样,必须给出段码和段内地址

试述缺页中断与一般中断有何区别?

答:缺页中断的处理过程与一般中断相似。
主要区别:
一般中断只需要保护现场,然后就直接跳到需及时处理的地方。

缺页中断除了保护现场之外,还要判断内存中是否有足够的空间存储所需的页或段,然后再把所需页调进来再使用。

2、结果不同

一般中断在处理完之后返回时,执行下一条指令。

缺页中断返回时,执行产生中断的那一条指令。

3、次数不同

在指令执行期间产生和处理缺页中断信号,一条指令在执行期间,可能产生多次缺页中断。

一般中断只产生一次,发生中断指令后转入相应处理程序进行处理,恢复被中断程序现场

img

文件管理

文件逻辑结构

文件逻辑结构是说明文件内部如何被组织起来的

顺序结构:顺序存放记录,增加删除一个记录比较困难
索引结构:在索引表中存放记录,方便快速查找
索引顺序结构:先将记录分组,在用索引表记录

文件物理结构

文件物理结构是说明文件是如何存放在外存上的

连续分配:文件会在磁盘上占用一组连续的块
链接分配:用链接或者文件分配表实现离散分配
索引分配:每个文件都加入一张索引表,如果索引表过大,可以采用多级索引的方式
散列文件:定记录的键值或通过Hash函数转换的键值直接决定记录的物理地址。这种映射结构不同于顺序文件或索引文件,没有顺序的特性。散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。

文件存储空间的管理

操作系统如何管理外存空闲块,空闲磁盘块的管理

  • 空闲表法(适用于连续分配)
  • 空闲链表法
  • 位示图法(离散、连续均使用)
  • 成组链接法(大型文件系统)

磁盘调度算法有哪些?

先来先服务算法:按进程请求访问磁盘的先后次序进行调度
最短寻道时间优先算法:访问与当前磁头所在磁道最近的磁道
扫描算法(SCAN 电梯算法):优先考虑磁头的当前移动顺序,需要移动到要访问的最边缘磁道才会变换方向,类似与电梯
循环扫描算法(CSCAN):与SCAN类似,但磁头移动到要访问的边缘磁道后,立即返回起点,返回途中不响应任何请求

设备管理

img

I/O控制方式

程序直接控制方式:CPU发出I/O命令后不断轮询检查IO控制器状态(浪费CPU资源)
中断驱动控制方式(中断程序):CPU发出I/O命令后可以去处理别的进程,当本次IO结束后设备控制器会向CPU发送中断信号,让他回来继续处理。+
DMA方式(直接存储器存取):CPU发出IO命令后处理别的进程,本次IO结束后DMA控制器发出中断信号,数据传输单位是块

与中断方式的主要区别是:

1.中断方式在每个数据需要传输时都需要中断CPU,而DMA方式是在所要求传送的一批数据全部传送完毕时才中断CPU;
2.中断方式中数据传输是在中断处理时由CPU控制完成的,而DMA方式中数据传输是在DMA控制器控制下完成的。

通过在I/O设备和内存之间开启一个可以直接传输数据的通路,采用DMA控制器来控制一个数据块的传输,CPU只需在一个数据块传输开始阶段设置好传输所需的控制信息,并在传输结束阶段做进一步处理。

通道控制方式(硬件):CPU发送IO命令后处理别的进程,通道会执行通道程序完成IO,完成后通道向CPU发送中断信号,数据传输单位是一组块

何谓设备独立性?如何实现设备独立性?

答:设备独立性是指用户程序独立于所使用的具体设备。
实现方式是系统为每个用户进程配置一张用于联系逻辑设备名和物理设备名的映射表,以实现使用逻辑设备名来请求物理设备。

缓冲的定义,为什么引入缓冲技术?

答:缓冲是一种以空间换时间的资源换取技术。一般利用内存作为缓冲区。
为什么引入:
1、可以协调CPU与I/O设备之间速度不匹配的矛盾;
2、可以减少对CPU的中断频率;
3、提高设备的利用率。

Spooling技术?

虚拟性是OS的四大特性之一。如果说可以通过多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机,那么,通过SPOOling技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备。

SPOOLing技术是对脱机输入、输出系统的模拟。相应地,SPOOLing系统必须建立在具有多道程序功能的操作系统上,而且还应有高速随机外存的支持,这通常是采用磁盘存储技术。

SPOOLing系统主要有以下三部分:
(1)输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/Q设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。
(2)输入缓冲区和输出缓冲区。为了缓和和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区;输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用与暂存从输出井送来的数据,以后在传送给输出设备。
(3)输入进程SPi 和输入进程SP0。这里利用两个进程来模拟脱机I/O时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SP0模拟脱机输出时的外围控制机,把用户要求输出的数据从先内存送到输出井,待输出设备空闲时,在将输出井中的数据经过输出缓冲区送到输出设备上。

SPOOLing技术的特点:
(1)提高了I/O速度。从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾。
(2)将独占设备改造为共享设备。因为在SPOOLing系统的系统中,实际上并没为任何进程分配设备,而知识在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表。这样,便把独占设备改造为共享设备。
(3)实现了虚拟设备功能。多个进程同时使用一独享设备,而对每一进程而言,都认为自己独占这一设备,从而实现了设备的虚拟分配。不过,该设备是逻辑上的设备。

部分参考:https://zhuanlan.zhihu.com/p/124284469

https://blog.csdn.net/zsheng_/article/details/105839561

https://blog.csdn.net/Arnold_lee_yc/article/details/106114836?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-12&spm=1001.2101.3001.4242

原文地址:https://www.cnblogs.com/xiaxiaopi/p/14487823.html