⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jobs.h

📁 该模块包括作业调度的三个系统进程。P1、P2、P3进程功能的实现。 P1负责对用户作业预输入处理
💻 H
📖 第 1 页 / 共 4 页
字号:
    {
        setcolor(yellow_color);
        if(no == 1)
        {
            /* 打印开机时间 */
            for(i=0;i<2;i++)
                DRAWMAT(_login_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
            itoa(LOGIN_TIME.ti_hour,tempbuf,10);
            outtextxy(print_left+1+24+4,print_top+print_height-13+2,tempbuf);
            outtextxy(print_left+1+40+4,print_top+print_height-13+2,":");
            itoa(LOGIN_TIME.ti_min,tempbuf,10);
            outtextxy(print_left+1+48+4,print_top+print_height-13+2,tempbuf);
            outtextxy(print_left+1+64+4,print_top+print_height-13+2,":");
            itoa(LOGIN_TIME.ti_sec,tempbuf,10);
            outtextxy(print_left+1+72+4,print_top+print_height-13+2,tempbuf);
        }
        if(no == 2)
        {
            /* 打印关机时间 */
            for(i=0;i<2;i++)
                DRAWMAT(_logout_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
            itoa(LOGOUT_TIME.ti_hour,tempbuf,10);
            outtextxy(print_left+1+24+4,print_top+print_height-13+2,tempbuf);
            outtextxy(print_left+1+40+4,print_top+print_height-13+2,":");
            itoa(LOGOUT_TIME.ti_min,tempbuf,10);
            outtextxy(print_left+1+48+4,print_top+print_height-13+2,tempbuf);
            outtextxy(print_left+1+64+4,print_top+print_height-13+2,":");
            itoa(LOGOUT_TIME.ti_sec,tempbuf,10);
            outtextxy(print_left+1+72+4,print_top+print_height-13+2,tempbuf);
        }
        if(no == 10)
        {
            /* 打印核心态时间 */
            for(i=0;i<3;i++)
                DRAWMAT(_kernel_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
            itoa(KERNEL_TIME,tempbuf,10);
            outtextxy(print_left+1+36+8,print_top+print_height-13+2,tempbuf);
        }
        else if(no == 20)
        {
            /* 打印用户态时间 */
            for(i=0;i<3;i++)
                DRAWMAT(_user_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
            itoa(USER_TIME,tempbuf,10);
            outtextxy(print_left+1+36+8,print_top+print_height-13+2,tempbuf);
        }
        else if(no == 30)
        {
            /* 打印闲逛态时间 */
            for(i=0;i<3;i++)
                DRAWMAT(_wait_+i*24,12,print_left+1+i*12,print_top+print_height-13,yellow_color);
            itoa(SUPERWAIT_TIME,tempbuf,10);
            outtextxy(print_left+1+36+8,print_top+print_height-13+2,tempbuf);
        }
        else if(no == 40)
        {
            /* 打印CHST[0] 次数 */
            outtextxy(print_left+1,print_top+print_height-13+2,"CHST[0]: ");
            itoa(KEYBOARD_TIMES,tempbuf,10);
            outtextxy(print_left+1+8*9,print_top+print_height-13+2,tempbuf);
        }
        else if(no == 50)
        {
            /* 打印CHST[1] 次数 */
            outtextxy(print_left+1,print_top+print_height-13+2,"CHST[1]: ");
            itoa(PRINTER_TIMES,tempbuf,10);
            outtextxy(print_left+1+8*9,print_top+print_height-13+2,tempbuf);
        }
        else if(no == 60)
        {
            /* 打印CHST[2] 次数 */
            outtextxy(print_left+1,print_top+print_height-13+2,"CHST[2]: ");
            itoa(HARDDISK_TIMES,tempbuf,10);
            outtextxy(print_left+1+8*9,print_top+print_height-13+2,tempbuf);
        }
    }
    delay(DELAY_TIME*10);
}

/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_PRINT_SYSTEM_ENVIRONMENT
功    能:  打印系统数据
入口参数:  
出口参数:  
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_PRINT_SYSTEM_ENVIRONMENT()
{
    gettime(&LOGOUT_TIME);
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,1); 
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,2); 
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,10);    
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,20);    
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,30);    
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,40);    
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,50);    
    M_PRINT_ONE_LINE_OF_JOB_RESULT(NULL,60);    
}

/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_JION_JOB_TO_J_INPUT_JOB
功    能:  将作业挂入作业后备队列中
入口参数:  
出口参数:  
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_JION_JOB_TO_J_INPUT_JOB()
{
    J_INPUT_JOB_TAIL->j_next = J_TEMP_JOB;
    J_INPUT_JOB_TAIL = J_INPUT_JOB_TAIL->j_next;
}


/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_NECESSARY_MALLOC_NEW_HARDDISK_SPACE
功    能:  是否需要申请输入井空间
入口参数:  
出口参数:  如果要则返回真,,否则返回假
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_NECESSARY_MALLOC_NEW_HARDDISK_SPACE(JCB *j)
{
    int i;
    for(i=0;i<10;i++)
    {
        if(j->j_hd_table[i] == -1)
            break;
    }
    if(j->j_loaded_length > i*10)
        return(TRUE);
    else
        return(FALSE);
}


