内核进程和内核模式的疑问


我在看Unix V6的源码剖析的书,关于内核模式和内核进程有点混淆,请问:
系统调用或中断发生时,是用户进程自己转入内核模式处理?还是由内核进程来处理,处理完再把结果给用户进程?
据我所知 proc[0]和proc[1]是内核进程,swtch函数处理时切换到了proc[0]

Linux unix

可悲的小悲桑 9 years, 4 months ago

因Linux很多设计与unix有相通之处,下面是我从《Linux内核设计与实现》了解到的几个点,希望对你理解有一点点帮助。

内核模式(也叫内核态),指当前代码指令执行在内核空间中。相对而言的是用户态,即我们写的程序运行在用户空间中。

用户空间的进程要访问或操作硬件,就必须让内核来做,系统调用实际就是进程请求内核做事。系统调用发生时,进程就陷入内核态,此时内核处于进程上下文,内核知道当前发起系统调用的进程及其信息,然后内核代表进程来做事情。

系统调用是使用软中断来实现的,即用户空间进程发起一个系统调用,实际是产生了一个软中断,让CPU进入内核的中断处理程序,这样就进入了内核态。当系统调用结束后,内核负责切换回用户空间,进程继续在用户空间执行下去(内核当然知道如何切换回用户空间了,因为用户空间的数据和进程都是内核在管理的)。系统调用的参数及返回值会在用户空间和内核空间之间拷贝。

每个处理器(每个核)都有一个内核线程(或叫进程),系统调用的软中断的处理就是在此内核线程进行的。

内核线程是辅助中断处理的一个机制。

loli控. answered 9 years, 4 months ago

Your Answer