首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文看懂影子和扩展

二.影子 (Shadow page table) 影子我用一句话来描述就是:VMM把Guest和Host中的合并成一个,称为影子,来实现GVA->HPA映射。...4, 把GVA -> HPA,这一路的映射关系记录到中,这个就是影子。...虚拟机和影子通过一个哈希建立关联(当然也有其他的关联方式),客户机操作系统把当前进程的基址载入PDBR时而VMM将会截获这一特权指令,将进程的影子基址载入客户机PDBR,使客户机在恢复运行时...硬件层面引入EPTP寄存器,来指向EPT基地址。Guest运行时,Guest被载入PDBR,而 EPT 被载入专门的EPT 指针寄存器 EPTP。...找到了目录的HPA基地址,再通过GVA中的Directory offset,就找到的VGA了,这个VGA再去EPT中进行GPA->HPA的转换,就找到VGA的HPA了。

1.7K20

内核调试

一、配置内核 首先配置内核,使其支持导出内核到debugfs下面: Kernel hacking ---> ---> [*] Export kernel pagetable layout to...start] - [PCI I/O end]同上,专门用于PCI设备使用的地址空间,一般映射大小为16M [vmemmap start] - [vmemmap end]对与ARM64用于page映射区,linux...地址空间port属性说明 第一列 当前的映射范围地址 第二列 代表此映射范围大小 PMD PUD PTE 当标识为PMD PUD表示当前映射为block映射,如当前为4K,则pud的block映射一次性可映射...当标识为PTE表示为映射即PAGE_SIZE大小4K。 USR AP标记,用于标识当前范围是否在用户空间还是内核空间可读可写或者仅读。...x表述当前范围特权级别模式可执行,就是内核的可执行代码,在内核中这段一般指向内核的text* SHD 表示可共享属性,在arm64上表述为多核之间可共享其可见 AF 访问标志,当首次映射时,

16010
您找到你想要的搜索结果了吗?
是的
没有找到

收缩(shrink space)

