首页 > 系统相关 >什么是内存分页和分段

什么是内存分页和分段

时间:2024-09-06 22:04:58浏览次数:8  
标签:逻辑 分页 碎片 地址 内存 分段

内存分页和分段是操作系统用于管理内存的一种技术,旨在提高内存的使用效率和安全性。它们各自有不同的结构和目的。

1. 内存分页(Paging)

概述

内存分页是一种将物理内存划分为固定大小的块(称为页,通常为4KB)和将逻辑地址空间划分为相同大小的块(称为页表)的机制。分页允许不连续的物理内存分配,从而减少外部碎片。

工作原理

  • 逻辑地址空间:用户程序使用的地址。
  • 物理地址空间:实际的内存地址。
  • 页表:维护逻辑页与物理页之间的映射关系。

当程序需要访问某个地址时,CPU 将逻辑地址分为页号和页内偏移量,通过页表查找对应的物理页框号,然后再加上偏移量得到物理地址。

优点

  • 消除外部碎片:由于页的大小是固定的,可以有效利用内存。
  • 简化内存管理:逻辑地址和物理地址的转换过程清晰。

缺点

  • 内部碎片:由于页的固定大小,如果逻辑页未被完全填满,可能会造成内部碎片。
  • 页表开销:需要额外的内存来存储页表。

2. 内存分段(Segmentation)

概述

内存分段是一种将程序的逻辑地址空间划分为不同大小的段(segment),每个段代表程序的一个逻辑部分,如代码段、数据段和堆栈段。每个段都有一个基址和长度。

工作原理

  • 逻辑地址:由段号和段内偏移量组成。
  • 段表:维护段的基址和长度信息。

当程序访问某个地址时,CPU 使用段号查找段表,获得段的基址,然后加上段内偏移量得到物理地址。

优点

  • 更接近程序逻辑结构:分段方式更符合程序的逻辑结构,易于管理。
  • 可变大小:段的大小可以根据需求变化,减少内部碎片。

缺点

  • 外部碎片:由于段的大小不固定,可能会导致外部碎片。
  • 复杂性:段的管理和保护机制相对较复杂。

总结

  • 内存分页:将内存划分为固定大小的页,消除了外部碎片,但可能产生内部碎片。适合需要频繁分配和释放内存的场景。
  • 内存分段:将内存划分为逻辑相关的段,便于程序管理,但可能导致外部碎片。适合具有明确逻辑结构的程序。

这两种技术可以单独使用,也可以结合使用,以充分利用它们的优点。例如,现代操作系统中常用的分页-分段混合模型。

标签:逻辑,分页,碎片,地址,内存,分段
From: https://www.cnblogs.com/love-DanDan/p/18401133

相关文章

  • 什么是栈内存和堆内存
    栈内存和堆内存是计算机程序运行时用来管理内存的两种不同区域。它们各自有不同的特性和用途。以下是对栈内存和堆内存的详细解释:1.栈内存(StackMemory)定义栈内存是一种用于存储局部变量和函数调用信息的内存区域。栈是先进后出(LIFO,LastInFirstOut)的结构。特点分配与释......
  • 内存管理-34-内存回收-shrinker的注册和调用
    基于msm-5.4一、简介当存在内存压力时,会调用shrinker的count_objects()和scan_objects()进程内存回收操作。二、注册逻辑1.注册ashmem_init//ashmem.cregister_shrinker(&ashmem_shrinker)//vmscan.cregister_shrinker_prepared(shrinker)......
  • 【操作系统】进程同步之共享内存
    进程的线程共享进程资源,而进程共享计算机资源。在某种程度上,多进程是共享物理内存的。由于操作系统的进程管理,不同的进程有自己独立的内存空间,互不干扰。但是共享内存可以打破这个限制。共享内存允许不相关的进程访问同一片物理内存。共享内存是两个进程之间共享和传递数......
  • C语言-第七章:字符和字符串函数、动态内存分配
    传送门:C语言-第六章-加餐:其他自定义类型目录第一节:字符和字符串函数    1-1.strlen函数和sizeof关键字    1-2.memcpy内存拷贝函数    1-3.memmove内存拷贝函数    1-4.memset内存设置函数    1-5.strtok字符串切割函数......
  • linux如何查看内存条是ddr几代
    在Linux系统中,可以通过以下几种方法查看内存条的类型和代数(如DDR3、DDR4等):1.使用dmidecode命令dmidecode是一个工具,它可以从系统的DMI表(也称为SMBIOS表)中提取硬件信息,包括内存的信息。查看内存信息sudodmidecode--typememory这个命令会输出关于系统内......
  • PbootCMS实现数字条分页样式效果
    <!--分页-->{pboot:if({page:rows}>0)}<divclass="pagebar"><divclass="pagination"><aclass="page-itempage-linkhidden-sm"href="{page:index}"title="首页">首页</a&......
  • QT5 掌握debug调试的方法(简要内容:Memory查看内存地址的数值 和 查看变量值)(图文并茂)
    A1——选择构建模式(选项:debug调试、release发行、profile不知道…)A2——开始运行A3——开始调试(仅在debug调试模式下,断点调试助手才有效)A4——执行构建(生成输出目录及相应的文件,路径要求与工程的路径同级)A1——鼠标悬停变量名弹出,可固定窗口,Qt查看变量值的......
  • k8s中什么是内存请求,什么是内存限制,及其与QoS的关系
    在Kubernetes中,内存请求(MemoryRequest)和内存限制(MemoryLimit)是资源管理的两个关键概念,它们帮助确保Pod能够获得所需的资源,同时防止资源过度使用。以下是它们的定义和作用:内存请求(MemoryRequest)定义:内存请求是Pod启动时向Kubernetes集群请求的最小内存量。这是Pod......
  • 从内存层面分析Java 参数传递机制
    在Java中,理解参数传递机制对于编写高效和可维护的代码至关重要。本文将探讨基本数据类型和引用数据类型的参数传递方式,并介绍System.identityHashCode方法及其作用。我们将结合栈帧的概念,通过示例代码来详细解释这些机制。System.identityHashCode的作用System.ident......
  • C语言之动态内存分配与释放
    C语言之动态内存分配与释放通用指针类型void通用类型指针具有以下特点:类型无关,赋值灵活:由于指针本质上是一个存储内存地址的变量,而内存地址是没有类型的,所以void指针可以存储任意类型数据的地址,指向任意类型对象。无论是整数、浮点数、字符或数组、结构体等类型都可以用void指......