浅析Golang的内存管理(上篇):操作系统内存管理

文章目录

  • 计算机存储体系介绍
  • 虚拟存储器
  • 内存管理单元与页式存储管理
  • CPU发起一次访存的全过程

 

一、计算机存储体系介绍

   从计算机的组成角度来看,计算机的存储分为,寄存器-高速缓存-主存储器(泛指内存)-本地存储(磁盘)-外部存储(光盘、云盘等),由下到上,运行速度越来越快,存储空间越来越小,费用越来越高(如图1)。而对于使用者来着,我们肯定希望能用最少的成本,尽可能用最快、空间最大的存储设备。因此,就引出了操作系统层次性存储体系,根据局部性原理(时间局部性&&空间局部性)和对应的汰换算法,将最常用的信息存储在上层的存储设备,按照一定的策略更新上层存储设备的内容。

   时间局部性:程序中某个(内存对象)数据被访问,近期很可能会被再次访问。

   空间局部性:程序中某个(内存对象)数据被访问,与其相邻的(内存对象)数据近期很可能也会被访问。

(图1)

 

   进程是操作系统进行资源分配调度的最小单元,一个进程具有操作系统分配给它的一块逻辑上连续的虚拟内存空间。我们编写的程序,运行后就作为一个进程受操作系统的管理和调度,其相关的变量,函数库,开辟的空间都在这个进程的内存中,所以一个进程可使用的内存大小,就成了影响这个进程执行效率,可用性重要因素。但是我们应该给这个进程分配多少内存才合适呢?假如过大,则进程宿主机可以同时运行的进程数就受到限制,也容易造成内存空间的浪费;假如过小,则内存空间不满足进程需求,造成进程运行不稳定。所以,合理的分配和高效的利用内存,就成了对操作系统的核心诉求之一。

二、虚拟存储器

  对于计算机本身来说,内存就是真实的硬件存储设备的容量,即内存条。在操作系统的角度上,对这部分容量用物理内存这个名词来定义。对物理内存会有一个布局,以一个数组的方式(如图2)。数组的每一项都被叫做一个物理内存地址,这个物理内存地址对应着真实的物理内存,且物理内存地址是连续的, 假如要取一段内存空间,则可以根据初始物理内存地址附加上一个偏移量来得到。

(图2)

  进程在运行的不同时间,不同状态所需要的内存空间大小是变化的,所以操作系统只能按照进程所需内存的最大值来分配,这样就难免造成了内存浪费。假如给多个进程分配同一块内存空间,就又难免造成了内存访问冲突的问题,使得进程效率低下。针对这些问题,操作系统使用虚拟存储器来解决上述问题。

  虚拟存储便是在物理真实存储的基础上,构建一套逻辑的存储空间以供进程使用,由操作系统对虚拟存储和物理存储之间构建映射关系,管理真实的物理内存分配,以达到提高利用率的效果。进程从这个虚拟存储空间的内存地址获取数据,操作系统将这个虚拟地址转变成实际的物理地址,从真实的物理内存上加载数据。这样子,对于每个进程来讲,它自己独享了一块连续的存储空间,也无需考虑访问冲突这件事。另外,在物理内存空间不足时,操作系统还会虚拟化磁盘空间作为虚拟存储空间(如图3)。

(图3)

 三、内存管理单元与页式存储管理

  操作系统应该如何去映射和管理虚拟存储和物理真实存储的关系呢?这其中就要用到内存管理单元页表进行虚拟内存的管理,接下来对它们逐一介绍。

  • 内存管理单元(MMU):虚拟内存管理的核心硬件,用来管理虚拟内存地址到物理内存地址的映射。操作系统通过页,页表,页表条目来管理虚拟内存, 而作为管理内存的基本单位。
  • :管理内存的基本单位;操作系统将内存划分固定大小的块,通常大小为4KB、8KB;基于物理内存的块叫做物理页,而基于虚拟内存的块叫做虚拟页。每个进程自己的虚拟地址空间,被分为若干页。
  • 页表:页的集合,即基于页的一个数组,用于管理虚拟内存和物理内存之间的映射关系,每个进程有自己的页表。这个数组中的每一个元素为一个页表条目(Page Table Entry 简称PTE)
  • 页表条目:页表中的单个条目,每个页表项对应一个虚拟页,且保存了虚拟页到物理页的映射信息(和一些其他的权限、状态信息,如是在内存还是磁盘的标识位,该页是否允许读写操作,该页是否是用户/内核态都能访问等)。页、页表条目、页表之间的关系如(图4);PTE内部构造如(图5)。

    (图4)(图5)

四、CPU发起一次访存的全过程

  前文说过,内存管理单元(MMU)是虚拟内存管理的核心硬件,用来管理虚拟内存地址到物理内存地址的映射。进程要访问一个内存地址时,CPU将虚拟地址给到MMU,MMU去页表中查询虚拟地址对应的物理地址;因为页表本身也需要空间存储,假如MMU每次都去主存中查找页表会拖慢整次存储访问的速度,所以操作系统会在高速缓存区中维护了一个TLB(Translation Lookaside Buffer),TLB中保存了部分虚拟页到物理页的映射,MMU查询页表时会优先访问TLB,TLB未命中虚拟地址的页号时,才会去主存的进程页表中查询。整个访存过程如(图6)所示。

  • 进程A要访问某个变量,CPU生成访存指令,访问的虚拟地址为 0xABCDEF01

  • MMU 查询TLB,查看虚拟地址0xABCDEF01是否对应物理地址,假如有,直接使用TLB记录的物理地址

  • MMU查询页表,从页表中查询虚页号对应的物理页号

  • 根据物理页号和虚拟地址偏移量,找到组合找到对应物理地址

  • 将本次查询页表的虚页号实页号映射关系更新至TLB  

  以上便是操作系统对进程内存管理的一些基本概念,有了这些基础概念做铺垫后,一起探讨下go runtime是如何管理进程内存的。

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVN介绍与安装

