操作系统——面试复习


名称 链接
进程和线程 进程和线程
经典的进程同步问题 经典的进程同步问题
处理机调度 处理机调度
死锁 死锁
存储器管理 存储器管理
存储器管理(连续分配存储管理方式) 连续分配存储管理方式
存储器管理(分页、分段) 分页和分段存储管理方式
虚拟存储器 虚拟存储器
虚拟存储器(页面置换算法) 页面置换算法
输入输出系统
文件管理
磁盘存储器管理

一、操作系统引论

1. 操作系统的基本特征

其中最基本的特征是:并发、共享;

(1)并发

并行性 并发性
两个或多个事件在同一时刻发生 两个或多个事件在同一时间间隔发生
(一段时间内,宏观上多个程序同时运行,微观上只是分时交替执行)

(2)共享

  • 目前实现资源共享的方式有两种:
互斥共享方式 同时访问方式
当A进程访问完并释放系统资源后,
才允许另一个进程对该资源进行访问
允许在同一时间内多个进程同时访问,
(只是宏观的,微观上是交替进行访问)
这种在一段时间只允许以进程访问的资源,
称之为临界资源(独占资源)

(3)虚拟

  • 为了提高信道利用率,引入了“虚拟”技术;
  • 实现“虚拟”的两种技术:
时分复用技术 空分复用技术
利用某设备为一用户服务的空闲时间,又转去为其他用户服务,使设备得到充分利用。 利用存储器空闲的空间分区域存放和运行其他的多道程序,以此来提高内存的利用率。

(4)异步

  • 进程是以人们不可预知的速度向前推进的,这就是进程的异步性;
  • 异步性也称不确定性,指进程的 执行顺序、执行时间、执行结果 不确定;

2. 操作系统的主要功能

(1)处理机管理功能(进程管理)

  • 进程控制、进程同步、进程通信、调度

(2)存储器管理功能

  • 内存分配、内存保护、地址映射、内存扩充

(3)设备管理功能

  • 缓冲管理、设备分配、设备处理

(4)文件管理功能

  • 文件存储空间的管理、目录管理、文件的读/写管理和保护

(5)操作系统与用户之间的接口

  • 用户接口、程序接口

(6)现代操作系统的新功能

  • 系统安全、网络的功能和服务、支持多媒体

二、进程和线程

进程和线程以及它们的区别

进程 线程
调度的基本单位 进程是系统进行资源调度和分配的的基本单位,进程是能独立运行的基本单位。每次被调度需要进行上下文的切换,开销大。 线程是CPU调度和分派的基本单位,是能独立运行的基本单位。线程切换时,仅需保存少量寄存器内容,代价小。
并发性 进程之间可以并发执行。 同一个进程中的多个线程之间可以并发执行,不同进程中的线程也能并发执行。
拥有资源 进程可以拥有资源,并作为系统中拥有资源的一个基本单位。 线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。除此之外,还允许多个线程共享该进程的所有资源。
独立性 不同进程之间独立性高。每个进程都拥有一个独立的地址空间和其他资源。 同一进程的不同线程之间独立性低。同一进程中的不同线程共享内存地址空间和资源。
系统开销 创建撤销进程时,要为其分配和回收进程控制块及其他资源,开销大。 开销小。

进程同步机制的主要任务

  • 是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效共享资源和相互合作,而从使程序的执行具有可再现性。

进程同步机制应遵循的规则

  • 空闲让进
    当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源。
  • 忙则等待
    当已有进程进入临界区时,表明临界资源正在被访问,因而其他视图进入临界区的进程必须等待,以保证对临界资源的互斥访问。
  • 有限等待
    对要求访问临界资源的进程 ,应保证在有限时限内能进入自己的临界区,以免陷入死等状态。
  • 让权等待
    当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入忙等状态。

进程同步有哪几种机制

  • 硬件同步机制
  • 信号量机制
    • 整型信号量
    • 记录型信号量
    • AND型信号量
    • 信号量集
  • 管程机制

