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两种策略
- 普通进程只有时间片轮转算法