标签:
我们一般使用系统调用一般通过库函数的方式
用户态和内核态的区分:
【CPU有不同的执行级别,高执行级别下,代码可以执行特权指令,访问任何的物理地址;低执行级别下,就会受到一定的限制。(处于系统安全和稳定的目的)Intel X86 CPU有四种不同的执行级别0-3;linux只使用了其中的0级和3级分别来表示内核态和用户态。】
显著地区分:cs寄存器的最低两位表明了当前代码的特权级
在linux中,地址空间是一个显著地标志:
0xc0000000以上的地址空间只能在内核态下访问,
0xc00000000——0xbfffffff的地址空间两种状态下都可以访问。
中断发生过程:
中断处理是从用户态进入内核态的主要方式,同时,系统调用只是一种特殊的中断。
中断发生后第一件事就是保存现场:
中断/int指令会在堆栈上保存一些寄存器的值(用户态栈顶地址、当时的状态字、当时cs:eip的值)
中断结束前第一件事就是恢复现场。
save_all:
内核代码,完成中断服务。
系统调用:用用户态进程和硬件设备进行交互提供了一组接口。
标签:
原文地址:http://www.cnblogs.com/suzhengsheng/p/5299481.html