大长面试避免不了的就是操作系统的相关知识点的考察,以下是我自己面试中遇到的以及常见的操作系统面试知识点。有关理解可能存在偏差,可以留言指正。
1.进程和线程
1.1 概念
进程:
系统进行资源分配的基本单位,有独立的内存地址空间
线程:
程序执行的最小单位,比进程更小的独立运行的基本单位,线程也被称为轻量级进程
1.2 为什么会有线程
请求多的时候如果为每一个请求创建一个进程,系统开销大响应用户请求效率低,因此引入线程
1.3 进程和线程的区别
- 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间
- 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、CPU,但是进程之间的资源是相互独立的
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮
进程切换时,消耗的资源大,效率高
- 执行过程:每个独立的进程有一个程序运行的入口,顺序执行序列。但是线程不能独立运行
- 线程是处理器调度的基本单位,但是进程不是
- 两者均可并发执行
1.4优缺点
线程执行开销小,但不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行
进程执行开销大,但是能够很好的进行资源管理和保护
1.5进程的地址空间布局
从上到下是栈区,堆区,未初始化数据区,初始化数据区,代码区
1.6进程间通信的方法
- 管道
半双工通信,如果要同时读写,要创建两个管道,分为有名管道和无名管道,无名管道只用于亲缘进程间
- 信号量
它是一个计数器,用于为多个进程提供对共享数据对象的访问。
- 消息队列
- 共享内存
映射一段能被其他进程访问的内存,优点:无需复制 缺点:需要解决进程间的同步问题
- 套接字
可用于不同机器间的进程通信
1.7进程的创建
- 创建一个PCB
- 分配内存
- 初始化PCB
- 将PCB放入相应的队列中( 进程有执行,阻塞,就绪三个状态)
1.8进程的终止
进程不再执行,但是PCB会保留一个记录(状态码和一些计时统计数据供其他进程收集,一旦收集完成,PCB完全清空)
1.9进程调度算法
要根据不同的系统选择合适的算法
如批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间
- 先来先服务,按请求顺序进行服务,可能会导致短作业等待时间过长
- 短作业优先,可能会导致长作业一直得不到调度
- 最短剩余时间优先
如交互式系统有大量的用户交互操作,在该系统中调度算法的目标是快速地进行响应
- 时间片轮转
- 优先级调度
- 多级反馈队列(时间片轮转+优先级调度)
2.死锁
系统资源不足
资源分配不均
进程推进顺序不合理
2.1 产生原因
系统资源的竞争
- 进程运行推进顺序不合适
2.2 四个必要条件
互斥条件
- 请求与保持条件
- 不可剥夺条件
- 循环等待条件
2.3 死锁避免
系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略
如果操作系统能保证所有进程在有限时间内得到需要的全部资源,则系统处于安全状态否则系统是不安全的
2.4 死锁预防
- 破坏“不可剥夺”条件
- 破坏“请求与保持条件”
- 破坏“循环等待”条件
还不快抢沙发