概述
操作系统常见面试题
参考来源:
知乎@Joe.Zhao
CSDN@易阳
CSDN@JXH_123
1. 什么是进程?
(比较典型的定义)
(1)进程是程序的一次执行
(2)进程是一个程序及其数据在处理机上顺序执行时发生的活动
(3)进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
2. 进程之间的状态和状态转换有哪些?
- 就绪:进程已处于准备好运行的状态,即进程已分配到除CPU外的所有必要资源后,只要再获得CPU,便可立即执行
- 执行:进程已经获得CPU,程序正在执行状态
- 阻塞:正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态
3. 进程同步与互斥之间的区别?
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
简单地说:同步体现的是一种协作性,互斥体现的是一种排他性。
4. 进程之间的通信方式有哪些?
(1) 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
(2)有名管道 (named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
(3)信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
(4) 消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
(6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
(7)套接字( socket ) :套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
5. 进程的调度?
1.调度种类
-
高级调度(High-Level Scheduling)
又称为作业调度,它决定把后备作业调入内存运行 -
低级调度(Low-Level Scheduling)
又称为进程调度,它决定把就绪队列的某进程获得CPU -
中级调度(Intermediate-Level Scheduling)
又称为在虚拟存储器中引入,在内、外存对换区进行进程对换
2.非抢占式调度与抢占式调度
-
非抢占式
分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生进程调度进程调度某事件而阻塞时,才把处理机分配给另一个进程 -
抢占式
操作系统将正在运行的进程强行暂停,由调度程序将CPU分配给其他就绪进程的调度方式
3.调度算法
-
FIFO或First Come, First Served (FCFS)先来先服务
调度的顺序就是任务到达就绪队列的顺序
公平、简单(FIFO队列)、非抢占、不适合交互式
未考虑任务特性,平均等待时间可以缩短 -
Shortest Job First (SJF)最短的作业(CPU区间长度最小)最先调度
-
SJF可以保证最小的平均等待时间
-
Shortest Remaining Job First (SRJF)SJF的可抢占版本,比SJF更有优势
-
SJF(SRJF): 如何知道下一CPU区间大小?根据历史进行预测: 指数平均法 优先权调度
每个任务关联一个优先权,调度优先权最高的任务
注意:优先权太低的任务一直就绪,得不到运行,出现“饥饿”现象
-
-
Round-Robin(RR)轮转调度算法
设置一个时间片,按时间片来轮转调度(“轮叫”算法)
优点: 定时有响应,等待时间较短;缺点: 上下文切换次数较多
时间片太大,响应时间太长;吞吐量变小,周转时间变长;当时间片过长时,退化为FCFS -
多级队列调度
按照一定的规则建立多个进程队列
不同的队列有固定的优先级(高优先级有抢占权)
不同的队列可以给不同的时间片和采用不同的调度方法
存在问题1:没法区分I/O bound和CPU bound
存在问题2:也存在一定程度的“饥饿”现象 -
多级反馈队列
在多级队列的基础上,任务可以在队列之间移动,更细致的区分任务
可以根据“享用”CPU时间多少来移动队列,阻止“饥饿”
最通用的调度算法,多数OS都使用该方法或其变形,如UNIX、Windows等
6. 什么是线程?
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
7. 进程与线程之间的区别?
(1) 粒度性分析:线程的粒度小于进程。
(2) 调度性分析:进程是资源拥有的基本单位,线程是独立调度与独 立运行的基本单位,出了寄存器,程序计数器等必要的资源外基本不拥有其他资源。
(3) 系统开销分析:由于线程基本不拥有系统资源,所以在进行切换时,线程切换的开销远远小于进程。
8.什么是大小端
9.分页分段和段页的区别
10.进程切换的开销
https://blog.csdn.net/L13763338360/article/details/104961469
最后
以上就是优雅吐司为你收集整理的操作系统知识总结与常见面试题(持续更新)的全部内容,希望文章能够帮你解决操作系统知识总结与常见面试题(持续更新)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复