linux0.12系统调用

系统调用是一个软中断,中断号是0x80,它是上层应用程序与Linux系统内核进行交互通信的唯一接口。

这个中断的设置在kernel/sched.c中443行函数中

 1 void sched_init(void)
 2 {
 3     int i;
 4     struct desc_struct * p;
 5 
 6     if (sizeof(struct sigaction) != 16)
 7         panic("Struct sigaction MUST be 16 bytes");
 8     set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss));
 9     set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt));
10     p = gdt+2+FIRST_TSS_ENTRY;
11     for(i=1;i<NR_TASKS;i++) {
12         task[i] = NULL;
13         p->a=p->b=0;
14         p++;
15         p->a=p->b=0;
16         p++;
17     }
18 /* Clear NT, so that we won't have troubles with that later on */
19     __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl");
20     ltr(0);
21     lldt(0);
22     outb_p(0x36,0x43);        /* binary, mode 3, LSB/MSB, ch 0 */
23     outb_p(LATCH & 0xff , 0x40);    /* LSB */
24     outb(LATCH >> 8 , 0x40);    /* MSB */
25     set_intr_gate(0x20,&timer_interrupt);
26     outb(inb_p(0x21)&~0x01,0x21);
27     set_system_gate(0x80,&system_call);
28 }

http://blog.csdn.net/yming0221/article/details/6398414

原文地址:https://www.cnblogs.com/cdwodm/p/2938722.html