操作系统常见面试知识点

2019-10-06  本文已影响0人  你臭显摆什么呀

转载:https://www.cnblogs.com/inception6-lxc/p/9073983.html

1.进程的常见状态?以及各种状态之间的转换条件?

2.进程同步

进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
同步机制遵循的原则:
(1)空闲让进;

(2)忙则等待(保证对临界区的互斥访问);

(3)有限等待(有限代表有限的时间,避免死等);

(4)让权等待,(当进程不能进入自己的临界区时,应该释放处理机,以免陷入忙等状态)。

3.进程的通信方式

进程通信是指进程之间的信息交换。交换信息量少称为低级通信。
高级进程是指用户利用操作系统所提供的一组通信命令传送大量数据的通信方式。
高级通信机制归结为三类:
(1)共享存储器系统(存储器中划分的共享存储区)
(2)消息传递系统(进程间的数据交换以信息为单位)
(3)管道通信系统

4.上下文切换

上下文切换(Context Switch)是一种将CPU资源从一个进程分配给另一个进程的机制。在切换的过程中,操作系统需要先存储当前进程的状态(包括内存空间的指针,当前执行完的指令等等),再读入下一个进程的状态,然后执行此进程。

5.进程与线程的区别和联系?

进程和线程的关系
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

进程与线程的区别?
(1)进程有自己的独立地址空间,线程没有
(2)进程是资源分配的最小单位,线程是CPU调度的最小单位
(3)进程和线程通信方式不同,线程之间的通信比较方便,进程之间的通信只能通过进程通信的方式进行)
(4)进程上下文切换开销大,线程开销小
(5)一个进程挂掉了不会影响其他进程,而线程挂掉了会影响其他线程
(6)对进程操作开销一般比较大

为什么进程上下文切换比线程上下文切换代价高
进程切换分两步:
1.切换页目录以使用新的地址空间
2.切换内核栈和硬件上下文

切换的性能消耗:
1.线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。
2.上下文的切换会扰乱处理器的缓存机制。

线程可以分为两类

6.进程调度

调度种类
非抢占式调度与抢占式调度
调度策略的设计

CPU任务分为交互式任务批处理任务,调度最终的目标是合理的使用CPU,使得交互式任务的响应时间尽可能短,用户不至于感到延迟,同时使得批处理任务的周转时间尽可能短,减少用户等待的时间。

调度算法

FIFO(先来先服务)

SJF最短作业优先

最短剩余时间作业优先

优先权调度

时间片轮转调度算法

多级队列调度

多级反馈队列

7.死锁的条件?以及如何处理死锁问题?

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

产生死锁的必要条件
如何处理死锁问题

8.临界资源

9.一个程序从开始到结束的完成过程

1.预处理:条件编译,头文件包含,宏替换的处理,生成.i文件。
2.编译:将预处理后的文件转换成汇编语言,生成.s文件
3.汇编:汇编变为目标代码(机器代码)生成.o的文件
4.链接:连接目标代码,生成可执行程序

10.内存池、进程池、线程池

线程池:类似于操作系统中的缓冲区的概念,先启动若干数量的线程,并让这些线程都处于睡眠状态,当需要一个开辟一个线程去做具体的工作时,就会唤醒线程池中的某一个睡眠线程,让它去做具体工作,当工作完成后,线程又处于睡眠状态,而不是将线程销毁。
进程池:与线程池同理
内存池:程序预先从操作系统申请一块足够大内存,此后,当程序中需要申请内存的时候,不是直接向操作系统申请,而是直接从内存池中获取;

11.动态链接库与静态链接库的区别

静态库

静态库是一个外部函数与变量的集合体。静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与链接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件。而这个可执行文件与编译可执行文件的程序,都是一种程序的静态创建(static build)。

动态库

区别
1.使用静态库的时候,静态链接库要参与编译,在生成执行文件之前的链接过程中,要将静态链接库的全部指令直接链接入可执行文件中。而动态库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个.dll文件中,该dll包含一个或多个已被编译,链接并与使用它们的进程分开储存的函数
2.静态库中不能再包含其他动态库或静态库,而在动态库中还可以再包含其他动态或者静态库。
3.静态库在编译的时候,就将库函数装在到程序中去了,而动态库函数必须在运行的时候才被装载,所以使用静态库速度快一些。

12.虚拟内存

定义:具有请求调入和置换功能,能从逻辑上对内存容量加以扩充得一种存储器系统。其逻辑容量由内存之和和外存之和决定。

虚拟存储器有以下三个主要特征:

13.页面置换算法

操作系统将内存按照页面进行管理,在需要的时候才把进程相应的部分调入内存。当产生缺页中断时,需要选择一个页面写入。如果要换出的页面在内存中被修改过,变成了“脏”页面,那就需要先写会到磁盘。页面置换算法,就是要选出最合适的一个页面,使得置换的效率最高。

1.最优页面置换算法

最理想的状态下,我们给页面做个标记,挑选一个最远才会被再次用到的页面调出。当然,这样的算法不可能实现,因为不确定一个页面在何时会被用到。

2.先进先出页面置换算法

淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予淘汰。实现:把一个进程已调入内存的页面按先后次序链接成一个队列,并且设置一个指针总是指向最老的页面。缺点:对于有些经常被访问的页面如含有全局变量、常用函数、例程等的页面,不能保证这些不被淘汰。

3.最近最少使用页面置换算法

根据页面调入内存后的使用情况做出决策。LRU置换算法是选择最近最久未使用的页面进行淘汰。
1.为每个在内存中的页面配置一个移位寄存器,定时信号每隔一段时间将寄存器右移一位。最小数值的寄存器对应页面就是最久未使用页面
2.利用一个特殊的栈保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移除,将它押入栈顶。因此栈顶永远是最新被访问的页面号,栈底是最近最久未被访问的页面号。

分页内存管理
分段内存管理

14.中断与系统调用

所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。

中断种类

用户态切换到内核态的方式如下:

用户态和内核态之间的区别是什么?

15.C++多线程,互斥,同步

当有多个线程的时候,经常需要去同步(注:同步不是同时刻)这些线程以访问同一个数据或资源。

所谓同步,是指在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。

所谓互斥,是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。如果用对资源的访问来定义的话,互斥某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

多线程的同步与互斥实现方法
线程间的同步方法大体分为:用户模式和内核模式
用户模式下的方法:原子操作,临界区
内核模式下的方法有:事件,信号量,互斥量

16.逻辑地址,物理地址,虚拟内存

20.同步与异步

同步
异步
同步与异步的优缺点:
上一篇 下一篇

猜你喜欢

热点阅读