进程间的通信的几种方式

  • 共享存储器系统
    • 相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
    • 可以分为如下两种类型:基于共享数据结构的通信方式、基于共享存储区的通信方式。
  • 消息传递系统
    • 进程间的数据交换是以格式化的消息为单位,程序员直接利用操作系统提供的一组通信命令(原语),不仅能实现大量数据的传递,而且还隐藏了通信的实现细节,使通信过程对用户是透明的,从而大幅减少通信程序编制的复杂性。
    • 实现方式不同,分为两类:直接通信方式、间接通信方式。
  • 管道通信系统
    • 连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件,向管道(共享文件)提供输入的发送进程,以字符流形式将大量的数据送入管道;而接受管道输出的接受进程,则从管道中接受数据,由于发送和接受进程是利用管道进行通信的,因此叫做管道通信。
    • 管道通信需要具有三方面的协调能力:互斥、同步、确定对方是否存在。
  • 客户机-服务器系统
    • 套接字:可用于不同机器间的进程通信。

进程有哪几种状态

  • 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源;
  • 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数;
  • 阻塞状态: 进程等待某种条件,在条件满足之前无法执行;
    在这里插入图片描述

线程有几种状态

  • 在Java虚拟机 中,线程从最初的创建到最终的消亡,要经历若干个状态:创建(new)、就绪(runnable/start)、运行(running)、阻塞(blocked)、等待(waiting)、时间等待(time waiting) 和 消亡(dead/terminated)。
  • 在给定的时间点上,一个线程只能处于一种状态;
  • 线程各状态之间的转换如下:
    在这里插入图片描述

线程同步的方式

  • 互斥量 Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问
  • 信号量 Semphare:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量
  • 事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作

三、处理机调度

处理机调度分类

  • 高级调度(作业调度)
  • 低级调度(进程调度)
  • 中级调度(内存调度)

进程调度策略有哪几种

  • FCFS(先来先服务,队列实现,非抢占的):先请求CPU的进程先分配到CPU
  • SJF(最短作业优先调度算法):平均等待时间最短,但难以知道下一个CPU区间长度
  • 优先级调度算法(可以是抢占的,也可以是非抢占的):优先级越高越先分配到CPU,相同优先级先到先服务,存在的主要问题是:低优先级进程无穷等待CPU,会导致无穷阻塞或饥饿;解决方案:老化
  • 时间片轮转调度算法(可抢占的):队列中没有进程被分配超过一个时间片的CPU时间,除非它是唯一可运行的进程。如果进程的CPU区间超过了一个时间片,那么该进程就被抢占并放回就绪队列。
  • 多队列调度算法:将就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。其中,一个进程根据自身属性被永久地分配到一个队列中。
  • 多级反馈队列调度算法:与多级队列调度算法相比,其允许进程在队列之间移动:若进程使用过多CPU时间,那么它会被转移到更低的优先级队列;在较低优先级队列等待时间过长的进程会被转移到更高优先级队列,以防止饥饿发生。

死锁的概念

  • 在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。
  • 通俗的讲,就是两个或多个进程无限期的阻塞、相互等待的一种状态。

死锁产生的四个必要条件

  • 互斥条件:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止;
  • 请求和保持条件:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有;
  • 不可抢占条件:进程不能被抢占,即资源只能被进程在完成任务后自愿释放
  • 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系

