操作系统

LRU怎么实现的?

LRU:(Least Recently Used)最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。

原理:使用双向链表和哈希表实现LRU算法,

  1. 双向链表用于保存key-value,队头的元素表示最近一次被访问的元素,队尾的元素表示最近最久未使用的元素
  2. 哈希表提供key到key对应节点在双向链表中的位置的映射。

进程和线程的联系和区别

进程是表示资源分配的基本单位,线程是进程中执行运算和调度的最小单位。

  1. 一个线程只能属于一个进程,而一个进程可以拥有多个线程。

  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。

  3. 进程拥有独立的地址空间,进程都是建立在虚拟内存的基础上,而线程没有独立的地址空间。

  4. 进程比线程健壮,一个进程崩溃不会影响其他进程,而一个线程崩溃会导致整个进程崩溃。

  5. 进程执行开销大,而线程依附于进程,执行开销小。


什么是死锁?死锁产生的条件?如何解除死锁?

死锁:在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其他进程释放它们保持的资源,从而导致进程无法继续进行,称为死锁。简单的来说,就是两个及以上进程无限期阻塞、相互等待的一种状态。

死锁产生的四个必要条件:

  1. 互斥:至少有一个资源是非共享的。

  2. 占有并等待:进程保持某种资源又同时申请其他资源(该资源被其他进程占有)。

  3. 非抢占:进程不能被抢占,资源只能被进程主动释放。

  4. 循环等待:若干个进程之间形成一种头尾相接的环形等待资源关系。

如何预防死锁:

  1. 死锁预防(将四个必要条件至少一个条件打破,就能预防死锁):

    a. 打破互斥条件:使资源共享。

    b. 打破占有并等待:实行资源预先分配策略

    c. 打破非抢占式条件:允许进程抢夺其他进程资源。

    d. 打破循环等待条件:实现资源有序分配策略。

  2. 死锁解除

    a. 进程终止。

    b. 资源抢占。


进程有哪几种状态?

1. 就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源。

2. 运行状态:占用处理机资源运行。

3. 阻塞状态:等待某种资源或条件导致进程无法继续运行。


分页和分段有什么区别(内存管理)?

段式存储:将程序的地址空间划分为若干段,每一段存储相同意义的信息。

页式存储:将程序的逻辑地址划分为固定大小的页,物理内存也划分同样大小的帧。

区别:

  1. 目的不同:分页服务于系统管理,分段服务于用户,段内数据是一组有意义且相对完整的信息。
  2. 大小不同:页的大小固定,段长度由功能决定。
  3. 地址空间不同:段向用户提供二维地址空间,页向用户提供一维地址空间。
  4. 信息共享:段是信息的逻辑单位,便于存储保护和信息共享,页的保护和共享受到限制。
  5. 内存碎片:页式存储没有外碎片,但会有内碎片;段无内碎片,但会产生外碎片。

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

  1. FCFS(先来先服务,队列实现,非抢占):所有进程平等,缺点:无法让紧急进程优先

  2. SJF(最短作业优先):缺点:难以找到哪个进程最短

  3. 优先级调度算法(可抢占):优先级越高越先分配,相同优先级先来先服务。缺点:会出现饥饿现象。

  4. 时间片轮转调度算法(可抢占):每个进程分配一个时间片的CPU时间,进程CPU超过时间片,则被抢占并放回队列。

  5. 多级队列调度算法:将就绪队列分成多个独立队列,每个队列有各自的调度算法,队列之间采用固定优先级抢占调度。进程被永久分配在一个队列里。

  6. 多级反馈队列调度算法:与多级队列调度算法相比,进程可以在队列之间移动。可以防止饥饿现象。


什么是虚拟内存?

虚拟内存:每个进程拥有独立地址空间,空间被分为许多相同大小的页,运行部分在物理内存中,未运行部分在外存中,那部分缺少,就从外存调入物理内存运行。而对进程而言,逻辑上有很大的内存空间。


IO多路复用

单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力。

I/O模型 目前Linux系统中提供了5种IO处理模型

  1. 阻塞IO

  2. 非阻塞IO

  3. IO多路复用 IO多路复用在Linux下包括了三种,select、poll、epoll,抽象来看,他们功能是类似的,但具体细节各有不同:首先都会对一组文件描述符进行相关事件的注册,然后阻塞等待某些事件的发生或等待超时。更多细节详见下面的 “具体怎么用”。IO多路复用都可以关注多个文件描述符,但对于这三种机制而言,不同数量级文件描述符对性能的影响是不同的

    解决方案总览: Linux: select、poll、epoll MacOS/FreeBSD: kqueue Windows/Solaris: IOCP

  4. 信号驱动IO

  5. 异步IO

使用 Hugo 构建
主题 StackJimmy 设计