2020-2021面试问题整理-操作系统

操作系统

  • 1 进程与线程
    • 1.1 进程与线程的区别与联系
    • 1.2 进程调度
      • 1.2.1 调度算法
      • 1.2.2 进程切换步骤
    • 1.3 进程通信(Inter-Process Communication,IPC)
      • 1.3.1 管道通信Pip
      • 1.3.2 消息队列MessageQueue
      • 1.3.3 信号量Semaphore
      • 1.3.4 共享内存SharedMemory
      • 1.3.5 UnixSocket
  • 2 Linux常用命令
  • 3 其它问题
    • 3.1 死锁
      • 死锁避免--银行家算法
    • 3.2 内存分页管理与Swap
    • 3.3 任务队列与CPU Load
  • 其它
    • CPU亲和性
    • 指令重排
    • 分支预测
    • netfilter与iptables

1 进程与线程

1.1 进程与线程的区别与联系

  1. 进程是系统分配资源的最小单位,线程是程序执行的最小单位,进程包含线程
  2. 进程使用独立的内存空间,线程使用共享的内存空间
  3. 线程间通信更见方便,统一进程下的变量共享全局变量、静态变量等数据。而进程之间通信需要以IPC的形式进行。

1.2 进程调度

1.2.1 调度算法

  1. 先来先服务(FIFO):有利于长作业,不利于短作业。有利于CPU繁忙的作业,不利于IO繁忙的作业
  2. 最短优先(SJF):有利于短作业,对长作业十分不友好
  3. 优先级调度:会出现饥饿
    • 抢占式:出现优先级更高的线程后,会立即停止当前优先级较低的线程,转而执行更高优先级的线程。
    • 非抢占式:优先级高的进程,会等待当前作业完成,在执行
    • 高相应比调度:引入动态优先权,优先权会随着等待时间的延长而增加,初始对长作业不友好。该方法时比较好的这种,既照顾了短作业,又考虑了先后次序,同时不会使得长作业得不到服务。但是响应比计算会消耗时间。
      优 先 级 = 等 待 时 间 + 要 求 服 务 时 间 要 求 服 务 时 间 优先级=\frac{等待时间 + 要求服务时间}{要求服务时间} =+
  4. 基于时间片的调度算法
    • 时间片轮转:按照来到时间顺序,将所有就绪的的进程攀成一个队列,给每个进程分配一定的时间片。
    • 多级反馈队列:被公认的较好的进程调度算法。①设置多个就绪队列,每个队列有不同的优先级,序号越小,优先级越高;②当一个进程到来时,会将它放入第一队列的对尾,以FIFO的形式调度。如果一个进程在一个时间片未能完成,则将其放入第二队列的队尾,若在第二队列仍未能完成,则放入第三队列队尾。③只有低 i i i个队列都为空时,才会调度第 i + 1 i+1 i+1各队列

1.2.2 进程切换步骤

1.3 进程通信(Inter-Process Communication,IPC)

中间件研发问题经常会考。参考博客。

1.3.1 管道通信Pip

管道通信Pip,通常指无名管道,是 UNIX 系统IPC最古老的形式。特点如下:

  1. 半双工
  2. 只适用于具有亲缘关系的进程之间的通信
  3. 可以看作是一种在内存中的特殊的文件,对于它的读写也可以使用普通的read、write 等函数。

1.3.2 消息队列MessageQueue

消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。特点如下:

  1. 面向记录的,并且具有优先级,但也支持随即查询
  2. 消息队列独立于发送进程与接收进程,除非主动删除,否则进程终止,消息队列中的内容仍然存在

1.3.3 信号量Semaphore

信号量是一个计数器,用于实现进程间的同步与互斥。特点如下:

  • 当一个进程使用进程资源时,信号量减1,释放时信号量加1
  • semaphore > 0,该资源剩余的数目
  • semaphore < 0,表示阻塞资源的数目

1.3.4 共享内存SharedMemory

共享内存指的是两个或多个进程共享一个给定的存储区。企业店如下

  • 进程直接对内存进行存取,速度快
  • 有多个进程争抢临界资源,因此需要配合信号量进行互斥访问

1.3.5 UnixSocket

UNIX Domain SOCKET 是在Socket架构上发展起来的用于同一台主机的进程间通讯(IPC)。它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序列号应答等。只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain SOCKET有SOKCET_DGRAM和SOCKET_STREAM两种模式,类似于UDP和TCP,但是面向消息的UNIX socket也是可靠的,消息既不会丢失也不会顺序错乱。

2 Linux常用命令

考察问题排查的经验。
awk、top/tail、netstat、grep、less、find等。

3 其它问题

3.1 死锁

参考
产生原因:进程对不可剥夺资源的抢占而导致的相互等待的情形
死锁预防,破环下列任一条件:

  1. 互斥条件
  2. 不可剥夺
  3. 请求和保留
  4. 循环等待

死锁避免–银行家算法

参考
银行家算法是最著名的死锁避免算法。它提出的思想是:把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

3.2 内存分页管理与Swap

参考

3.3 任务队列与CPU Load

其它

CPU亲和性

参考
CPU affinity 是一种调度属性(scheduler property), 它可以将一个进程"绑定" 到一个或一组CPU上。因为程序的作者比调度器更了解程序,所以我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起,所有设置CPU亲和性可以使某些程序提高性能。

指令重排

操作系统将一条指令分为若干阶段,如:取址、解析指令、执行指令、访问内存、内存写回。在同一时刻可以同时执行这些划分的阶段。系统为了提高CPU吞吐量,对操作不相干的指令进行重排。如下两图所示:
2020-2021面试问题整理-操作系统_第1张图片
2020-2021面试问题整理-操作系统_第2张图片

分支预测

参考
当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕。流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。分支预测技术便是为解决这一问题而出现的。分支预测技术包含编译时进行的静态分支预测和硬件在执行时进行的动态分支预测。

netfilter与iptables

参考
linux下的防火墙技术。

你可能感兴趣的:(操作系统,操作系统)