proc.c~
来自「参照MINIX3写的操作系统 用GCC+NASM+BOCHS开发」· C~ 代码 · 共 123 行
C~
123 行
#include "proc.h"
PUBLIC void initProcStruct()
{
t32 start;
start=memAlloc(sizeof(PROCESS)*100);
printk("start %d",start);
mallocStructAlloc(STRUCT_PROCESS,sizeof(PROCESS),start,sizeof(PROCESS)*100);
printk("kmalloc %d",kmalloc());
}
/*
createProc:创建新的进程
eip:新进程的入口地址
*/
PUBLIC t32 createProc(t32 eip)
{
static pid=10;
PROCESS *child,*father=usrProc;
PROCESS *next=usrProc;
child=(PROCESS *)kmalloc();
memCopy(child,father,sizeof(PROCESS));
/*新进程的入口点*/
child->Regs.eip=eip;
/*分配堆栈空间*/
child->Regs.esp=memAlloc(1024);
printk("stack %x",child->Regs.esp);
child->Pid=pid++;
child->state=READY;
child->Priority=15;
child->InitPriority=15;
child->next=NULL;
next=usrProc;
/*将新进程链入用户进程链表*/
while(next&&next->next)
next=next->next;
next->next=child;
return pid;
}
/*
exitProc
eixtCode:进程退出代码
*/
PUBLIC void exitProc(t32 eixtCode)
{
}
/*
Schedule:进程调度
*/
PUBLIC void Scheduler()
{
LockIrq();//关中断
PROCESS *next=NULL;
int i;
int Temp=0;
again:
next=usrProc;
while(next)
{
if(next->state==READY&&next->Priority>Temp)
{
Temp=next->Priority;
pCurrentProc=ReadyProc=next;
}
next=next->next;
}
if(Temp>0)
{
ReadyProc->Priority--;
UnLock();
return ;
}
next=usrProc;
while(next)
{
next->Priority=next->InitPriority;
next=next->next;
}
goto again;
UnLock();
}
/*
waitEvent:等待事件(比如按键按下,磁盘读数据)
event: 事件类型
*/
PUBLIC void waitEvent(int event)
{
ReadyProc->state=event;
ChangeProcess();
}
/*
wakeUpEvent:唤醒事件进程(比如按键按下,磁盘读数据)
event: 事件类型
*/
PUBLIC void wakeUpEvent(int event)
{
// LockIrq();//关中断
PROCESS *next=NULL;
next=usrProc;
while(next)
{
if(next->state==event)
next->state=READY;
next=next->next;
}
Scheduler();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?