操作系统常见问题【面试必备】

整理操作系统中常见的知识点,面试问题
1、进程和线程的区别和关系

  • 从基本单位来看,进程是系统进行资源分配和调度的基本单位,是对运行程序的封装;而线程则是CPU分配和调度的基本单位。
  • 从切换开销来看,进程切换开销比线程切换大。由于不同进程之间资源独立(占有独立的内存块),因此进程切换需要页表切换以及页调度操作;而线程共享进程内资源,因此线程切换只需要切换上下文(寄存器和栈信息)即可。
  • 线程是进程的子任务,一个进程可能有多个线程。

2、逻辑地址、线性地址、虚拟地址、物理地址的区别和关系

  • 逻辑地址:计算机程序中某条指令的地址,也叫相对地址。一个逻辑地址由两部分组成:段标识符|段偏移量,所以逻辑地址实际上就是段内偏移。
  • 线性地址:也叫虚拟地址,是逻辑地址转换为物理地址的中间层。跟逻辑地址的关系为——在分段部件中逻辑地址是段中的偏移地址,然后加上基地址就是线性地址。线性地址的组成为[页目录索引][页表索引][物理偏移]
  • 物理地址:CPU地址总线上的地址。
    具体的转换关系为逻辑地址——线性地址——物理地址

3、进程的状态有哪些

  • 就绪态:等待分配资源
  • 运行态:运行进程
  • 阻塞态:等待某种条件
    处于就绪态的进程,在分配到了处理机等资源后转入运行态;
    处于运行态的进程,如果因为时间片已轮转完而被剥夺处理机,转入就绪态;
    处于运行态的进程,如果因为某种原因受阻,转入阻塞态

4、进程和程序的区别和关系
程序是静态的代码,进程是动态的工作程序。程序和进程的关系等同于类与对象的关系。

5、进程间的通信方式

  • 管道(pipe)及命名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

  • 信号(signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;

  • 消息队列:消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;

  • 共享内存:可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等;

  • 信号量:主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段;

  • 套接字:这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。

6、进程间同步
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。
经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题
常见的进程同步解决方法:信号量Mutex和管程

7、死锁是什么?举例说明

  • 通俗的阐述:多个进程互相阻塞,循环等待。
  • 产生死锁通俗的原因是:对于共享互斥资源的争用导致进程互相阻塞。
  • 举例:进程1占有资源1想要申请资源2,同时进程2占有资源2想要申请1,均为非抢占式,进程12不会主动释放资源12。

8、死锁产生的条件有哪些?

  • 互斥:一个资源只能同时被一个进程占用
  • 非抢占式:资源只能由进程本身释放,而不可被其他进程抢用
  • 请求保持:一个进程在申请资源同时,该资源已被占用并保持不放
  • 循环等待:若干进程之间形成一种头尾相接的循环等待资源的关系

9、解决死锁的方法
银行家算法:每次分配资源给进程之前,执行一次安全监测算法,查看按照此种分配方式整个系统是否处于安全状态

10、中断是什么
中断是指在程序运行过程中,遇到急需处理的事件时,暂时停止该程序,转而去执行相应的事件处理程序,执行完毕之后再返回继续执行之前的程序。
中断分为软中断和硬中断,软中断是软件实现的中断,也就是程序运行时其他程序对它的中断,如程序出错(非法指令、地址越界);硬中断是硬件实现的中断,是程序运行时硬件设备对程序的中断,如通常的磁盘中断、打印机中断。

11、中断和异常的区别

  • 中断是由CPU中某事件引起的,是外部原因。
  • 异常是由正在执行的现行指令引起的,例如除0,是自身原因。

12、系统调用是什么,和中断的关系是什么

  • 系统调用是指当程序需要操作系统所提供的服务,转入内核态去执行系统调用函数
  • 中断辅助系统调用操作的完成:当需要执行系统调用时,发送一个软中断给系统,然后转而去执行中断处理程序,即执行系统调用

13、分段和分页的区别

  • 分段是从用户角度,从逻辑上将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;不会产生内碎片(因为段大小可变),会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)
  • 分页是从系统角度,将程序的逻辑地址划分为固定大小的页,提高内存的利用率。没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

14、进程调度策略有哪些?
先了解两个概念:

  • 周转时间: 从开始申请执行任务,到执行任务完成
  • 响应时间: 从开始申请执行任务到开始执行任务

先来先服务调度算法FCFS:按作业或者进程到达的先后顺序依次调度;(平均周转时间可能会很长 )
短作业优先调度算法SJF:算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行(周转时间短,但是响应时间长 )
高相应比算法HRN:响应比=(等待时间+要求服务时间)/要求服务时间;

时间片轮转调度RR:按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;(响应时间可以得到保证)

多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。

15、页面调度算法
物理内存可能比较小,不能同时放很多进程进来。解决思路:把要运行的代码移到内存,暂时不用的代码移入磁盘,内存置换。

  • 先进先出(FIFO)算法:总是最先淘汰最先进去的页面,该算法容易实现。缺点:通常程序调入内存的先后顺序和程序执行的先后顺序不一致,导致缺页率高。
  • LRU(Least recently use)最近最少使用算法:根据使用时间到现在的长短来判断
  • LFU(Least frequently use)最少使用次数算法:根据使用次数来判断
  • OPT(Optimal replacement)最优置换算法:理论最优;就是要保证置换出去的是不再被使用的页,该算法无法实现,只能作为其他算法好坏的一个评价对比。
发布了23 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Scofield971031/article/details/104504009
今日推荐