操作系统面试题

《林老师带你学编程》知识星球是由多个工作10年以上的一线大厂开发人员联合创建,希望通过我们的分享,帮助大家少走弯路,可以在技术的领域不断突破和发展。

🔥 具体的加入方式:

1.1、操作系统是什么,有什么功能

操作系统是计算机系统中的一个系统软件,它是一些有特定功能的程序模块的集合。这些程序模块可以有效地组织和管理计算机中的硬件和软件资源,控制程序执行,向用户提供各种服务。

功能:1、提供计算机和用户之间的接口

2、系统资源的管理者(主要功能):进程管理、存储管理、文件管理、作业管理、设备管理。

3、扩充机器

1.2、并发、并行、串行

并发:多个事件在同一时间间隔内发生;宏观上并行,微观上串行。

并行:多个事件在同一时刻发生。

串行:一个时刻只能有一个进程占用CPU。

1.3、内核态和用户态(内核程序和用户程序)

内核态(管态)和用户态(目态)是操作系统的两种级别,内核态运行操作系统程序,用户态运行用户程序。

在计算机中,CPU执行两种不同性质的程序,一种是操作系统的内核程序,内核程序是应用程序的管理者,可以执行特权指令(用户不能直接执行的指令,只允许内核程序调用);一种是用户自编程序或者系统外层的应用程序,出于安全考虑不能执行特权指令。

处于用户态时,进程能访问的内存空间和对象受到限制,占有的处理器可以被抢占;处于内核态时,能访问所有的内存空间和对象,且占有的处理器不可被抢占。

系统调用、异常、外围设备的中断会导致用户态切换到内核态,其中系统调用为主动切换,其他为被动。

1.4、大内核与微内核

大内核是将操作系统各种功能作为一个整体放到内核,而微内核是将一部分操作系统功能移出内核,分层划分为多种服务,比如进程管理、文件管理、设备管理等。这些非内核功能运行在用户态,只有微内核运行在内核态,CPU需要在内核态和用户态切换,造成一定开销。

1.5、操作系统的特征

并发、共享、虚拟、异步,其中并发和共享是最基本的特征。

并发:两个以上事件在一个时间间隔内发生。

共享:资源供多道程序共同使用。

虚拟:将一个物理实体映射成多个逻辑对应物。

异步:多道程序环境下进程并发执行,走走停停以不可预知的速度推进,执行顺序和时间无法确定。

1.6、操作系统和系统调用

应用程序通过系统调用请求操作系统内核的服务。计算机中硬件资源是有限的,应用程序不允许直接操作,对这些资源的访问必须由操作系统控制。系统调用就是操作系统提供的访问这些资源的唯一入口。有了系统调用,应用程序就不用关注具体的硬件访问操作。系统调用一般通过中断实现。

1.7、什么是多道程序设计,为什么采用多道程序设计

多道程序是一种软件技术,使同时进入计算机主存的几个相互独立的程序在管理程序的控制下相互交替地运行。采用多道程序设计可以提高CPU利用率,提高主存和IO设备利用率,提高系统吞吐量。

1.8、分时系统、实时系统、及其区别

分时系统:一台计算机连多个终端,用户通过各自终端将作业送入计算机,计算机通过终端向各用户报告作业情况,能分时轮流为各终端用户服务,并能及时响应用户请求。

特点:多路性、独立性、及时性、交互性。

实时系统:能对特定输入作业及时响应,并在规定时间内完成处理。

特点:分时的四个特点,交互弱及时强,高可靠性,连续的人机对话。

区别:1、设计目标不同。2、响应时间长短不同。3、交互性强弱不同。4、资源利用率不同。

2.1、进程和线程

(1)什么是进程

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

(2)为什么引入进程的概念

多道环境下允许多个进程并发执行,将失去封闭性,并具有间断性和不可再现性,为了更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性,引入了进程的概念。

(3)什么是线程

线程又被称为轻量级进程,是进程内的一个执行实体或执行单元。是系统能够进行调度的最小单位。

(4)为什么引入线程的概念

进程是资源的拥有者,对进程进行创建、撤销、切换等操作需要非常大的开销。因此需要引入线程,线程切换开销小一些,能提高并发程度和资源利用率。

(5)进程和线程的区别

a.进程有自己独立的地址空间,而同一进程内的线程共享同一地址空间。

b.在引入线程的操作系统中,进程是资源分配和调度的基本单位,线程是处理机(CPU)调度和分配的基本单位。

c.资源是分配给进程的,线程只拥有一点在运行中必不可少的资源(如PC,寄存器,栈),和其他线程共享本进程的资源(如内存)。

d.线程依赖进程存在,一个程序至少有一个进程,一个进程至少有一个线程。

(6)进程的特性

动态性:进程从创建到终止,有生命周期。动态性为最基本特征。

并发性:一段时间内多个进程并发执行。

独立性:进程是独立运行、资源分配和调度的基本单位。

异步性:进程按各自的速度向不可预知的方向推进,不可复现。

(7)线程的分类

线程分为用户级线程和内核级线程。

用户级线程:由应用程序实现,线程的切换无须操作系统干预,在用户态完成,操作系统感受不到线程存在,系统开销小,但是若一个用户级线程阻塞,则整个进程阻塞。在用户级线程的系统中,CPU调度还是以进程为单位,所以,线程只能轮流使用一个CPU。

