操作系统知识点整理-面经

1.操作系统引论

(1)什么是操作系统?

操作系统是管理计算机系统资源,控制程序执行,改善人机界面,为应用软件提供支持的一种系统软件,它合理的组织计算机的工作流程,是用户与计算机硬件系统之间的接口。

(2)操作系统的作用

·作为用户与计算机硬件系统之间的接口

·作为计算机系统资源的管理者

·实现了对计算机资源的抽象与扩充

(3)操作系统的特性

  • 并发

并发是指两个或多个事件在同一时间间隔内执行

  • 共享

共享是计算机资源可以被多个可以并发执行的进程或者线程共同使用

互斥共享:当某一进程访问完并释放该资源后,才允许另一进程访问。

同时共享:计算机资源允许在同一时刻内被多个进程同时访问。

  • 虚拟

虚拟指通过某种技术将一个物理实体变为多个逻辑上的对应物。

  • 异步

指多道程序环境下多个程序并发执行,但由于资源有限,每个程序在何时执行,程序间的执行顺序以及完成每道程序所需的时间都是不确定和不可预知的,进程以不可预知的速度向前推进。

(4)并发并行的区别

并发是两个或多个事件在同一时间间隔内执行。

并行是两个或多个事件在同一时刻执行。

在多处理机环境下,多个可并发执行的程序可以分散到各个处理机上并行执行。

在多道程序处理环境下,一段时间内,宏观上有多个程序在同时执行,但是在单处理机环境下,每个时刻只能有一个程序执行,所以微观上这些程序只是在分时交替的执行。

(5)操作系统结构

  • 大内核结构

模块化分层式结构

优点:系统内各个模块间直接调用函数实现功能,除了函数调用的开销外没有额外开销。

缺点:庞大的操作系统有数以千计的函数,复杂的调用关系势必会造成操作系统的维护困难。

  • 微内核结构

微内核是精心设计的,运行在核心态,能实现现代操作系统核心功能的小型内核,它将那些不必在核心态执行的功能移到用户态执行。

优点:各个服务器模块之间具有相对独立性,维护比较容易。

缺点:内核发出请求,服务器做出应答,内核与服务器之间通过通信机制进行交互,使得微内核的效率大打折扣。会引起更多的上下文切换。

(6)微内核的功能

进程(线程)管理

低级存储器管理

中断和陷入处理

(7)操作系统发展历史

手工操作阶段->早期批处理->多道程序批处理操作系统->分时操作系统->实时操作系统->网络操作系统->分布式操作系统->个人计算机操作系统

操作系统基本类型:多道程序批处理操作系统->分时操作系统->实时操作系统

多道程序批处理:用户脱机使用计算机,作业成批处理,系统内多道程序并发执行,交互性差

分时操作系统:允许多个用户同时使用计算机,具有每个用户独立使用计算机的独占性,人机交互性强,系统响应及时

实时操作系统:能对控制对象做出及时反映,可靠性高,响应及时,但是资源利用率低。

(8)分时操作系统与实时操作系统的比较

设计目标:分时系统是为多用户提供的通用交互型开发运行环境;实时系统是为特殊用途提供的专用系统。

响应时间:分时系统以用户能够接受的响应时间为准;实时系统与受控对象和应用场合有关。

交互性:分时系统交互性强;实时系统较弱。

(9)分布式操作系统与网络操作系统的比较

耦合程度:分布式操作系统是紧密耦合系统,分布式操作系统是在各机上统一建立的操作系统同质,直接管理CPU、外设、存储器,统一进行全系统的管理;网络操作系统通常允许异种操作系统进行互连,各机上各种服务程序需按相同网络协议协议同质。

并行性:分布式操作系统可将一个进程分散到各机上并行运行;网络操作系统各机上的进程独立。

透明性:分布式操作系统的网络资源调度对用户透明,用户不了解所占有资源的位置;网络操作系统对网络资源的使用要由用户明确指定。

健壮性:分布式操作系统要有更高的健壮性。

(10)系统调用

系统调用是操作系统为应用程序提供的接口,可以理解为可供应用程序调用的特殊函数,应用程序可以发出系统调用向向操作系统提出请求,操作系统代为完成。

系统调用(按功能分类):设备管理、文件管理、进程通信、进程控制、内存管理

(11)系统调用和库函数的区别

库函数是语言或应用程序的一部分,库函数可以在用户态下执行,库函数可以涉及系统调用,比如创建文件函数,也可以不涉及系统调用,比如绝对值函数。不涉及系统调用的函数效率要比涉及的效率高,因为使用系统调用时需要上下文切换以及状态转换。

系统调用是操作系统的一部分,是内核为应用程序提供的接口,必须在核心态下执行。

(12)中断和异常

中断:计算机在运行过程中,出现某些意外情况需要主机干预时,主机停止正在运行的程序转去执行处理意外情况的中断服务程序,处理完毕后又返回原被暂停的程序继续执行。

中断分为内中断和外中断

内中断信号来自CPU内部,与当前执行指令有关;外中断信号来自CPU外部,与当前执行指令无关。

(13)处理器为什么要区分用户态和核心态?在什么情况下进行两种方式的切换?

