首页 > 系统相关 >10 如何表示虚拟内存

10 如何表示虚拟内存

时间:2023-04-27 21:25:12浏览次数:39  
标签:10 数据结构 区间 虚拟地址 如何 空间 结构 虚拟内存 页面

x86 CPU 的虚拟地址空间划分:

一个应用往往拥有很大的连续地址空间,并且每个应用都是一样的,只有在运行时才能分配到真正的 物理内存,在操作系统中被称为虚拟内存;

x86CPU支持虚拟地址时要么开启保护模式要么开启长模式;保护模式下是32位,没有进行任何划分;长模式下64位,但是CPU只是实现了48位的地址空间,寄存器确实64位的,CPU用地址数据的47位扩展到最高16位,因此,要么全0、要么全1;

Cosmos 划分虚拟地址:

 由以上长模式可以看出,0xFFFF800000000000~0xFFFFFFFFFFFFFFFF分给内核;0 ~ 0x00007FFFFFFFFFFF分给应用;

进一步做细分: 应用空间的最顶端是应用程序的栈,线下增长;堆是在应用程序数据区的后面,向上增长;低地址存放应用指令区和数据区;

在内核的低地址区0xFFFF800000000000~0xFFFF800400000000存放线性映射区;这是在二级引导区中建立的MMU页表映射;

设计数据结构:

虚拟地址区间、管理虚拟地址区间、对应的物理页面等;

  虚拟地址区间:

虚拟地址空间往往是以区间为单位的,比如栈区、堆区、指令区、数据区;;区内部连续,区与区至之间间隔很大;当涉及到区空间的扩大时,不用建立新的虚拟地址区间数据结构,只是改变其中的指针;

kmvarsdsc_t 结构体:包含虚拟地址的开始与结束字段、自旋锁、链表、类型等;

  整个虚拟地址空间:

多个虚拟地址区间连接成整个虚拟地址空间;

virmemadrs_t 结构管理了整个虚拟地址空间的区间 kmvarsdsc_t 结构体;

  进程的内存地址空间:

虚拟地址空间作作用于应用程序,而应用程序在操作系统中用进程表示;一个进程由虚拟地址空间信息、进程和虚拟地址和物理地址的映射信息、应用程序文件中的指令区、数据区的开始、结束地址信息;

mmadrsdsc_t 结构体表示这些信息, 包含了mmudsc_t 表示的MMU的页表数据;

  页面盒子:

每段虚拟地址区间,都会映射到对应的物理页面,根据物理内存管理器的设计,分配完页面后,会返回一个msadsc_t 结构体,所以还需要一个数据结构来挂载msadsc_t 结构体;

不把它挂载到虚拟地址区间的结构体中,出于:把一个文件映射到进程的虚拟地址空间中,只需要在内存页面保留一份共享文件,多个程序就可以共它,常规操作就是把同一物理内存页面映射到不同的虚拟地址区间,因此我们实现了一个专用的数据结构,共享操作就可以让多个 kmvarsdsc_t 结构指向它;

kvmemcbox_t 结构体实现了上述功能;可以独立存在,又和虚拟内存区间有紧密的联系,甚至可以用来管理文件数据占用的物理内存页面;

  页面盒子的头:

kvmemcboxmgr_t 结构体 用来管理所有的 kvmemcbox_t 结构;

作为全局数据结构,用于找到 并 对kvmcbox_t 结构体计数;还要支持缓存多个空闲的kvmemcbox_t 结构体;

缓存是为了放置频繁分配、释放kvmemcbox_t 结构带来的系统性能抖动;同时,可以供下次取出即用,不必再找内核申请,大大提高性能;

  数据结构之间的关系:

首先从进程的虚拟地址空间开始,进程的虚拟地址是 kmvarsdsc_t 结构表示,一个kmvarsdsc_t 结构表示 一个已经分配出去的虚拟地址空间;一个进程所有的 kmvarsdsc_t 结构,要交给进程的mmadrsdsc_t 结构中的 virmemadrs_t 结构管理;

为了管理虚拟地址空间对应的物理内存页面,建立了kvmembox_t 结构,由kvmemcboxmgr_t 结构统一管理,在kvmembox_t 结构中,挂载了物理内存页面对应的 msadsc_t 结构;

初始化:

虚拟地址空间的分配与释放,依赖于进程数据结构下的 mmadrsdsc_t  结构,实例一个结构变量,进行初始化;

这个在属于内核层功能;init_kvirmemadrs 函数首先调用了mmadrsdsc_t_init 函数,初始化 mmadrsdsc_t 结构;接着调用了 kvma_inituserspace_virmemadrs 函数,这个函数中建立了一个虚拟地址区间和 一个栈区间;栈区位于虚拟地址空间的顶端;