内核级线程:用操作系统完成线程管理工作,线程切换需要切换到内核态完成,此时CPU调度以线程为单位,多线程可以在多个CPU运行。一个线程阻塞后,其他线程依然可以运行。缺点是由内核调度,成本高。

(8)进程间的通信方式

共享内存、无名管道(父子进程或兄弟进程之间)、有名管道(任意进程之间)、消息队列、套接字、信号、信号量

(9)协程

协程比线程还轻量级,完全由程序控制,切换不会消耗资源,可以在线程执行的子程序内部中断,执行其他子程序后再继续执行,性能得到极大提升。

2.2、进程和程序区别

a.程序是静态的,进程是动态的,有一定生命周期。

b.进程可并发执行,而没有创建进程的程序是不能执行的。

c.进程是申请和分配资源的基本单位,而没有创建进程的程序是不能申请资源的。

d.进程 = 程序+数据+进程控制块(PCB)。(PCB是进程存在的唯一标识)

e.一个程序的多次执行对应多个进程。

2.3、进程状态转换图(包括主存、辅存换入换出,即挂起)

将暂时不能运行的进程调到外存(辅存)中等待,即为挂起态,分为阻塞挂起和就绪挂起。

2.4、进程调度

(1)进程调度的功能是什么

进程调度的功能是按照一定的调度算法从就绪队列中选择一个进程,将处理机分配给该进程,使其投入运行。

(2)进程的调度算法有哪些

a.先来先服务(FCFS):按请求顺序,公平,开销小,无饥饿,长作业有利,短作业不利。非抢占式。

b.短作业优先(SJF):运行时间短的优先,有最短的平均等待时间和平均周转时间,短作业有利,长作业饥饿。可抢占也可不抢占。

c.优先级调度:按优先级调度,适用于实时系统,高优先级的进程不停的来时会导致饥饿。可以动态优先级:优先级随着程序的推进而改变。通常优先级大小:系统进程>用户进程;前台进程>后台;IO型进程优先,可以提高资源利用率和吞吐量。可抢占也可不抢占。

d.时间片轮转:按FCFS排队进行服务,时间片用完就排到最后,公平,响应快,适合分时系统,不会饥饿。抢占式,时间片用完抢。

e.最高响应比优先: 响应比等待时间要求服务时间要求服务时间响应比=等待时间+要求服务时间要求服务时间 ,短作业优先,不会饥饿,非抢占式。

d.多级反馈调度:多个就绪队列,优先级递减,进程用完了时间片没执行完会被移入下一级队列队尾,只有前面队列为空了才会轮到当前队列。新到的进程放在当前队列队尾。对IO型有利,会饥饿,抢占式。

(3)进程切换过程

1、保存当前进程状态,将PC、上下文信息保存到PCB中,更新PCB的信息(运行态改为阻塞态或就绪态等),加入阻塞队列。(若时间片用完则为就绪队列)

2、选择另外一个进程执行,更新PCB信息(改为运行态),将进程的上下文从PCB中取出执行。

(4)处理机调度分为哪三级?各自主要任务是什么?

作业调度(高级调度):从后备作业队列中选择一个或几个作业,分配资源,建立进程,挂入进程就绪队列,执行完后回收资源。

交换调度(中级调度):将外存交换区中的进程调入内存,将内存中的进程交换到外存。(挂起)

进程调度(低级调度):从进程就绪队列中选择一个进程,使其占用CPU。

2.5、死锁

(1)死锁的定义是什么?

两个或两个以上进程因竞争资源而造成的互相等待情况,若无外力作用,这些进程都将无法推进下去。

(2)死锁产生的原因

a.系统资源不足,由于对不可剥夺资源的分配不合理导致死锁。

b.进程的推进顺序不当。

(3)死锁的必要条件

a.互斥条件:一段时间内某资源只由一个进程独占。

b.不可剥夺:资源只能主动释放。

c.请求和保持:进程已有一些资源,申请其他资源时,由于申请的资源被其他进程占用而阻塞,但不放弃已有的资源。

d.循环等待:存在一个进程对资源的循环等待链。

(4)如何处理死锁?

主要有死锁预防、死锁避免、死锁检测、死锁解除

(5)死锁预防

破坏四个必要条件中的一个。

破坏互斥:有些资源不能共享,所以这个不太好破坏。

破坏请求和保持:一次性申请所有资源,如果当前系统资源无法满足,则不分配资源。

破坏不可剥夺:如果一个进程占有了部分资源,申请新资源得不到满足时,就必须释放所有占有的资源。

破坏循环等待:实行有序分配,对所有资源编号,按序号递增顺序对资源提出申请。

(6)死锁避免

在资源的动态分配过程中,保证系统处于安全状态。

安全序列:系统按照某种序列分配资源,每个进程都能完成。

安全状态:能找出一个安全序列,就处于安全状态。

处于安全状态,一定不死锁。发生了死锁,一定不处于安全状态。处于不安全状态,不一定死锁。

银行家算法:避免系统进入不安全状态。

(7)死锁检测

画资源分配图,圆形为进程,方形为资源。再简化资源分配图,若能消去所有边,则可简化。

死锁定理:若资源分配图不可简化,则系统进入了死锁状态。

(8)死锁解除

两种方法:抢占资源、撤销进程

抢占资源:从死锁进程中抢占资源。可以挂起死锁进程。

撤销进程:撤销死锁了的进程。可按优先级、资源占用量等选择进程撤销。

2.6、死锁、饥饿、死循环的区别

查看更多