区分执行态的目的是保护系统程序,用户程序不能直接执行对系统影响非常大的操作,必须通过系统调用请求操作系统代为完成,以便保证系统的稳定性和安全性,防止用户程序随意访问或者修改系统中的重要资源,影响其他进程的执行。

用户态到核心态的转换发生在中断产生时,并且中断是唯一条件,由硬件完成;核心态到用户态的转换发生在中断返回应用程序时,由一条修改PSW(进程状态字)程序状态寄存器的特权指令完成。

2.进程与线程

2.1进程概述

(1)什么是进程?什么是线程?

进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

引入线程后,线程是调度的独立单位。

引入进程的目的是更好的使多道程序并发执行,提高资源利用率和系统吞吐量。

引入线程的目的是减小程序并发执行时的时空开销,提高操作系统的并发性能。

(2)进程和线程的比较

·调度:在传统的操作系统中,拥有资源和独立调度的基本单位都是进程,每次调度都要进行上下文切换,开销较大;在引入线程的操作系统中,线程是独立调度的基本单位,而线程切换的代价远低于进程。

·并发性:在引入线程的操作系统中,不仅进程可以并发执行,而且一个进程中的多个线程也可以并发执行,使操作系统有了更好的并发性,提高了系统吞吐量。

·拥有资源:进程是系统中拥有资源的基本单位,而线程不拥有资源,但可以访问其隶属进程的系统资源。

·系统开销:在创建、撤销或切换进程时的开销大于线程,线程切换只需要保存和设置较少寄存器内容。

·支持多处理机系统:对于单线程进程,进程只能运行在一个处理机上,对于多线程进程,可以将进程中的多个线程分散到各个处理机上执行。

·地址空间和其他资源:每个进程都拥有独立的地址空间和资源,而同一进程中的各线程共享进程资源,且对其他进程不可见。

·通信:进程间通信需要进程同步和互斥手段的辅助,以保证数据的一致性;线程间可以直接读写进程数据段来进行通信。

·线程是进程的一个组成部分,每个进程在创建时通常只有一个线程,需要时可以创建其他线程。

(3)进程的组成和特性?

进程由数据段、程序段和进程控制块(PCB)组成,PCB是进程存在的唯一标志,系统利用PCB来管理和控制进程。

进程特点:

动态性(进程最基本的特性):进程是程序的执行过程,是动态的概念

并发性:多个进程可以在同一时间间隔并发执行

独立性:进程拥有独立的地址空间和资源

异步性:由于系统资源有限,并发执行的进程在何时开始执行,执行的顺序与执行多长时间是不确定和不可预知的,进程以不可预知的速度向前推进。

结构性:进程由数据段、程序段和进程控制块组成,具有结构性

交互性:

(4)进程和程序的区别

程序是指令的集合。是静态的概念;而进程是程序的执行过程,是动态的概念。

程序可以作为资料永久保存;而进程具有生命周期,存在是暂时的。

程序与进程不是一一对应的,一个进程可以运行多个程序,一个程序也可以在多个进程中运行。

进程是有结构的——由程序段、数据段和PCB组成,而程序没有。

进程可以生成子进程,程序不可以。

进程具有并发性,程序没有。

进程是竞争计算机资源的基本单位。

(5)程序顺序执行时的特征

程序运行的顺序性

程序运行环境的封闭性

程序计算结果的可再现性

(6)程序并发执行的特征

间断性

失去封闭性

不可再现性

计算与结果不再一一对应

(7)程序输入一样运行结果为什么不一样?

程序在并发执行时,由于失去了封闭性,其计算结果已经和并发执行速度有关,从而使程序失去了可再现性。

(8)进程控制块的作用

系统借助PCB来控制和管理进程,PCB是系统感知进程存在的唯一标志。

PCB中包含:进程标识符——标志各个进程

​ 进程控制和管理信息

​ 进程当前状态、进程优先级——作为处理机调度的依据

​ 处理机相关信息——当进程被切换时,处理及状态信息都必须保存在相应的PCB中,以便该进程重新执行时,能从断点继续执行。

​ 资源分配清单

(9)什么是上下文?

执行过的指令和数据在相关寄存器和堆栈中的内容称为上文。

正在执行的指令和数据在相关寄存器和堆栈中的内容称为正文。

待执行的指令和数据在相关寄存器和堆栈中的内容称为下文。

2.2进程状态和管理

(1)进程的三种基本状态及基本转换

就绪状态:进程已经分配到除处理机之外的所有必要的资源,只要能够获得处理机,便可立即执行的状态。

运行状态:进程已经获得处理机,其程序正在执行。

阻塞状态:进程因发生某些事件而暂停执行的状态。

在这里插入图片描述

就绪->运行:调度程序选择一个新的程序运行

运行->就绪:运行进程用完了时间片、高优先级进程处于就绪状态,运行进程被中断

运行->阻塞:进程需要等待某一事件的发生

阻塞->就绪:进程等待的事件发生

不能由阻塞态直接转换成运行态:只有通过调度才能进入运行态,而只有位于就绪态的进程才会被调度。

