进程调度简介

1. 进程的创建

当系统启动时,它在内核模式下运行,只有一个进程---初始化进程。像所有进程一样,初始化进程有一个机器状态,用stack,寄存器等表示。当系统中其他进程被创建执行时,这些机器状态将被保存在初始进程的task_struct数据结构中。在系统初始化的最好阶段,初始进程启动一个任务(称为init),然后就空闲等待,什么也不做。

        init内核具有进程标识符,因为它是系统中的一个真正的进程。它完成一些系统的初始化配置(如打开系统的控制盘已经安装根文件系统),然后执行系统的初始化脚本,/etc/rc.sysinit。init程序使用/etc/inittab作为脚本文件来创建系统的新进程,这些新进程可以继续创建新的进程。例如:getty进程在用户试图登录是,做可以创建login进程。系统中所有进程都是init内核进程的后代,新进程是通过克隆旧进程或说克隆当前进程创建的。新的task_struct加入到task向量链表中,并且父进程的task_struct内容被复制到新进程的task_struct中。


2. 进程状态

进程描述符中状态域(state)的值有五种:

TASK_RUNNING: 运行态,进程在运行(是系统的当前进程)或者准备运行(等待被安排到系统的一个CPU上)。

TASK_INTERRUPTIBLE:  可中断等待状态,进程处于等待队列中,它能够被信号(singal)或中断唤醒,等待资源的请求满足时,也被唤醒。

TASK_UNINTERRUPTIBLE: 不可中断状态,进程处于等待队列中,不能 被信号或中断唤醒,只有等待的资源满足时才能被唤醒

TASK_STOPPED: 进程停止状态,可能被特定的信号终止,也可能是受其他进程的跟踪调用而暂时将CPU交给跟踪它的进程。

TASK_ZOMBLE: 进程僵尸状态,进程已经停止,等还没有释放进程控制块。


3. 进程选择

调度器查看运行队列中的所有进程来寻找最优价值(优先级最高)的进程来运行。如果有实时进程(有实时调度策略的进程),那么他们将得到比普通进程更高的优先级。也就是说,如果系统中有可运行的实时进程的话,总是运行这些实时进程而让别的普通进程等待。如果有几个具有相同优先级的进程,这最靠近运行队列头的进程被选中。正在运行的进程将被放到运行队列的尾部。在一个公平的有许多相同优先级进程的系统中,每个进程将依次运行,当然有的进程会因为等待资源而使它的运行顺序改变。

文山 www.wenshan.me


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值