1.trap_init
set_trap_gate 设置的权限较高,只能由用户程序调用
set_system_gate 设置的权限较低,能由用户和系统所有进程调用
2.system_call
所有的系统调用C函数放到了统一的sys_call_table
fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read,
sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link,
sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod,
sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount,
sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm,
sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access,
sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir,
sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid,
sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys,
sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit,
sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid,
sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask,
sys_setreuid,sys_setregid };
系统进程管理
1.系统进程的运转方式
系统时间:(giffies 系统滴答)
CPU内部有一个RTC,会在上电的时候调用mktime计算出从1970年1月1日0时所过的秒数,给mktime函数传来的结构体是由初始化时RTC(CMOS)获取的参数,转化为时间保存在一个全局变量,并给GIFFITES所用
jiffers是一个系统的时钟滴答,一个系统滴答是10ms
10ms一个时钟滴答----》每10ms引发一个定时器中断
中断服务函数中,首先进行jiffies++
timer_interrupt
call do_timer
调用do_timer函数
if(cpl) //CPL变量是内核中用来指示被中断程序的特权 0表示内核进程 1表示被中断的是用户进程
current->utime++; //用户程序的运行时间
else
current->stime++; //内核程序的运行时间
next_timer 是嫁接与jiffies变量的所有定时器的时间链表
current->counter ---->进程的时间片
task_struct 一个进程 task_struct[] 进程向量表 counter
counter --在哪里用 进程的调度就是task_struct[]进程链表的检索,找时间片最大的进程对象,然后进行调用,知道时间片为0,退出 之后进行新一轮的调用。
counter --在哪里被设置 当全部的task_struct[]所有的进程的counter都为0,就进行新一轮的时间片分配
(*p)->counter=((*p)->counter>>1)+(*p)->priority;
2.如何创建一个新的进程
3.进程调度
4.进程的退出
5.进程间通信