不能由就绪态直接转换为阻塞态:进程进入阻塞态是主动请求的,所以只有处于运行态的进程才能发出进入阻塞态的请求。

(2)进程的五状态转换模型、单挂起进程模型和双挂起进程模型

在这里插入图片描述

在这里插入图片描述

挂起:把一个进程从内存转到外存

挂起的目的:提高处理机效率、为运行进程提供足够内存、用于调试
在这里插入图片描述

收容(Admit):让一个新建的进程进入就绪状态或就绪挂起状态

2.3进程通信及线程

(1)什么是进程通信?通信机制有哪些?

一个进程直接或通过某一机构发一条消息给另一个进程,且据此来控制其他进程,进程之间的这种信息交流称为进程通信。

通信机制

在这里插入图片描述

低级通信机制:一般只传送一个或几个字节的信息,达到控制进程执行速度的作用。优点:速度快;缺点:信息量小、效率低、编程复杂。

高级通信机制:可以传送任意字节的消息,进程之间交换的信息量较多且效率高,解决了一个进程将大批量数据传送至另一个进程的问题。

(2)什么是共享存储系统通信?

在内存空间中开辟一个区域,并连接进入多个进程的虚拟地址空间,一个进程在该空间写入数据后,另一个进程便可从中读出数据,此后便可像读写普通存储器一样读写该区域。

特点:效率高,一个进程可以分配多个共享存储区。

(3)什么是消息传递系统通信?

进程间通信以消息为单位进行传递,发送进程发送消息到消息队列,接收进程从中取出消息,程序员直接利用系统的通信原语进行通信。

(4)什么是管道通信?

管道:指用于连接读进程和写进程以实现进程通信的共享文件,称pipe文件。

发送进程以字符流形式将大量数据送入管道,接收进程从中取出数据的通信过程称为管道通信。

(5)什么是内核级线程和用户级线程?他们的区别是什么?

内核级线程:从操作系统视角能看到的线程,依赖于操作系统核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。

用户级线程:有关线程管理(创建、撤销、切换)的所有工作全部由用户程序在用户态下执行,内核意识不到线程的存在。

区别

创建:用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责完成;内核级线程的管理工作由操作系统内核完成。

切换:用户级线程中线程切换在用户态下进行;内核级线程切换必须在核心态下完成

开销:用户级线程管理的系统开销小,效率高;内核级线程管理需要切换到核心态,管理成本高,开销大。

操作系统意识:操作系统意识不到用户级线程的存在;但是可以看到内核级线程

并发度:用户级线程当其中一个线程被阻塞后,整个进程会被阻塞,并发度不高;内核级线程被阻塞后,别的线程可以继续执行,并发能力强。

并行性:多个用户级线程不可在多处理机上并行运行;内核级线程可以。

(6)多线程进程优点

响应速度快:即使部分线程阻塞,其余线程可以继续运行

资源共享:共享所属进程的内存和资源

经济:创建和切换线程更加经济

多处理机资源的利用:多个线程可以分散到多个处理机上并行执行

(7)多线程模型

有些系统同时支持用户级线程和内核级线程,由于用户级线程和内核级线程的连接方式不同,形成了三种不同的多线程模型。
在这里插入图片描述

一对一模型:将每个用户级线程映射到一个内核级线程

在这里插入图片描述

优点:当一个线程被阻塞后,允许调度另一个线程运行,所以并发能力较强

缺点:每创建一个用户进程,就要创建一个内核进程,开销较大

多对一模型:将多个用户级线程映射到一个内核级线程

在这里插入图片描述

优点:线程管理是在用户空间进行的,效率高

缺点:如果一个线程在访问内核时发生阻塞,则整个进程都会被阻塞,在任何时刻只有一个线程能够访问内核。

多对多模型:将多个用户级线程映射到多个内核级线程

在这里插入图片描述

克服了一对一模型开销大的缺点和多对一模型并发度不高的缺点。拥有着两种模型的优点。

2.4处理器调度

(1)什么是处理器调度,处理器管理的工作是什么?

从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。

处理器管理的工作是对CPU资源进行合理的分配使用,以提高处理机利用率,并使各用户公平的得到处理机资源。

(2)处理器的调度级别?

高级调度(作业调度):从后备队列中按照一定的算法选择合适的作业调入内存,并为其创建进程

中级调度(交换调度):从挂起队列中按照一定的算法选择合适的进程调入内存

低级调度(进程调度):从就绪队列中按照一定的算法选择合适的进程调入CPU

高级调度发生的频率最低,低级调度发生的频率最高。

(3)什么是作业?作业的组成

作业是在一次计算过程中或一次事务处理过程中要求计算机系统完成的全部工作。

作业 = 程序 + 数据 + 作业说明书

(4)作业与进程的关系?

作业是任务实体,进程是完成任务的执行实体。

没有作业进程无事可做,没有进程作业无法完成。

作业的概念更多的用于批处理操作系统中,而进程则可以用于各种多道程序设计系统。

(5)进程调度的时机

在这里插入图片描述

不能进行进程调度与切换的情况

在处理中断的过程中

进程在操作系统内核程序临界区中

