Linux内核设计与实现 - 第3章:Linux的进程
目录
- 3.1 进程概念
- 3.2 进程描述符
- 3.3 进程生命周期
- 3.4 进程调度
- 3.5 进程间通信(IPC)
- 3.6 线程实现
- 3.7 实验:进程监控工具
3.1 进程概念
- 进程定义:程序执行的实例,拥有独立地址空间和系统资源
- 进程组成:
- 代码段(text section)
- 数据段(data section)
- 堆栈(stack)
- 进程控制块(PCB)
- 进程特点:
- 动态性:有创建、执行、消亡过程
- 并发性:多个进程可同时存在
- 独立性:拥有独立地址空间
3.2 进程描述符
- task_struct结构体:
struct task_struct {volatile long state; // 进程状态pid_t pid; // 进程标识符struct mm_struct *mm; // 内存管理信息struct files_struct *files; // 打开文件信息// ... 其他字段 };
- 关键字段说明:
- state:TASK_RUNNING/TASK_INTERRUPTIBLE等
- pid:进程唯一标识
- mm:指向内存描述符
3.3 进程生命周期
-
创建:
- fork():创建子进程
- vfork():创建共享地址空间的子进程
- clone():更灵活的创建方式
-
执行:
- exec()系列函数加载新程序
-
终止:
- exit()正常终止
- 信号强制终止
3.4 进程调度
- 调度策略:
- SCHED_NORMAL:普通进程的完全公平调度(CFS)
- SCHED_FIFO/SCHED_RR:实时进程调度
- 优先级:
- 静态优先级(static_prio)
- 动态优先级(dynamic_prio)
- 实时优先级(rt_priority)
3.5 进程间通信(IPC)
- 管道(pipe)
- 信号(signal)
- 共享内存(shared memory)
- 消息队列(message queue)
- 信号量(semaphore)
- 套接字(socket)
3.6 线程实现
- Linux线程特点:
- 轻量级进程(LWP)
- 与进程共享地址空间
- 通过clone()系统调用创建
- POSIX线程库:
- pthread_create()
- pthread_join()
- pthread_exit()
3.7 实验:进程监控工具
# 查看进程树
pstree -p# 实时监控进程
top# 查看进程详细信息
ps -auxf