Skip to content

模型Model

程序、进程与地址空间

Process and address space · OS process · 操作系统进程

以程序映像、资源容器与线程执行状态划分进程,说明同一虚地址的隔离、受控共享及fork/exec的不同效果。

形式陈述 ​

程序是指令和初始数据的描述;进程是操作系统管理的一次运行实例。本文把一个进程写成 (pid, AS, FD, threads, state):AS 是地址空间及访问权限,FD 是文件描述符表,threads 保存执行流,state 保存生命周期等内核记录。一个线程至少有自己的程序计数器、寄存器和调用栈;同进程线程共享本模型的 AS 与 FD。程序文件、进程、线程因而不是三个同义名称。

线程每次运行执行指令状态转移,但指令中的地址先在当前地址空间内解释。对进程 P,地址空间可抽象为部分映射

TP:(v,a,m)↦p或故障,

其中 v 是虚地址,a 是读、写或取指,m 是用户态或内核态,p 是物理地址。同一个 v 在 P、Q 中可以得到不同 p;也可通过受控映射得到相同 p。隔离要求未经许可的进程不能直接读写对方资源,不要求所有物理字节永不共享。

贯穿模型 OS-16 ​

本单元采用自定教学机 OS-16:单核,按字节寻址,虚地址和物理地址均16位;页面为256B,用户读写示例均为单字节。内核保留页表和控制记录,用户指令不能修改它们。地址空间身份在存活期间唯一;内存事件逐个完成,不模拟弱内存或投机时间。内核可睡眠,运行线程可被定时器抢占。

存储设备另有易失写缓存与稳定块区,每块256B;单块稳定写原子,跨块更新不原子。设备可乱序稳定普通写,但成功的flush必须使此前已提交到该队列的写全部稳定。掉电丢失寄存器、DRAM与设备易失缓存,保留稳定块。后文的页缓存、日志和恢复都沿用这张边界;它不是某款CPU、xv6或Linux的完整规格。

直觉

程序文件像可重复使用的配方,进程是一次带有自己的材料和工作台的制作过程。两个进程可以执行同一个程序而输入、堆、当前目录和打开文件都不同。内核维护这些归属,使每次恢复执行时都能找回正确的上下文。

“地址0x12AB”只给出了工作台上的位置,还没有说是哪一张工作台。把地址空间身份丢掉后比较指针数值,就像只凭两个文件中的行号都为12,断言它们指向同一段文字。

例子与边界

两个进程,相同虚地址 ​

在OS-16中,P的虚页0x12映射到物理页0x30,Q的同一虚页映射到0x50。P读取0x12AB实际读0x30AB,值为7;Q读取0x12AB实际读0x50AB,值为9。P向该地址写11后,Q仍读9。若内核特意把Q该页也映射到0x30,则写入可被Q观察;这叫受控共享,需要并发访问时仍须选择同步协议。

同一进程两个线程则共享这份映射。线程A把寄存器r存成7,并不会改变线程B的r;A把共享地址0x12AB存成7,B随后读此地址则会得到7。独立寄存器、独立栈和共享堆可以同时成立;栈独立指使用不同地址区间,不表示其他线程绝对无法访问其中的合法地址。

fork复制运行实例,exec替换程序映像 ​

POSIX.1-2024的fork成功后,父进程得到子PID,子进程在对应返回点得到0。私有内存初始内容相同,后续普通写独立;实现可采用写时复制,无需立刻复制每个数据页。父子各有描述符表,但相应项可指向同一个打开文件描述,所以“进程独立”不意味着文件offset也独立。

同版本POSIX的exec函数族成功时以新程序映像替换调用进程的映像,PID继续存在,也不返回到旧程序的调用点。带close-on-exec标志的描述符会关闭,其余按接口保留;不能把exec描述为“创建另一个进程”。多线程fork的子进程只保留调用线程,锁状态会带来额外限制;本单元的fork轨迹限定为单线程进程。

推论与应用

退出使进程停止执行并释放内存、打开文件引用等资源;父进程还可能需要通过等待接口收取退出状态。因此“没有可运行线程”与“内核中已无该PID的任何记录”不是同一事件。OS-16把退出状态记录与已释放地址空间分开保存。

地址空间隔离由页表权限与翻译落实,资源访问由系统调用受控进入内核。这里的进程是OS资源对象;消息传递模型中的进程可以只是局部状态机,不承诺PID、页表或系统调用。抽象分布式进程甚至可由多个OS线程共同实现。

进程创建成本必须分项:建立内核记录与描述符表、构造地址空间元数据、复制或共享数据页、最终首次写触发的工作。只计fork返回前的复制字节会漏掉COW把成本推迟到未来写入的事实。

参考资料
  • Cox、Kaashoek、Morris,xv6教材 rev5,2025-09-02,§1.1、§2.5。用于进程资源与受控执行的教学接口;OS-16为本文自定。
  • The Open Group,POSIX.1-2024,fork、exec,父子返回、共享打开文件描述与程序映像替换。
关系图谱16 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组