内存分配方式

内存分配方式

1.基本概念

①内存管理的基本概念

虽然计算机硬件发展,内存容量在不断变大,但是也不可能将所有用户进程和系统所需要的程序和数据放入内存中,因此操作系统必须要对内存空间进行合理划分和有效动态分配。操作系统对内存的划分和动态分配,就是内存管理的概念。

②程序的连接和装入

创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:

  • 预编译、编译、汇编、链接将源代码转换成可执行程序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3eIPxFC-1658219812073)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658147675292.png)]

  • 由装入程序将装入模块装入内存中运行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kbct7Koi-1658219812074)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658148478394.png)]

③逻辑地址与物理地址

  • 逻辑地址(虚拟地址):经过预编译、编译、汇编后生成的各个模块(目标代码)都是从0号单元开始编址,这成为该模块的相对地址(逻辑地址)。在进程运行时,看到和使用的地址都是逻辑地址,用户和程序员只知道逻辑地址。

  • 逻辑地址空间(虚拟地址空间):连接程序将各个模块连接成一个完整的可执行目标程序时,依次按各个模块的相对地址构成统一的从0开始的逻辑地址空间(虚拟地址空间)。

  • 物理地址(绝对地址):进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。

④进程的内存映像(虚拟内存分布)

不同于放在硬盘上的可执行程序文件,当一个程序调入内存运行时,就构成了进程的内存映像。一般内存映像包括以下几个部分:

  • 内核区:主要包括进程控制块PCB。
  • 堆区: 动态申请内存用。
  • 栈区: 存放局部变量、函数参数值。
  • 数据区: 存放程序中已经初始化的全局变量和全局变量的一块内存区域。
  • 代码区: 存放执行代码的一段区域(只读)。
  • BSS区: 存放未初始化的全局变量和静态变量的一块内存区域。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lkoZiiD-1658219812075)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658149978620.png)]

2.内存的连续分配管理方式

连续分配方式是指为一个用户分配一个连续的内存空间,例如:用户需要100MB内存,就在内存中开辟一块连续的100MB空间供其使用。连续分配方式主要包括单一连续分配、固定分区分配和动态分区分配。

①单一连续分配

在此方式下,内存中仅有一道用户程序,被独占,不使用这种方法。优缺点如下:

  • 优点:简单、无外部碎片
  • 缺点:有内部碎片、内存利用率极低。

②固定分区分配

固定分区是最简单的一种多道批程序存储管理方式,它将用户内存空间划分为若干固定大小的区域,每个区域只装入一个进程。优缺点如下:

  • 优点:程序可能太大放入不了任何一个分区。
  • 缺点:程序太小独占一个分区,造成内部碎片。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0nzohKT-1658219812075)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658150805907.png)]

③动态分区分配

又称为可变分区分配,它是在进程装入内存时,根据进程的实际需要,动态地位置分配内存。使分区的大小正好适合进程的需要。优缺点如下:

  • 优点:一开始内存利用率较高。
  • 缺点:随着时间推移,内存中会产生越来越多的小的内存块,内存的利用率也随之下降,这些碎片成为外部碎片。可以这个问题,操作系统可以时不时地对进程进行碎片整理来解决。

3.基本分页存储管理

固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低,我们希望尽可能避免碎片地产生,这就产生了分页地思想:把主存空间划分为大小相等且固定地块,块相对较小,作为主存地基本单位。每个进程以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中地块空间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6vmQlUD-1658219812075)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658152234789.png)]

3.1基本概念

①易混淆

  • 进程中的块:页或页面
  • 页或页面的编号:页号
  • 内存中的块:页框或页帧
  • 页框的编号:块号
  • 页表:每个进程页号对应块号的映射表
  • 页表项:页号 + 块号
  • 逻辑地址:页号 + 页内偏移量
  • 页表寄存器: 存放页表在内存的地址及页表长度

②分页存储的地址结构

进程空间分为了一个个页,每个页存放了一些数据,用页内偏移地址表示。根据页号和业内偏移地址就能找到逻辑地址的每一个地址。因此,将分页存储管理的逻辑地址结构规定如下:

  • 0~11位为页内地址,即每页大小为4KB。
  • 12~31位位页号,即最多允许2^20页。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JpbK2Wzj-1658219812075)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658153353130.png)]

3.2基本地址变换机构

