操作系统:详解物理内存与虚拟内存,用户空间与内核态空间

news2025/2/8 10:34:31

目录

0、基础知识:磁盘与物理内存

1、 通过虚拟地址访问物理内存

1.1 虚拟内存:

1.2 虚拟内存的优势:

1.3 举例说明:

 2、用户空间与内核态空间

2.1 为什么进程的寻址空间要划分为用户空间与内核态空间两部分??不划分呢?

2.2 划分这两部分空间后,用户的IO过程是什么?


0、基础知识:磁盘与物理内存

        磁盘是一种永久性存储介质,通常采用磁性材料制成。它的优点在于容量大、价格低廉、数据可以长期保存等特点。硬盘、光盘、U盘等都属于磁盘存储介质。磁盘上的数据需要通过读写头进行读写,并且相对于内存来说访问速度较慢,因此一般主要用来存储文件和数据,如操作系统、应用程序和用户数据等。

        物理内存(Physical Memory)也称为随机存储器(Random Access Memory,RAM),是计算机系统中的主要内存储器,具有读写速度快、能够直接访问等特点。物理内存是由存储芯片组成,可以在短时间内存取任何一块数据。它是计算机系统中的主要内存储器,用于存储当前正在运行的程序和数据,以便CPU随时读取和计算。物理内存的容量通常比磁盘小得多,但运行速度更快。计算机启动时,操作系统会把部分程序和数据加载到物理内存中,使其能够被CPU快速读取和执行。

        总的来说,磁盘能够保存更多数据,但读取慢,而内存反之。
        因此在操作数据时经常先读入内存在进行操作,但实际上, 电脑内的应用程序和内核空间都无法直接访问物理内存,原因如下:

1、 通过虚拟地址访问物理内存

        即使应用程序或内核空间已经加载到内存中,它们依然无法直接访问物理内存,而必须通过虚拟地址进行访问。这是因为:操作系统需要保证每个进程之间访问内存的隔离性,以避免恶意进程篡改其他进程的内存数据。因此,操作系统会对每个进程的内存操作进行监控和管理,保证每个进程只能访问自己的虚拟地址空间。(因为俩字安全!)

 1.1 虚拟内存:

        简言之,将一部分硬盘空间作为虚拟内存,让应用程序认为自己有更多的内存可用。

        虚拟内存是在磁盘上的一部分空间。当物理内存不足时,操作系统会将不常用的页(Page)或程序暂停使用的页从物理内存中换出(Swap out)到硬盘上的虚拟内存中,以释放空间供活跃进程(Active Process)使用。反之,当一个进程需要访问物理内存中没有被装入的页时,操作系统就会将这些页从磁盘上读取到物理内存中,供该进程进行访问和使用。

        通常,每个进程都拥有自己的虚拟内存空间,该空间被分为多个固定大小的页(Page),与物理内存相对应。当一个进程要访问某个页时,操作系统会将该页从磁盘中装载到物理内存中,并返回给该进程一个指向该页在物理内存中位置的指针(虚拟地址),使得进程可以像访问物理内存一样访问虚拟内存。

1.2 虚拟内存的优势:

(1)内存的动态分配和管理:进程只需要访问部分虚拟内存,而不需要将整个地址空间全部加载到物理内存中。当物理内存不足时,操作系统会选择一些不活跃的页(即长时间没有被访问过的页)进行置换,将其从物理内存中移出,并将需要访问的新页从磁盘中读入到物理内存中,从而实现了内存的动态分配和管理。

(2)虚拟内存的另一个好处是,它使得进程可以访问不连续的物理地址空间,因为虚拟地址是由操作系统进行映射,与实际物理地址没有直接的关系。这样就允许了操作系统对内存地址的动态分配和管理,从而提高了系统的可靠性、安全性和灵活性。

1.3 举例说明:

        比如一个进程要读取它内存中的变量 var,var 的虚拟地址为 0x1000,而它对应的物理地址是 0x2000。这时候,操作系统需要将进程中的虚拟地址 0x1000 映射到物理地址 0x2000,以便进程能够顺利地访问该变量。

        当进程访问一个虚拟地址时,CPU 会发起一个页表查找请求,将该虚拟地址转换成对应的物理地址,然后再进行访问。页表则是一张表格,记录了虚拟地址和物理地址之间的对应关系,由操作系统维护并根据需要进行更新。这是由CPU自动完成的。

 2、用户空间与内核态空间