--==================== -- 收缩(shrink space) --==================== 一、的增长方式     当被创建后,随着记录的不断插入,组成的区间会被填满...(删除)而减少 三、使用 alter table tbname shrink space 来收缩 1....实现前提条件         必须启用行记录转移(enable row movement)         仅仅适用于堆,且位于自动空间管理的空间(堆包括:标准,分区,物化视图容器,物化视图日志...不能实现收缩的         群集         具有LONG类型列的         LOB(尽管本身可以被缩小),注,10gR2以后版本支持对LOB的收缩         具有基于提交的物化视图的...,同 六、批量收缩脚本 1.

2.7K10

【进程 进程通常存在PCB中

通俗解释进程-科学家做蛋糕 科学家做蛋糕 然后女儿被蜜蜂蛰了 进程–在内核 内存管理 经典 老式 管理方法: 基址寄存器(程序开始的地方) + 界限寄存器(程序长度) 空闲内存管理...每个框有一个编号,即“框号”(框号=帧号=内存块号=物理块号=物理页号),框号从0开始 将进程的逻辑地址空间也分为与框大小相等的一个个部分,每个部分称为一个“”或“页面”。...操作系统以框为单位为各个进程分配内存空间。进程的每个页面分别放入一个框中。也就是说,进程的页面与内存的框有一一对应的关系。 各个页面不必连续存放,可以放到不相邻的各个框中。...重要的数据结构—— 为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张。...注:通常存在PCB中 一个进程对应一张 进程的每个页面对应一个表项 每个表项由“页号”和“块号”组成 表记录进程页面和实际存放的内存块之间的映射关系

1.3K20

多级的好处

,如果只使用了一个,一个表项的大小为4byte,32位系统有4GB的物理空间(一个进程看到是4GB大小的虚拟空间),每一个表项对应着物理空间的第xxx(4KB大小的),那么应该有4GB/4KB=...如果是二级,规则就会改变,让二级对应到物理内存上的4KB大小的,一级此时变成映射为物理地址的4MB(这样子是无法定位到具体的(4KB)的,所以二级再去找),这样先找到一级,一级再和二级进行结合...,二级表相当于一级4MB分成了1024个(1KB个)4KB,找完后二级充当了offset的角色,此时定位到具体的4KB的页面,再用一级的offset一结合定位到具体物理地址。...这样一个进程浪费掉的空间是一级占用的:(4GB/4MB)*4byte=4KB,二级浪费掉的是1kb(1个一级占用这么多)*1kb(此时有1kb(4GB/4MB)个一级)=4MB,加起来是...4MB+4KB,比光用一级要多4KB,但是2级是可以不存在的,比如此时程序只用了%20的,那么4MB就需要乘以%20,这样一下子就比只有一级时少了。

1.6K30

操作系统多级与快--12

操作系统多级与快--12 为了提高内存空间利用率,应该小,但是小了就大了... 会很大,放置就成了问题......第一种尝试,只存放用到的 第二种尝试:多级,即目录(章)+(节) 多级提高了空间效率,但在时间上? TLB得以发挥作用的原因 为什么TLB条目数可以在64-1024之间?...就以Linux 0.11 每页4k进行计算,4G/4K=1M ,4G寻址空间,可以定位到1M的页数。...为了保证表项连续,并且还要减少对内存的浪费,就必须采用多级的形式,但是多级时间上的不足,应该由什么来弥补呢?...正是因为程序访问存在局部性原理,所以程序执行时,通常在某个时间内,只会频繁访问某几个页面号,那么因为TLB缓存了对应的页面号,所以命中率就会很高。

1.7K50

InnoDB空间、、区简述

空间是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在空间中。默认,InnoDB存储引擎只有一个空间ibdata1,即所有数据都存放在这个空间内。...如果启用了innodb_file_per_table参数,每张空间内存放的只是数据、索引和插入缓冲Bitmap,其他数据,如undo log,插入缓冲索引,系统事务信息,二次写缓冲等还是存放在原来的共享空间内...常见的有数据,索引,回滚等。 数据:B+树的叶节点。 索引:B+树的非叶节点。 回滚:即rollback segment,管理undo log segment。 3....区是由连续组成的空间,区的大小固定为1M。默认,InnoDB存储引擎的大小为16K,即一个区中有64个连续的。...将Col2字设为varchar(7000),保证一最多存放2条记录。

40910

内核知识第八讲,PDE,PTE,目录,的内存管理

我们通过WinDbg + 虚拟机可以进行双机调试.调试一下看下GDT 我们知道,GDT中.存储的是存储信息. 保存了一系列的和内存的属性. 但是微软并没有使用....我们可以通过ring3的寄存器. 当作GDT的下标.进行查表. 查询GDT.....: 虚拟地址: 0040256f  选择子: cs:1B 那么此时段选择字当下表.虚拟地址当作偏移.去查询GDT 下图为选择子结构 选择子结构:  首先先拆分选择子. 1B =   0000000000011...然后我们从中取出首地址 加上我们的偏移 00000000  + 40256F = 0040256F(线性地址) 那么通过查询GDT.那么可以找到线性地址. ...而我们GDT,微软没有使用它来进行进程隔离.  PS: 微软因为不使用GDT进行进程隔离,所以选择子都是一样的.基地址都是0,我们的虚拟地址就是线性地址.

1.4K10

Linux内核管理-那些鲜为人知的秘密

,而管理是在虚拟内存管理中尤为重要,本文主要以回答几个管理中关键性问题来解析Linux内核管理,看一看管理中那些鲜为人知的秘密。...,内核选择杀死进程或者panic;通过给一内存设置用户态不可访问, 这样可以做到用户态的用户进程不能访问内核地址空间的内容;而由于用户进程各有一套自己的,所以彼此看不到对方的地址空间,更别提访问...,造成每个进程都认为自己拥有所有虚拟内存的错觉;通过给一内存设置只读属性,那么就不容许修改这段内存内容,从而保护了这段内存不被改写;对应用户进程地址空间映射的物理内存,内核可以很方便的进行页面迁移和页面交换...Linux内核为何使用多级?...2)Linux内核 填写,将基地址告诉mmu 内核初始化建立内核,实现缺页异常等机制为用户任务按需分配并映射。 当然,内核也可以遍历,如缺页异常时遍历进程。 10.

1.7K21

深入理解Linux内核映射分页机制原理