在原语操作过程中

(6)进程调度的方式?

可剥夺方式(抢占方式):当某一个进程正在执行时,操作系统可以基于某种原则剥夺已分配给他的处理机资源,将处理机分配给其他进程,适用于分时实时操作系统。

不可剥夺方式(非抢占方式):进程调度程序一旦把处理机分配给某进程后,只有当这个进程执行完或者发生某事件而阻塞时,才把处理器分配给另外的进程。

(7)调度算法的评价指标和若干标准

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

作业周转时间:从作业提交时刻到作业完成时刻的时间间隔。

进程周转时间:进程进入时刻到进程完成这段时间的时间间隔,也就是作业周转时间减去作业在后备队列中的等待时间

平均周转时间:各进程周转时间之和/进程个数

带权周转时间=周转时间/实际运行的时间

平均带权周转时间=各进程带权周转时间之和/进程个数

等待时间指进程/作业处于等待处理机的状态的时间之和

系统吞吐量:单位时间内完成作业的数量(完成作业量/时间)

cpu利用率:指cpu忙碌的时间占总时间的比例

(8)调度算法

先来先服务(FCFS):每次调度时总是选择最先进入就绪队列的进程为其分配处理机,使其执行,该进程一直执行到完成或发生阻塞事件时为止。

优点:公平,实现简单 缺点:对短作业不利

短作业优先(SJF):从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即运行,该进程一直执行到完成或发生阻塞事件时为止,再重新进行调度。

优点:有利于短作业,在给定的时间内可以完成更多作业,增大了系统吞吐量,改善调度性能

缺点:对长作业不利,没有考虑作业的紧急程度

​ 作业长短只根据用户提供的估计运行时间而定,不一定真正能做到短作业优先调度

高响应比优先(HRRN):优先权=(等待时间+要求服务时间)/要求服务时间

时间片轮转调度算法(RR):就绪进程按先来先服务的原则,把CPU分配给队首进程,并令其执行一个时间片,当执行的时间片用完时,将该进程放到队尾,依次执行下一个进程。

优点:保证所有的就绪进程在一定的时间内均能获得一时间片的执行时间

缺点:时间片的长短对其调度有着很大的影响,若时间片太短,则将频繁的进行进程切换,将增大系统的开销;若时间片太长,则退化成FCFS算法。

高优先级调度算法:优先选择就绪队列中优先级最高的进程分配处理机。

多级反馈队列调度算法:时间片轮转调度算法与高优先级调度算法的结合。

2.5进程同步与互斥

(1)同步与互斥的定义?

同步:指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而产生的制约关系。(执行时有先后顺序)

互斥:并发进程在竞争共享资源时,一个时刻只允许一个进程去使用,其他想要使用该资源的进程必须等待,直至该资源被释放。(不能同时进入临界区)

(2)什么是临界资源与临界区、进入区、退出区?

临界资源:一次只允许一个进程访问的资源

临界区:访问临界资源的那段代码

进入区:在临界区前面增加的一段用于进行临界资源检查的代码

退出区:将临界资源正被访问的标志恢复为未被访问的标志

(3)临界区的四个管理准则

空闲让进:其他进程均不处于临界区

忙则等待:已有进程处于临界区

有限等待:等待进入临界区的进程不能死等

让权等待:不能进入临界区的进程,应释放CPU

(4)进程同步机制有哪些?

在这里插入图片描述

单标志法:一个进程在访问完临界区后会把使用临界区的权限交给另一个进程。

int turn = 0;
//P0进程                              //P1进程
while(turn != 0);					 while(turn != 1);
critical section;					 critical section;
turn = 1;							 turn = 0;
remainder section;					 remainder section;

该算法对于临界区的访问一定是按照P0->P1->P0->P1……的顺序来的。若P0此时允许进入临界区而P0一直不访问临界区,那么虽然临界区空闲,但并不允许P1访问。

该算法违背了“空闲让进”原则。

双标志先检查法:设置一个布尔型数组flag[],数组中各个元素用来标记各进程想进入临界区的意愿,每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,把自身flag设为true,之后开始访问临界区。

bool flag[2] = {false};
//P0进程									//P1进程
while(flag[1]);(1)						 while(flag[0]);(6)
flag[0] = true;	(2)					 	 flag[1] = true;(7)
critical section;(3)					 critical section;(8)
flag[0] = false;(4)					 	 flag[1] = false;(9)
remainder section;(5)					 remainder section;(10)

(1)(6)(2)(7)……顺序执行两个进程会同时访问临界资源,违背了“忙则等待”原则。

双标志后检查法:双标志先检查法的改版,前一算法是先检查后上锁,这一算法是先上锁后检查。

bool flag[2] = {false};
//P0进程									//P1进程
flag[0] = true;(1)						 flag[1] = true;(6)
while(flag[1]);	(2)					 	 while(flag[0]);(7)
critical section;(3)					 critical section;(8)
flag[0] = false;(4)					 	 flag[1] = false;(9)
remainder section;(5)					 remainder section;(10)

解决了忙则等待问题,但是违反了空闲让进和有限等待原则((1)(6)(2)(7)……顺序执行)