2.1 为什么进程的寻址空间要划分为用户空间与内核态空间两部分??不划分呢?

        我们知道,计算机硬件包括,如cpu,内存,网卡等等,内核(通过寻址空间)可以操作硬件的,但是内核需要不同设备的驱动,有了这些驱动之后,内核就可以去对计算机硬件去进行 内存管理,文件系统的管理,进程的管理等等。
        当我们想要用户的应用来访问,计算机就必须要通过对外暴露的一些接口,才能访问到,从而简介的实现对内核的操控,但是内核本身上来说也是一个应用,所以他本身也需要一些内存,cpu等设备资源,用户应用本身也在消耗这些资源,如果不加任何限制,用户去操作随意的去操作我们的资源,就有可能导致一些冲突,甚至有可能导致我们的系统出现无法运行的问题,因此我们需要把用户和内核隔离。
        总结:为了安全与稳定。

2.2 划分这两部分空间后,用户的IO过程是什么?

        Linux系统为了提高IO效率,会在用户空间和内核空间都加入缓冲区buffer

        写数据时,要把用户缓冲数据拷贝到内核缓冲区,然后写入设备

        读数据时,要从设备读取数据到内核缓冲区,然后拷贝到用户缓冲区

        针对这个操作:我们的用户在写读数据时,会去向内核态申请,想要读取内核的数据,而内核数据要去等待驱动程序从硬件上读取数据,当从磁盘上加载到数据之后,内核会将数据写入到内核的缓冲区中,然后再将数据拷贝到用户态的buffer中,然后再返回给应用程序,整体而言,速度慢,就是这个原因,为了加速,我们希望read也好,还是wait for data也最好都不要等待,或者时间尽量的短。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

装饰者模式(十一)

请相信自己,请再次相信自己,请一定要相信自己 上一章简单介绍了桥接模式(十), 如果没有看过, 请观看上一章 一. 装饰者模式 引用 菜鸟教程里面的装饰者模式介绍: https://www.runoob.com/design-pattern/decorator-pattern.html 装饰器模式&#xff0…

什么是开源工作流平台?

在办公职场中,有没有一款软件是实现提质增效的平台?如果让办公实现流程化管理,引用什么平台产品较为合适?低代码开发平台是近些年较为流行的办公软件平台,可以有效管理数据资源,制作表格可视化操作更简便&a…

Qt Quick系列(6)—多风格UI页面