Linux有一个三层的结构,可以很容易地将其包装成适合两层的结构—只使用PGD和PTE。但是,Linux还要求每个页面有一个“PTE”,而且至少要有一个“dirty”位。...因此,在这里稍微调整了实现—告诉Linux在第一级有2048个条目,每个都是8字节。二级包含两个连续排列的硬件PTE表项,前面的表项是包含Linux需要的状态信息的Linux PTE。...ARMv7属性的定义分为Linux版本的和ARMv7硬件的Linux版本的PTE属性定义加入前缀L_,如下所示: /* * "Linux" PTE definitions....通过对比Linux版本的和ARMv7硬件的会发现,ARMv7硬件的缺少“dirty”位和“young”位。...“young”位的模拟方法与“dirty”位类似,也是利用了两套PTE模拟,一套用于Linux,一套用于ARM硬件。 ARMv7如何下发到硬件?

3K10

Linux-3.14.12内存管理笔记【建立内核(1)】

前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时,内核还是要建立内核,做到全面映射的。...建立内核前奏,了解两个很关键的变量: max_pfn:最大物理内存页面帧号; max_low_pfn:低端内存区(直接映射空间区的内存)的最大可用帧号; max_pfn 的值来自setup_arch...Linux是一个支持多硬件平台的操作系统,各种硬件芯片的分页并非固定的2级(全局目录和),仅仅Intel处理器而言,就存在3级的情况(全局目录、中间目录和),而到了64位系统的时候就成了4...所以Linux为了保持良好的兼容性和移植性,系统设计成了以下的4级分页模型,根据平台环境和配置的情况,通过将上级目录和中间目录的索引位设置为0,从而隐藏了三级目录和中间目录的存在。...此外还有一个准备操作,在setup_arch()函数中调用的缓冲区申请操作: early_alloc_pgt_buf(): 【file:/arch/x86/mm/init.c】 void __init

1.8K41

25-两级

根据页号查询的方法:K号对应的表项存放位置=始址+K*4要在所有的表项都连续存放的基础上才能用这种方法找到表项 需要专门给进程分配2^{10}=1024个连续的框来存放它的 同时根据局部性原理可知...,很多时候,进程在一时间内只需要访问某几个页面就可以正常运行了。...因此没有必要让整个都常驻内存。 问题一:必须连续存放,因此当很大时,需要占用很多个连续的框。...个表项,因此每1K个连续的表项为一组,每组刚好占一个内存块,再讲各组离散地放到各个内存块中) 另外,要为离散分配的再建立一张,称为目录,或称外层,或称顶层 问题二:没有必要让整个常驻内存...,因为进程在一时间内可能只需要访问某几个特定的页面。

1.2K20

独立空间结构(2)之---InnoDB空间(二十八)

上篇文章我们说了,空间的区概念,我们都知道mysql的数据是存放在里,一个有16kb,而空间能存放64TB的数据,为了提高查询效率,空间里又吧分为多个区,64个也就是大概1M为一个区,而256...个区为一组,每组的前几个都是存储固定的结构数据。...独立空间结构(1)之区---InnoDB空间(二十七) (segment)的概念 为啥会突然出现区(extent)的概念呢?...这是因为我们现在介绍的区都是非常纯粹的,他都是完整的属于一个,如果区的内存没有用完,他的剩余的内存也不可以存储其他的数据。那么考虑到较小数据量存到区内页这种情况。...也就是在fragment中,不是所有的都是为了存储同一个的数据的,比如存了叶子节点的数据,也可以存非叶子节点的数据,不属于任何一个,是只属于空间结构管理的,他的策略是这样: 刚开始向中插入数据

36831

linux路由

路由用于决定数据包从哪个网口发出,其主要判断依据是目标IP地址 Linux路由其实有2个主要概念:按顺序走路由策略,在路由策略对应的路由中匹配规则 路由策略(rule) 路由(table) ?...查看所有的路由策略,32766那个策略最有用,对应的main路由也是默认展示的路由 ip rule list 0: from all lookup local 32766: from...all lookup main 32767: from all lookup default 查看main路由 ip route list table main default via 10.105.0.1...10.105.38.204 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 目标ip是10.105.0.0/18网的走直连...eth0网卡 目标ip是172.17.0.0/16网的走直连docker0网卡,因为我安装了docker default默认的需要走网关10.105.0.1

5.9K10

宋宝华: ARM64 Linux内核的块映射

从ffff000000000000到ffff7fffffffffff是一针对物理地址的线性映射区,最大支持128TB的物理地址空间,这一地址非常类似ARM32的low memory映射区。...我们看看这种情况下的,我们既可以用最终的【20:12】对应的PTE映射项,以4K为单位,进行虚拟地址到物理地址的映射;又可以以【29:21】对应的PMD映射项,以2M为单位,进行虚拟地址到物理地址的映射...ptdump.c和ptdump_debugfs.c 我们把它们全部选中,这样我们可以得到一个debugfs接口: /sys/kernel/debug/kernel_page_tables 来获知内核态的情况...如果我把这个kernel启动选项去掉,我得到的内核是完全不一样,线性映射区也全部是PTE映射: ?...牧春童鞋在“Linux阅码场”这里还有一些精彩的文章: 宋牧春:Linux设备树文件结构与解析深度分析(1) 宋牧春:Linux设备树文件结构与解析深度分析(2) 宋牧春:多图详解Linux内存分配器

3.2K10
领券