死锁的处理基本策略和常用方法
解决死锁的基本方法主要有 预防死锁、避免死锁、检测死锁、解除死锁 、鸵鸟策略 等。

  • 1.死锁预防

    • 死锁预防的基本思想是 只要确保死锁发生的四个必要条件中至少有一个不成立,就能预防死锁的发生,具体方法包括:
    • 打破占有并等待条件:可以实行资源预先分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行;只有当系统能满足当前进程所需的全部资源时,才一次性将所申请资源全部分配给该线程)或者只允许进程在没有占用资源时才可以申请资源(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)。但是这种策略也存在一些缺点:在很多情况下,无法预知一个进程执行前所需的全部资源,因为进程是动态执行的,不可预知的;同时,会降低资源利用率,导致降低了进程的并发性。
    • 打破非抢占条件:允许进程强行从占有者哪里夺取某些资源。也就是说,但一个进程占有了一部分资源,在其申请新的资源且得不到满足时,它必须释放所有占有的资源以便让其它线程使用。这种预防死锁的方式实现起来困难,会降低系统性能。
    • 打破循环等待条件:实行资源有序分配策略。对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源,这样就不回产生环路,预防死锁的发生。
  • 2.死锁避免

    • 死锁避免的基本思想是动态地检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态。所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值),那么系统状态是安全的,换句话说就是,如果存在一个安全序列,那么系统处于安全状态。
    • 资源分配图算法和银行家算法是两种经典的死锁避免的算法,其可以确保系统始终处于安全状态。其中,资源分配图算法应用场景为每种资源类型只有一个实例(申请边,分配边,需求边,不形成环才允许分配),而银行家算法应用于每种资源类型可以有多个实例的场景。
  • 3.死锁解除

    • 死锁解除的常用两种方法为进程终止和资源抢占。所谓进程终止是指简单地终止一个或多个进程以打破循环等待,包括两种方式:终止所有死锁进程和一次只终止一个进程直到取消死锁循环为止;
    • 所谓资源抢占是指从一个或多个死锁进程那里抢占一个或多个资源,此时必须考虑三个问题:
      (1). 选择一个牺牲品
      (2). 回滚:回滚到安全状态
      (3). 饥饿(在代价因素中加上回滚次数,回滚的越多则越不可能继续被作为牺牲品,避免一个进程总是被回滚)

四、存储器管理

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

  • 段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)
  • 页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。
  • 两者的不同点:
    • 目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;
    • 大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;
    • 地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;
    • 信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;
    • 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

内存的发展历程

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

五、虚拟存储器

虚拟内存

  • 虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。
  • 当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。
  • 这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上,如图5所示。
  • 由图5可以看出,虚拟内存实际上可以比物理内存大。当访问虚拟内存时,会访问MMU(内存管理单元)去匹配对应的物理地址(比如图5的0,1,2)。如果虚拟内存的页并不存在于物理内存中(如图5的3,4),会产生缺页中断,从磁盘中取得缺的页放入内存,如果内存已满,还会根据某种算法将磁盘中的页换出。
    在这里插入图片描述

页面置换算法

  • FIFO先进先出算法:在操作系统中经常被用到,比如作业调度(主要实现简单,很容易想到);
  • LRU(Least recently use)最近最少使用算法:根据使用时间到现在的长短来判断;
  • LFU(Least frequently use)最少使用次数算法:根据使用次数来判断;
  • OPT(Optimal replacement)最优置换算法:理论的最优,理论;就是要保证置换出去的是不再被使用的页,或者是在实际内存中最晚使用的算法。

虚拟内存的应用与优点

  • 虚拟内存很适合在多道程序设计系统中使用,许多程序的片段同时保存在内存中。当一个程序等待它的一部分读入内存时,可以把CPU交给另一个进程使用。
  • 虚拟内存的使用可以带来以下好处:
    • 在内存中可以保留多个进程,系统并发度提高
    • 解除了用户与内存之间的紧密约束,进程可以比内存的全部空间还大

六、输入输出系统

中断和轮询的特点

  • 对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理I/O设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比I/O设备的速度要快得多,所以一般不会发生不能及时处理的问题。当然,再快的处理机,能处理的输入输出设备的数量也是有一定限度的。而且,程序轮询毕竟占据了CPU相当一部分处理时间,因此,程序轮询是一种效率较低的方式,在现代计算机系统中已很少应用。
  • 程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预先安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为响应的服务程序去处理。
  • 轮询——效率低,等待时间很长,CPU利用率不高。
  • 中断——容易遗漏一些问题,CPU利用率高。

七、文件管理

八、磁盘存储器管理

猜你喜欢

转载自blog.csdn.net/pary__for/article/details/112844078