Linux的系统调用怎么回事

云计算分享者 2024-02-23 03:32:32
linux kernel看起来就像魔法一样。它不是一个进程,也没有相应的PCB,也就不会有相应的PID了。 首先,int 80h这个之类肯定是运行在CPU上的。kernel初始化的过程中会在内存中为每个中断建立一个相应的中断处理程序,他们被放在一个固定地址的数组中,形式就是一个指针数组。这个数组是属于kernel的,不是属于任何一个process的。 那int 80h到底发生了什么事情 1.CPU本来执行在ring 3(user mode) 2.现在CPU会切换到ring 0(kernel mode)。也就是从现在开始,可以运行任何指令了,主要就是可以进行各种硬件的操作了。 3.CPU跳转到80h对应的中断处理程序开始运行,因为存在这儿的代码都不能很多,所以一般这儿马上就跟了一个跳转指令,到真正的实现的地方。 4.进到真正处理int 80h的中断处理程序,这儿的代码已经不是你自己应用程序写的,这部分代码已经是内核的代码了。 5.通过看eax寄存器,kernel发现跳转到这儿是因为要进行一个特定的系统调用,比如write。 6.再次跳转到去运行write的代码。 7.write的事情执行完成之后,通过运行IRET指令,退出内核模式 8.你的用户代码继续执行。 我们可以把kernel认为是一个公共的库,这个库比较特殊,里面的代码可以做一些我们的代码没有办法做的高权限操作。当我们的代码做进行这些高权限的操作时,就通过系统调用来使用内核这个库的功能,类似于我们写代码的时候调用的第三方库,只是这些第三方库和我们的代码一样,也是运行在用户模式的,而内核这个库运行在内核模式。 kernel还有一部分是我们写应用代码的人不接触,这个就是对各种硬件中断的处理。
0 阅读:0

云计算分享者

简介:感谢大家的关注