操作系统内存管理-组织方式

news2024/11/19 18:22:19

目录

前言

数据单位

位(bit)

字节(byte)

 

组织方式

连续分配方式

非连续分配方式

 段页式存储管理

 虚拟内存管理

 NUMA(Non-Uniform Memory Access)架构下的内存管理

逻辑地址与物理地址的映射关系

逻辑地址(内存地址)


前言

        操作系统采用多种内存管理方式以适应不同场景的需求,不断优化内存资源的使用效率和程序运行性能。被人熟悉的2种方式是段页式存储管理虚拟内存管理.

数据单位

1byte = 8 bits

1GB = 1,024MB,而1MB = 1,024KB,1KB = 1,024字节

位(bit)

  • 位是计算机系统中最小的数据单位,表示二进制数的一个0或1。
  • 在计算机内部所有的信息都是以二进制的形式存储和处理的,因此所有数据最终都可以分解为一系列的比特位。

字节(byte)

  • 字节是计算机存储的基本计量单位,通常情况下1个字节等于8个比特(1 byte = 8 bits)。
  • 字节被广泛用于衡量文件大小、内存容量等,它是大多数现代计算机体系结构设计的基础单元,能够存储一个ASCII字符或者其他特定编码方案下的字符。

 

组织方式

连续分配方式

  • 单一连续分配:早期的简单系统中,为每个进程分配一块连续的内存空间。
  • 固定分区分配:将内存划分为多个固定大小的分区,每个分区只能容纳一个进程。存在内部碎片问题。
  • 动态分区分配(可变分区):根据进程需要动态地创建和释放分区,但会导致外部碎片。

非连续分配方式

  • 分页存储管理:将内存逻辑上划分为大小相等的页面,并将进程地址空间划分为同样大小的页,通过页表进行逻辑地址到物理地址的映射,有效解决了外部碎片问题。
  • 分段存储管理:按照程序的逻辑结构(如代码段、数据段、堆栈段等)划分内存,形成具有不同长度的段,通过段表实现逻辑地址到物理地址的转换,有助于信息共享和保护,但可能产生内部碎片。

 段页式存储管理

结合了分段和分页的优点,先将进程逻辑地址空间划分为若干个逻辑段,每个段内再细分成固定大小的页。在内存中,每段都有其对应的页表,这样既可以按逻辑关系分配内存,又可以避免较大的外部碎片。

 虚拟内存管理

虚拟内存技术允许每个进程拥有独立且大于实际物理内存的地址空间。当进程的部分数据或代码不在物理内存时,可通过硬件和操作系统的配合,暂时调用硬盘上的交换空间来模拟更大的内存容量。主要利用了页式或段页式的地址转换机制,同时引入了页面替换策略以及缺页中断处理机制。

 NUMA(Non-Uniform Memory Access)架构下的内存管理

 在多处理器系统中,不同的处理器访问内存的不同部分所需的时间是不同的。NUMA架构下,操作系统需要对内存进行节点化管理,优化跨节点的内存访问性能,确保数据放置策略与处理器亲和性相符。

逻辑地址与物理地址的映射关系

逻辑地址(内存地址)

分页内存管理机制

逻辑地址=页号+页内偏移量

举例:假设一个32位的操作系统为每个进程提供了4GB(即2^32字节)的虚拟地址空间,并且每一页大小为4KB(即2^12字节)。

答案:逻辑地址为  0x12345678   页号:0x001234 (高20位) 页内偏移量0x5678 (低12位)

解析:限定条件为①在32位操作系统中,CPU一次可以处理32位(即4字节)的数据,并且它的寻址能力限制为2^32个内存地址.②页大小=4kb(2^12字节) ③页数*页大小=4GB(2^32)

推断出理论页号最大为2^20. 页号长度为20位. 

8位一组(一个字节),所以高20位,我们选取左边的20位;低12位就是选取右边的连续12位

在二进制表示下,0x12345678 转换为二进制是 0001 0010 0011 0100 0101 0110 0111 1000

它代表的是第 0x001234个页面的第 0x5678 字节的位置。


分段内存管理机制

逻辑地址=段号+段内偏移量

举例:假设一个计算机系统的内存管理采用段式存储方式,并且每个逻辑地址由16位表示,其中前8位用于存储段号,后8位用于存储段内偏移量。

 有一个逻辑地址 0x2345(十六进制),其具体结构如下:
段号(Segment Number):高8位 0x23
段内偏移量(Offset):低8位 0x45

这意味着这个逻辑地址指向的是段号为 0x23 的段内的偏移量为 0x45 的存储单元。操作系统通过查询段表,根据段号找到对应的段描述符,获取该段的基址(Base Address),然后将段内偏移量与基址相加,得到实际访问的物理地址。


段页式内存管理机制

逻辑地址=段号+页号+页内偏移量

举例:有一个逻辑地址 0x12345678(这里用下划线分隔以示区分),其具体结构如下:
段号(Segment Number):高10位 0x1234
页号(Page Number):中间10位 0x5678 的高位部分 0x56
页内偏移量(Offset):中间10位 0x5678 的低位部分 0x78
这个逻辑地址指向的是段号为 0x1234 的段内的第 0x56 号页面中的偏移量为 0x78 的存储单元。 

流程:操作系统首先会根据段号查询段表得到该段的页表起始地址,然后结合页号从页表中获取相应的物理页框号,最后将物理页框号与页内偏移量相加,得到实际访问的物理地址。 

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

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

相关文章

云计算 3月8号 (WEB服务及Apache 服务的搭建与配置——基于域名 端口 Ip多方式访问)

1、WEB服务简介 # 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 - WEB服务器一般指网站服务器,可以向浏览器等Web客户端提供网站的访问,让全世界浏览。 - WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 …

