linux进程调度

转载 2016年09月10日 18:42:07

进程从非TASK_RUNNING状态变为TASK_RUNNING状态,是由别的进程(也可能是中断处理程序)执行唤醒操作来实现的。执行唤醒的进程设置被唤醒进程的状态为TASK_RUNNING,然后将其task_struct结构加入到某个CPU的可执行队列中。于是被唤醒的进程将有机会被调度执行。

   而进程从TASK_RUNNING状态变为非TASK_RUNNING状态,则有两种途径:

  1、响应信号而进入TASK_STOPED状态、或TASK_DEAD状态;
  2、执行系统调用主动进入TASK_INTERRUPTIBLE状态(如nanosleep系统调用)、或TASK_DEAD状态(如exit系统调用);或由于执行系统调用需要的资源得不到满足,而进入TASK_INTERRUPTIBLE状态或TASK_UNINTERRUPTIBLE状态(如select系统调用)。
  显然,这两种情况都只能发生在进程正在CPU上执行的情况下。


僵死状态(TASK_DEAD)状态:进程在退出的过程中,处于TASK_DEAD状态。

在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外。于是进程就只剩下task_struct这么个空壳,故称为僵尸。
之所以保留task_struct,是因为task_struct里面保存了进程的退出码、以及一些统计信息。而其父进程很可能会关心这些信息。父进程可以通过wait系列的系统调用(如wait4、waitid)来等待某个或某些子进程的退出,并获取它的退出信息。然后wait系列的系统调用会顺便将子进程的尸体(task_struct)也释放掉。
子进程在退出的过程中,内核会给其父进程发送一个信号,通知父进程来“收尸”。这个信号默认是SIGCHLD,但是在通过clone系统调用创建子进程时,可以设置这个信号


调度触发的时机
调度的触发主要有如下几种情况:
1、当前进程(正在CPU上运行的进程)状态变为非可执行状态。
进程执行系统调用主动变为非可执行状态。比如执行nanosleep进入睡眠、执行exit退出、等等;
进程请求的资源得不到满足而被迫进入睡眠状态。比如执行read系统调用时,磁盘高速缓存里没有所需要的数据,从而睡眠等待磁盘IO;
进程响应信号而变为非可执行状态。比如响应SIGSTOP进入暂停状态、响应SIGKILL退出、等等;

2、抢占。进程运行时,非预期地被剥夺CPU的使用权。这又分两种情况:进程用完了时间片、或出现了优先级更高的进程。
优先级更高的进程受正在CPU上运行的进程的影响而被唤醒。如发送信号主动唤醒,或因为释放互斥对象(如释放锁)而被唤醒;
内核在响应时钟中断的过程中,发现当前进程的时间片用完;
内核在响应中断的过程中,发现优先级更高的进程所等待的外部资源的变为可用,从而将其唤醒。比如CPU收到网卡中断,内核处理该中断,发现某个socket可读,于是唤醒正在等待读这个socket的进程;再比如内核在处理时钟中断的过程中,触发了定时器,从而唤醒对应的正在nanosleep系统调用中睡眠的进程;

Linux进程调度的目标 http://www.cnblogs.com/zhaoyl/archive/2012/09/04/2671156.html

Linux进程调度的目标     1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效;     2.加强交互性能:在系统相当的负载下,...
  • wangyin159
  • wangyin159
  • 2015-11-19 10:05:57
  • 423

Linux进程调度分析

Linux进程调度分析
  • Li_Ning_
  • Li_Ning_
  • 2016-06-12 15:50:45
  • 1593

Linux进程调度策略分析

  • 2011年01月26日 12:15
  • 1.22MB
  • 下载

linux CFS进程时间片调度策略

refer to  http://blog.chinaunix.net/uid-27052262-id-3239260.html Linux支持三种进程调度策略,分别是SCHED_FI...
  • G7N3F
  • G7N3F
  • 2016-12-07 23:27:29
  • 369

郭健: Linux进程调度技术的前世今生之“今生”

本文紧接着: 郭健: Linux进程调度技术的前世今生之“前世” 作者简介          郭健,一名普通的内核工程师,以钻研Linux内核代码为乐,热衷于技术分享,和朋友一起...
  • juS3Ve
  • juS3Ve
  • 2017-12-01 00:00:00
  • 243

Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)

日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrive...
  • gatieme
  • gatieme
  • 2016-06-17 16:45:51
  • 11053

Linux进程调度机制(1)

进程调度负责决定哪个进程投入运行,何时运行以及运行多长时间。  进程调度:非抢占式和抢占式   Linux这么酷的系统当然是抢占式的喽。  进程在被抢占之前可以运行的时间是预先设定好的,叫做时间片。...
  • kzq_qmi
  • kzq_qmi
  • 2015-08-03 17:08:38
  • 1132

论文《LINUX进程调度分析》

  • 2010年03月23日 00:23
  • 185KB
  • 下载

linux进程调度策略

  • 2012年09月02日 09:52
  • 38KB
  • 下载

Linux进程管理 进程状态和时钟滴答[哈工大操作系统实验]

进程管理和创建记录,是哈工大操作系统实验2的内容。 涉及的技术内容包括“进程状态转换点定位”和“内核状态下写文件”。   本文主要讲解linux 0.11 系统[进程的调度转换知识],并给出哈工大实验...
  • u010469993
  • u010469993
  • 2013-12-14 22:03:03
  • 1147
收藏助手
不良信息举报
您举报文章:linux进程调度
举报原因:
原因补充:

(最多只允许输入30个字)