面试整理学习专题2:操作系统(一)

简介: 并行指两个或者多个事件同一时刻发生,并发是两个或者多个事件在同一时间间隔发生;并行是在不同实体上的多个事件,并发是在同一实体上的多个事件(如单核CPU轮转时间片)

1、并发和并行的理解?

并行指两个或者多个事件同一时刻发生,并发是两个或者多个事件在同一时间间隔发生;

并行是在不同实体上的多个事件,并发是在同一实体上的多个事件(如单核CPU轮转时间片)。


2、同步、异步、阻塞、非阻塞的概念。

同步:一个同步调用发出之后,调用者需要一直等待返回结果。有返回结果后,才能执行后续的操作。

异步:当一个异步调用发出之后,调用者不需要立刻等待返回结果,实际处理这个调用的部件在完成之后,通过状态、回调来通知调用者。

阻塞:调用结果返回前,线程会被挂起,即阻塞。

非阻塞:即使调用结果没有返回,也不会阻塞当前的线程。


3、进程、线程基本概念、区别?

进程:是系统进行资源分配和调度的独立单位,是系统中的并发执行的单位。

线程:进程的一个实体,是CPU调度和分派的最小的基本单位,有时候被称为轻量级进程等,比进程更小的能够独立运行的基本单位。

50909f85db5858b16d6b4393d3e462f4_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png


4、为什么有了进程,还要有线程。

进程可以使得多个程序并发执行,提高资源的利用率与系统的吞吐量,但是带来一些缺点。

1、进程在同一时间只能干一件事

2、进程在执行的过程中如果被阻塞了,整个进程就会被挂起,即使进程中有些工作不依赖等待的资源,但是仍然会被阻塞不被执行。


所以引入了线程,作为并发执行的基本单位,减小程序在并发执行时候的时间与空间开销,提高并发的性能。


5、进程的状态转换?(转换)

进程转换有:就绪态、运行态、阻塞态。

进程有:创建态和终止态,但是他们无法循环转换。

22f5ba0508d60d880e2cc6a12b2c1fe9_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png


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

IPC:InterProcess Communication 进程间通信。

是指在不同进程之间传播或者交换信息。

通常有管道、消息队列、信号量、共享存储、Socket、Streams等。


管道:

1、半双工,具有固定的读端和写端。

2、只能用于父子进程或者兄弟进程之间的通信。

3、可以看成一种特殊的文件,对于他的读写可以使用普通read、write函数。

但不是普通的文件,不属于其他任何文件系统,只存在内存之中。


命名管道:

1、FIFO可以在无关的进程之间交换数据,与无名管道不同;

2、FIFO有路径与之相关联,他以一种特殊设备文件形式存在文件系统之中。


消息队列:

1、消息的连接表、放在内核中,一个消息队列由一个标识符ID标识。

2、面向记录的, 消息具有特定的格式以及优先级。

3、独立于发送与接收进程。进程终止时,消息队列及其内容不会被删除。

4、可实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按照消息的类型读取。


信号量:

1、计数器,实现进程之间的互斥与同步,而不是用于存储进程间通信数据。

2、信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。

3、基于操作系统的PV操作,程序对信号量的操作都是原子操作。

4、每次对信号量的PV操作不限于对信号量+1或者-1,可以加减任意正整数。

5、支持信号量组。


共享内存:

1、指两个或者多个进程共享一个特定的存储区域;

2、最快的一种IPC,因为进程是直接对内存进行存取。


8、进程的调度算法

1、先来先服务。

也叫作先进先出,顾名思义,当每个进程就绪之后,就加入就绪队列。当前正在运行的进程停止之后,选择在就绪队列中存在时间最长的进程进行运行,既可以用于作业调度,又可以用于进程调度。


2、时间片轮转法。

主要用于分时系统,将所有就绪进程按照到达时间的先后次序排成一个队列,进程调度程序总是选择第一个进行执行。即先来先服务的原则,但是只能运行一个时间片。


3、短作业优先调度法。

从后备队列中选择一个或者若干个估计运行时间最短的作业,将他们调入内存运行。是一个非抢占策略。


4、最短剩余时间优先调度算法。

这个是针对最短进程优先增加了抢占机制的版本,进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,可能比当前运行的进程具有更短的剩余时间,所以只要该进程就绪了,那么就可能抢占当前正在运行的进程。存在的危险:长进程饥饿。


5、高响应比优先调度算法。

主要用于作业调度。对先来先服务和短作业优先调度算法的一种综合平衡。

