Java并发编程:内核态与用户态详解一

77 阅读2分钟

src=http___i0.hdslb.com_bfs_article_807aa46619617caf3a3ea976300b575abae0676c.png&refer=http___i0.hdslb.webp 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、前言

       通过《Java并发编程:虚拟内存之页面抖动》,我们了解了虚拟内存页面抖动页面持久化的原理。而到了这里,我们对虚拟内存的所有内容都已讲解完毕。本文将接下来为大家讲解内核态和用户态的内容。

二、内核空间与用户空间

       要了解内核态与用户态,就需要先了解下什么是内核空间和用户空间。
       从之前的文章我们有了解过,操作系统为了安全考虑,会控制应用程序的权限,只有操作系统内核才拥有全部权限。应用程序如果要访问硬件,要通过操作系统内核才行。并且,操作系统将虚拟存储空间给划分为了2部分,一部分是内核空间,供操作系统内核使用;另一部分是用户空间,供应用程序使用。
       现代操作系统的地址空间是基于虚拟地址空间机制设计的,与物理内存实际大小无关。例如:32位操作系统,其地址空间为2的32次方,即4G。对Linux系统来说,操作系统将最高位1G空间划分给了操作系统内核,剩下的3G则划分为用户空间,具体如下图:

230758r11i112ioplavz8l.jpg

三、内核态与用户态

       大家知道,在应用程序运行时,操作系统会为其分配一块独有的虚拟内存空间,当应用程序运行在用户空间时,被称为用户进程;当应用程序通过系统调用调动操作系统内核,陷入内核空间时,被称为内核进程。
       用户进程和内核进程并不是2个独立的进程,而是一个进程在不同运行时期的两种不同状态。
       需要说明的是,用户进程无法操作内核空间数据,内核进程可以同时操作内核空间和用户空间的数据,所以当用户进程和内核进程要进行数据交换时,需要由内核进程先将数据从用户空间中读取到内核空间,操作完以后,再写回用户空间。

四、后言

       既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~