- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在Linux x86分页中。
最佳答案
我不了解Linux,因此我将针对Windows进行回答。某些内核空间是“全局”的,这是在PTE中设置的标志,指示多个进程使用了它。可以在寄存器操作数中配置INVPCID
指令,以在TLB无效中包括或排除这些条目。这些页表条目在进程之间共享,并且所有条目都出现在每个进程的页表中的同一位置。这样,只需更新单个PTE,而无需同步其他进程的其他PTE,因为它们在物理地址上都共享一个PTE。
http://www.cs.miami.edu/home/burt/journal/NT/memory.html
有些内核内存对所有进程都不可见,并且对每个进程都是私有(private)的(不会改变它仍然是环0的事实)。在32位Windows系统上,它将是0xC0000000–0xC0200000,其中包含所有用户空间PTE和PDE,其中0xC0000000是PTE_BASE,这使得方程#define MiGetPteAddress (x) ((PMMPTE)(((((ULONG)(x)) >> 12) << 2) + (ULONG_PTR)MmPteBase)) #define MiAddressToPte(x) MiGetPteAddress(x)
可以正常工作,以便将cr2
中的故障虚拟地址转换为PTE的地址。这是每个进程专用的,因为每个进程具有相同的基本PTE分配基地址;如果对所有进程可见,则将 swift 占用虚拟内存,因为必须按顺序分配每组页面占用的内存。它不需要对所有进程都可见,因为一个进程对另一个进程的页表条目没有兴趣。页面错误总是在当前进程的上下文中处理,0xC0000000-0xC0200000表示在每个进程上下文中有所不同。
但是,用于分配内核PTE(用于内核地址)的内核空间0xC0200000–0xC0400000将是全局的,并由所有进程共享,但其中表示0xC0000000–0xC0200000的部分除外,根据我的计算,该部分为0xC0300000–0xC0300800,即PDE的用户模式端为PDE_BASE = 0xC0300000–0xC0300FFF。
但是,不可能将用户PDE和内核PDE部分分开,以使前者是私有(private)的,而后者是全局的(即,使0xC0300000-0xC0300800私有(private)(指向不同的物理地址),而0xC0300000-0xC0300FFF指向相同的物理地址)。每个进程),因为整个PDE区域(0xC0300000–0xC0300FFF)将位于同一物理帧上,并由cr3
指向单个帧,并且每个进程的cr3
不同,这意味着整个PDE区域(所有PDE)将必须为每个进程专用(每个进程重复并安装)。如果将内核页面表页面(包含内核页面表的页面)调出页面并移到新的物理位置,则所有PDE都必须同步,因为所有进程在不同的cr3物理地址而不是相同的物理PDE上都有副本。我不确定它是如何做到这一点的(有效的)ATM,因此施加限制是不允许将内核页表调出并放入非分页池中是明智的。这样,内核PDE在所有CR3页面上将保持不变。在64位上,可能会施加限制,即不能分页出内核PDPT。在32位Windows上,进程开始于物理CR3页面,该页面的PDE偏移量为1100000000(基数2)* 4字节,指向其自身,该页面被硬写入,可能是通过短暂关闭cr0中的分页来完成的(因为写入操作不会无需在其中编写递归条目就可以成功,这会产生一个悖论。注意,PD条目本身就是覆盖范围为0xC0000000–0xC0400000的页表,即它指向1023页表和1页目录(本身)(2 ^ 10个条目),因此允许通过其虚拟地址修改PTE。 。 CR3页面位于0xC0300000的原因是因为该地址具有相同的页面目录以及页面表索引1100000000和1100000000,因此它在自身上循环两次,因此产生了CR3页面,您可以按地址修改PDE(还有其他像这样的特殊地址,例如0xE0380000)。设置完成后,将进行适当的内核映射。在64位Windows上,使用单个指向其自身的PML4表页面设置进程的过程将与此类似,并且由于回送的数量可变,因此可以填充和访问任何PML4E,PDPTE,PDE或PTE。在64位Windows上,当某个进程终止时,该进程的所有物理页将移至空闲列表,该列表将包括所有用户物理PDPT页,PD页,PT页和PML4/CR3页。内核列表将不会被标记为空闲列表。
通常,如果您知道PML4中的哪个条目是物理PML4页面的递归条目,则可以算出某个虚拟地址的PTE的虚拟地址。您将PML4中的偏移量(32位为10位; 64位为9位)附加到其自身的条目,虚拟地址的开头(这是前面32位方程式中0xC0000000的加法运算),并且删除最后12位,然后将虚拟地址末尾的PT中的偏移量乘以8(或4),从而将PT中的偏移量补偿为12位(因此,右移12,左移3(或2) (用于32位条目))。 1个环回占用了1个间接层,您将获得PTE的虚拟地址。 2次环回将为您保留PDE的虚拟地址,依此类推。在32位窗口上的PTE_BASE是偏移量110000000左移为32位,而PDE_BASE是偏移量110000000110000000左移为32位。它在宏中使用,带有此前缀的任何虚拟地址根据定义将分别是PTE或PDE的一部分。 Windows为页表层次结构选择偏移量1100000000,但它可以是2 ^ 9组合中的任何一种。
KAISER或KPTI旨在缓解崩溃,每个过程很可能具有2个cr3
。捕获到内核后,用于用户模式的受限cr3将包含一个包含所有内核PML4E的完整cr3,该受限cr3将包含单个内核PML4E(足以访问执行交换的初步中断调度例程功能)。
至于Windows上的物理内存,请参见:https://superuser.com/a/1549970/933117
关于linux - linux内核页表更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583919/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!