同时考虑每个作业的等待时间和估计运行时间,进行作业调度时,计算后备作业队列中每个作业的响应比,选出响应比最高的


6、优先级调度算法。


9、什么是死锁

指多个进程在进行过程中因为争夺资源而造成的一个僵局,如果没有外力作用,将无法再向前推进继续工作。如图所示。

94ab0e5256df023ac167b3a82d62e7f6_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_16,color_FFFFFF,t_70,g_se,x_16.png


10、产生死锁的原因

系统中存在一些不可剥夺的资源,当两个或者两个以上进程占有自身资源,并且请求对方资源时,导致每个进程都无法推进。可能会由于竞争资源或进程推进顺序不当造成。


资源可以分为两类:

1、可剥夺资源。即可以被其他进程或者系统剥夺。CPU和主存都属于这类可剥夺的资源。

2、不可剥夺资源:当该资源分配给某个进程后,不能强行回收了。如打印机等。


11、死锁产生的必要条件

1、互斥条件:进程要求对所分配资源进行排他性控制,即在一段时间某个资源仅为一个进程使用。

2、请求和保持条件:当进程因请求资源而阻塞,对已经获得的资源保持不放。

3、不剥夺资源:进程已获得的资源未使用之前,不能剥夺,只能自己释放。

4、环路等待:发生死锁时,必然存在一个进程-资源的环形链。


12、解决死锁的基本方法

1、预防死锁。

2、避免死锁。

3、检测死锁。

4、解除死锁。


13、预防死锁的办法?

1、破坏请求条件:一次性分配所有资源,就不会再有请求了。

2、破坏请求-保持条件:只要一个资源得不到分配,就不会给这个进程分配其他的资源。

3、破坏不可剥夺的条件:当某个进程获得了部分资源,但是得不到其他的资源,则释放已经占有的资源了。

4、破坏环路等待条件:系统给每类资源一个编号,每一个进程按编号递增的顺序请求条件,释放则相反


14、避免死锁的办法?

1、安全状态。

fc289c7c518678eb8aaef179cfb86f15_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

2、单个资源的银行家算法。

47c2478d8aff85733c295d0f7bba3ad5_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_16,color_FFFFFF,t_70,g_se,x_16.png

3、多个资源的银行家算法。

e998b79791a6ccebb28a081855afce83_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png


15、如何解除死锁?

1、剥夺资源:挂起某些死锁进程,并且抢占该资源。但同时应该防止被挂起的进程长时间得不到资源。

2、撤销进程:强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程的优先级和撤销进程的代价的高低进行。

3、进程退回:让一个或多个进程回退到足以避免死锁的地步。进程回退时自愿释放资源而不是被剥夺,这个方法要求系统保持进程的历史信息,设置还原点。

相关文章
|
1月前
|
存储 Unix 程序员
面试题:Ctrl + C在不同操作系统下的应用
字节跳动面试题:Ctrl + C在不同操作系统下的应用
41 1
|
4月前
|
存储 缓存 前端开发
No198.精选前端面试题,享受每天的挑战和学习
No198.精选前端面试题,享受每天的挑战和学习
|
4月前
|
存储 JSON 前端开发
No206.精选前端面试题,享受每天的挑战和学习
No206.精选前端面试题,享受每天的挑战和学习
No206.精选前端面试题,享受每天的挑战和学习
|
11天前
|
监控 安全 Java
【多线程学习】深入探究阻塞队列与生产者消费者模型和线程池常见面试题
【多线程学习】深入探究阻塞队列与生产者消费者模型和线程池常见面试题
|
26天前
|
存储 算法 Shell
操作系统(1)——学习导论(Ⅲ)
操作系统(1)——学习导论(Ⅲ)
|
26天前
|
存储 缓存 编解码
操作系统(1)——学习导论(Ⅰ)
操作系统(1)——学习导论(Ⅰ)
|
2月前
|
网络协议
跟着动画学习TCP三次握手和四次挥手,及全部面试题
跟着动画学习TCP三次握手和四次挥手,及全部面试题
41 0
|
3月前
|
机器人 Linux 数据安全/隐私保护
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
Python办公自动化【Windows中定时任务、OS/linux 系统定时任务 、Python 钉钉发送消息、Python 钉钉发送图片】(九)-全面详解(学习总结---从入门到深化)
73 0
|
3月前
|
消息中间件 调度 C++
C/C++工程师面试题(操作系统篇)
C/C++工程师面试题(操作系统篇)
36 0
|
4月前
|
存储 前端开发 JavaScript
No204.精选前端面试题,享受每天的挑战和学习
No204.精选前端面试题,享受每天的挑战和学习