操作系统面试题

Question

  1. 进程和线程的区别

  2. 进程间通信的几种方式

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

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

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

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

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

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

  3. 线程同步的方式

    互斥量 Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问

    信号量 Semphare:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量

    事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作

  4. 什么是死锁?死锁产生的条件是啥?死锁怎么处理?预防死锁、避免死锁、检测死锁、解除死锁 、鸵鸟策略

  • 死锁指多个进程因争夺资源而形成的一种僵局。

  • 形成死锁的四个必要条件:

    1. 互斥。 进程对分配的资源进行排他性使用,一段时间内某资源只能被一个进程占用。

    2. 持有并等待。 一个进程已经拥有一种或几种资源,但是因为没有取得可以继续运行的全部资源而等待其他资源。

    3. 不可抢占。 进程已经获取的资源不能被其他进程抢占,只能由进程使用完自己释放。

    4. 环路等待。 进程和请求资源之间形成环路。

  • 处理方法

    1. 不允许死锁的发生。
    • 从形成死锁的必要条件入手:

      1. 互斥不好解决…

      2. 持有并等待

        a. 不持有等待 – 一旦一个进程不能获取到所有资源,他将不能获取到资源。

        b. 持有不等待 – 当一个进程可以获取到所有资源时,他将立即获取资源。

      3. 不可抢占 – 资源可以被抢占。

      4. 环路等待。 对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源

    1. 允许死锁发生,但是可以检测并且解决。

    2. 忽略死锁。

  1. 进程的几种状态、线程的几种状态

  2. 分页和分段

    段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段(segment),如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)

    页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满)。

    两者的不同点:

    目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;

    大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;

    地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;

    信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;

  3. 操作系统中进程调度策略有哪几种?

    FCFS(先来先服务,队列实现,非抢占的):先请求CPU的进程先分配到CPU

    SJF(最短作业优先调度算法):平均等待时间最短,但难以知道下一个CPU区间长度

    优先级调度算法(可以是抢占的,也可以是非抢占的):优先级越高越先分配到CPU,相同优先级先到先服务,存在的主要问题是:低优先级进程无穷等待CPU,会导致无穷阻塞或饥饿;解决方案:老化

    时间片轮转调度算法(可抢占的):队列中没有进程被分配超过一个时间片的CPU时间,除非它是唯一可运行的进程。如果进程的CPU区间超过了一个时间片,那么该进程就被抢占并放回就绪队列。

    多级队列调度算法:将就绪队列分成多个独立的队列,每个队列都有自己的调度算法,队列之间采用固定优先级抢占调度。其中,一个进程根据自身属性被永久地分配到一个队列中。

    多级反馈队列调度算法:与多级队列调度算法相比,其允许进程在队列之间移动:若进程使用过多CPU时间,那么它会被转移到更低的优先级队列;在较低优先级队列等待时间过长的进程会被转移到更高优先级队列,以防止饥饿发生。

  4. 虚拟内存

  5. 局部性原理

    (1). 时间上的局部性:最近被访问的页在不久的将来还会被访问;

    (2). 空间上的局部性:内存中被访问的页周围的页也很可能被访问。

#1024程序员节#

你可能感兴趣的:(面试)