linux进程管理
概念
- 资源分配的基本单位;
 - 调度的基本单位
 - 当程序在系统中运行时,形成一个进程
 - 组成:
- text:代码
 - 用户数据段:进程处理的数据
 - 系统数据段:包括PCB
 
 - 进程状态
- TASK_RUNNING
 - TASK_INTERRUPTIBLE
 - TASK_UNINTERRUPTIBLE
 - TASK_STOPPED
 - TASK_TRACED:被跟踪,一般调式时用到
 - EXIT_ZOMBIE:进程结束前的状态
 
 - EXIT_DEAD
 
task_struct
- PCB的数据结构,进程存在的唯一标识
 - 进程创建时,就会建立一个task_struct,在专门存储task_struct的地方存放着。有最多进程数限制
 - 主要组成:
- 进程标识号,pid;
 - 进程的虚拟内存信息:struct mm_struct* mm
 - 进程打开的文件:struct files_struct *files
 - 进程映像所在的文件系统:struct files_struct *files
 
 - 内核2.8后用thread_info替代了task_struct的位置,该结构内部有一个指向task_struct的指针
 
进程创建
- 通过fork()创建
 - 子进程继承了父进程的资源(只读)
 - 写时拷贝
 - 子进程通过exec()执行真正的任务
 - 注意:
- 父进程执行fork()返回的是子进程的pid
 - 子进程执行fork()返回的是0
 
 
linux内核线程
- linux中线程也有自己的task_struct结果
 - 但其共享进程的资源
 - 内核线程:在内核态下创建,独立执行的一个内核函数
 
linux的进程调度
抢占式,无论是内核态还是用户态都可以抢占
分时技术:根据进程优先级去分配时间片
时间片轮转:对于优先级相同的进程,使用时间片轮转的方法
linux有两种进程:普通进程(100149)和实时进程(099)
- 实时进程优先级更高:有FIFO和RR两种策略
 - 普通进程只有时间片轮转算法