【Logback】Logback 中的 Appenders

目录 1、什么是 Appenders? 2、解说 AppenderBase.doAppend() 方法 3、logback-core 模块中的 Appenders (1)OutputStreamAppender (2)ConsoleAppender (3)FileAppender (4&a…

Linux服务器安装jdk

背景: 安装JDK是我们java程序在服务器运行的必要条件,下面描述几个简单的命令就可再服务器上成功安装jdk 命令总览: yum update -y yum list | grep jdk yum -y install java-1.8.0-openjdk java -version 1.查看可安装版本 yum list | grep jdk 2.如果查不到可先进行 yum upd…

积鼎科技两款国产流体仿真软件入选《上海市工业软件推广目录》!

为落实《上海市促进工业软件高质量发展行动计划(2021-2023年)》,聚焦重点行业和领域痛点问题,提升关键软件技术创新和供给能力,推动工业软件产品应用和产业生态建设更好支撑全市制造业数字化转型,《2023年上海市工业软件推荐目录》…

react + antdesign table组件合并行,展开子表格

假如你有这样的一个数据: [{"bigClass":"吃的","smallClass":"水果","item":"苹果"},{"bigClass":"吃的","smallClass":"水果","item":"香蕉…

knife4j生产环境禁止打开页面

Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案,官网地址:Knife4j 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j 考虑到安全性问题,在实际服务部署到生产环境后就需要禁用到swagger页面的展示,这个时候只需…

js【详解】event loop(事件循环/事件轮询)

event loop 是异步回调的实现原理 js 代码的执行过程 从前到后,一行一行执行如果某一行执行报错,则停止下面代码的执行先把同步代码执行完,再执行异步 event loop 图解 以下方代码为例: 第1步 将第 1 行代码放入调用栈 将要执行第…

RabbitMQ的Windows版安装教程

文章目录 前言一、Windows安装RabbitMQ总结 前言 曾经写过一篇关于RabbitMQ的Ubuntu安装教程(http://t.csdnimg.cn/5CYfC),当时使用的是Docker将RabbitMQ安装到虚拟机上,但是有很多小伙伴问Windows上如何进行安装RabbitMQ&#x…

【lua】lua内存优化记录

这边有一个Unity项目用的tolua, 游戏运行后手机上lua内存占用 基本要到 189M, 之前峰值有200多。 优化点1 加快gc频度: 用uwa抓取的lua内存, 和unity的mono很像,内存会先涨 然后突然gc一下,降下来。 这样…

BUUCTF-DASBOOK1

[第一章][1.3.5 案例解析][极客大挑战 2019]Http 1 1.启动靶机 2.查看源代码,发现有链接 3.点击链接,跳转页面有提示,意思是:它并不来自于https:/Sycsecret.buuoj.cn 打开hackbar,如图所示,然后执行 4.得到…

【redis】模拟抢红包

1.使用的数据结构 思路是需要将指定数量的红包提前压栈,然后当用户来“抢红包”的时候,将红包取出来。 规定每个用户只能抢一次,并且最小金额是1块钱。 选择redis中的list结构模拟。 2.模拟发红包。 GetMapping("/give-red-packets&…

函数指针的理解与使用

函数指针 首先看一段代码&#xff1a; #include <stdio.h> void test() { printf("hehe\n"); } int main() { printf("%p\n", test); printf("%p\n", &test); return 0; } 输出的是两个地址&#xff0c;这两个地址都是 test …

ceph跨集群迁移ceph pool rgw

1、跨集群迁移ceph pool rgw 我这里是迁移rgw的pool l老环境 [rootceph-1 data]# yum install s3cmd -y [rootceph-1 ~]# ceph config dump WHO MASK LEVEL OPTION VALUE RO mon advanced au…

【计网】TCP协议安全与风险:深入探讨网络通信的基石

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 &#x1f310;前言 &#x1f512;正文 TCP (Transmission Control Protocol): UDP (User Datagram Protocol): HTTP (Hypertext Transfer …

基于禁忌搜索算法(TS)的TSP(Python实现)

本篇文章是博主在最化优学习、人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在最优化算…

MRI基础--k空间

k空间定义 k空间是表示 MR 图像中空间频率的数字数组。 k空间物理意义 k 空间的单元通常显示在主轴 kx 和 ky 的矩形网格上。 k 空间的 kx 和 ky 轴对应于图像的水平 (x) 和垂直 (y) 轴。然而,k 轴表示 x 和 y 方向上的空间频率而不是位置。 k 空间中的各个点 (kx,ky) 与图像…

Python 映射函数map()详解

一、映射函数定义 它用于对容器中的元素进行映射&#xff08;或变换&#xff09; 二、映射函数语法 map(function, iterable) function&#xff1a;一个提供变换规则的函数&#xff0c;返回变换之后的元素iterable&#xff1a;一个或多个序列&#xff08;可迭代对象&#xff09…

005-事件捕获、冒泡事件委托

事件捕获、冒泡&事件委托 1、事件捕获与冒泡2、事件冒泡示例3、阻止事件冒泡4、阻止事件默认行为5、事件委托6、事件委托优点 1、事件捕获与冒泡 2、事件冒泡示例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /…

【嵌入式高级C语言】9:万能型链表懒人手册

文章目录 序言单向不循环链表拼图框架搭建 - Necessary功能拼图块1 创建链表头信息结构体 - Necessary2 链表头部插入 - Optional3 链表的遍历 - Optional4 链表的销毁 - Necessary5 链表头信息结构体销毁 - Necessary6 获取链表中节点的个数 - Optional7 链表尾部插入 - Optio…

【软件测试面试】银行项目测试面试题+答案(一)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试题&#xff1…