ARM学习笔记——Linux进程管理
2018-01-17 16:16
495 查看
1.Linux进程要素
1.1进程四要素
² 有一段程序供其执行。
² 有进程专用的内核空间堆栈
² 在内核中有一个task_struct数据结构,即通常的“PCB,进程控制块”
² 有独立的用户空间
1.2Linux进程状态
² TASK_RUNNING:进程正在被CPU执行,或者已经准备就绪,随时可以执行。当一个进程刚被创建时,就处于TASK_RUNNING状态
² TASK_INTERRUPTIBLE:处于等待中的进程,待等待条件为真时被唤醒,也可以被信号或者中断唤醒。
² TASK_UNINTERRUPTIBLE:处于等待中的进程,待资源有效时唤醒,但不可以由其他进程通过信号或中断唤醒
² TASK_KILLABLE:原理类似于TASK_UNITERRUPTIBLE,但是可以被致命信号(SIGKILL)唤醒。
² TASK_TRACED:处于被调试状态的进程
² TASK_DEAD:进程退出时(调用do_exit)所处的状态。
1.3Linux进程描述
用task_struct表示,重要的有:
pid_t pid;//进程号
long state;//状态
int prio;//优先级
2.进程调度
2.1调度策略
² SCHED_NORMAL(SCHED_OTHER):普通的分时进程
² SCHED_FIFO:先进先出的实时进程
² SCHED_RR:时间片轮转的实时进程
² SCHED_BATCH:批处理进程
² SCHED_IDLE:只在系统空闲时才能够被调用执行的进程
2.2调度时机
2.2.1主动式
在内核中直接调用schedule().当进程需要等待资源等而暂时停止运行时,会把自己的状态置于挂起(睡眠),并主动请求调度,让出CPU。
2.2.2被动式——用户态抢占
用户抢占发生在:
² 从系统调用返回用户空间
² 从中断处理程序返回用户空间
内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,即发生用户抢占。
² 当某个进程耗尽它的时间片时,会设置need_resched标志
² 当一个优先级更高的进程进入可执行状态的时候,也会设置need_resched标志
2.2.3被动式——内核态抢占
内核抢占可能发生在:
² 中断处理程序完成,返回内核空间之前。
² 当内核代码再一次具有可抢占性的时候,如解锁及使能软中断等
在支持内核抢占的系统中,某些特例时不允许被抢占的:
² 内核正在运行中断处理
² 内核正在进行中断上下文的BottomHalf(中断的底半部)处理。
² 进程正持有spinlock自旋锁、writelock/readlock读写锁等
² 内核正在执行调度程序Scheduler.
2.3调度步骤
Schedule函数工作流程如下:
² 清理当前运行中的进程
² 选择下一个要运行的进程
² 设置新进程的运行环境
² 进程上下文切换。
1.1进程四要素
² 有一段程序供其执行。
² 有进程专用的内核空间堆栈
² 在内核中有一个task_struct数据结构,即通常的“PCB,进程控制块”
² 有独立的用户空间
1.2Linux进程状态
² TASK_RUNNING:进程正在被CPU执行,或者已经准备就绪,随时可以执行。当一个进程刚被创建时,就处于TASK_RUNNING状态
² TASK_INTERRUPTIBLE:处于等待中的进程,待等待条件为真时被唤醒,也可以被信号或者中断唤醒。
² TASK_UNINTERRUPTIBLE:处于等待中的进程,待资源有效时唤醒,但不可以由其他进程通过信号或中断唤醒
² TASK_KILLABLE:原理类似于TASK_UNITERRUPTIBLE,但是可以被致命信号(SIGKILL)唤醒。
² TASK_TRACED:处于被调试状态的进程
² TASK_DEAD:进程退出时(调用do_exit)所处的状态。
1.3Linux进程描述
用task_struct表示,重要的有:
pid_t pid;//进程号
long state;//状态
int prio;//优先级
2.进程调度
2.1调度策略
² SCHED_NORMAL(SCHED_OTHER):普通的分时进程
² SCHED_FIFO:先进先出的实时进程
² SCHED_RR:时间片轮转的实时进程
² SCHED_BATCH:批处理进程
² SCHED_IDLE:只在系统空闲时才能够被调用执行的进程
2.2调度时机
2.2.1主动式
在内核中直接调用schedule().当进程需要等待资源等而暂时停止运行时,会把自己的状态置于挂起(睡眠),并主动请求调度,让出CPU。
2.2.2被动式——用户态抢占
用户抢占发生在:
² 从系统调用返回用户空间
² 从中断处理程序返回用户空间
内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,即发生用户抢占。
² 当某个进程耗尽它的时间片时,会设置need_resched标志
² 当一个优先级更高的进程进入可执行状态的时候,也会设置need_resched标志
2.2.3被动式——内核态抢占
内核抢占可能发生在:
² 中断处理程序完成,返回内核空间之前。
² 当内核代码再一次具有可抢占性的时候,如解锁及使能软中断等
在支持内核抢占的系统中,某些特例时不允许被抢占的:
² 内核正在运行中断处理
² 内核正在进行中断上下文的BottomHalf(中断的底半部)处理。
² 进程正持有spinlock自旋锁、writelock/readlock读写锁等
² 内核正在执行调度程序Scheduler.
2.3调度步骤
Schedule函数工作流程如下:
² 清理当前运行中的进程
² 选择下一个要运行的进程
² 设置新进程的运行环境
² 进程上下文切换。
相关文章推荐
- Linux 学习笔记_8_进程管理_1_进程的概念
- 【Linux学习笔记二十三】进程和服务的管理
- Linux学习笔记之计划任务、进程管理、磁盘管理
- linux进程管理学习笔记
- Linux学习笔记-----进程管理-查看系统健康状态
- linux学习笔记之进程管理
- Linux 学习笔记_8_进程管理_2_进程管理命令
- 【Linux学习笔记六】进程管理
- Linux+C学习笔记之进程管理
- 【ARM&Linux】学习笔记之Linux下多进程控制
- Linux——进程管理学习简单笔记
- Linux内核学习笔记之进程管理2—进程的组织形式
- 【Java学习-J.160406.0.6】笔记5-Linux基础-linux进程管理
- Linux 学习笔记_8_进程管理_3_计划任务
- Linux学习笔记:进程管理和任务计划
- linux学习笔记----进程管理----杀死进程and 把进程放入后台
- Linux——进程管理简单学习笔记(二)
- Linux 学习笔记【4】 进程管理
- Linux学习笔记:进程管理
- Linux 程序设计学习笔记----进程管理与程序开发(下)