peterson算法:只能处理两个进程

bool flag[2];
turn = 0;//turn 表示优先让哪个进程进入临界区
//P0进程									//P1进程
flag[0] = true;					 		 flag[1] = true;
turn = 1;							     turn = 0;
while(flag[1] && turn == 1);     	     while(flag[0] && turn ==0);
critical section;			 			 critical section;
flag[0] = false;				 	 	 flag[1] = false;
remainder section;					 	 remainder section;

遵循空闲让进、忙则等待、有限等待原则,违背了让权等待原则。

硬件同步机制

关中断:在进入临界区之前关中断,直到该进程访问完临界区再开中断。

优点:简单高效

缺点:滥用中断权力可能会导致严重后果

​ 关中断时间过长会影响系统效率

​ 不适用于多CPU系统,因为在一个处理器上关中断并不能防止进程在其他处理器上执行相同的临界区代码。

TSL/swap指令

优点:实现简单,无需像软件实现方法那样严格检查是否会有逻辑漏洞,适用于多处理机环境

缺点:不满足让权等待原则,会出现忙等现象。

(5)信号量机制实现进程互斥

信号量:表示可以使用的资源个数

实现互斥是在同一进程中进行一对PV操作

实现同步是在一个进程P,一个进程V

经典问题
1)生产者-消费者问题
semaphore mutex = 1;
semaphore full = 0;
semaphore empty = 1;
producer(){
	while(1){
        P(empty);
		P(muntex);
        生产产品
        V(full);
        V(mutex);
	}
}
consumer(){
	while(1){
        P(full);
		P(mutex);
        消费产品
        V(empty);
        V(mutex);
	}
}
2)哲学家进餐问题

避免死锁办法:

最多允许4个人同时拿起筷子

当哲学家两边筷子都可用时才允许拿起筷子

对哲学家编号,奇号哲学家先拿左边筷子,偶号哲学家先拿右边筷子

//当两边筷子都可用时才拿起筷子
semaphore chopsticks[5] = {1,1,1,1,1};
semaphore mutex = 1;
P(){
	while(1){
        P(mutex);
        P(chopsticks[i]);
        P(chopsticks[(i + 1) % 5]);
        V(mutex);
        进餐;
        V(chopsticks[i]);
        V(chopsticks[(i + 1) % 5]);
        思考;
    }
}
3)读者-写者问题

读读允许,读写,写写不允许

//写进程优先
int count = 0;
semaphore mutex = 1;//更新count互斥
semaphore rw = 1;//读者写者互斥
semaphore w = 1;//实现写优先
writer(){
    while(1){
        P(w);
        P(rw);
        写;
        V(rw);
        V(w);
    }
}

reader(){
    while(1){
        P(w);//没有写进程才读,如果有w < 0,该进程阻塞
        P(mutex);
        if(count == 0)
            P(rw);
        count++;
        V(mutex);
        读;
        P(mutex);
        count--;
        if(count == 0)
            V(rw);
        V(mutex);
    }
}

(6)死锁、饥饿与死循环的联系和区别

共同点:都是进程无法向前顺利推进的现象(故意设计的死循环除外)

区别:死锁一定是循环等待对方手里的资源导致的,因此如果有死锁现象,至少有两个进程同时发生死锁,发生死锁的进程一定处于阻塞态

可能只有一个进程发生饥饿。饥饿的进程可能处于阻塞态,也可能处于就绪态

可能只有一个进程发生死循环,死循环的进程可能处在运行态,只不过无法像期望那样顺利推进。

死锁和饥饿是由于操作系统分配资源的策略不合理导致的,而死循环是由代码逻辑的错误导致的,死锁和饥饿是管理者(操作系统)的问题 ,而死循环是被管理者的问题。

2.6死锁

(1)死锁的概念

指两个或多个进程都无限的等待一个事件,而该事件又只能由这些等待进程之一来产生。

(2)死锁形成的四个必要条件

互斥使用

不可抢占

请求并保持

循环等待

(3)解决死锁问题的几个策略

死锁预防(预防火灾)

死锁避免(检测到煤气超标,自动切断电源)

死锁检测和解除(发现火灾,灭火)

死锁忽略(在太阳上不管火灾)

(4)银行家算法工作原理及缺点

安全序列:如果系统按照这种序列分配资源,则每个进程都能顺利完成。

主要思想是避免系统进入不安全状态,在每次进行资源分配时,他首先检查系统是否有足够的资源,如果有,先进行试分配,并对分配后的新状态进行安全性检查,若新状态安全,则正式分配上述资源;否则拒绝分配该资源。保证系统始终处于安全状态,从而避免了死锁现象的发生。

例题:

processcurrent_allocationstill_needavailable
P0003200122022
P110001130
P213011310
P303010032
P400121023

(1)该状态是否安全,列出一个安全序列

当前状态work = [2,0,2,2]

P0 work = [2,0,5,4]

P3 work = [2,3,5,5]

P1 work = [3,3,5,5]

P2 work = [4,6,5,6]

P4 work = [4,6,6,8]

所以一个安全序列为P0,P3,P1,P2,P4

