系统知识 · 操作系统原理
操作系统是软件世界的底盘:进程与线程、虚拟内存、调度算法、进程间通信(IPC)一次讲清。
知识简介
操作系统 负责管理硬件资源并为应用提供抽象:进程(资源分配单位)与线程(调度执行单位)、虚拟内存(隔离与交换)、调度算法(时间片轮转/优先级)、IPC(管道/消息队列/共享内存)。
核心概念
- 进程 vs 线程:进程有独立地址空间,线程共享进程内存;切换成本线程更低。
- 虚拟内存:每个进程看到连续地址空间,由页表映射到物理内存,缺页时按需换入。
- 调度:RR 时间片轮转公平、SJF 短作业优先、多级反馈队列兼顾响应与吞吐。
- IPC:管道(亲缘进程)、消息队列(无亲缘)、共享内存(最快,需同步)、Socket(跨机器)。
- 死锁:互斥、持有并等待、不可剥夺、循环等待四条件,破坏其一即可预防。
代码示例:Python 多进程与队列
py
import multiprocessing as mp
def worker(q, name):
q.put(f"{name} done: {sum(range(1000))}")
if __name__ == "__main__":
q = mp.Queue()
ps = [mp.Process(target=worker, args=(q, f"p{i}")) for i in range(4)]
for p in ps: p.start()
for p in ps: p.join()
while not q.empty():
print(q.get())代码示例:生产者-消费者(共享内存+锁)
py
import threading, time
buf, lock, cap = [], threading.Lock(), 3
def producer():
for i in range(6):
with lock:
while len(buf) >= cap:
time.sleep(0.01)
buf.append(i)
print("produce", i)
time.sleep(0.05)
def consumer():
for _ in range(6):
with lock:
while not buf:
time.sleep(0.01)
print("consume", buf.pop(0))
time.sleep(0.08)
t1, t2 = threading.Thread(target=producer), threading.Thread(target=consumer)
t1.start(); t2.start(); t1.join(); t2.join()学习路径
- 先看书:《深入理解计算机系统》(CSAPP)进程/内存章节。
- 再做实验:Linux 下
fork()、pipe()写小 demo。 - 最后攻内核:xv6(MIT 教学操作系统)逐行读 scheduler 与 page table。
来源参考
GitHub 关键词:xv6-public、os-examples-python、csapp-labs(链接可替换为实际仓库地址)。