/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_SAVE_RESULT_FROM_PCB_TO_JCB
功    能:  如果作业执行H指令或运行过程中出错,则调用该函数保存用户作业运行的结果
入口参数:  
出口参数:  
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_SAVE_RESULT_FROM_PCB_TO_JCB()
{
    int i,j;
    JCB *p,*savejcb;
    p = J_DEALING_JOB_HEAD;
    while(p != J_DEALING_JOB_TAIL && p->j_next->j_id != RUNNING_QUEUE->p_next->p_id)
        p = p->j_next;
    if(p->j_next->j_id == RUNNING_QUEUE->p_next->p_id)
    {
        savejcb = p->j_next;
        /* 保存JCB的参数 */
        /* 保存运行时间 */
        savejcb->j_running_time = RUNNING_QUEUE->p_next->p_running_time;
        /* 保存输出行数 */
        savejcb->j_output_lines = RUNNING_QUEUE->p_next->p_output_lines;
        savejcb->j_length = savejcb->j_output_lines;
        /* 因为 tick 在处理PI中断时将出错类型暂时存入 tick 中,所以此处应将tick 的内容存入 j_error 中 */
        savejcb->j_error = RUNNING_QUEUE->p_next->p_tick;
        /* 保存出错的行号 */
        savejcb->j_error_row =  RUNNING_QUEUE->p_next->p_error;
        /* 保存输出数据缓冲区 */
        for(i=0;i<10 && i<savejcb->j_output_lines;i++)
            for(j=0;j<5;j++)
                savejcb->j_print[i][j] = RUNNING_QUEUE->p_next->p_print[i][j];
        /* 初始化已打印的行数为 0 行 */
        savejcb->j_loaded_length = 0;

        M_MOVE_JCB_FROM_DEALING_JOB_TO_OUTPUT_JOB(p);
    }
}



/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_MOVE_JCB_FROM_DEALING_JOB_TO_OUTPUT_JOB
功    能:  将作业从正在处理作业队列移动到输出队列中
入口参数:  JCB *j 要移动的作业
出口参数:  
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_MOVE_JCB_FROM_DEALING_JOB_TO_OUTPUT_JOB(JCB *j)
{
    /* j为目的JCB的前一个结点 */
    J_OUTPUT_JOB_TAIL->j_next = j->j_next;
    if(J_DEALING_JOB_HEAD->j_next == J_DEALING_JOB_TAIL)
    {
        J_DEALING_JOB_HEAD->j_next = J_DEALING_JOB_HEAD->j_next->j_next;
        J_DEALING_JOB_TAIL = J_DEALING_JOB_HEAD;
    }
    else
    {
        j->j_next = j->j_next->j_next;
    }
    J_OUTPUT_JOB_TAIL = J_OUTPUT_JOB_TAIL->j_next;
    J_OUTPUT_JOB_TAIL->j_next = NULL;
    J_OUTPUT_JOB_HEAD->j_length++;
}

/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_DELETE_DEALING_JOB
功    能:  保存进程控制中的信息到作业控制中
入口参数:  JCB *j 要移动的作业
出口参数:  
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_DELETE_DEALING_JOB()
{
    JCB *p,*deletejcb;
    p = J_DEALING_JOB_HEAD;
    while(p != J_DEALING_JOB_TAIL && p->j_next->j_id != RUNNING_QUEUE->p_next->p_id)
        p = p->j_next;
    if(p->j_next->j_id == RUNNING_QUEUE->p_next->p_id)
    {
        /* 找到该作业的JCB块 */
        deletejcb = p->j_next;
        if(J_DEALING_JOB_HEAD->j_next == J_DEALING_JOB_TAIL)
        {
            J_DEALING_JOB_TAIL = J_DEALING_JOB_HEAD;
            J_DEALING_JOB_HEAD->j_next = NULL;
        }
        else
        {
            p->j_next = deletejcb->j_next;
        }
        free(deletejcb);
    }
}



/****************************************************************************
模块名称:  预输入模块
函 数 名:  M_SAVE_ERROR_INFORMATION_IN_JOB_TO_PRINT
功    能:  将出错信息写入输出结果数组中
入口参数:  JCB *j 要移动的作业
出口参数:  
调用关系:  
编    者:  陈俭(AP0006301)
编写日期:  2003-10-7
完成日期:  2003-10-7
*****************************************************************************/
M_SAVE_ERROR_INFORMATION_IN_JOB_TO_PRINT()
{
    RUNNING_QUEUE->p_next->p_output_lines++;
    if(RUNNING_QUEUE->p_next->p_output_lines > 10 )
        RUNNING_QUEUE->p_next->p_output_lines = 10;
    /* !号表示该作业出错 */
    RUNNING_QUEUE->p_next->p_print[RUNNING_QUEUE->p_next->p_output_lines -1][0] = '!';
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -