Lec 07 操作系统管理页表映射

news/2024/11/14 22:10:07/文章来源:https://www.cnblogs.com/mumujun12345/p/18542180

lec 07 操作系统管理页表映射

0 Contents

a

1 操作系统设置页表映射

a

何时设置页表映射?

  • 操作系统自己使用的页表
    -- 在启动时填写
    -- 映射全部物理内存

    • 虚拟地址 = 物理地址 + 固定偏移(直接映射,Direct Mapping)
    • 思考:为什么需要直接映射?
  • 应用进程的页表
    -- 何时设置?

2 立即映射

  • 创建进程时,OS按照虚拟内存区域填写进程页表
    -- 例如,代码段和数据段
    -- 具体步骤:
    • 步骤-1: 分配物理页(alloc_page)
    • 步骤-2: 把应用代码/数据从磁盘加载到物理页中
    • 步骤-3: 添加虚拟页到物理页的映射(add_mapping)
    • 步骤-4: 未加载完毕,回到步骤-1

a

分配物理页的简单实现

操作系统用位图记录物理页是否空闲
0:空闲;1:已分配

a

OS填写页表基地址

结构体保存页表的基地址

a

a

a

填写进程页表

a

a

a

!直接映射弊端

  • 立即映射是一种操作系统可以选择的页表填写策略
    -- 在初始化进程虚拟地址空间时,直接在进程页表中添加各虚拟内存区域的映射

  • 潜在弊端
    -- 以关卡/副本类型游戏加载为例:只玩1关,加载1000关

    • 物理内存资源浪费
    • 非必要时延

3 延迟映射

想法

  • 解决立即映射弊端的直观想法
    -- 操作系统按进程实际需要分配物理页和填写页表,避免分配的物理页实际不被用到的情况

  • 主要思路:解耦虚拟内存分配与物理内存分配
    -- 先记录下为进程分配的虚拟内存区域
    -- 当进程实际访问某个虚拟页时,CPU 会触发缺页异常
    -- 操作系统在缺页异常处理函数中添加映射

a

a

操作系统需要区分合法/非法缺页异常

执行以下代码,操作系统可以发现segmentation fault

#include<stdio.h>int main()
{char *p = NULL;printf("%s\n",p);return 0;
}

操作系统记录为进程分配的虚拟内存区域

  • 虚拟地址空间
    -- 若干非连续的虚拟内存区域
    • 每个虚拟内存中虚拟地址都是进程可用的,具有相同的访问权限。
    • 例如:代码,数据,堆,栈
    • 访问非法虚拟地址会触发CPU异常,操作系统将会跑出segmentation fault。

合法虚拟地址信息的记录方式

  • 记录进程已经分配的虚拟内存区域
    -- Linux: 对应结构体vm_area_struct,位于linux/include/linux/mm_types.h内定义。

a

(有意思的是,虚拟内存在linux内出现是在2008年)。

-- Chcore: 对应以下的结构体。

a

a

VMA 添加方式

1.OS创建进程时分配

  • 数据(对应ELF文件的数据段)
  • 代码(对应ELF文件的代码段)
  • 栈(初始没有内容)

2.进程运行时添加

  • 堆,栈
  • mmap/munmap
    -- 分配内存buffer和加载新的代码库

a

mmap: 分配一段虚拟内存区域

  • 通常用于把一个文件或一部分映射到内存
  • 也可以不映射任何文件,仅仅新建虚拟内存区域(匿名映射)

linux:

a

示例

a

执行mmap后,vma发生变化

a

a

mmap 映射文件

a

VMA如何添加

  • 途径2: 进程运行时添加/应用程序主动向OS发起系统调用
    -- mmap()
    • 申请空的虚拟内存区域
    • 申请映射文件数据的虚拟内存区域
      -- brk():扩大、缩小堆区域
      -- 栈VMA的可选策略
    • OS为进程初始分配固定大小的栈VMA,在发现stackoverflow之后自动扩大栈VMA
      -- 用户态的malloc(API)也可能改变VMA
    • 调用brk,在堆中分配新的内存
    • 调用mmap分配较大区域

VMA判断缺页异常的合法性

  • 缺页异常(page fault)
    -- AARCH64:触发(通用的)同步异常(8)
    -- 根据ESR信息判断是否为缺页异常
    -- 访问的虚拟地址存放在FAR_EL1

  • 操作系统的缺页处理函数
    -- FAR_EL1中的值不落在VMA区域内,则为非法
    -- 反之,则分配物理页,并在页表中添加映射

延迟映射与立即映射对比

  • 优势:节约内存资源
  • 劣势:却页异常导致访问延迟增加
  • tradeoff:
    -- 应用程序具有时空局部性
    -- 缺页异常处理中采用预先映射策略。节约内存并且减少缺页异常次数。

OS向应用提供灵活的内存管理系统调用

a

4 虚拟内存的扩展功能

