操作系统

考点一、概念和特性

1. 概念

  • OS是计算机系统中最重要的软件,主要功能:管理、分配计算机资源。控制设备和实时任务协调一致的工作。完成请求。

2. 特性:

  • 并发性
    a. 基础
    b.理解:打开A、B两部电影,在同一时间间隔内发生,CPU处理A1s,然后去处理B1s,轮换着来
    c.和并行性区分:AB在同一时刻发生,一个CPU处理一道程序,如果需要处理多道程序,就安装多个CPU
    d.考法:并发是宏观上的并行,微观上的串行
  • 共享性:硬件、软件、数据资源,系统中的资源可被多个并发进程共同使用。互斥共享(打印机)和同时共享
  • 虚拟性:在这里插入图片描述
  • 异步性
    在这里插入图片描述

考点二、目标&作用

1. 目标:

  • 方便性(使计算机系统易于使用)
  • 有效性(提高系统资源利用率&吞吐量)
  • 可扩充性(能适应计算机硬件、体系结构、应用发展的要求)
  • 开放性(能遵循世界标准规范)

2. 作用:

  • 对用户:人机接口(命令DOS、系统调用库函数、图形及窗口方式)
  • 对计算机:管理计算机系统资源(处理机、存储器、I/O设备、文件
  • 处理机管理:对进程(eg:死锁)、线程的管理
    进程控制(控制进程运行中的状态转换),进程同步(A进来,B就要在外面。A结束,B进来),进程通信(A出去了,要进行信息交换让B知道),调度(A出去,就要有一个进来,在队列中选择程序给其分配CPU)【谁进来、怎么进来、一次进一个、运行状态】
  • 存储器管理:内存分配、地址映射、内存扩充、内存保护
  • I/O设备:缓冲管理、设备分配、设备处理、虚拟设备
  • 文件管理
  • 考点:文件管理主要功能----实现文件的按名存取
    文件存放----树型目录
  • 操作系统和用户间的接口:用户接口(联机【用户用操作系统相应的指令去控制计算机】和脱机【用户用作业控制语言JCL编写作业说明说,交给系统执行和使用。无人机交互】) & 程序接口(OS和应用程序间的接口,由一组系统调用组成)
  • 从应用程序看:实现对计算机资源的抽象(用户知道CPU可以处理我的数据,但是不知道具体操作细节。操作系统隐藏了这些细节,使用户使用更加便利)。

考点三、OS基本类型

1. 批处理系统【我把要处理的数据全交给操作系统,然后操作系统指挥计算机工作】

  • 单道批处理系统 输入–执行–输出【单脑筋工作,一心一意】
    特征:自动、顺序、单道(始终保持一道作业)
    缺点:利用率低
  • 多道批处理系统 共享CPU和系统中的各种资源
    优点:资源利用率高吞吐量大
    缺点:平均周转时间长、无交互能力
    举例:A,B,C三个程序,输入3s、执行4s、输出5s三个操作,当A到第二阶段的时候,B需要等1s才能进行第二阶段

2. 分时系统 多用户连接、时间片轮转、人机交互

  • 特点:
    交互性:用户可以根据响应结果进一步提出新的请求
    及时性:系统可以及时响应用户请求
    独占性
    多路性:(同时性)同时多个用户使用一台计算机,宏观上多个人同时使用一个CPU,微观上多个人轮流使用CPU

3. 实时系统

  • 理解:对外部数据或者用户响应及时响应,比如温控,当温度太高时,及时进行相应的降温操作。
  • 应用:购票系统。
  • 特点:
    多路性(对多个购票软件的售票等信息进行采集以及控制)
    独立性(对信息的采集和对对象的控制互不干扰)
    及时性(对外部数据及时响应)
    交互性
    可靠性(当没剩几张票的时候,要准确售出)

4. 在以上三种系统中选择调度算法时,都可以遵循优先权准则,以便让某些紧急的作业可得到及时处理。

考点四、CPU指令—特权指令【系统态】和非特权指令【用户态】

1. 用户态如何转换为核心态(系统态)

  • 当产生中断指令时,就要转成核心态进行处理【看电视时想上厕所,就要给电视机下发中断指令】
  • 程序请求操作系统服务,执行系统调用(一种特殊的中断)

2. 特权指令(系统态下运行)eg:中断、取指、译码

3. 非特权指令(用户态运行)eg:粘贴、复制、剪切

补充知识点

1.系统调用

1. 什么时候会进行系统调用

  • 当一个进程在用户态需要使用到内核态的功能时,进行系统调用,进入内核态。
    在这里插入图片描述

2.常见的系统调用命令:

在这里插入图片描述

2.中断分类

  • 硬件故障、程序异常、自愿(系统调用)、I/O中断、外部中断

3.用户态和内核态(程序处于的两种状态)

1. 触发条件

在这里插入图片描述

4. 什么是堆和栈,都存储哪些数据

  • 堆区:程序员分配释放,比如在java中new的对象都放在堆区
  • 栈:执行方法的地方,存放局部变量,函数的参数值等

5. 如何理解分布式锁

  • 控制分布式系统同步访问共享资源的一种方式。通常需要互斥访问来保证一致性。

处理器管理

考点五、程序

  1. 程序:指令的有续集合、静态
  2. 执行方式:顺序执行&并发执行
  3. 顺序执行:顺序性【按顺序执行】、封闭性、可再现性【多次执行结果相同】【拓扑形成的代码。】
  4. 并发执行:间断性【比如输入3s–执行4s–输出5s,等待过程中出现间断】、失去封闭性【系统中的资源状态由多个程序改变】、不可再现性【由于运行速度不同导致多次执行结果不同】

考点六、进程

  1. 引进进程的原因:程序很难并发执行
  2. 进程:在没有引进线程的时候,它是系统进行资源分配和调度的一个独立单位。
  3. 特点:
    a. 动态(创建产生、调度执行、撤销消亡) -----考点:进程和程序的区别:程序静态、进程动态
    b. 并发性
    c. 独立性:可独立运行
    d. 异步性
  4. 结构特征:
    考点
    a. 进程实体组成程序段相关数据段【eg:QQ的聊天信息】、PCB
    b.PCB:进程控制块,进程存在的唯一标志
    c.PCB经常被系统访问,故常驻内存
  5. 进程调度(微观调度)的主要功能:(选择一个主存中的进程调出到外存?)将就绪队列中的进程调到CPU执行。

考点七、线程

1. 考点:

  • 线程和进程的区别:线程是CPU调度和分派的基本单位,比进程更小,基本上不拥有系统资源。进程是拥有资源的基本单位。进程:线程=1:n or 1:1 。线程开销小,进程开销大。
  • 程序:进程=1:n or 1:1 eg:一个WPS软件(程序),打开多个WPS文档(进程)

2.线程属性:

  • 轻实体—基本上不拥有系统资源
  • CPU调度和分派的基本单位
  • 线程就是为了更好的并行而出现的,所以线程可以并发执行
  • 共享进程资源

考点总结:线程、程序、进程

1. 进程和程序有什么区别:

  • 进程是程序的一次执行过程,是动态概念。程序是一组有序的指令集和,是静态概念。
  • 进程是暂时的,有生命周期,是程序在数据集上的一次执行,可创建可撤销,程序是永存的
  • 进程具有并发行,程序没有
  • 进程是竞争计算机资源的最小单位,程序不是
  • 一个程序可对应多个进程; 一个进程可以执行一个程序或多个程序

2. 进程和线程的区别:

  • 根本区别:进程是操作系统资源分配的基本单位,而线程是处理器CPU任务调度和执行的基本单位

  • 资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

  • 包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

  • 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

  • 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

  • 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。
    在这里插入图片描述

3. 为什么有了进程,还要有线程呢?

  • 进程可以使多个程序并发执行,以提高资源的利用率和系统的吞吐量,但是其带来了一些缺点:
    a. 进程在同一时间只能干一件事情;
    b. 进程在执行的过程中如果阻塞,整个进程就会被挂起,即使进程中有些工作不依赖与等待的资源,仍然不会执行。

  • 基于以上的缺点,操作系统引入了比进程粒度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时间和空间开销,提高并发性能。

4. 进程的状态转换

  • 进程包括三种状态:就绪态、运行态和阻塞态。
    a. 就绪:已经获得除了CPU之外的所有资源。
    b. 运行:进程获得CPU,执行程序。单处理机系统中一个进程处于执行状态,多处理机系统中,多个进程处于执行状态。
    c. 阻塞(等待)

  • 就绪 —> 执行:对就绪状态的进程,为之分配了处理机后。

  • 执行 —> 阻塞:正在执行的进程因发生某等待事件而无法执行。
    eg1:进程提出输入/输出请求而变成等待外部设备传输信息的状态,
    eg2:进程申请资源(主存空间或外部设备)得不到满足时变成等待资源状态。
    eg3:进程运行中出现了故障(程序出错或主存储器读写错等)变成等待干预状态等等;

  • 阻塞 —> 就绪:处于阻塞状态的进程,在其等待的事件已经发生,如输入/输出完成,资源得到满足或错误处理完毕时,处于等待状态的进程并不马上转入执行状态,而是先转入就绪状态,然后再由系统进程调度程序在适当的时候将该进程转为执行状态;

  • 执行 —> 就绪
    eg1:时间片用完而被暂停执行
    eg2:在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行而被迫让出处理机时,该进程便由执行状态转变为就绪状态。

考点八、进程三种基本状态

  1. 三种状态:【去银行办理业务,首先要准备好自己的身份证等相关证件,等待柜台人员。等到柜台人员时,我就去办理业务。业务办理到一半,发现我的银行卡没有带,中断业务,我回去取。当我取回来的时候,需要再次排队等候柜台人员】
    a. 就绪:获得了除CPU外所有资源。
    b. 执行(运行):进程获得CPU,执行程序。单处理机系统中一个进程处于执行状态,多处理机系统中,多个进程处于执行状态。
    c. 阻塞(等待)
  2. 状态转换:
    在这里插入图片描述

面试题:线程有几种状态

  1. 在 Java虚拟机 中,线程从最初的创建到最终的消亡,要经历若干个状态:创建(new)、就绪(runnable/start)、运行(running)、阻塞(blocked)、等待(waiting)、时间等待(time waiting) 和 消亡(dead/terminated)。在给定的时间点上,一个线程只能处于一种状态,各状态的含义如下图所示:

补充知识点:线程、协程、异步

在这里插入图片描述

  • 多个线程相对独立,有自己的上下文,切换受系统控制;而协程也相对独立,有自己的上下文,但是其切换由自己控制

面试题:多线程的锁了解那些

1. 乐观锁、悲观锁

在这里插入图片描述
在这里插入图片描述

2. 自旋、适应性自旋

在这里插入图片描述

3. 无锁、偏向锁、轻量级线程、重量级线程

在这里插入图片描述

4. 公平锁、不公平锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 可重入锁、不可重入锁

在这里插入图片描述

6. 共享锁、互斥锁

考点九—进程控制

  1. 原语:若干条指令组成,用于完成一定功能的一个过程。
  2. 原子操作:一个操作中所有动作要么不做,要么全做,不允许被中断。
  3. 原子操作在管态下执行,常驻内存
  4. 进程创建:通过内核为程序构造PCB并分配地址空间
  5. 创建进程典型事件:用户登录、作业调度、提供服务、应用请求
  6. 进程终止:操作系统收回地址空间和PCB
  7. 引起进程终止条件:正常、异常(越界、非法指令、运行超时、等待超时、I/O故障)、外界干预(操作员/操作系统、父进程请求/终止)
  8. 进程的阻塞与唤醒
  9. 引起进程阻塞和唤醒的时间:请求系统服务、启动某种操作、新数据尚未到达、无新工作可做

考点十、高级进程间通信机制(传输数据多)

  1. 共享存储器系统:相互通信的进程共享某些数据结构【栈、进程一进去执行,然后进程二需要等进程一执行完之后再进去,故通信量少。】/共享存储区【信息量大】(两个人都可以登陆同一个邮箱,要说什么话,就在里面说)
  2. 消息传递:考点:当前应用最广泛的一种进程间的通信机制。
    a. 通过原语:直接通信—send、receive
    间接通信-1–A【写权限】—>缓冲区(信箱)—>B【读权限】,由B创建,随着B消亡而消亡。
    间接通信-2–A【写、读权限】—>缓冲区(公共信箱)—>B【写、读权限】,由系统创建,随着系统消亡而消亡。
    间接通信-3–(共享信箱)用户创建、并指定可以共享的进程
  3. 管道通信
    考点
    (1)管道:连接一个读进程和一个写进程并使其通信的共享文件“pipe文件”。
    (2)首创Unix系统

考点十一、临界资源和临界区

  1. 临界资源(共享资源):一段时间内只允许一个进程访问的资源(互斥共享)。
  2. 临界资源举例:打印机、磁带机
  3. 临界区:访问临界资源的代码
  4. 什么是临界区、如何解决冲突?
     每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。如果有若干个进程要求进入空闲的临界区,一次仅允许一个进程进入。任何时候,处于临界区的进程不可多于一个。如已有进程进入自己的临界区,则其他试图进入临界区的进程必须等待。进入临界区的进程要在有限时间内退出,以便其他进程能及时进入自己的临界区。如果不能进入自己的临界区,就应该让出CPU,避免进程出现忙等等现象。

考点十二、信号量机制(低级通信方式)

1. P、V操作

  1. 含义:P:申请资源 V:释放资源 S:信号量
  2. S>0:现在手上还有三个可用资源
    S=0:没有等待队列
    S<0:现在还有|S|个进程等待资源
  3. 问法1:当系统资源为互斥资源时,S初始值? 1
  4. 问法2: 执行了一次V操作,S=0,则原本等待队列有几个进程? 1 因为执行一次V操作,S+1后还是=0,说明还了一个资源后,立马分配给等待队列中的进程了.
  5. 问法3:执行了一次V操作,S=-1,则原本等待队列有几个进程? 2
  6. 问法4:求S的取值范围:S减去申请资源的个数----S初始值
  7. P操作:S=S-1,若S<0,该进程进入等待队列,否则继续执行
    V操作:S=S+1,若S<=0,释放等待队列中第一个等待信号量的进程,否则继续执行。

考点总结:进程间同步(在线程之间通过同步建立起执行顺序的关系)

  1. 解释:线程同步是指多线程通过特定的设置(如互斥量,事件对象,临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!
  2. 临界区:当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止
  3. 互斥量:互斥对象和临界区对象非常相似,只是其允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,但是更节省资源,更有效率。
  4. 事件:允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务
  5. 信号量:当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象。CSemaphore类对象保存了对当前访问某一个指定资源的线程的计数值,该计数值是当前还可以使用该资源的线程数目。如果这个计数达到了零,则所有对这个CSemaphore类对象所控制的资源的访问尝试都被放入到一个队列中等待,直到超时或计数值不为零为止。

面试题:说一说进程同步有哪几种机制。

  1. 信号量、管程、会合、分布式系统。
  2. 管程:信号量机制功能强大,但使用时对信号量的操作分散,而且难以控制,读写和维护都很困难。因此后来又提出了一种集中式同步进程——管程。其基本思想是将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。
    进程间同步与互斥的

面试题:进程间同步与互斥的区别

  1. 互斥:指某一个资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的
    同步:是指在互斥的基础上(大多数情况下),通过其它机制实现访问者对资源的有序访问。大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

  2. 同步:体现的是一种协作性。互斥:体现的是排它性。
    进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作。从而使程序的执行具有可再现性。

  3. 同步机制遵循的原则:
     1.空闲让进;
     2.忙则等待;
     3.有限等待;
     4.让权等待;

  4. 线程同步是指多个线程同时访问某资源时,采用一系列的机制以保证最多只能一个线程访问该资源。线程同步是多线程中必须考虑和解决的问题,以为很有可能发生多个线程同时访问(主要是写操作)同一资源,如果不进行线程同步,很可能会引起数据混乱,造成线程死锁等问题。

考点总结:进程间通信

一、进程间的通信方式有哪些?

  • 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC 的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams 等。其中 Socket 和 Streams 支持不同主机上的两个进程 IPC。
  1. 管道
    a. 它是半双工的,具有固定的读端和写端;
    b. 它只能用于父子进程或者兄弟进程之间的进程的通信;
    c. 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

  2. 命名管道
    a. FIFO 可以在无关的进程之间交换数据,与无名管道不同;
    b. FIFO 有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

  3. 消息队列
    a. 消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符 ID 来标识;
    b. 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级;
    c. 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除;
    d. 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。

  4. 信号量机制

  5. 共享内存
    a. 共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区;
    b. 共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。

  6. 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信

二、几种方式的比较:

  1. 管道:速度慢、容量有限
  2. 消息队列:容量收到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
  3. 信号量:不能传递复杂信息,只能用来同步。
  4. 共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全

考点总结:缓冲区溢出

问题:什么是缓冲区溢出?有什么危害?其原因是什么?

  1. 缓冲区在系统中的表现形式是多样的,高级语言定义的变量、数组、结构体等在运行时可以说都是保存在缓冲区内的,因此所谓缓冲区可以更抽象地理解为一段可读写的内存区域,缓冲区攻击的最终目的就是希望系统能执行这块可读写内存中已经被蓄意设定好的恶意代码。缓冲区溢出的数据只会破坏程序数据,造成意外终止。但是如果有人精心构造溢出数据的内容,那么就有可能获得系统的控制权!
  2. 缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
  3. 危害有以下两点:
    (1) 程序崩溃,导致拒绝额服务
    (2) 跳转并且执行一段恶意代码(比如缓冲区溢出将原返回地址淹没。)
  4. 造成缓冲区溢出的主要原因是:程序中没有仔细检查用户输入。

考点十三、处理机调度的层次

  1. 作业调度(宏观调度、高级调度):比如播放一部电影。把外存上处于后备队列的作业调入内存。提取(从外部提取到外存中)、收容(外存进行收容)、执行(内存执行)、完成(资源全被收回)。作业在系统中存在的标志:作业控制块(JCB
  2. 中级调度(中程调度、存储器管理中的对换功能):计算机中有许多程序占着内存不用,此时考虑将暂时不运行的进程调到外存上等待。
  3. 进程调度(低级调度、微观调度):决定将就绪队列中的哪个进程应获得处理机。
    方式:非抢占方式【排队】、抢占方式【优先权、短作业/进程优先、时间片】

作业调度和进程调度的区别:

作业调度是按一定的算法从磁盘上选择资源能得到满足的作业装入内存,使作业有机会去占用处理器执行。但是,一个作业能否占用处理器,什么时间能够占用处理器,必须由进程调度来决定。所以,作业调度选中 了一个作业且把它装入内存时,就应为该作业创建一个进程,若有多个作业被装入内存,则内存中同时存在多个进程,这些进程的初始状态为就绪状态,然后,由进程调度来选择当前可占用处理器的进程,进程运行中由于某种原因状态发生变化,当它让出处理器时,进程调度就再选另一个作业的进程运行。 因此,作业调度与进程调度相互配合才能实现多道作业的并行执行。

考点十四、调度算法准则

  1. 面向用户的准则:周转时间短(作业被提交给系统—作业完成)、响应时间快(用户通过键盘提交一个请求—系统首次产生响应)、截止时间保证(必须开始/完成的最迟时间)、优先权准则(紧急作业可及时处理)
  2. 面向系统的准则:系统吞吐量(单位时间内系统完成的作业数)高、处理机利用率好、各类资源(内存、外存、I/O设备)的平衡利用

考点十五、调度算法

  1. 算法衡量指标:
    a. 平均周转时间(完成时间-到达时间 or 等待时间+执行时间)
    b. 平均带权周转时间(周转时间【等待时间+执行时间】/执行时间)

  2. 先来先服务(FCFS算法)
    a. 优缺点:有利于长作业(进程),不利于短作业(进程)
    b. 有利于CPU繁忙型作业(进程),不利于I/O繁忙型作业(进程)
    c. eg:在这里插入图片描述
    d. 当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。该算法既可以用于作业调度,也可以用于进程调度。

  3. 短作业/进程优点调度算法(SJ/PF)
    a.优点:相比FCFS改善了平均周转时间&平均带权周转时间,缩短了作业的等待时间、提高系统吞吐量
    b.缺点:对长作业不利、可能很久得不到执行。未能根据作业的紧迫程度划分执行的优先级,难以准确估计作业(进程)的执行时间,从而影响调度的性能。
    c. 举例:在这里插入图片描述
    从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。 短作业优先调度算法是一个非抢占策略,他的原则是下一次选择预计处理时间最短的进程,因此短进程将会越过长作业,跳至队列头。

  4. 高响应比优先调度算法(HRN)
    a. 优先权:(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间=响应比
    b. 缺点:每次调度前需要计算响应比,故系统开销也要增加。
    c.

  5. 时间片轮转法(每个进程分配一个时间段/时间片)
    a. 在这里插入图片描述
    主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片。

  6. 最短剩余时间优先调度算法
    最短剩余时间是针对最短进程优先增加了抢占机制的版本。进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,他可能比当前运行的进程具有更短的剩余时间,因此只要新进程就绪,调度程序就能可能抢占当前正在运行的进程。像最短进程优先一样,调度程序正在执行选择函数是必须有关于处理时间的估计,并且存在长进程饥饿的危险。

  7. 高响应比优先调度算法(主要用于作业调度)
    高响应比优先调度算法,该算法是对 先来先服务调度算法和短作业优先调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

  8. 优先级调度算法(从就绪队列中选择优先级最高的进程,将处理机分配给它)

考点十六、死锁

  1. 产生死锁最少需要2个进程【A、B做蛋糕,准备了面粉和酵母粉。当A把面粉拿走,B把酵母粉拿走,就产生了死锁。此时两个进程都无法运行,产生僵局】

  2. 求不会发生死锁的最少资源数。设N个进程,每个进程对资源的最大需求量为M,则不会发生死锁的最少资源数:N(M-1)+1

  3. 产生死锁原因:竞争资源(有限资源、互斥资源)、进程间推进顺序非法(请求和释放资源顺序不当)

  4. 处理死锁方式:
    (1) 预防死锁:破坏产生死锁的必要条件
    a. 互斥条件【不能破坏】
    b. 请求和保持条件【已经占有面粉,还要申请酵母粉】:资源一次性分配
    c. 不剥夺条件【已经获得的资源只能在使用完由自己释放】:可剥夺,只要我想,就能把它抢过来。
    d. 环路等待条件【p1等p2的资源、p2等p3的资源…】:资源有序分配

    (2) 避免死锁:防止系统进入不安全状态【当系统处于安全状态(系统可以按照某种进程顺序为每个进程分配其所需资源)时,一定不会产生死锁,不安全状态可能会发生死锁,死锁一定是不安全状态】

    避免死锁最代表性的算法:银行家算法(核心:找到一个安全序 列)

    银行家算法:当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
    当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源。若没超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若满足则按当前的申请量分配资源,否则也要推迟分配。
    安全序列
    是指系统能按某种进程推进顺序(P1, P2, P3, …, Pn),为每个进程 Pi 分配其所需要的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序地完成。这种推进顺序就叫安全序列【银行家算法的核心就是找到一个安全序列】。
    系统安全状态:
    如果系统能找到一个安全序列,就称系统处于安全状态,否则,就称系统处于不安全状态。

    (3)检测死锁:利用资源分配图(Resource Allocation Graph,RAG)
    在这里插入图片描述
    ----箭头含义:当箭头从资源—>进程时,表明给其分配资源。当箭头从进程—>资源时,表明申请资源。

  5. 死锁定理:S为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的。

  6. 解除死锁:检测到有死锁时,就撤销或者挂起一些进程,以便回收一些资源。

牛客—:

产生死锁的原因主要是:

(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。

产生死锁的四个必要条件:

(1)互斥条件:一个资源每次只能被一个进程使用。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

避免死锁:

  • 死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
  • 死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。
  • 避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。
  • 预防死锁:具体的做法是破坏产生死锁的四个必要条件之一。

银行家算法:

  • 该算法需要检查申请者对各类资源的最大需求量,如果现存的各类资源可以满足当前它对各类资源的最大需求量时,就满足当前的申请。换言之,仅当申请者可以在一定时间内无条件归还它所申请的全部资源时,才能把资源分配给它。这种算法的主要问题是,要求每个进程必须先知道资源的最大需求量,而且在系统的运行过程中,考察每个进程对各类资源的申请需花费较多的时间。另外,这一算法本身也有些保守,因为它总是考虑最坏可能的情况。

死锁面试考点总结:

一、 什么是死锁:

  • 多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都无法再向前推进。

二、 产生死锁原因:

  1. 竞争资源(有限资源、互斥资源)
    eg:系统中只有一台打印机,可供进程 A 使用,假定 A 已占用了打印机,若 B 继续要求打印机打印将被阻塞。
    系统中的资源可以分为两类:
    a. 可剥夺资源:是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU 和主存均属于可剥夺性资源;
    b. 不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。
  2. 进程间推进顺序非法(请求和释放资源顺序不当)
    eg:进程A和进程B互相等待对方的数据)

三、死锁产生的必要条件

  1. 互斥条件
  2. 请求和保持条件
  3. 不剥夺条件
  4. 环路等待条件

四、如何解除死锁:

  1. 资源剥夺:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其它死锁进程(应防止被挂起的进程长时间得不到资源)
  2. 撤销进程:强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源(撤销的原则可以按进程优先级和撤销进程代价的高低进行);
  3. 进程回退:让一个或多个进程回退到足以避免死锁的地步。进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。

面试考点:Windows下的内存是如何管理的

一、Windows下的内存是如何管理的

  1. 虚拟内存:最适合用来管理大型对象或者结构数组
  2. 内存映射文件:最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据
  3. 内存堆栈:最适合用来管理大量的小对象

二:什么是虚拟内存,虚拟内存的作用

  1. 内存发展史:
    没有内存抽象(单进程,除去操作系统所用的内存之外,全部给用户程序使用) —> 有内存抽象(多进程,进程独立的地址空间,交换技术(内存大小不可能容纳下所有并发执行的进程)
    )—> 连续内存分配(固定大小分区(多道程序的程度受限),可变分区(首次适应,最佳适应,最差适应),碎片) —> 不连续内存分配(分段,分页,段页式,虚拟内存)

  2. 虚拟内存理解:
    虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上。
    《请求分页系统、请求分段系统和请求段页式系统都是针对虚拟内存的,通过请求实现内存与外存的信息置换。》
    在这里插入图片描述

存储器管理

1. 内存、寄存器、高速缓存

  • 主存储器:是计算机系统中的一个主要部件,用于保存进程运行时的程序和数据,CPU的控制部件只能从主存储器中取得指令和数据。但是,主存储器的访问速度远低于CPU执行指令的速度,于是引入了寄存机和高速缓存。

  • 寄存器:访问速度最快,能与CPU协调工作,价格昂贵,容量不大,寄存器用于加速存储器的访问速度,如用寄存器存放操作数,或用作地址寄存器加快地址转换速度等。

  • 高速缓存:容量大于或远大于寄存器,但小于内存,访问速度高于主内存器,根据程序局部性原理,将主存中一些经常访问的信息存放在高速缓存中,减少访问主存储器的次数,可大幅度提高程序执行速度。通常,进程的程序和数据存放在主存,每当使用时,被临时复制到高速缓存中,当CPU访问一组特定信息时,首先检查它是否在高速缓存中,如果已存在,则直接取出使用,否则,从主存中读取信息。有的计算机系统设置了两级或多级高速缓存,一级缓存速度最高,容量小,二级缓存容量稍大,速度稍慢。

  • 利用主存中的存储空间,来暂存从磁盘中读出或写入的信息,主存可以看做是辅存的高速缓存,因为,辅存中的数据必须复制到主存方能使用,反之,数据也必须先存在主存中,才能输出到辅存。

2. 运行程序的步骤:

  • 为了使程序能够运行,必须先为之创建进程,而创建进程的第一件事,就是将程序和数据装入内存,如何将一个用户源程序变为一个可在内存中执行的程序,通常要经过如下几步,首先是编译(由编译程序将用户源代码编译成若干个目标模块),其次是链接(由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块),最后是装入(由装入程序将装入模块装入内存)。
    在这里插入图片描述

3. 装入:将模块装入到内存中:

  • 绝对装入(在编译时知道程序驻留在内存的什么位置)
  • 可重定位装入(地址变换通常是在装入时一次完成的,以后不再变化,故称为静态重定位。)
  • 动态运行时装入(动态运行时的装入程序在把装入程序装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。)

4. 链接

  • 源程序经过编译后,可得到一组目标模块,再利用链接程序把这组目标模块链接,形成装入模块,根据链接时间的不同,可把链接分为:
    (1) 静态链接(在程序运行之前,先将各目标模块及他们所需的库函数,链接成一个完整的装配模块,以后不再拆开)
    (2) 装入时动态链接(将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链接方式)
    (3) 运行时动态链接(对某些目标模块的链接,是在程序执行中需要该模块时,才对它进行链接)。

考点十八、程序的装入与重定位【程序要运行,首先要将其放到内存中,解决的是程序如何装入的问题】

  1. 将一个装入模块装入内存的三种方式:
    a. 绝对装入:【编译时就知道程序装入内存的位置】,只适用于单道程序
    b. 可重定位装入:【在装入时一次性进行地址变换—静态重定位】
    c. 动态运行时装入:【在执行期间进行地址变化—动态重定位】

考点十九、连续内存分配【解决如何给作业分配内存的问题】

  1. 连续内存分配方式:为一个用户程序分配一个连续的内存空间,可以将连续分配方式分为单一连续分配、固定分区分配、动态分区分配、动态重定位分区分配。
  2. 单一连续分配:适用于单用户、单任务的操作系统中。浪费内存空间【将内存分为系统区和用户区,系统区供OS使用、用户区给用户使用,当用户区内存为10GB时,给一个10KB的作业,剩下的内存就不能用,所以浪费了内存空间】
  3. 固定分区分配最早的多道程序的存储管理方式。分区个数会限制进程个数,还可能导致内存空间的浪费【将内存划分为多个固定分区(大小可等可不等),每个分区内只能装入一道作业】
  4. 动态分区分配:根据进程实际需要,动态分配内存空间
  5. 动态分区分配算法:首次适应、循环首次适应、最佳适应、最坏适应
    a. 首次适应:空闲分区按起始地址递增的次序排列。【每次分配都是从空闲分区表的首部顺序查找,直至找到第一个能满足要求的空闲分区为之】
    缺点:会在内存的低端留下很多难以利用的小空闲分区
    b. 循环首次适应:【每次分配都从上次分配的位置之后开始查找】
    优缺点:内存中空闲分区分布更均匀,减少查找空闲分区的开销。但会使存储器中缺乏大的空闲分区。
    c. 最佳适应算法:【将空闲分区按照大小递增的次序排列】
    优缺点:每次分配后切割下来的剩余部分最小,但是会在内存中留下大量难以利用的小空闲分区。
    d. 最坏适应算法:【将空闲分区按照大小递减的次序排列】
    优缺点:产生碎片几率较小,但会使内存中缺乏大的空闲区。
  6. 内存回收
    a. 空闲区个数和起始位置不变,大小改变、个数不变在这里插入图片描述
    b. 空闲分区起始位置改变、大小改变在这里插入图片描述
    c. 空闲分区数量减少、大小为三者之和,并删除一个表项在这里插入图片描述
    e. 个数增加、需要新添表项和起始地址
    在这里插入图片描述

考点二十、可重定位分区分配【解决碎片问题】

  1. 将内存中所有作业移动,“拼接”或“紧凑”成一个大的空闲分区。
  2. 动态重定位分区分配算法与动态分区分配算法基本上相同,差别仅在于:在这种分配算法中,增加了紧凑功能,通常,在找不到足够大的空闲分区来满足用户需求时进行紧凑。
  3. 在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间,若果在系统中只有若干个小的分区,即使他们容量总和大于要装入的程序,但由于这些分区不相邻接,也无法把该程序装入内存。若想装入,则将内存中的所有作业进行移动,使他们全部相邻接,这样,即可把原来分散的多个小分区拼接成一个大分区,这时,就可以把作业装入该区。经过紧凑后的某些用户程序在内存中的位置发生了变化,此时若不对程序和数据的地址加以修改(变换),则程序必将无法执行,为此,在每次紧凑之后,都必须对移动了的数据和程序进行重定向

面试题:内部碎片与外部碎片

  1. 内存碎片分为内部碎片和外部碎片。前面也提到过,在分配给进程的分区中未被利用的碎片称为内部碎片,而系统中剩余的无法利用的小块存储空间称为外部碎片。
  2. 一个简单区分两种碎片的方法就是看分配过程中分区大小是否固定。在固定分区的情况下,产生的碎片称为内部碎片(例如在分页存储管理中,末尾页可能无法填满,造成的剩余空间就叫内部碎片):在非固定分区的情况下,可能在分配过程中剩余最后一点小空间无法满足任何分配请求,导致浪费,这种碎片就称为外部碎片(例如在分段存储管理中,如果内存为5KB,程序需要4KB,则分配之后会剩余1KB的无法利用空间,这个就是外部碎片)。
  3. 注意:固定分区即为内部碎片,非固定分区则为外部碎片,如果固定分区和不固定分区同时存在(如段页式),则看成固定分区。
    所以要进行分页…

考点:对换

  1. 对换出现的原因:
    在多道程序环境下,一方面,在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞而迫使CPU停止下来等待的情况,另一方面,却有很多作业在外存上等待,因无内存而无法进入内存运行的情况,这是对系统资源的浪费,为了解决这个问题,增设了对换设施。
  2. 对对换的理解:
    对换是把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或者进程所需要的程序和数据调入内存。
  3. 目的:
    提高内存利用率。

面试题:分段和分页

一、分段和分页的区别?

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

二、分页和分段有什么区别(内存管理)?

  1. 段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)

  2. 页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

  3. 两者的不同点:
    (1) 目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;

    (2) 大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;

    (3) 地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;

    (4) 信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

    (5) 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

面试题之如何判断逻辑地址是否已经映射在物理地址上了

  1. 为什么要有逻辑地址:
    因为可用的物理地址是不断变化的,而程序的逻辑地址不变,程序无法知道可用的物理地址,所以必须做出映射。
  2. 物理地址和逻辑地址如何映射
    在这里插入图片描述
  3. 一次内存映射的过程
  4. 分页中的时间与空间优化
    在这里插入图片描述

面试题之页表在哪里

  1. 页表存储在主存,没有存在内存中,先要读取页表,根据页表找到块号,然后再去内存中读取具体数据

快表(TLB)

考点二十一、基本的分页存储管理【解决作业移动问题】

  1. 页面:将进程的逻辑地址空间分成若干个大小相等的片—页面/页。逻辑地址=页号x页大小+位移量
  2. 物理块/页框:将内存空间分成若干个与页面同样大小的块。物理地址=块号x块大小+偏移量 将页装到块中
  3. 页表(页面映射表)
    在这里插入图片描述
  4. 地址变换机构:逻辑地址转换为物理地址是在进程的执行过程中,由硬件地址变换机构借助于页表自动实现。CPU取指令/数据需要两次访问内存:a.访问内存中的页表,形成物理地址。b.根据物理地址存取指令或数据。导致地址变换速度降低。
  5. 提高地址变换速度的方法:在地址变换机构中增设一个高速缓冲寄存器(联想寄存器/快表),存放当前访问的页表项。
  6. 逻辑地址和物理地址的映射:

考点二十二、基本的分段存储管理

  1. 特点:段大小不一样、段内地址连续。逻辑地址由段号和段内地址组成,允许一个作业最长有64K个段,每个段最大长度为64KB
  2. 段表:
  3. 段式存储管理的地址转换过程:
    a. 根据逻辑地址中的段号查询段表的相应栏目
    b. 根据段内地址<段长度,检查地址是否越界,若越界,则系统发出“地址越界”中断
    c. 若不越界,则绝对地址=该段的主存起始地址+段内地址
  4. 分页和分段的主要区别:
    a. 页【信息的物理单位】是根据内存划分的、段【信息的逻辑单位】是根据程序的逻辑关系的
    b. 页的大小固定,段的长度不固定,取决于用户编写的程序。
    c. 分页的作业地址空间是一维的,分段的是二维的,需要给出段名和段内地址。

考点二十三、段页式存储管理方式

  1. 特点:先将用户程序分成若干个段、再将每个段分成若干个页。逻辑地址结构由段号、段内页号、页内地址组成。取指令或数据需要三次访问内存。

考点二十四、虚拟存储管理

  1. 当内存有50K,已经用了30K,此时又来了一个30K大小的作业,放不下,所以要向外存借。产生了虚拟存储器基于局部性原理产生。
  2. 概念:虚拟存储器是具有请求调入功能和置换功能,可以从逻辑上扩充容量的存储器系统。虚存的逻辑容量=内存容量+外存容量。用部分的外存模拟内存。
  3. 虚存的实现方式:请求分页系统】】存储管理(动态分页)or 请求分段存储管理(动态分段)
  4. 虚存的特征:多次性(将一个作业分多次调入内存)、对换性(将暂时不用的调出,以整个进程为单位【整体/进程对换】、以“页”或“段”为单位【页面/分段对换】)、虚拟性(逻辑上扩充内存容量)

面试题之虚拟内存的作用

考点二十五、页面置换算法

  1. 置换算法不恰当,频繁置换导致“抖动”,实际效率低。
  2. 缺页中断:CPU需要去内存中取数据,但是数据不在内存中,所以要先将外存中的数据调入内存,这个期间,CPU一直处于等待状态。导致缺页中断。
  3. 置换算法:
    a. 最佳置换算法(OPT):选择不再访问的页面或者是在未来最长时间内不再被访问的页面予以淘汰(性能好、实现困难可用来衡量其他算法的优劣
    a.1 举例:在这里插入图片描述
    b. 先进先出(FIFO)页面置换算法:总是淘汰最先进入内存的页面,即在内存中驻留时间最久的页面。
    b.1 举例:在这里插入图片描述
    c. 最近最久未使用(LRU)置换算法:选择在最近一段时间内嘴就没有使用过的页面予以置换,局部性原理的合理近似,性能接近最佳置换算法。但由于需要记录页面使用时间的先后关系,硬件开销较大。
    c.1 举例:在这里插入图片描述
  4. 硬件机构:【我们可以看表,在计算机中如何看】
    a. 栈:被访问的页面在栈顶,故栈底 的是最近最久未使用页面
    b. 移位寄存器:每个页面被访问时对应的移位寄存器左边最高位置1,定期右移并最高位补0,故寄存器数值最小的是最近最久未使用页面

面试题之缺页中断何时发生以及具体流程

设备管理

设备管理:https://www.cnblogs.com/leesf456/p/5622859.html

考点二十六、I/O设备的类型

1. 分类:

  • 按设备使用特性:存储设备(外存、辅存)&输入/输出设备(输入设备、输出设备、交互式设备)
  • 传输速率:低速设备(以字节为单位传送,键盘、鼠标)&中速设备(以字符串为单位,打印机)&高速设备(以数据块为单位,磁带、磁盘、光盘)
  • 信息交换单位:块设备(可以以信息为单位进行划分,用于存储信息,属于有结构设备【磁盘】)&字符设备(可以以字符流/字符串为单位进行传输,用于数据的输入和输出,属于无结构类型【打印机】【比如音乐】)
  • 设备的共享属性:独占设备(一段时间仅允许一个进程访问的设备、临界资源)、共享设备(磁盘)、虚拟设备(通过spooling虚拟技术将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享一台物理I/O设备)

2. 注…

  • spooling技术:解决人机矛盾&CPU高速性和I/O设备低速性矛盾提出。
    a. 假脱机真联机
    b. 把独占设备变共享设备
    c. 提高I/O设备
    d. 实现虚拟设备功能
    e. 以空间换时间
  • spooling系统的主要部分:
    在这里插入图片描述

面试题之I/O多路复用select、poll、epoll之间的区别总结

考点二十七、I/O控制方式

1. 程序I/O方式:

  • CPU若要使用I/O设备,则发送指令给设备控制器,设备控制器根据CPU的指令去调用相应的I/O设备【eg:要输入一个数据,调用键盘输入一个数据】创建命令时间短,但是输入时间长,导致CPU的长时间等待而造成浪费。忙-等待方式
  • 中断驱动I/O控制方式:CPU向相应的设备控制器发出一条I/O命令后,立即返回继续执行原来的任务。CPU和I/O并行操作。以字或字节为单位(缺点:传输数据小)。提高CPU和I/O设备的利用率。
  • 直接存储器访问(DMA)I/O控制方式:数据块在I/O设备和内存间直接进行传送,每次传送至少一个数据块,在控制器的控制下完成,仅在传送一个或多个数据块的开始和结束时,才需CPU干预,但当数据块多的时候也不行。
  • I/O通道控制方式:把一个数据块的读/写为单位的干预减少为对一组数据块的读/写及有关的控制和管理为单位的干预。可实现CPU、通道、I/O设备三者的并行操作。【CPU若需要数据,就用I/O通道调用设备控制器,CPU就不用再干预】
    a. 考点一:I/O通道是一种特殊的处理机,只执行与I/O操作相关的指令,它和CPU共享内存

2. 通道类型:字节多路通道、数组选择通道、数组多路通道

  • 字节多路通道:连接多个低速(以字节为单位)设备,以时间片轮转的方式使用通道,有很多分配型子通道,每个子通道连接一台I/O设备。
  • 数组选择通道:可以连接多台高速设备,只有一个分配型子通道,一段时间只允许执行一道通道程序(控制一台设备进行数据传送)。一次只宠幸一个。(数据传输率高,利用率低)
  • 数组多路通道:结合以上两种方式的优点,子通道分时并行&多个高速设备(数据传输率高,通道利用率高)

面试题:中断和轮询的特点

  1. 对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的就加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此程序轮询是一种效率较低的方式,现代计算机系统中已很少应用。
  2. 轮询效率低,等待时间很长,CPU利用率不高;中断容易遗漏一些问题,CPU利用率高。

面试题之简述中断的处理过程:

考点二十八、I/O软件(普遍层次式结构)

  • 打开WPS,摁下“打印”【交互接口】,选择要使用的打印机【逻辑名称】,将逻辑名称转换成具体的设备的物理名称【LUT】,通过物理设备名称唤醒具体的设备【设备驱动程序】,说明I/O请求得到满足,就要去找CPU,但此时的CPU正在忙别的事情,所以首先要将CPU正在忙的事情保存一下,以中断响应我一次【中断处理程序】。
  1. 用户层软件:提供与用户交互的接口,比如我想打印一个东西,我需要打开WPS,摁下打印按钮。接着我们需要选择打印机类型,这个打印机的名称称为逻辑设备名称。
  2. 设备独立性软件(设备无关软件):如果要用打印机,需要写上这个设备的物理名称。导致若当前设备忙碌,就算其他设备是空闲的也无法使用。而且若设备升级,也无法认出。故要在用户层和设备间插一个设备独立性软件(逻辑设备名,比如说所有HP的都标上HP–00、HP–01…)。
  3. 在应用程序中,使用逻辑设备名称(只是一个代号)请求某类设备,比如HP–…,但是当系统在执行时,必须用物理设备名称(具体的某台机器)。将逻辑设备名称转换为物理设备名称,可设置一张**逻辑设备表(LUT)**实现。
  4. 如何通过物理地址唤醒设备呢?设备驱动程序

考点二十九—缓冲技术

  1. 引入缓冲区原因:
    a. 缓和CPU和I/O设备速度不匹配的矛盾
    b. 减少中断CPU的次数,放宽对中断响应时间的限制
    c. 提高CPU和I/O设备之间的并行性
  2. 缓冲类型:单缓冲、双缓冲(一个发送缓冲区、另一个接收缓冲区,可实现双向数据传输。但输入和输出速度相差较大时,效果不理想)、循环缓冲(作为输入的缓冲区:用于输入数据的空缓冲区R–指针Nexti,已装满数据的缓冲区G–指针Nextg和正在使用的工作缓冲区C–指针Current)
  3. 缓冲池:池中设置多个可供若干个进程共享的缓冲区,可用于输入也可用于输出。
    在这里插入图片描述

考点三十、磁盘概述

  1. 磁道(磁道数=柱面数)、扇区、磁头(悬浮)
  2. 容量=磁道数x磁头数(盘面数)x扇区数x每个扇区的字节数
  3. 磁盘访问时间:寻道时间(磁头移动到磁道上)、旋转延迟时间(等待扇区移动到磁头下面)、传输时间(数据从磁盘读出或向磁盘写入数据经历的时间,即在扇区停留的时间)
  4. 磁盘调度算法:先来先服务(FCFS)、最短寻道时间优先、扫描
    a. 先来先服务(FCFS):进程请求访问磁盘的先后次序。优:公平简单。缺:平均寻道时间长
    b. 最短寻道时间优先(SSTF):访问磁道与当前磁道距离最近。优:移动的柱面距离小。缺:可能会发生进程饥饿现象
    c. 扫描(SCAN)算法(电梯调度算法):磁头从磁盘一端出发,向另一端移动,遇到所需磁道就停下来进行服务,若该方向无请求,就改变方向。优:避免出现“饥饿”
    d. 循环扫描(CSCAN)算法:磁头只自里向外移动。eg:50 40 90 30 60 120
    54—>40—>30(最外)—>120(最里)—>90—>60

文件管理

考点三十一、文件

  1. 数据:数据项、记录、文件
  2. 数据项:数据记录中最基本的、不可分的数据单位
  3. 记录(相关数据项的集合):描述一个对象在某方面的属性。关键字:唯一能标识此条记录的数据项。
  4. 文件:文件名、数据、文件属性(类型、长度、物理位置、建立时间等)
  5. 文件类型:
    • 按用途分:系统文件(用户只可使用不可修改)、用户文件(用户源代码、目标文件、可执行文件或数据等)、库文件(由标准子例程和常用例程构成,只许用户调用、不许修改)
    • 按文件中数据的形式:源文件(高级/汇编语言编写,源程序&数据)、目标文件(源程序经过编译,但尚未经过链接程序链接的目标代码,二进制文件.obj)、可执行文件(编译后所产生的目标代码经过链接程序链接后形成的文件)
    • 按存取控制属性:只执行文件、只读文件、读写文件
    • 按组织形式和处理方式:普通文件(ASCII码/二进制码组成的字符文件。eg:源程序文件、数据文件… 外存)、目录文件(方便检索)、特殊文件(把设备看成文件。块设备文件(用于磁盘、光盘、磁带)&字符设备文件(终端、打印机I/O操作))
  6. 文件逻辑结构:
    • 文件逻辑结构(从用户角度的文件组织形式)
    • 文件逻辑结构分类:有结构文件(定长【文件记录长度相同,eg:性别】、变长【家庭地址】、 顺序文件&索引文件(索引表)&索引顺序文件(将顺序文件中的记录分组,并建立一张索引表,给每组中第一个记录建立索引项))。无结构文件(流式文件,eg:音乐)
      !注意:在Unix系统中,所有文件被看成流式文件
      文件的物理结构(存储结构)
  7. 文件物理结构分类:
    • 顺序结构(逻辑上顺序的记录构成的文件—>顺序的物理块中,优:管理简单,存储速度快。缺:空间利用率低,文件记录插入或删除不方便)。链接结构(放在非连续物理块中,每个物理块均设置指针指向后续物理块。优:空间利用率高、易扩充。缺:对文件的搜索率低。显示链接(指针放在专门的链接表中),隐式链接(指针在存放文件信息的物理块中))。索引结构(每个文件一个索引表,表项指出文件记录所在物理块号,优:满足文件动态增长、存取方便【适合随机访问且易于文件扩展】。缺:增加开销)

考点三十二、位示图(文件存储空间的管理方法)

  1. 基本思想:用字节组成一张位示图,每个字节的每一位对应存储空间中的一个物理块。大小由盘块总数确定。“1”表示已分配,“0”表示对应盘块空闲,或相反,位示图可用于磁盘空间的管理。
    在这里插入图片描述
  2. 位示图—>盘块号:某盘块对应的位在位示图的第i行第j列,则盘块号b=n(i-1)+j。
  3. 盘块号—>位示图:i=(b-1)DIV n +1,j=(b-1)MOD n +1

考点三十三、文件控制块和索引结点

  1. 文件目录:实现文件的“按名存取”
  2. 文件控制块FCB:为了实现对文件的正确存取,必须设置的(用于描述和控制文件的数据结构)。
  3. 文件控制块包含信息:基本信息、存取控制信息、使用信息
  4. 索引结点(i结点):由文件说明信息形成的数据结构(检索目录文件只用到了文件名,所以UNIX系统将文件名和文件的说明信息分开。)

考点三十四、文件目录结构

  1. 文件目录结构形式:单级目录(单用户环境)、两级目录、多级目录
  2. 单级目录结构:一个文件系统一张目录表,一个文件一个目录项。
    a. 优点:可实现目录管理的“按名存取”功能
    b. 缺点:查找速度慢、不允许重名、不便于文件共享、
  3. 两级目录结构:…UFD,MFD
  4. 多级(树形、eg:Unix、Linux、Windows):主目录(根目录),数据文件(树叶),其他目录(树的结点)绝对路径…相对路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值