操作系统常见面试题及答案
1. 什么是进程(Process)和线程(Thread)?有何区别?
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行
资源分配和调度的一个独立单位。线程是进程的一个实体,是 CPU 调度和分派的基本单位,
它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在
运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其
他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中
的多个线程之间可以并发执行。
进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存
储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。
2. Windows 下的内存是如何管理的?
Windows 提供了 3 种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者
结构数组;内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机
上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。
Window 操纵内存可以分两个层面:物理内存和虚拟内存。
其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个 2G 地
址空间,而内存分配是通过堆进行的,对于每个进程都有自己的默认堆,当一个堆创建后,
就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小),当在
堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是
可扩充的,则扩充堆大小)为这个空闲块所包含的所有内存页提交物理对象(物理内存上或
硬盘上的交换文件上)。这时可以就访问这部分地址了。提交时,系统将对所有进程的内存
统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾
出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),
继续保留地址空间。
如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状
VirtualQuery),如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。
此外有些内存页可以设置各种属性。如果是只读,向内写也会产生软件异常。
3. Windows 消息调度机制是?
A. 指令队列;B.指令堆栈;C.消息队列;D.消息堆栈
答案:C
处理消息队列的顺序。首先 windows 绝对不是按队列先进先出的次序来处理的,而是有
一定优先级的。优先级通过消息队列的状态标志来实现的。首先最高优先级的是别的线程发
过来的消息(通过 sendmessage),其次是处理登记消息队列消息,再次处理 QS_QUIT 标志,
再处理虚拟输入队列,再处理 wm_paint 最后是 wm_timer
4. 描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性。
所谓“实时操作系统”,实际上是指操作系统工作时,其各种资源可以根据需要随时进
行动态分配。由于各种资源可以进行动态分配,因此其处理事务的能力较强、速度较快。
5. 中断和轮询的特点。
对 I/O 设备的程序轮询的方式,是早期的计算机系统对 I/O 设备的一种管理方式。它定
时对各种设备轮流询问一遍有无处理要求。轮流询问之后,有要求的,则加以处理。在处理
I/O 设备的要求之后,处理机返回继续工作。尽管轮询需要时间,但轮询要比 I/O 设备的速