<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(3)》(19)

本文主要是介绍<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(3)》(19),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Linux操作系统原理分析之linux存储管理(3)》(19)

  • 6 Linux存储管理
    • 6.4 Linux 的分段和分页结构
      • 6.4.1Linux 的分段结构
      • 6.4.2 Linux 的三级分页结构
      • 6.4.3 内核页表和进程页表

6 Linux存储管理

6.4 Linux 的分段和分页结构

本节主要内容 Linux 运行在 80x86 上时,其内核如何利用硬件机制实现对存储空间的分段分页管理。

6.4.1Linux 的分段结构

  1. 用户区和内核区
    80x86 的分段机制把 64T 的虚拟地址空间分为最大长度为 4G 的线性地址空间。Linux 把每个线性地址空间提供给一个进程使用,所以每个线性地址空间就是用户的虚拟内存空间。在一个进程的线性地址空间中包含若干全局段和局部段。

👉内核代码段和内核数据段:由于对一个进程而言,只有它的虚拟存储空间是可见的。因此为了操作系统功能,系统内核必须包括在进程的虚拟地址空间中。Linux 把内核的代码和数据映射到线性地址空间的全局段中,它们就形成了内核代码段和内核数据段。
👉用户代码段和用户数据段:进程本身的代码和数据映射到进程线性地址空间的局部段,形成用户代码段和用户数据段。

为了保护内核,linux 把虚拟内存分成两部分:

👉内核区:包括内核代码段和内核数据段、内核使用的堆栈、全局数据结构。
👉用户区:包括用户代码段和用户数据段、进程堆栈、进程数据结构等

在 80x86 上 linux 进程虚拟空间中:

👉用户区:地址从 0x00000000~0xbfffffff,其大小为 3G;
👉内核区:地址从 0xc0000000~0xffffffff,其大小为 1G;

说明: 由于对每个进程而言,只有它的虚拟存储空间是可见的,而且每个进程的虚拟存储空间都是从 0 开始的相对地址空间,所以从系统角度看,每个进程在虚拟空间中的内核区和用户区的分布是相同的。

在这里插入图片描述
2. GDT
由于大部分进程都只有一个代码段和一个数据段,为了提高地址映射速度,从 linux2.2 开始,把进程的一个代码段和一个数据段的描述符放到了 GDT 中,这样就可以直接从 GDT 中取得描述符,而不必再通过 GDT 访问 LDT。只有进程需要建立更多段时,才把它们的描述符放到 LDT 中。在 linux 内核 2.2 的 arch/i386/kernel/head.s 文件中定义了 GDT 的内容。
在这里插入图片描述

6.4.2 Linux 的三级分页结构

  1. Linux 的三级分页结构
    Linux 在 80x86 机器平台运行时,因为 80x86 是 32 位的,所以 采用两级分页结构就可以有效地节省内存空间。但是如果 Linux 运行在 64 位机器平台时,如 Alpha 等,地址总线 64 位,寻址更大空间,此时二级页表将出现页表目录过大的问题。为此,64 位机器的分页机制提供的是三级分页结构。Linux 运行在 64 位机器平台时也采用三级分页结构。
页目录:PGD(page directory)
页中间目录:PMD(page Middle directory)
页表:PTE(page table)

地址结构,以 alpha 机器为例:
在这里插入图片描述
在这里插入图片描述
2. linux 与硬件无关的分页机构
linux 提供了与硬件无关的分页机构。所谓与硬件无关是指这种分页结构仅是一种存储管理模型。当linux 运行在某种机器时,通过对存储管理模型有关参数的设置来适应机器的硬件。Linux 内核提供的与硬件无关的分页机构是三级分页存储管理模型。
Linux 内核把三级分页存储管理模型转换为两级分页结构的具体做法是:把三级分页存储管理模型的页中间目录域长度定义为 0。同时定义中间目录表只有一个表项。在 linux 源代码文件的/include/asmi386/pgtable.h 中有如下定义:

#define PTRS_PER_PTE 1024
#define PTRS_PER_PMD 1
#define PTRS_PER_PGD 1024
  1. Linux 页面大小
    Linux 中页面的尺寸由宏定义的符号常量 PAGE_SIZE 指定,在 80x86 机器中页面长度为 4KB,定义在 include/asm-i386/page.h 中:
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL<< PAGE_SHIFT) /*把 1 左移 12 位,即 4K*/
在 alpha 等 64 位机中,页面大小为 8K,定义在相应的 page.h 中:
#define PAGE_SHIFT 13
#define PAGE_SIZE (1UL<< PAGE_SHIFT) /*把 1 左移 13 位,即 8K*/

6.4.3 内核页表和进程页表

  1. CR3 控制寄存器
    进程切换时,linux 要重新设置 CR3 控制寄存器,使它指向新进程的页目录表。该任务由内核的汇编语言函数 startup_32()完成。

  2. 页目录表
    linux 内核为了配合硬件分页机制设置了相应的数据结构,其中页目录表定义为一个具有 1024 个元素
    的数组:

Pgd_t swapper_pg_dir[1024] /*每个元素指向一个页表*/
  1. 内核页表和进程页表 内核页表和进程页表
    内核区和用户区的分界地址由符号常量 PAGE_OFFSET 确定,如 80x86 中 PAGE_OFFSET 的值是0xc0000000(3G)。所以此时页目录表的钱 768 个表项对应用户区,后 256 项对应内核区(所有进程的内核 表项 完 全 相 同 ) 。 在 linux 内 核 中 使 用 paging_init() 函 数 对 页 目 录 表 进 行 初 始 化 , 它 定 义 在arch/i386/mm/init.c 中。

这篇关于<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(3)》(19)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/453312

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57