逻辑地址的页内偏移量直接映射为物理地址的块内偏移量,那么我们只需要找到逻辑地址的页号对应的物理地址的块号即可,我们就寻找页号对应页表项的快号即可。

为什么不直接访问页表?这是因为页表可能占用的内存空间比较大,一页大小只有4KB,而页表有2^20个页号,肯定放在不同的块里。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jtJyXkMn-1658219812076)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658216120631.png)]

3.3具有快表的地址变换机构

上述的分页管理方式存在两个主要问题:

  • 每次访问操作都需要进行逻辑地址到物理地址的转换,地址转换速度必须足够快,不然访存速度会降低。
  • 每个进程引入页表,用于存储映射机制,页表不能太大,否则内存利用率将会降低。

具有快表的地址变换结构可以解决第一个问题,大大减少访存次数

快表有以下特点:

  • 快表一般放在高速缓存中,访问速度很快。(内存包括主存和高速缓存
  • 快表和慢表是一起查询的,谁先查到对应块号用谁。
  • 由于局部性原理,快表命中率高达百分之90以上。

【注】局部性原理:程序在一段时间内访问的地址,可能集中在一定的范围之内。因为指令通常是顺序存放、顺序执行的,数据一般也是以数组、向量等形式存放。

  • 时间局部性:在程序中的某条指令一旦运行,不久后该指令可能再次执行。
  • 空间局部性:一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xWZv5ljH-1658219812076)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658216501328.png)]

3.4两级页表

单级页表的缺点:

  • 页表所占内存空间大
  • 没有必要整个页表常驻内存

因此,我们引入两级分页的思想,相当于构造一个页表的页表

在进程执行时,只需要将这一页的上一页页表调入内存即可,进程的页表和进程本身的页面可以在后面的执行中再调入内存。为了查询方便,顶级页表最多只能有一个页面。

3.5基本分段存储管理

分页管理方式是从计算机的角度考虑设计的,目的是为了提高内存的利用率,提升计算机的性能。而分段管理方式的提出则是考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长以及动态链接多方面的需要。

①分段

段式存储方式按照进程中的自然段划分逻辑空间。 如:用户进程由主程序段、两个子程序段、数据段、栈段组成,于是可以把这个进程分为5个段,每段从0开始编址,并分配一段连续的地址空间。(段内要求连续,段间不连续)。

②段表

类似页表,但是段表中每段的长度可能不一样,因此段表的内容如下:

在这里插入图片描述

③地址变址机构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JqLLHK01-1658219812077)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658218975608.png)]

3.6段页式

分页存储能有效提高内存利用率,分段存储管理能反应程序逻辑结构并有利于段的保护和共享。将这两种存储方式结合起来,便形成了段页式存储管理方式。

具体来说先按逻辑结构分段,再将每个段分页。

①段页式逻辑地址结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nHG3yOsE-1658219812077)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658219167425.png)]

②段页式系统地址变换机构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Y7jp0AU-1658219812077)(C:\Users\ThinkStation K\AppData\Roaming\Typora\typora-user-images\1658219784384.png)]

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyCharm的内存分配可以通过修改其配置文件来进行调整。根据引用和引用[2]的内容,你可以按照以下步骤来修改PyCharm的内存分配设置: 1. 找到PyCharm的内容管理设置文件。这个文件可以在PyCharm的安装目录中找到。你可以通过双击文件并用记事本打开来编辑它。 2. 在设置文件中找到关于内存分配的部分。 3. 可以根据你的需要,修改最小内存和最大内存的数值。通常,最小内存(-Xms)指定了PyCharm最初分配内存大小,而最大内存(-Xmx)指定了PyCharm可以使用的最大内存大小。 4. 修改完毕后,保存设置文件并重启PyCharm,修改的内存分配设置将会生效。请确保在修改之前备份原始的设置文件,以防出现错误。 需要注意的是,PyCharm的内存分配上限和下限是受限于你电脑硬件的基础配置的。修改内存分配设置只是解除了PyCharm默认的内存限制,让其能够充分发挥电脑的性能。 希望这些信息能够帮助你设置PyCharm的内存分配。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解Pycharm出现out of memory的终极解决方法](https://download.csdn.net/download/weixin_38641150/14850621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PyCharm2021-2022版本如何修改配置内存大小?解决PyCharm内存卡死的问题(保姆级图文并茂)](https://blog.csdn.net/u011027547/article/details/122765071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值