本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、前言
通过《Java并发编程:虚拟内存之页面抖动》,我们了解了虚拟内存页面抖动和页面持久化的原理。而到了这里,我们对虚拟内存的所有内容都已讲解完毕。本文将接下来为大家讲解内核态和用户态的内容。
二、内核空间与用户空间
要了解内核态与用户态,就需要先了解下什么是内核空间和用户空间。
从之前的文章我们有了解过,操作系统为了安全考虑,会控制应用程序的权限,只有操作系统内核才拥有全部权限。应用程序如果要访问硬件,要通过操作系统内核才行。并且,操作系统将虚拟存储空间给划分为了2部分,一部分是内核空间,供操作系统内核使用;另一部分是用户空间,供应用程序使用。
现代操作系统的地址空间是基于虚拟地址空间机制设计的,与物理内存实际大小无关。例如:32位操作系统,其地址空间为2的32次方,即4G。对Linux系统来说,操作系统将最高位1G空间划分给了操作系统内核,剩下的3G则划分为用户空间,具体如下图:
三、内核态与用户态
大家知道,在应用程序运行时,操作系统会为其分配一块独有的虚拟内存空间,当应用程序运行在用户空间时,被称为用户进程;当应用程序通过系统调用调动操作系统内核,陷入内核空间时,被称为内核进程。
用户进程和内核进程并不是2个独立的进程,而是一个进程在不同运行时期的两种不同状态。
需要说明的是,用户进程无法操作内核空间数据,内核进程可以同时操作内核空间和用户空间的数据,所以当用户进程和内核进程要进行数据交换时,需要由内核进程先将数据从用户空间中读取到内核空间,操作完以后,再写回用户空间。
四、后言
既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~