(2)P2请求1,0,1,0能否予以满足?

若将P2请求1,0,1,0予以满足,则系统资源剩余量为1,0,1,2,可以满足进程P0,P0完成后资源剩余量1,0,4,4,可满足进程P3,P4,假设让P3先完成,完成后资源剩余量为1,3,4,5,满足进程P1,P2,P4,假设先让P1完成,完成后资源剩余量2,3,4,5,满足P2,P4,假设让P2先完成,完成后资源剩余量4,6,5,6,最后P4可以完成,所以可以满足P2请求。

缺点

请求矩阵R不容易得到

进程的个数不是固定的而是动态变化的

资源的个数也不是固定的

(5)死锁检测算法

在这里插入图片描述

3.内存管理

3.1概述

(1)什么是内存管理?存储管理有哪些功能?

操作系统对内存的划分与动态分配

在这里插入图片描述

内存分配与回收:由操作系统完成主存储空间的分配和管理

地址映射:把逻辑地址转换为相应的物理地址

内存共享:允许多个进程访问内存的同一部分

存储保护:保证各道作业在各自的存储空间内运行,互不干扰

内存扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存

(2)物理地址和逻辑地址的概念?

物理地址(绝对地址):主存储器中每个存储单元的地址,信息在存储器中的实际存放地址

逻辑地址(相对地址):允许在程序中编排的地址

(3)程序的编译、链接和装入

在这里插入图片描述

编译:由编译程序将用户源代码编译成若按目标模块

链接:由链接程序将编译后形成的一组目标模块及他们所需的库函数链接在一起,形成一个完整的装入模块

静态链接:在程序运行之前,先将各目标模块及他们所需要的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开

装入时动态链接:将各目标模块装入内存时,边装入边链接

运行时动态链接:在程序执行过程中需要该目标模块时,才对他进行链接

装入(重定位):由装入程序将装入模块装入内存中运行,一个经过编译链接的程序存在于自己的虚拟地址空间中,当要运行时才把他装入自己的内存空间中,这时需要将程序中的逻辑地址转换成主存中侧物理地址,这个转换过程即为重定位技术

绝对装入:程序中的逻辑地址和实际内存地址完全相同,不需对程序和数据的地址进行修改,只适用于单道程序运行环境

可重定位装入:地址变换通常在进程装入时一次完成,一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存就不能装入该作业,作业一旦进入内存后,在运行期间就不能再移动,也不能再申请内存空间

动态运行时重定位:在程序装入时保留逻辑地址不变,在程序执行过程中,CPU执行到具体的指令时,才将要访问指令的逻辑地址转换为物理地址

3.2分区分页分段管理技术

在这里插入图片描述

什么是连续分配方式和非连续分配方式

连续分配:为用户进程分配的必须是一个连续的内存空间

非连续分配::为用户进程分配的可以是一些分散的内存空间

分区存储管理

(1)什么是外碎片和内碎片?

外碎片:指还没有被分配出去,但是由于太小了无法分配给申请内存空间的新进程的内存空闲区域

内碎片:指已经分配出去,但是没有被利用的内存空间

(2)固定分区分配的特点

分区大小相等:缺乏灵活性,但很适合用于一台计算机控制多个相同对象的场合

分区大小不等

优点:实现简单,无外部碎片

缺点:当用户程序太大时,可能所有的分区都不能满足要求,需要采用覆盖技术解决,会降低性能

(3)动态分区分配的特点及其中的算法

动态分区分配:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小

动态分区的分配算法

首次适应算法(First fit)

循环首次适应算法(Next Fit)

最佳适应算法(Best Fit)

最坏适应算法(Worst Fit)

在这里插入图片描述

(4)覆盖与对换的概念

覆盖:把一个程序划分为一系列功能相对独立的程序段,让执行时不要求同时装入内存的程序段组成一组(称覆盖段),共享主存的同一个区域。

对换:把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上,以便腾出足够内存空间,再把已具备运行条件的进程和进程所需要的程序和数据调入内存

(5)进程的换入和换出规则

外存分为文件区对换区

文件区用于存放文件,采用离散分配方式

对换区用于存放从内存换出的进程,进程在对换区中驻留的时间是短暂的,采用连续分配方式

换出:选择处于阻塞状态且优先级最低的进程作为换出进程,然后启动盘块,将该进程的程序和数据传送到磁盘对换区上

换入:系统检查所有进程的状态,从中找出就绪状态但已换出的进程,将其换出时间最久的进程作为换入进程

(6)分页的概念

把进程的逻辑地址空间分为若干个大小相等的片,称为页面或页,相应的也把内存空间划分为大小相等的存储块,称为块或页框,在为进程分配内存时,以块为单位将进程中的若干页分别装入到多个可以不相邻的物理块中

分页存储器的逻辑地址:(页号,页内地址)

(7)什么是页内碎片?页面太大太小有什么特点?

页内碎片:进程的最后一页装不满而形成的不可利用的碎片

页面太大,可减少页表长度,提高页面换进换出速度,却会使页内碎片增大

页面太小,可使页内碎片减小。但会使每个进程占用更多页面,从而导致页表过长,占用大量内存,还会降低页面换进换出的效率

