# 面试题

### PE文件

PE文件的全称是`Portable Executable`，意为可移植的可执行的文件，常见的EXE、DLL、OCX、SYS、COM都是PE文件，PE文件是微软Windows操作系统上的程序文件（可能是间接被执行，如DLL）。

***

### 什么是活锁？与死锁有和区别？

活锁指的是 **任务或者执行者没有被阻塞，由于某些条件没有满足，导致一直重复尝试，失败，尝试，失败**。 活锁和死锁的区别在于，处于活锁的实体是在不断的改变状态，所谓的“活”， 而处于死锁的实体表现为等待；**活锁有可能自行解开，死锁则不能**。

活锁应该是一系列进程在轮询地等待某个不可能为真的条件为真。活锁的时候进程是不会`blocked`，这会导致耗尽CPU资源。

为解决活锁可以引入一些随机性，例如如果检测到冲突，那么就暂停随机的一定时间进行重试。这回大大减少碰撞的可能性。典型的例子是以太网的`CSMA/CD`检测机制。

***

### 直接寻址与间接寻址？

寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式，是确定本条指令的数据地址以及下一条要执行的指令地址的方法。在操作系统中分为指令寻址和操作数寻址。

**指令寻址**：在内存中查找指令的方式。

  - **顺序寻址方式**：即采用PC计数器来计数指令的顺序；
  - **跳跃寻址方式**：下条指令的地址码不是由程序计数器给出，而是由本条指令给出。

**操作数寻址**：形成操作数的有效地址的方法称为操作数的寻址方式。

  - **立即寻址**：操作数作为指令的一部分而直接写在指令中；
  - **直接寻址**：直接寻址是一种基本的寻址方法。**在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换**，所以称这种寻址方式为直接寻址方式。
  - **简介寻址**：间接寻址是相对直接寻址而言的，在间接寻址的情况下，**指令地址字段中的形式地址不是操作数的真正地址，而是操作数地址的指示器，或者说此形式地址单元的内容才是操作数的有效地址**。

***

### 如何从用户态切换到内核态？

  1. 程序请求系统服务，执行系统调用
  2. 程序运行期间产生中断事件，运行程序被中断，转向中断处理程序处理
  3. 程序运行时产生异常事件，运行程序被打断，转向异常处理程序。

这三种情况都是通过中断机制发生，可以说 **中断和异常是用户态到内核态转换的仅有途径**。

***

### 实时操作系统和分时操作系统的区别？

  - **分时操作系统**：**多个联机用户同时适用一个计算机系统在各自终端上进行交互式会话，程序、数据和命令均在会话过程中提供，以问答方式控制程序运行**。系统把处理器的时间划分为时间片轮流分配给各个连接终端。
  - **实时操作系统**：当外部时间或数据产生时，能够对其予以接受并以足够快的速度进行处理，所得结果能够在规定时间内控制生产过程或对控制对象作出快速响应，并控制所有实时任务协调的操作系统。因而，**提供及时响应和高可靠性是其主要特点**。实时操作系统有硬实时和软实时之分，硬实时要求在规定的时间内必须完成操作，这是在操作系统设计时保证的；软实时则只要按照任务的优先级，尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改变之后就可以变成实时操作系统。

下面还要补充一个批处理操作系统：**批处理是指用户将一批作业提交给操作系统后就不再干预，由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统**。批处理操作系统分为单道批处理系统和多道批处理系统。批处理操作系统不具有交互性，它是为了提高CPU的利用率而提出的一种操作系统。

如果某个操作系统兼有批处理、分时和实时处理的全部或两种功能，我们称为通用操作系统。
