在sched_init();中对进程0进行了初始化,当所有都初始完之后,就打开中断,将进程0移动到应用层,
自此进程0开始执行。接着 if (!fork()),创建进程1,并在进程1里执行init();下面看下init代码:
void init(void)
{
int pid,i;
setup((void *) &drive_info);
/***************************************************************************************
这个函数是一个系统调用,包括前面if (!fork())的fork,也是系统调用,都是在
内核态执行,定义在文件头static inline _syscall0(int,fork)和static inline _syscall1(int,setup,void *,BIOS);
static inline _syscall0(int,fork)实体:
#define _syscall0(type,name) \
type name(void) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
: "=a" (__res) \
: "0" (__NR_##name)); \
if (__res >= 0) \
return (type) __res; \
errno = -__res; \
return -1; \
}
_syscall1(int,setup,void *,BIOS)实体:
#define _syscall1(type,name,atype,a) \
type name(atype a) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
: "=a" (__res) \
: "0" (__NR_##name),"b" ((long)(a))); \
if (__res >= 0) \
<