内核态、用户态、内核空间、用户空间、进程上下文、中断上下文、cpu状态
关键词:内核、上下文、空间、中断
一、虚拟地址空间:
1、定义:
实际物理内存空间的一种逻辑上的地址空间
2、注意:
(1)内核空间和用户空间存在于虚拟地址中的,也可以简单理解为物理内存就分为内核空间和用户空间。
(2)每个进程运行时,操作系统会为每一个进程分配一个虚拟地址空间。
在32位的系统中,用户空间占3G,每个进程最多就只能够占用3G的内存空间,正常情况下,每个进程的代码就运行在这个空间中。内核空间占1G(实际是3-4G,它可以访问所有的虚拟地址),它是供所有的进程所共有的;当一个进程想要具有更多权限进行相应的操作的时候,它就需要进入到这个空间。
二、内核空间&&用户空间:
1、内核空间:
(1)定义:
内核代码运行的位置,在这个空间下运行的进程可以比在用户空间下运行的进程拥有更多的访问系统的权限。
(2)注意:
①linux操作系统、驱动程序运行于这个空间中。
②为了保证安全,是不允许进程直接操作内核的,因此把内核(代码)存储到内核空间中,只有进程处于内核空间中,它才能够操作内核代码,获取更高权限,来进行需要的操作。
③内核是系统的核心,拥有内核,那么就可以直接操作底层硬件以及其他所有的权限。
④内核空间具有的权限:
- 页面置换、调度(即实现了高端内存的)权限:由于采用的虚拟存储技术,所以肯定是需要不断的调度“页”的,但是这个权限只有内核拥有,也就是进程必须处于内核态下,它才能够去操作内核代码,实现相应的调度功能;
- 所有的系统资源访问、管理都是在内核空间中完成的;
- ...
④进程处于内核态的目的就是为了运行内核代码,然后去做“高级”的事情。因为处理在用户空间时没有足够的权限。当进程做完事之后就会退出内核空间,返回到用户空间继续执行原来的程序。
2、用户空间:
(1)定义:
应用程序运行的位置 (用户程序运行时,会被存储到这个位置)
3、内核空间和用户空间的总结:
(1)就是程序的两种运行位置。
(2)内核代码和应用程序肯定都是存储在外存中的,只有运行时,才会被存到内存中,调入到内核空间和用户空间。
(3)注意:
①正常情况下,进程运行在用户空间,当它需要获取系统资源,或者访问更多其他的内容时,那么就需要运行到内核空间中,获取到数据之后,就返回用户空间。
②其实所谓的进入内核空间,也就是要叫处于内核空间的内核或者其他“功能强大的”代码帮我们做事,进入内核空间的进程运行对应的代码来做事,做完事就没事了,就可以走了。
三、内核态&&用户态:
1、内核态:
定义:进程运行于内核空间中,那么它就处于内核态
2、用户态:
定义:进程运行于用户空间中,那么它就处于用户态
3、内核态和用户态的总结:
(1)内核态和用户态指的是进程所处的两种状态,也指的是进程在不同空间下,进行具有不同权限的操作;
(2)每个进程都有内核态和用户态。(如果进程想要进入内核态,说明它需要拥有更多的权限去获取相对应的数据,因此它向系统申请进入内核空间,但是在内核空间处理完,也就是获取到对应的数据之后,它就会从内核态切换回用户态,重新运行用户程序。)
(3)一个进程在运行过程中就是需要不断的在内核态和用户态之间来回切换。
(4)Linux使用两级保护机制:0级供内核使用(内核空间中的程序),3级供用户程序使用(用户空间的程序)。
四、cpu的状态:
(正常情况下,一个处理器(cpu)运行一个进程。所以某个处理器在处理某个进程时,因进程处于不同的状态,所以就会处于不同的状态。)
1、运行于用户空间,执行用户进程:
正常程序是运行于用户空间中的。
2、运行于内核空间,处于进程上下文,代表某个特定的进程执行:
表示此时某个进程需要获取更多的操作权限去获取相关的数据,因此需要向系统申请进入内核空间,此时原来的进程传递给内核空间的跟当前进程相关的变量、参数、以及其它值,还有进程在内核中运行时,所产生的那些结果、数据,也就是当时的“周围环境”就称为进程上下文。如果进程离开内核,那么其进程上下文就会没有。如果当前进程操作完成,也就是获取到相对应的数据之后,就会从内核态切换回用户态,也就是回到用户空间。(此时会把刚才进程上下文中的相关信息返回给用户空间)
3、运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断:
当某个进程运行过程中,发生了中断的时候,比如软中断(缺页中断)时,它需要进行相对应的调度。由于它处于用户态,它没有那个权限,所以它需要向系统内核申请进入内核空间以获取更多的权限,系统同意之后,它便进入内核空间,此时它变处于内核态。那么这个时候:进入内核空间的进程传递给内核的与当前进程相关的信息,以及这个进程在内核中的运行过程的所有“周围的环境”就称为中断上下文。如果进程离开内核,那么其中断上下文就会没有(此时会把刚才中断上下文中的相关信息返回给用户空间)
五、中断:
1、定义:
就是进程运行过程中出现运行不下去的状况。
2、分类:
(1)硬中断:
硬中断可以理解为某个硬件有某个请求,此时硬中断可以直接中断CPU,让当前正在运行的进程处于暂停。此时CPU就需要调度一个进程来处理这个硬件请求。然后由于此时要操作的是硬件,只有进程处于内核态才有这个权限进行处理,所以此时这个就会将处理这个中断请求的内存调入内核空间,进行相应的处理,处理完成之后再返回用户态。然后处理完成之后,cpu有会去调度之前的程序了。
(2)软中断:
某个进程运行过程中出现运行不下去的状况。比如说由于计算机采用的虚拟存储技术,所以在运行过程可能会出现缺少某一页的情况,那么此时进程就需要把对应的页调度到内存当中进行运行,但是正常进程是处于用户空间中,它没有这个权限进行调度,所以发生了运行不下去的情况。此时就产生了软中断。此时就需要通过系统调用来进入内核空间处理中断,然后处理完成之后再返回用户空间。
3、解决中断:
通过某种方式进入内核空间交由内核来处理中断,处理完之后再返回用户空间即可正常运行之前的程序了。
参考资料:
附注:以上内容如觉不妥,欢迎交流。