内核态与用户态,系统调用

注:参考Linux_Unix系统编程

进程通过系统调用syscall从用户态进入内核态,即将控制权交由内核。

为什么要把控制权交给内核?

答:内核nb;

       进程可以说是什么都不知道:(线程同理)

             不知道自己在RAM的位置,不知道自己哪部分在内存哪部分在交换空间(PCB:内存调度)

             不知道要访问的文件在磁盘哪里(文件系统)

             进程间也不能直接通信(进程间通信:socket,信号量,信号,管道,共享内存等等)

             不能自己创建新进程(fork,clone)

             甚至不能自我了断(信号)

       进程把控制权通过系统调用交给内核,内核无所不能。以上进程不行的内核都可以,具体都是后面知识点,环境编程就是讲系统调用函数怎么工作的,内核在调用系统调用函数的时候怎么处理。

系统调用执行流程

int 0x80是中断机器指令,

1.应用程序通过外壳函数(外壳函数保证参数正确)发起系统调用

2.响应int 0x80,内核态找到系统调用服务例程

3.服务例程处理命令

4.逐级返回

内核态与用户态,系统调用_第1张图片

你可能感兴趣的:(LinuxUnix系统编程)