首页 > 系统相关 >Linux内存管理的分页机制

Linux内存管理的分页机制

时间:2023-11-01 22:32:20浏览次数:53  
标签:分页 虚拟地址 偏移量 地址 内存 Linux Page 物理

分段机制的原理如下:

Linux内存管理的分页机制_分页机制

分段机制下的虚拟地址由两部分组成,段选择子段内偏移量。段选择子就保存在段寄存器里面。段选择子里面最重要的是段号,用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等。虚拟地址中的段内偏移量应该位于 0 和段界限之间。如果段内偏移量是合法的,就将段基地址加上段内偏移量得到物理内存地址。

将上面的虚拟空间分成以下 4 个段,用 0~3 来编号。每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示。

Linux内存管理的分页机制_分页机制_02

如果要访问段 2 中偏移量 600 的虚拟地址,我们可以计算出物理地址为,段 2 基地址 2000 + 偏移量 600 = 2600。

在 Linux 里面,段表全称段描述符表(segment descriptors),放在全局描述符表 GDT(Global Descriptor Table)里面,会有下面的宏来初始化段描述符表里面的表项。

#define GDT_ENTRY_INIT(flags, base, limit) { { { \
    .a = ((limit) & 0xffff) | (((base) & 0xffff) << 16), \
    .b = (((base) & 0xff0000) >> 16) | (((flags) & 0xf0ff) << 8) | \
      ((limit) & 0xf0000) | ((base) & 0xff000000), \
  } } }

一个段表项由段基地址 base、段界限 limit,还有一些标识符组成。

其实 Linux 倾向于另外一种从虚拟地址到物理地址的转换方式,称为分页(Paging)。

对于物理内存,操作系统把它分成一块一块大小相同的页,这样更方便管理,例如有的内存页面长时间不用了,可以暂时写到硬盘上,称为换出。一旦需要的时候,再加载进来,叫做换入。这样可以扩大可用物理内存的大小,提高物理内存的利用率。

这个换入和换出都是以页为单位的。页面的大小一般为 4KB。为了能够定位和访问每个页,需要有个页表,保存每个页的起始地址,再加上在页内的偏移量,组成线性地址,就能对于内存中的每个位置进行访问了。

Linux内存管理的分页机制_分页机制_03

虚拟地址分为两部分,页号页内偏移。页号作为页表的索引,页表包含物理页每页所在物理内存的基地址。这个基地址与页内偏移的组合就形成了物理内存地址。

Linux内存管理的分页机制_分页机制_04

当然对于 64 位的系统,两级肯定不够了,就变成了四级目录,分别是全局页目录项 PGD(Page Global Directory)、上层页目录项 PUD(Page Upper Directory)、中间页目录项 PMD(Page Middle Directory)和页表项 PTE(Page Table Entry)。

Linux内存管理的分页机制_分页机制_05

标签:分页,虚拟地址,偏移量,地址,内存,Linux,Page,物理
From: https://blog.51cto.com/key3feng/8133629

相关文章

  • sizeof与各数据结构内存占用计算
    一、sizeof1.sizeof介绍sizeof会计算参数的数据类型所占字节数。注意事项:如果是数组类型(非vector),则会返回整个数组所占字节数。sizeof是运算符,在编译期间确定,因此无法计算动态分配的内存大小,如new等。2.实现方式获取type使用getTypeInfoChars(type)来计算字节......
  • 初始Linux
    1.1云计算简介1.1.1云计算概念  云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来虚拟化资源。可将云计算理解为将计算机资源通过网络进行虚拟化或者用虚拟化资源进行计算。  云计算是一种按使用量计费的模式,它随时随地提供便捷的、可通过网络按需......
  • Linux操作系统
    一.什么是LinuxLinux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。二.Linux的特点(1)Linux是一款免费的操作系统,用户可以通过网络或......
  • linux 导出和导入mysql数据库
    https://blog.csdn.net/qq_35453862/article/details/117742619从华为云导出导入阿里云......
  • Linux zip命令:压缩文件或目录
    我们经常会在Windows系统上使用“.zip”格式压缩文件,其实“.zip”格式文件是Windows和Linux系统都通用的压缩文件类型,属于几种主流的压缩格式(zip、rar等)之一,是一种相当简单的分别压缩每个文件的存储格式,本节要讲的zip命令,类似于Windows系统中的winzip压缩程序,其基本格......
  • Linux第九周技术博客
    这周我们学习了进程管理,还学习了一些i/o重定向的内容。每个进程都有唯一的进程标识pid,一个pid只能表示一个进程,ppid为父进程id,需要给该进程分配进程。进程一般分为三种状态:就绪状态、运行状态、阻塞状态。就绪状态不能直接进入阻塞状态,当所有的系统资源都分配出去后因为没有多......
  • 16、Linux安全加固
    Linux安全加固目录Linux安全加固1、账号和口令2、服务、端口3、文件系统4、日志5、内核漏洞6、其他7、等保测评Linux测评命令安全加固思路账户安全->密码策略->当前开放的服务是否存在高危服务->排查当前的系统中是否存在内核漏洞->排查主机所在信息系统所对应的管理制......
  • linux进程管理
    初识进程进程状态:进程介绍:进程唯一标识符:PID三种状态:就绪状态:已经具备运行条件,但CPU还没分配运行状态:占用并在cpu中运行阻塞状态:进程因等待某些事发生而暂停不能运行查看进程静态查看:   使用ps命......
  • Linux命令
    [root@centos02~]#超级管理员root用户[ly@centos02root]$普通用户ly普通用户无法更改系统配置和管理服务[ly@centos02root]$whoamily[ly@centos02root]$hostnamecentos02[ly@centos02root]$pwd/rootLinux的命令提示符由环境变量PS1控制,可以通过全局配......
  • 常见的linux 命令
    常见的linux命令ifconfig查看系统网络配置pwd查看当前工作目录(printworkingdirectory)mkdir创建文件夹,不能创建文件ll查看当前目录下的文件和文件夹,查看权限等详细信息)cd+相对路径,切换到当前工作目录的下一级目录cd+绝对路径,可以在任意位置切换到任意目录cd..切换到上......