core.c

作者在 2010-09-01 00:42:25 发布以下内容
#include"config.h"
#include"os.h"
#include"core.h"
#include"cpu.h"

/********************************************************************************
函数名字:PID gethighrdypid(_OS_PRDYTLBINDEX index)
传入参数:_OS_PRDYTLBINDEX 见os.h文件,用于索引最高就绪优先级的PID
返回参数:PID 见os.h文件,进程的ID
功能描述:从进程就绪表中处于就绪态的优先级最高的进程。
注意事项:由于系统有一个永远处于就绪态的进程,所以index必不可能为零,所以到最后不用
进行零的判别;
*******************************************************************************
*/
PID gethighrdypid(_OS_PRDYTLBINDEX index)
{
#if OS_THEORY_PROCESS_COUNT==8
    return (PID)_os_prdytlb[index];
#endif

#if OS_THEORY_PROCESS_COUNT==16
    if((index&0x00FF)!=0)
    {
        index&=0x00FF;
        return (PID)_os_prdytlb[index];
    }
    else
    {
        index>>=8;
        index&=0x00FF;
        return (PID)(_os_prdytlb[index]+8);
    }
#endif

#if OS_THEORY_PROCESS_COUNT==32

    if((index&0x000000FF)!=0)
    {
        index&=0x000000FF;
        return (PID)_os_prdytlb[index];
    }
    else if((index&0x0000FF00)!=0)
    {
        index>>=8;
        index&=0x000000FF;
        return (PID)(_os_prdytlb[index]+8);
    }
    else if((index&0x00FF0000)!=0)
    {
        index>>=16;
        index&=0x000000FF;
        return (PID)(_os_prdytlb[index]+16);
    }
    else
    {
        index>>=24;
        index&=0x000000FF;
        return (PID)(_os_prdytlb[index]+24);
    }
#endif
}

/*******************************************************************************
函数名字:void _os_schedul(void)
传入参数:没有
返回参数:没有
功能描述:内核进行一次普通进程调度,将最合理的进程装入cpu物理区间
底层调用: PID gethighrdypid(_OS_PRDYTLBINDEX index)(本文件)
          void _os_context();
*******************************************************************************
*/
void _os_schedul(void)
{
    _os_oscb.pcur->state=PSTATE_WAITE;       /*将当前进程置为等待;*/
    _os_oscb.gethighrdypid=(_os_prdytlbindex);
    _os_oscb.pcur=_os_oscb.pfirst+_os_oscb.highpriorpid;
    _os_context();   /*进行cpu上下文切换,见cpu.c文件*/
    return;
}

/********************************************************************************
函数名字:void _os_intschedul(void)
传入参数:没有
返回参数:没有
功能描述:在中断的情况下内核进行一次进程调度,将最合理的进程装入cpu物理区间
注意事项:只能用在中断的情况下进行的调度;
底层调用: PID gethighrdypid(_OS_PRDYTLBINDEX index)(本文件)
          void _os_intcontext();
*******************************************************************************
*/
void _os_intschedul(void)
{
    _os_oscb.pcur->state=PSTATE_WAITE;       /*将当前进程置为等待;*/
    _os_oscb.gethighrdypid=(_os_prdytlbindex);
    _os_oscb.pcur=_os_oscb.pfirst+_os_oscb.highpriorpid;
    _os_intcontext();   /*进行cpu上下文切换,见cpu.c文件*/
    return;
}

/********************************************************************************
函数名字:void _os_killschedul(void)
传入参数:没有
返回参数:没有
功能描述:在进程自杀或者被杀的情况下内核进行一次进程调度
底层调用: PID gethighrdypid(_OS_PRDYTLBINDEX index)(本文件)
          void _os_context();
*******************************************************************************
*/
void _os_killschedul(void)
{
    _os_oscb.pcur->state=PSTATE_WAITE;       /*将当前进程置为等待;*/
    _os_oscb.gethighrdypid=(_os_prdytlbindex);
    _os_oscb.pcur=_os_oscb.pfirst+_os_oscb.highpriorpid;
    _os_context();   /*进行cpu上下文切换,见cpu.c文件*/
    return;
}


core.h未完待续
默认分类 | 阅读 868 次
文章评论,共0条
游客请输入验证码
文章分类
最新评论