1.1 进程与内存知识点总结
1.1 进程与内存知识点总结
一、进程基础
-
进程组成
- 由用户空间内存(指令、数据、堆栈)和内核私有状态组成。
- 内核通过**进程标识符(PID)**唯一标识每个进程。
-
进程调度
- xv6采用分时复用机制,透明地在可用CPU间切换进程。
- 进程暂停时,内核保存其CPU寄存器,恢复时重新加载。
二、核心系统调用
-
fork()
- 创建子进程,复制父进程的内存内容(指令、数据、堆栈)。
- 返回值:父进程返回子进程PID,子进程返回0;失败返回-1。
- 父子进程独立执行,修改一方变量不影响另一方。
-
exit(int status)
- 终止当前进程,释放内存、文件等资源。
status
为退出状态(通常0表示成功,1表示失败)。
-
*wait(int status)
- 阻塞父进程,直到子进程退出或被终止。
- 返回子进程PID,并通过
*status
获取退出状态;无子进程时返回-1。
-
**exec(char file, char argv[])
- 用新程序替换当前进程的内存镜像。
file
为可执行文件路径(如ELF格式),argv
为命令行参数数组。- 成功后不返回,直接执行新程序;失败返回-1。
-
sbrk(int n)
- 动态调整进程内存大小,返回新内存起始地址。
- 用于堆内存分配(如
malloc
)。
三、进程交互逻辑
-
父子进程关系
- 子进程初始内存与父进程完全相同,但后续独立修改。
fork
后通常配合exec
执行新程序,实现进程替换。
-
资源释放
exit
确保进程终止时释放所有资源,避免内存泄漏。wait
回收子进程残留资源(僵尸进程处理)。
四、内存管理
-
内存布局
- 用户空间包含指令、数据和堆栈,内核空间存储进程状态。
- 进程通过系统调用访问内核服务,切换用户态与内核态。
-
内存分配
fork
隐式分配子进程内存,exec
为新程序分配内存。sbrk
显式调整堆内存大小。
五、关键点
- 系统调用接口:进程通过系统调用(如
fork
、exec
)与内核交互,实现资源管理和进程控制。 - 内存隔离:硬件保护机制确保进程只能访问自身内存,提升安全性。
- 进程生命周期:
fork
创建 →exec
替换 →exit
终止 →wait
回收,形成完整闭环。
总结:1.1章节聚焦进程的创建、执行、终止及内存管理,核心系统调用fork
、exit
、wait
、exec
是理解Unix-like系统进程模型的基础。