下载此文档

操作系统实验报告——进程调度(共21页).docx


文档分类:IT计算机 | 页数:约21页 举报非法文档有奖
1/21
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/21 下载此文档
文档列表 文档介绍
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
北京邮电大学软件学院
2019-2020
也就是针对任务数组中的每个任务,检查其警报定时值alarm。如果任务的alarm已经超期(alarm < jiffies),则在它的信号位图中设置SIGALARM,然后清除alarm值。之后schedule()函数首先扫描任务队列,通过比较每个就绪状态任务的运行时间递减计数counter的值来确定当前哪个进程运行的时间最少,,于是就选中该进程,并使用任务切换宏函数到该进程运行利用switch_to函数完成任务转换。如果所有的就绪任务的该值都是0,则表示此刻所有任务的时间片都已运行完。于是就根据任务的优先权值priority,重置每个任务的运行时间counter。
void schedule(void)
{
    int i, next, c;
    struct task_struct **p;
    /* check alarm, wake up any interruptible tasks that have got a signal */
    for (p = &LAST_TASK; p > &FIRST_TASK; --p) //把p初始化为指向最后一个进程的地址的指针,逆向扫描所有进程
        if (*p)
        { //当前进程
精选优质文档-----倾情为你奉上
精选优质文档-----倾情为你奉上
专心---专注---专业
专心---专注---专业
精选优质文档-----倾情为你奉上
专心---专注---专业
            if ((*p)->timeout && (*p)->timeout < jiffies)
            { // jiffies是持续变的,timeout 是阈值
                (*p)->timeout = 0;
                //如果当前进程等待很久了,并且这个进程处于TASK_INTERRUPTIBLE
                if ((*p)->state == TASK_INTERRUPTIBLE)
                    (*p)->state = TASK_RUNNING; //我们就把这个进程置与TASK_RUNNING状态
            }
            if ((*p)->alarm && (*p)->alarm < jiffies)
            { //如果此时jiffies大于alarm信号周期,则让将SIGALRM写入进程的信号位
                (*p)->signal |= (1 << (SIGALRM - 1));
                (*p)->alarm = 0;
            }
            if (((*p)->signal & ~(_BLOCKABLE & (*p)->blocked)) &&
                (*p)->state == TASK_INTERRUPTIBLE) // 除SIGKILL SIGSTOP信号外,其他信号都是非阻塞状态的话,并且进程处于TASK_INTERRUPTIBLE
                (*p)->state = TASK_RUNNING; //把这个进程置与TASK_RUNNING状态
        }
    /* this is the scheduler proper: */
    while (1)
    {
       c = -1;
        next = 0;
        i = NR_TASKS;
        p = &task[NR_TASKS];
        while (--i)
        { //把所有进程都扫一遍,counter是递减的,找出counter最大的进程,保存在next里面
            if (!*--p) //当前*p指向进程为空,下一个
                continue;
            if ((*p)->state == TASK_RUNNING && (*p)->counter > c)

操作系统实验报告——进程调度(共21页) 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数21
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wwlgqnh
  • 文件大小859 KB
  • 时间2022-04-03