init在c语言,内核初始化:init/mainc之init();

在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) \

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值