系统知识 · 操作系统原理

操作系统是软件世界的底盘:进程与线程、虚拟内存、调度算法、进程间通信(IPC)一次讲清。

系统知识 技术栈:C / Python / 概念图解 来源:GitHub 参考

知识简介

操作系统 负责管理硬件资源并为应用提供抽象:进程(资源分配单位)与线程(调度执行单位)、虚拟内存(隔离与交换)、调度算法(时间片轮转/优先级)、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()

学习路径

  1. 先看书:《深入理解计算机系统》(CSAPP)进程/内存章节。
  2. 再做实验:Linux 下 fork()pipe() 写小 demo。
  3. 最后攻内核:xv6(MIT 教学操作系统)逐行读 scheduler 与 page table。

来源参考

GitHub 关键词:xv6-publicos-examples-pythoncsapp-labs(链接可替换为实际仓库地址)。