1.共享内存

节约内存与进程通信作用。

2.写时拷贝

a
实现:修改页表项权限,在缺页时拷贝,恢复。
fork:节约物理内存,性能加速。

3.内存去重

  • memory deduplication
    -- 基于写时拷贝机制
    -- 在内存中扫描,发现具有相同内容的物理页面
    -- 执行去重
    -- 操作系统发起,对用户态透明

4.内存压缩

  • 基本思想
    -- 当内存资源不充足的时候, 选择将一些“最近不太会使用”的内存页进行数据压缩,从而释放出空闲内存

a

大页的利弊

  • 好处
    -- 减少TLB缓存项的使用,提高 TLB 命中率
    -- 减少页表的级数,提升遍历页表的效率
  • 案例
    -- 提供API允许应用程序进行显示的大页分配
    -- 透明大页(Transparent Huge Pages) 机制
  • 弊端
    -- 未使用整个大页而造成物理内存资源浪费
    -- 增加管理内存的复杂度

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

System.Data.SqlClient is not supported on this platform.

异常: 程序在修改了非数据库相关的代码后发布进行部分覆盖,抛出异常,本次并未覆盖数据库相关的dll 查询解决方案都给出的是,将本地的Microsoft.Data.SqlClient.dll拷贝到发布处覆盖,这种方式不行 本次原因: 之前发布是目标运行时选的“可移植”,部署地方还是保持可移植…

数据采集实验四

作业一 (1)实验内容要求熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内容。 使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块的股票数据信息。候选网站东方财富网输出信息MYSQL 数据库存…

【题解】洛谷P8346:最澄澈的空与海

题解:二分图性质。【题解】洛谷P8346:最澄澈的空与海 猜结论题,本身其实很简单,在纸上画个差不多就能想出来,我一开始想二分图最大匹配,但是还是太大了,不可以。 当一个二分图有且仅有一种解时,必定有节点的入度为 \(1\)。 我们想到有多种匹配的情况,可以想到如果这是…

过路车辆识别智慧矿山一体机罐笼乘坐人员超限识别煤矿安全监控系统升级改造技术方案

在当今煤炭行业的发展中,安全和效率是两个核心议题。随着技术的进步,智慧矿山的概念应运而生,它代表着煤炭行业向智能化、自动化的转型。智慧矿山一体机煤矿安全监控系统的升级改造技术方案,正是在这样的行业需求背景下提出的。这一方案旨在通过集成先进的信息技术,如物联…

birdwatcher安装使用

1.官网下载二进制版本的安装包,解压到相应目录即可运行https://github.com/milvus-io/birdwatcher 2.尝试使用birdwatcher链接注意单机部署的milvus默认是没有暴露etcd端口的,需要修改配置重新部署[root@localhost birdwatcher]# ./birdwatcherOffline > connect --etcd 1…

这款工具让开发变得没门槛了

在快速变化的软件开发领域,工具的选择往往能决定开发效率的高低。今天,我要介绍的是一款能够让你告别繁琐编程步骤,实现需求到代码快速转换的在线开发工具——TitanIDE。它凭借一键生成代码和一键解释代码的功能,为开发者们带来了前所未有的便捷体验。 一、前言 在传统的开…

Linux各种作死故障与修复方法,全面复盘全程高能,系统级故障救援经验汇总

来自:https://www.cnblogs.com/liulianzhen99/p/17543477.html原文连接:https://mp.weixin.qq.com/s/l_D3-jm4JWPIz3DecrRUyw1 linux启动过程启动过程分析 启动级别init 0,init3, init5 init6。 systemd 服务管理。 systemd 导致系统反复重启:2 磁盘与分区配置文件磁盘UUID…

强化学习的数学原理-09策略梯度

目录Basic idea of policy gradientMetrics to define optimal policiesaverage valueaverage rewardGradient of the metricsGradient-ascent algorithm(REINFORCE) Basic idea of policy gradient 截至目前,所有的策略policy都是用表格表示的,如下图所示,每个状态对应一行…

1. 初始认识 Spring Cloud

1. 初始认识 Spring Cloud @目录1. 初始认识 Spring Cloud前言2. Spring Cloud 基本介绍3. 系统架构的演变过程3.1 单机架构3.2 动静分离架构:静态缓存 + 文件存储3.3 分布式架构:业务拆分 + 负载均衡3.4 微服务架构:使用 Spring Cloud4. Spring Cloud 全面说明4.1 Spring C…

请问有哪些好用的项目管理工具?做个项目经理需要哪些能力?

常用的项目管理工具: 项目管理工具种类繁多,适用于不同规模和类型的项目。以下是一些常见且功能强大的项目管理工具: 1. Trello特点:看板式任务管理工具,简单易用,适合小型项目或团队。任务通过卡片和列表进行管理,可以灵活拖动和更新进度。 适用场景:适合小团队、创业…