面试/笔试(一)操作系统问题集锦

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37293461/article/details/82829983

写在前面:
最近秋招参加的面试,经常会被问到操作系统的问题,今天有空来整理一下。正好也是巩固一下知识,并深入掌握一下面试的套路。如果对童鞋们有帮助,那将是我最大的欣慰了。


一,理解一下操作系统?

  • 定义:操作系统是一个大型的程序系统,它负责计算机软件,硬件资源的分配和管理;控制和协调并发活动;提供用户接口,使用户获得良好的工作环境。
  • 功能:操作系统最主要的功能是资源分配,目的是提高系统资源的利用率。1,处理机分配(提出进程调度策略;给出进程调度算法;进行处理机的分派);2,存储管理(存储分配和存储无关性;存储保护;存储扩充);3,设备管理(设备无关性;设备分配;设备的传输控制);4,软件资源管理(为用户提供更好的服务)
  • 特性:1,并发(简单来说,就是处理多个同时性活动的能力);2,共享(指多个计算任务对资源的共同享用,为了避免资源浪费节约成本);3,不确定性(处理的事件是不确定的)
  • 解决的问题:1,提出解决资源分配的策略;2,协调并发活动;3,保证数据的一致性;4,实现数据的存取控制

二, 进程和线程以及它们之间的区别?

  • 根本区别:进程是对运行时程序的封装,是操作系统进行资源调度和分配的的基本单位,实现了操作系统的并发; 线程是进程的子任务,是CPU调度和执行的基本单位,用于保证程序的实时性,实现进程内部的并发;
  • 所处环境:一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程而存在;
  • 内存分配:系统在运行的时候会为每个进程分配不同的内存空间,所以进程在执行过程中拥有独立的内存单元;而多个线程共享进程的内存资源,操作系统不会给其分配内存。
    更多关于 操作系统历史及进程/线程由来,请参阅Java 并发:并发背景

三,什么是死锁?死锁产生的条件?
一. 死锁的概念
在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲,就是两个或多个进程无限期的阻塞、相互等待的一种状态。


1. 死锁产生的四个必要条件

  • 互斥:至少有一个资源必须属于非共享模式,即一次只能被一个进程使用;若其他申请使用该资源,那么申请进程必须等到该资源被释放为止;
  • 占有并等待:一个进程必须占有至少一个资源,并等待另一个资源,而该资源为其他进程所占有;
  • 非抢占:进程不能被抢占,即资源只能被进程在完成任务后自愿释放;
  • 循环等待:若干进程之间形成一种头尾相接的环形等待资源关系。

2. 死锁的处理基本策略和常用方法

解决死锁的基本方法主要有 预防死锁、避免死锁、检测死锁、解除死锁 、鸵鸟策略 等。

1). 死锁预防
  
  死锁预防的基本思想是 只要确保死锁发生的四个必要条件中至少有一个不成立,就能预防死锁的发生,具体方法包括:

打破互斥条件:允许进程同时访问某些资源。但是,有些资源是不能被多个进程所共享的,这是由资源本身属性所决定的,因此,这种办法通常并无实用价值。

打破占有并等待条件:可以实行资源预先分配策略(进程在运行前一次性向系统申请它所需要的全部资源,若所需全部资源得不到满足,则不分配任何资源,此进程暂不运行;只有当系统能满足当前进程所需的全部资源时,才一次性将所申请资源全部分配给该线程)或者只允许进程在没有占用资源时才可以申请资源(一个进程可申请一些资源并使用它们,但是在当前进程申请更多资源之前,它必须全部释放当前所占有的资源)。但是这种策略也存在一些缺点:在很多情况下,无法预知一个进程执行前所需的全部资源,因为进程是动态执行的,不可预知的;同时,会降低资源利用率,导致降低了进程的并发性。

打破非抢占条件:允许进程强行从占有者哪里夺取某些资源。也就是说,但一个进程占有了一部分资源,在其申请新的资源且得不到满足时,它必须释放所有占有的资源以便让其它线程使用。这种预防死锁的方式实现起来困难,会降低系统性能。

打破循环等待条件:实行资源有序分配策略。对所有资源排序编号,所有进程对资源的请求必须严格按资源序号递增的顺序提出,即只有占用了小号资源才能申请大号资源,这样就不回产生环路,预防死锁的发生。


2). 死锁避免的基本思想
  
  死锁避免的基本思想是动态地检测资源分配状态,以确保循环等待条件不成立,从而确保系统处于安全状态。所谓安全状态是指:如果系统能按某个顺序为每个进程分配资源(不超过其最大值),那么系统状态是安全的,换句话说就是,如果存在一个安全序列,那么系统处于安全状态。资源分配图算法和银行家算法是两种经典的死锁避免的算法,其可以确保系统始终处于安全状态。其中,资源分配图算法应用场景为每种资源类型只有一个实例(申请边,分配边,需求边,不形成环才允许分配),而银行家算法应用于每种资源类型可以有多个实例的场景。


3). 死锁解除

  死锁解除的常用两种方法为进程终止和资源抢占。所谓进程终止是指简单地终止一个或多个进程以打破循环等待,包括两种方式:终止所有死锁进程和一次只终止一个进程直到取消死锁循环为止;所谓资源抢占是指从一个或多个死锁进程那里抢占一个或多个资源,此时必须考虑三个问题:

1. 选择一个牺牲品
2. 回滚:回滚到安全状态
3. 饥饿(在代价因素中加上回滚次数,回滚的越多则越不可能继续被作为牺牲品,避免一个进程总是被回滚)


3,怎么理解进程同步?
继续


猜你喜欢

转载自blog.csdn.net/m0_37293461/article/details/82829983