(8)页表的概念和组成

在这里插入图片描述

给定逻辑地址A,页面大小为L,页号P = INT[A/L],偏移量A % L

(9)分页存储地址变换机构

地址变换机构任务:将逻辑地址转换为内存中的物理地址

在系统中通常设置一个页表寄存器(PTR),存放页表在内存中的起始地址及页表长度

在这里插入图片描述

若页表全部放在内存中,则存取一条数据或指令至少要访问两次内存,第一次是访问页表,确定所存取数据或指令的物理地址,第二次是根据得到的物理地址存取指令或数据

存在的问题

(1)每次访存操作都需要进行逻辑地址导物理地址的转换,影响计算机处理速度

(2)每个进程引入页表用于存储映射机制,页表不能太大,否则内存利用率低

(10)引入快表的地址变换机构

快表:访问速度比内存块很多的高速缓冲存储器

在这里插入图片描述

单级页表存在的问题

(1)页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框

(2)没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面

(11)两级页表的概念和地址变换机构

​ 将页表在内存中离散存储,为离散分配的页表再建立一张页表,称为页目录表(外层页表,顶层页表)

在这里插入图片描述

(12)基本分段存储管理的概念

分段系统中逻辑地址结构是二维的(段号S,段内偏移W)

在这里插入图片描述

(13)段页式管理

在段页式系统中,作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后将每段分成若干大小固定的页

注意!:在一个进程中,段表只能有一个,而页表可以有多个

在这里插入图片描述

(14)分页和分段的区别和联系

相同点

  • 都采用离散分配方式
  • 都要通过地址映射机构来实现地址变换

区别

  • 分页是出于系统管理的需要,分段是出于用户应用的需要
  • 页大小是系统固定的,段大小通常不固定
  • 分页逻辑地址表示是一维的,分段是二维的
  • 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度
  • 分段比分页更容易实现信息的共享和保护

3.3虚拟内存技术

(1)什么是虚拟存储器?

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

(2)虚拟内存容量问题

虚拟内存的最大容量是由CPU寻址范围确定的

虚拟内存实际容量 = min(内存外存容量之和,CPU寻址范围)

:某计算机地址结构为32位,内存大小512MB,外存大小2GB

虚拟内存最大容量为
2 32 = 4 G B 2^{32} = 4GB 232=4GB
虚拟内存实际容量=min(4GB,512MB+2GB) = 512MB+2GB

(3)虚拟存储器的特征

  • 多次性
  • 对换性
  • 虚拟性
  • 离散分配,部分安装

(4)虚拟内存的实现

在这里插入图片描述

页表机制:

请求页表数据结构

页号内存块号状态位访问字段修改位外存地址

缺页中断:因为当前执行的指令想要访问的目标页面未调入内存而产生的,属于内中断

在这里插入图片描述

(5)调入策略

在这里插入图片描述

(6)什么是局部性原理?

局部性原理:程序在执行过程中的一个较短时期,所执行的指令的地址和指令操作数的地址分别局限于一定区域

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行,如果某个数据被访问过,不久之后该数据可能被再次访问

空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元很有可能被再次访问

(7)什么是抖动?产生抖动的原因是什么?

抖动(颠簸):刚刚换出的界面马上就要换入内存,刚刚换入的页面马上就要换出内存,这种频繁的页面调度行为

主要原因:进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)

为进程分配的物理块太少,会使进程发生抖动现象

为进程分配的物理块太多,会降低系统整体的并发度,降低某些资源的利用率

(8)驻留集和工作集

驻留集:请求分页存储管理中给进程分配的内存块的集合

工作集:指在某段时间间隔里,进程实际访问页面的集合

驻留集的大小不能小于工作集的大小,否则进程运行过程中将频繁缺页

(9)页面分配、置换和清除策略

在这里插入图片描述

(10)页面置换算法

在这里插入图片描述

(11)Belady异常

当为进程分配的物理块数增大时,缺页次数不减反增的异常现象

只有FIFO算法会产生Belady异常

4.文件管理

(1)什么是文件和文件系统

文件:一组带标识的、在逻辑上有完整意义并存储于物理介质上的信息项的集合

文件系统:与文件管理有关的那部分软件,被管理的文件以及管理所需要的数据结构的总体

(2)文件系统中数据的分类

  • 数据项:最低级的数据组织形式
  • 记录:一组相关数据项的集合
  • 文件:由若干记录组成,文件系统中的最大单位

在这里插入图片描述

(3)文件系统的作用

  • 从用户角度看,文件系统主要实现“按名存取”,对文件进行存取控制。负责管理控制用户对文件的各种操作
  • 从系统管理角度,文件系统主要是实现文件存储空间的组织、分配以及文件的存储、检索、共享、保护等管理

在这里插入图片描述

(4)什么是文件目录?文件目录的结构及特点

文件目录:文件控制块(FCB)的有序集合,把所有FCB有机组织起来就构成了文件目录

在这里插入图片描述

  • 单级目录结构

在这里插入图片描述

存在的问题

(1)查找速度慢

(2)不允许重名

