一、操作系统
1. 内存管理
1.1 什么是虚拟内存?为什么需要虚拟内存?
虚拟内存为程序提供比实际物理内存更大的内存空间,同时提高内存管理的灵活性和系统的多任务处理能力。虚拟地址空间是进程所能看到的连续、独立的内存空间,而实际地址空间是所有进程共享的有限物理内存。虚拟内存技术实现了内存隔离、内存扩展、物理内存管理和页面交换。
- 内存隔离:每个进程拥有独立的虚拟地址空间,无法访问其他进程的内存。
- 内存扩展:让每个进程拥有比实际大的内存空间地址,处理更多数据。
- 物理内存管理:内存不足时将不常用数据转移到硬盘释放内存。
- 页面交换:通过分页交换消除外部碎片,效率高于分段。
1.2 什么是内存分段和分页?作用是什么?
- 内存分段:将程序内存分为不同逻辑段(如代码段、数据段),每个段有独立大小和权限。易产生外部碎片。
- 内存分页:将虚拟和物理内存分成固定大小的页(如 4KB)。易产生内部碎片。
- 作用:逻辑隔离、内存保护、虚拟内存、共享内存、内存管理。
1.3 解释一下内核态和用户态
操作系统中的两种执行模式,控制对硬件资源的访问权限。用户态执行应用程序,内核态执行特权操作(系统调用、异常处理等)。内核态占用 CPU 时不能被抢占。
1.4 中断和异常?区别?
- 中断:由外部设备或其他处理器导致,异步发生(如键盘输入、网络数据到达)。
- 异常:由当前指令造成,同步发生(如除数异常、非法内存访问)。
1.5 数据结构
数组、链表、栈、队列、哈希表、树、图、集合、字典。每种结构适合解决特定问题。
2. 进程管理
2.1 进程和线程的区别
- 定义:进程是资源分配基本单位,线程是 CPU 调度最小单位。
- 开销:进程创建销毁及切换开销大;线程共享内存,开销小。
- 安全性:进程独立内存,崩溃不影响他人;线程共享内存,一个崩溃影响整个进程。
- 通信:进程需 IPC(管道、消息队列等);线程可直接访问共享数据。
2.2 什么是协程?
协程是比线程更轻量的并发单元,由程序本身调度。轻量级、协作式调度、无需锁机制,适合高并发。协程在同一线程内顺序执行,减少竞态条件和死锁风险。
2.3 调度原则
关注 CPU 利用率、系统吞吐量、周转时间、等待时间、响应时间。调度程序需权衡长任务和短任务,避免交互式应用等待时间过长。
2.4 调度算法
先来先服务、最短作业优先、高响应比优先、时间片轮转、最高优先级、多级反馈队列。
2.5 进程间通信 (IPC)
- 管道:单向,匿名或命名,简单但效率低。
- 消息队列:内核维护的消息链表,有大小限制。
- 共享内存:映射相同物理内存,速度最快,无拷贝开销。
- 信号量:整型计数器,用于互斥与同步。
- 信号:异步通知机制,用于异常情况。
- Socket:跨网络通信。
2.6 互斥与同步
- 临界区:访问共享资源的代码片段,必须互斥。


