ARM学习笔记——Linux进程管理

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

²  清理当前运行中的进程

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

²  设置新进程的运行环境

²  进程上下文切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值