一、svn介绍 1、svn是一个版本控制工具; -svN是subversion的简称:是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 -SVN的作用:在项目组当中对需求规格说明书、测试用例、…

提示词装饰器:一种改善AI生成回复的简单方式

通过结构化提示解锁AI的全部潜力 人工智能是一种非常强大的工具,但其回应的质量往往取决于我们与其沟通的有效性。如果你曾经在从AI模型获得精确且结构良好的回答时遇到困难,你并不孤单。许多用户在提示制定中面临不一致、模糊的回应或过多的试验和错误。那么,是否有一种方法…

信息安全项目管理工具:等保2.0要求的3类检测系统

随着信息技术的飞速发展,信息安全问题日益凸显。等保 2.0 作为我国网络安全领域的重要标准,对信息安全提出了更高的要求。在等保 2.0 的要求下,信息安全项目管理工具中的 3 类检测系统发挥着至关重要的作用。本文将详细介绍这 3 类检测系统,帮助读者更好地了解信息安全领域…

[c++算法] 树的直径,包教包会!

哈喽大家好,我是 doooge。今天我们要将数论中的一个算法-树的直径。 $$\Huge 树的直径 详解$$ 1.树的直径是什么 这是一棵图论中的树:这棵树的直径就是这棵树中最长的一条简单路径。 2.树的直径怎么求 2.1暴力算法 直接对每个点进行 DFS,找到每个点离最远的点的距离,最后求…

图吧工具箱PC电脑工具(图拉丁吧硬件检测工具箱) v2025.01 中文绿色便携版

点击上方蓝字关注我 前言 图吧工具箱(大家通常叫它图拉丁吧硬件检测工具箱)是一个完全免费、开源、没有广告的硬件检测工具集合。这个工具箱是专门为喜欢自己动手组装电脑(DIY)的朋友们,特别是图钉社区的成员们制作的。里面包含了好多常用的硬件测试和检测小工具,特别适合…

在Windows上安装UOS打印机

因自己放在办公室发挥余热的Windows电脑即将寿终正寝,所以这两天试着将包括文件打印在内的基础网络服务逐渐转移到UOS主机上。 参照官方教程一通操作,Windows始终在添加打印机页面找不到同个局域网下的UOS主机,点击疑难解答则提示“该设备或资源未设置为接受端口“文件和打印…

是不是长大之后便很难再专注了?

写在前面 1100 字 | 专注 | 思考 | 逆向思维 正文“上课要专心。”我们似乎总能听见大人们这样要求我们。不过坦白地说,我真正体验过全神贯注的时刻,就那么一两次。看起来这篇文章,似乎又要大吐苦水,谈论生活怎样艰辛困苦,各种科技产品怎样将人碎片化之类。并不是。 恰恰相…

2025牛客寒假算法基础集训营3补题笔记

比赛链接 题目难度顺序大致为:\(A、M、F、L、C、\) \(easy\):\(A、M、F、L、C\) 太难了这场。。。E题卡了3个多小时。。。 A.智乃的博弈游戏 题意 有\(n\) 个石头,两人轮流取石头。每次能取小于石头个数且与石头个数互质的数量,当某人取时只有一颗石头则获胜。问先手是否可…

HTTPS 与 HTTP 的区别在哪?

HTTP与HTTPS作为互联网数据传输的核心协议,其通信机制与安全特性深刻影响着现代网络应用的可靠性与用户体验。它们有什么不同?HTTPS到底安全在哪里?HTTP与HTTPS作为互联网数据传输的核心协议,其通信机制与安全特性深刻影响着现代网络应用的可靠性与用户体验。本文将解析两者…

Featurewiz-Polars:一种强大且可扩展的特征选择解决方案,适用于XGBoost

前言:“Featurewiz-Polars”是一个用于特征工程的 Python 库,结合了特征选择和特征生成的功能。它基于“Polars”,这是一个高性能的 DataFrame 库,用于处理大型数据集,具有类似 Pandas 的 API 但更高效,尤其在处理大数据时。Featurewiz-Polars 专注于通过自动化方式,快速…

USACO2025FEB Gold T1 T2 题解

T3 等会补USACO2025FEB Gold 题解 赛时先看 T1,感觉很可做,推了一下发现能把问题转成在基环树上 dp。但我一下子没太想明白怎么解决“在基环树上找环”这个世纪难题,大概在一个小时 20 分钟的时候写完代码(值得一提的是这次罕见地一次就过了编译),交上去发现 WA 了大约一…

Windows10/Windows11系统快速安装杜比音效经典版教程指南

点击上方蓝字关注我 前言 在当今的数字娱乐时代,音频质量已经成为我们追求的重要部分。杜比音效,凭借其卓越的音质和沉浸式的听觉体验,成为了众多音频爱好者的首选,安装杜比音效经典版,提升电脑音频体验。无论是对于追求极致音质的音乐发烧友,还是渴望在观影和游戏时获得…