🚀作者:CAccept 🎂专栏:Qt Quick 文章目录 前言桌面版本的UI界面代码示例相关知识点 移动版风格的UI界面代码示例 嵌套页面代码示例相关知识点 并排页面代码示例相关知识点 前言 Qt Quick控件用于创建由标准化组件(…

OpenCV迭代去畸变undistortPoints 与vins的迭代不同 vins前端与imu预积分

OpenCV去畸变undistortPoints原理解析 不动点迭代法—单变量非线性方程近似根matlab求解 淦VINS-MONO源码 03–openCV与VINS中去畸变方法的不同 这里用的方法和openCV不同,假设现在求A点的去畸变坐标,那么我们将A的坐标直接代入畸变模型中,求…

Pytest教程__用例执行顺序(5)

在unittest中,测试用例的执行顺序与测试用例的名称有关,按照名称的ascii码排序的,并不是按照用例的编写顺序执行的。 pytest默认是按用例的编写顺序执行的 我们可以通过第三方包 pytest-ordering 来自定义我们用例的执行顺序。 方法是使用装…

14. 100ASK-V853-PRO开发板 ADB测试指南

100ASK-V853-PRO开发板 ADB测试指南 硬件要求: 100ASK-V853-PRO开发板 软件要求: 固件下载地址:链接:百度网盘 提取码:sp6a 固件位于资料光盘中的10_测试镜像/4.测试ADB/v853_linux_100ask_uart0.img 1.硬件连接 …

JMeter循环读取CSV文件实现接口批量测试

目录 前言: 1、添加线程组 2、添加HTTP信息头管理器 3、添加HTTP请求 4、添加察看结果树 5、添加循环控制器 6、在循环控制器下添加CSV配置文件 7、其他配置文件需要修改写入形式 8、执行CSV文件,查看结果 前言: JMeter可以通过CSV…

安装Canal

安装和配置Canal 安装和配置Canal1.开启MySQL主从1.1.开启binlog1.2.设置用户权限2.安装Canal2.1.创建网络2.3.安装Canal安装和配置Canal 下面我们就开启mysql的主从同步机制,让Canal来模拟salve 1.开启MySQL主从 Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主…

不同等级的高速PCB工程师,薪资差距有多大?

高速PCB设计在现代电子领域中扮演着很重要的角色,而高速PCB工程师的技能水平和经验对于项目的成功至关重要,下面本文将从地区分布、薪资水平、工作内容等多方面讨论对比不同等级的高速PCB工程师。 NO.1 初级高速PCB工程师 ①薪资水平 初级高速PCB工程师…

用代码实现一个简单计算器

作者主页:paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《C语言》专栏,本专栏是针对于大学生,编程小白精心打造…

管理类联考——逻辑——知识篇——第四章 联言、选言(且、或)(5题,必考)

第四章 联言、选言(且、或)(5题,必考) 一、联言命题 联言命题是反映事物的若干种情况或者性质同时存在的复合命题 1.常见表达形式:A且B⟺即A又B⟺AB⟺虽然A但是B(语气强调B,逻辑是…

配置GitLab账号登录SonarQube

gitlab账号集成到sonarqube 创建个人访问令牌 确认之后可获得 来到sonarqube界面,创建gitlab配置 gitlab地址后面加上/api/v4 将访问令牌粘贴过来 保存即可 回到gitlab添加应用,名称随意最好有意义一眼知道是干嘛的 URI是sonarqube地址/oauth2/callback…

JavaSE进阶——网络编程

文章目录 前言一、网络编程二、通信1、两个重要的要素2、通信协议 三 、Socket四、基于TCP的网络编程1、单向通信1.1 服务端1.2 客户端 2、双向通信2.1 服务端2.2 客户端 3、传输对象3.1 服务端3.2 客户端 4、保持通信4.1 服务端4.2 客户端 五、基于UDP的网络编程1、单向通信1.…

软件开发流程管理中的6个重点

1、需求的确定 充分了解用户真实需求,与用户保持沟通交流;需求文档需详尽、准确,明确功能和客户期望;确保需求的合理性、完整性和可行性,并对需求进行优先级排序。 软件开发流程管理中的6个重点 2、设计原则 设计包括概…

【机器学习】一个简单的神经网络例子教你理解前向传播

在开始这个例子前,希望你已经了解了神经网络的相关内容,可以参见如下文章 https://blog.csdn.net/weixin_45434953/article/details/131048661 在计算机中,有一种很基础的运算称之为与运算,这是一个二元运算符, x 1 &…

web前端-TypeScript学习

web前端-TypeScript学习 TypeScript 介绍TypeScript 初体验安装编译TS的工具包编译并运行TS代码 TypeScript 常用类型类型注解常用基础类型原始类型数组类型类型别名函数类型对象类型接口元祖类型推论类型断言字面量类型枚举any类型typedof TypeScript 高级类型class类class的基…

6.Opencv-图像腐蚀、膨胀(开运算,闭运算)

1.图像腐蚀 这个操作会把前景物体的边界腐蚀掉。这是怎么做到的呢?卷积核沿着图像滑动,如果与卷积核对应的图像的所有像素值都是1,那么该区域的所有像素值就是1,否则为0。用于去除白噪声和断开两个连在一起的物体等。 语法&…

剑走偏锋,无头浏览器是什么神奇的家伙

大家好,我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态。 我的个人网站:古时的风筝 浏览器是再熟悉不过的东西了,几乎每个人用过,比如 Chrome、FireFox、Safari,尤其是我们程序员&a…

ASEMI代理台湾光宝LTV-3120光耦合器中文资料

编辑-Z LTV-3120是一种高性能光耦,由于其可靠性、效率和多功能性,在各种应用中都很受欢迎。本文将全面了解LTV-3120其功能、应用以及它如何改进您的电子设计。 什么是光电耦合器? 光耦,也称为光隔离器,是一种利用光在…

时序数据库的流计算支持

一、时序数据及其特点 时序数据(Time Series Data)是基于相对稳定频率持续产生的一系列指标监测数据,比如一年内的道琼斯指数、一天内不同时间点的测量气温等。时序数据有以下几个特点: 历史数据的不变性数据的有效性数据的时效…