84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
我在看Unix V6的源码剖析的书,关于内核模式和内核进程有点混淆,请问:系统调用或中断发生时,是用户进程自己转入内核模式处理?还是由内核进程来处理,处理完再把结果给用户进程?据我所知 proc[0]和proc[1]是内核进程,swtch函数处理时切换到了proc[0]
欢迎选择我的课程,让我们一起见证您的进步~~
因Linux很多设计与unix有相通之处,下面是我从《Linux内核设计与实现》了解到的几个点,希望对你理解有一点点帮助。
内核模式(也叫内核态),指当前代码指令执行在内核空间中。相对而言的是用户态,即我们写的程序运行在用户空间中。
用户空间的进程要访问或操作硬件,就必须让内核来做,系统调用实际就是进程请求内核做事。系统调用发生时,进程就陷入内核态,此时内核处于进程上下文,内核知道当前发起系统调用的进程及其信息,然后内核代表进程来做事情。
系统调用是使用软中断来实现的,即用户空间进程发起一个系统调用,实际是产生了一个软中断,让CPU进入内核的中断处理程序,这样就进入了内核态。当系统调用结束后,内核负责切换回用户空间,进程继续在用户空间执行下去(内核当然知道如何切换回用户空间了,因为用户空间的数据和进程都是内核在管理的)。系统调用的参数及返回值会在用户空间和内核空间之间拷贝。
每个处理器(每个核)都有一个内核线程(或叫进程),系统调用的软中断的处理就是在此内核线程进行的。
内核线程是辅助中断处理的一个机制。
我最近也在看unix操作系统,发生中断时,是由内核来调度进程的,进程本身是无法感知中断的。而系统调用相当于调用了一段不是进程本身的代码,而是系统代码,然后进入核心态。
因Linux很多设计与unix有相通之处,下面是我从《Linux内核设计与实现》了解到的几个点,希望对你理解有一点点帮助。
内核模式(也叫内核态),指当前代码指令执行在内核空间中。相对而言的是用户态,即我们写的程序运行在用户空间中。
用户空间的进程要访问或操作硬件,就必须让内核来做,系统调用实际就是进程请求内核做事。系统调用发生时,进程就陷入内核态,此时内核处于进程上下文,内核知道当前发起系统调用的进程及其信息,然后内核代表进程来做事情。
系统调用是使用软中断来实现的,即用户空间进程发起一个系统调用,实际是产生了一个软中断,让CPU进入内核的中断处理程序,这样就进入了内核态。当系统调用结束后,内核负责切换回用户空间,进程继续在用户空间执行下去(内核当然知道如何切换回用户空间了,因为用户空间的数据和进程都是内核在管理的)。系统调用的参数及返回值会在用户空间和内核空间之间拷贝。
每个处理器(每个核)都有一个内核线程(或叫进程),系统调用的软中断的处理就是在此内核线程进行的。
内核线程是辅助中断处理的一个机制。
我最近也在看unix操作系统,发生中断时,是由内核来调度进程的,进程本身是无法感知中断的。
而系统调用相当于调用了一段不是进程本身的代码,而是系统代码,然后进入核心态。