(3)不便于实现文件共享

  • 二级目录结构

在这里插入图片描述

优点

(1)提高了检索目录的速度

(2)在不同的用户目录中可以使用相同文件名

(3)不同用户还可以使用不同的文件名来访问系统中的同一个共享文件

缺点:缺乏灵活性,用户不能对自己的文件进行分类

  • 多级目录结构

在这里插入图片描述

优点

(1)层次清晰,解决了文件重名问题

(2)查找搜索速度快

缺点:多次访问磁盘影响速度,结构相对比较复杂,不便于实现文件的共享

(5)文件的逻辑结构和物理结构

逻辑结构:在用户看来,文件内部的数据是如何组织起来的

物理结构:在操作系统看来,文件的数据是如何存放在外存中的

1.逻辑结构

在这里插入图片描述

[OSC_4_1 文件管理——文件系统.pdf](…\HitStudy\操作系统\课件\2022朱东杰\OSC_4_1 文件管理——文件系统.pdf)

无结构文件:文件内部的数据是一系列二进制流或字符流组成,又称流式文件,如windows操作系统中的.txt文件

有结构文件

有结构文件:有一组相似的记录组成,又称记录式文件,每条记录由若干数据项组成。

1)顺序文件

顺序文件:文件中的记录一个接一个的顺序排列(逻辑上)。各个记录在物理上可以顺序存储或链式存储。

在这里插入图片描述

已经知道了文件的起始地址(第一个记录存放的位置),能否快速找到第i个记录对应的地址(随机存取)?

在这里插入图片描述

2)索引文件

索引文件:建立一张索引表以加快文件检索速度,每条记录对应一个索引项

在这里插入图片描述

3)索引顺序文件

索引顺序文件:是索引文件和顺序文件的思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。

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

2.物理结构

在这里插入图片描述

1)连续分配

连续分配:每个文件在磁盘上占有一组连续的块

在这里插入图片描述

优点:顺序访问容易,访问速度快

缺点:要求有连续的存储空间,必须事先知道文件的长度,随着文件不停的被分配和删除,空闲空间逐渐被分割成很小的碎片

2)链接分配

隐式链接:除文件的最后一个盘块之外,每个盘块中都存有指向下一个盘块的指针。

在这里插入图片描述

显式链接:把用于链接各文件各物理块的指针显式的存放在一张表中,即文件分配表(FAT,File Allocation Table)

在这里插入图片描述

链接结构优点:存储碎片问题迎刃而解,有利于文件动态扩充,有利于文件的插入和删除,提高了磁盘空间利用率

缺点:存取速度慢,不适于随机存取

磁头移动多,效率相对较低

存在可靠性问题,如指针出错

链接指针要占用一定空间

3)索引分配

索引结构:把每个磁盘块的指针字取出,放在主存的表或索引中(一个文件对应一张索引表)。

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

(6)文件存储空间的管理方法

在这里插入图片描述

1.空闲表法

在这里插入图片描述

2.空闲链表法

在这里插入图片描述

3.位示图法

在这里插入图片描述

(7)磁盘调度算法

[OSC_4_2 文件管理——磁盘组织与管理.pdf](D:\HitStudy\操作系统\课件\2022朱东杰\OSC_4_2 文件管理——磁盘组织与管理.pdf)

在这里插入图片描述

5.I/O管理

[OSC_5-1 设备管理——IO管理.pdf](D:\HitStudy\操作系统\课件\2022朱东杰\OSC_5-1 设备管理——IO管理.pdf)

(1)spooling假脱机技术

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

spooling技术特点

(1)提高了I/O的速度

(2)将独占设备改造为共享设备

(3)实现了虚拟设备功能

  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
java面经-百度准入职老哥整理.pdf》是一份关于百度准入职面试Java面经整理。这份面经是由百度准入职的老哥整理而成,其中记录了一些面试时可能会遇到的问题以及解答方法。 这份面经对于准备参加百度准入职面试的人来说非常有价值。首先,它列出了一些常见的面试问题,涵盖了Java语言的各个方面,包括基础知识、数据结构与算法、设计模式、多线程、网络编程等等。通过仔细研究和复习这些问题的答案,可以帮助面试者全面了解Java语言的特性和应用。 其次,这份面经还提供了问题的解答思路和方法,帮助面试者理清思路,正确回答问题。这对于很多面试者来说特别有帮助,因为在面试时有时会遇到一些棘手的问题,有了这份面经的指导,面试者可以更好地掌握应对策略。 不过需要注意的是,面经作为一份参考资料,不能完全依赖于它来准备面试面试官可能会问一些不在面经中列出的问题,因此考生还是需要自己对Java语言有充分的了解,并能够熟练运用。同时,面试官还会关注考生的沟通能力、解决问题的能力以及对新技术的学习和掌握能力。 总体来说,《java面经-百度准入职老哥整理.pdf》是一份非常宝贵的资料,可以帮助面试者对Java面试中可能会遇到的问题有更深入的了解,提供了解答思路和方法。但记住,面试准备还需要多方面的知识积累和实践经验的积累,才能在面试中展现自己的优势。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张先森啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值