您的位置:首页 > 运维架构 > Linux

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函数工作流程如下:

²  清理当前运行中的进程

²  选择下一个要运行的进程

²  设置新进程的运行环境

²  进程上下文切换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: