操作系统面经

1 进程间通信方式

(1)管道
管道是单向通信的一种方式,只能从一端读另一端写,有两种管道:
无名管道:linux的管道符 |
有名管道:mkfifo myPipe

(2). 消息队列
消息队列是使用队列的方式,进程将消息放入队列中,不阻塞,立即继续执行,另外一个进程从消息队列中读取消息

(3)共享内存
共享内存一般是进程与进程间共有一块物理内存,可以向共享内存写入内容,然后另外一个从内存中读取内容

(4)信号量
信号量其实是控制进程间读取共享内存的一种方式,其实是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间通信的数据。
信号量表示资源的数量,控制信号量的方式有两种原子操作:

  • 一个是 P 操作,这个操作会把信号量减去 1,相减后如果信号量 < 0,则表明资源已被占用,进程需阻塞等待;相减后如果信号量 >= 0,则表明还有资源可使用,进程可正常继续执行。
  • 另一个是 V 操作,这个操作会把信号量加上 1,相加后如果信号量 <= 0,则表明当前有阻塞中的进程,于是会将该进程唤醒运行;相加后如果信号量 > 0,则表明当前没有阻塞中的进程;

(5)信号
对于异常情况下的工作模式,就需要用「信号」的方式来通知进程。比如操作系统的kill 命令

(6)Socket
跨网络与不同主机上的进程之间通信,就需要 Socket 通信了。

2 进程,线程,协程的区别与先练

  • 进程是操作系统进行资源分配的基本单,位每个进程都有自己的独立内存空间。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。

  • 线程又叫做轻量级进程,是进程的一个实体,是处理器任务调度和执行的基本单位位。它是比进程更小的能独立运行的基本单位。线程只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

  • 协程,又称微线程,是一种用户态的轻量级线程,协程的调度完全由用户控制(也就是在用户态执行)。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到线程的堆区,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。调度完全有用户自己掉调度。

3 并发和并行的区别

  • 并发(Concurrency)是指在同一时间段内处理多个任务的能力,任务在逻辑上是同时发生的,但在物理上可能是交替执行的。就类似于多线程,一个cpu上运行一个进程运行多个线程,多个线程之间交替占用cpu去执行
  • 并行(Parallelism)则是指在同一时间点上真正在多个物理核心上同时执行多个任务。类似与多进程,每个进程占用一个cpu去执行。

4 进程调度算法

(1)先来先服务
每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。

(2)最短作业优先调度算法
优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。

(3) 高响应比优先调度算法
每次进行进程调度时,先计算「响应比优先级」,然后把「响应比优先级」最高的进程投入运行,「响应比优先级」的计算公式:


image.png

(4)时间片轮转调度算法
每个进程被分配一个时间段,称为时间片(Quantum),即允许该进程在该时间段中运行。

(5) 最高优先级调度算法
就绪队列中选择最高优先级的进程进行运行,这称为最高优先级(Highest Priority First,HPF)调度算法。

(6)多级反馈队列调度算法

  • 设置了多个队列,赋予每个队列不同的优先级,每个队列优先级从高到低,同时优先级越高时间片越短;
  • 新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度,如果在第一级队列规定的时间片没运行完成,则将其转入到第二级队列的末尾,以此类推,直至完成;
  • 当较高优先级的队列为空,才调度较低优先级的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行;

5 乐观锁与悲观锁

  • 悲观锁做事比较悲观,它认为多线程同时修改共享资源的概率比较高,于是很容易出现冲突,所以访问共享资源前,先要上锁。
  • 乐观锁做事比较乐观,它假定冲突的概率很低,它的工作方式是:先修改完共享资源,再验证这段时间内有没有发生冲突,如果没有其他线程在修改资源,那么操作完成,如果发现有其他线程已经修改过这个资源,就放弃本次操作。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 进程和线程 1.进程和线程的区别(烂大街的问题 进程是资源调度基本单位,线程是独立调度的基本单位 线程之间可以通过...
    delete_success阅读 862评论 0 0
  • 1.死锁相关 简述什么是死锁?死锁出现的原因? 死锁:多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这...
    小刘一定要努力阅读 638评论 0 0
  • 用户态内核态 区别 内核态: 一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简...
    includes阅读 784评论 0 1
  • 一、操作系统基础 1、请你说一说并发(concurrency)和并行(parallelism) 并发(concur...
    加油11dd23阅读 3,604评论 0 3
  • 用户态与核心态?哪些操作会导致用户态切换到核心态? 用户态与核心态是指操作系统两种运行级别。操作系统核心的功能与服...
    狂徒_张三阅读 723评论 0 0

友情链接更多精彩内容