在init_krl 函数中调用init_krlmm 函数,此函数调用我们的 init_kvirmemadrs 函数;

 

标签:10,数据结构,区间,虚拟地址,如何,空间,结构,虚拟内存,页面
From: https://www.cnblogs.com/xuan01/p/17359576.html

相关文章

  • 1048. 最长字符串链
    题目描述给了一个单子数组words给了字母前身的定义:A在任何地方加一个字符,凑成B,A就是B的前身问从words中怎么选,能构成最长的词链?f1-记忆化搜索基本分析怎么找到子问题?假如s是词链的最后一个单词,那么枚举去掉s某位后的构成新的词s-1,s-1就是s的更小一级的子问题dfs怎么实现?......
  • 数据库CSV文件打开乱码如何调整
    数据库文件打开乱码,我们该如何设置调整好,按步骤调整即可查看需要的数据第一步:新建excel表格文件第二步:导入excel数据文件 第三步:选择语言转换数据 第四步:添加文本执行 第五步:修改文本类型 第六步:关闭保存查看数据库文件表格显示正常 ......
  • 力扣---1048. 最长字符串链
    给出一个单词数组 words ,其中每个单词都由小写英文字母组成。如果我们可以 不改变其他字符的顺序 ,在wordA 的任何地方添加恰好一个字母使其变成 wordB ,那么我们认为 wordA 是 wordB 的前身。例如,"abc" 是 "abac" 的前身 ,而 "cba" 不是 "bcad" 的前身......
  • 计算机网络基础——10 活动目录AD的配置和应用
    10.1实验目的1.了解域和活动目录的概念2.掌握 Windows server 2003 中活动目录 AD 的安装与配置3.掌握加入域和登录域的方法10.2实验相关知识:域与活动目录的概念  一台 Windows 计算机,在网络中要么隶属于工作组,要么隶属于域。工作组通常是几部计算机组成的逻辑集合,又......
  • 如何用看板工具做任务管理
    ​利用Leangoo领歌看板管理工作和任务,可以让团队更高效,也可以一目了然的了解任务进度及问题1、首先创建一个任务看板进入Leangoo系统,使用轻量级项目模板创建一个任务看板。任务看板内包含:列表和任务卡片,列表一般代表任务流程及状态(可自定义任务流程),一张卡片为一个任务拖动任务......
  • 如何恢复回收站清除的数据
    打开注册表,按下Win+R,输入regedit打开之后,一次打开如下注册表内的文件夹HEKEY——LOCAL——MACHIME/SOFTWARE/microsoft/WINDOWS/CURRENTVERSION/EXPLORER/DESKTOP/NAMESPACE进入这个位置后,在左边空白处点击“新建”,然后选择“主键”,把它命名为645FFO40——5081——101B——......
  • Microsoft Print To PDF如何打印到网络地址
    正常情况下,MicrosoftPrintToPDF是仅提供本地PDF打印功能的。不过还是可以通过配置,打印到网络地址。这里需要用到文件共享功能假设我们要使用MicrosoftPrintToPDF从A电脑打印到B电脑的D:\output文件夹。操作方法如下 1、打开D:\output文件夹属性,切换到共享页,打开共享对......
  • 搜索引擎如何判断锚文本质量
    搜索引擎判断锚文本是否适合,主要通过如下几点判断:(1)锚文本植入符合文章需求,该出现的时候出现,不该出现的时候不要出现。(2)对所在文章有促进作用,用户阅读的时候可以通过锚文本扩展阅读。(3)能延展用户需求,挖掘用户额外需求并满足。(4)锚文本设置的数量和位置都做到依据文章的延展需求而定......
  • 垃圾回收机制,如何优化程序?GC
    垃圾回收是由jvm控制的,我们不能控制jvm进行垃圾回收  为了优化程序我们所能做的就是把我们不需要的资源处理成符合jvm垃圾回收条件  例如  Integer i=new Integer(88);  ...  //这时候我们不需要这个类了,我们希望jvm尽早进行垃圾回收,那么。。  ......
  • 如何在微服务下保证事务的一致性
    作者:京东科技苗元背景随着业务的快速发展、业务复杂度越来越高,传统单体应用逐渐暴露出了一些问题,例如开发效率低、可维护性差、架构扩展性差、部署不灵活、健壮性差等等。而微服务架构是将单个服务拆分成一系列小服务,且这些小服务都拥有独立的进程,彼此独立,很好地解决了传统单体......