- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的个人研究开发一个微内核。我选择在 0xf0000000
运行我的内核,为用户空间程序留出 3.75 GiB。当我的内核启动时,它会设置 32 位分页(使用硬编码页目录和页表)。然后它检查主机是否支持 PAE 并设置页目录指针表 (PDPT)。但是当我尝试将它加载到 %cr3
时,问题就来了。根据英特尔软件开发人员手册:
Software can transition between 32-bit paging and PAE paging by changing the value of CR4.PAE with MOV to CR4.
于是尝试使用如下代码切换到PAE分页:
movl %cr4, %eax
orl $(1 << 5), %eax
movl %eax, %cr4
movl %ebx, %cr3 // %ebx holds physical address to PDPT
或者,在 Intel 语法(或 NASM)中:
mov eax, cr4
or eax, 1 << 5
mov cr4, eax
mov cr3, ebx // ebx holds physical address to PDPT
但它失败了(在 QEMU 上)。它写入 %cr4
,将 %eip
设置为下一条指令,执行它(至少 GDB 这么说),然后重置。我试着在%cr4
之前写入%cr3
,但结果还是一样。
然后我尝试通过以下方式切换到 PAE 分页:取消设置 PG -> 设置 PAE -> 写入 %cr3
-> 设置 PG,我成功了。但是我想直接切换到 PAE 寻呼。这怎么可能?
最佳答案
Then I tried to switch to PAE paging by: unset PG -> set PAE -> write to %cr3 -> set PG and I succeeded. But I want switch to PAE paging directly. How is that possible?
这不可能。
如果“普通分页”已经在使用/启用,那么你不能自动启用 PAE 并同时加载 CR3,所以(无论你是先加载 CR3 再加载 CR4,还是先加载 CR4 然后尝试加载 CR3) 无论哪条指令先发生,都会导致 CPU 在获取第二条指令之前崩溃。
唯一的方法是暂时禁用分页。
关于assembly - 如何直接从32位切换到PAE分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67484310/
需要创建一个脚本来检查内核是否处于 PAE 模式。当然,仅仅检查/proc/cpuinfo 标志是否有这个 'pae' 设置是不够的。 我们必须知道 PAE 机制是否真的不仅被实现,而且还被激活。 因
我通常知道在 32 位机器中,常规 C 程序中使用的指针大小是 32 位的。在带有 PAE 的 x86 系统中怎么样? 最佳答案 它仍然是 32 位。 PAE 增加了物理内存地址的大小,这让操作系统可
我有一个应用程序在带有 PAE 的 Windows 2003 x86 上运行。操作系统有 8 GB RAM。在应用程序运行期间分配了一些内存,在主机进程增长到 ~1GB 并且总系统内存增长超过 4GB
维基百科关于 Physical Address Extension 的文章摘录: x86 processor hardware-architecture is augmented with addit
我注意到 CR4 寄存器中的 PAE 位在我的 Linux (3.19) x86-64 机器上被打开。 PAE 功能允许访问高达 64gb 的物理地址,但我不明白为什么在启用长模式时需要它。我查了一段
IA-32 架构实现 PAE 以将其地址空间从 32 位增加到 36 位,这是通过将页表划分为三级方案来实现的。 页目录表 -> 页目录 -> 页表 -> 4-kb 页 地址空间从 32 位增加到 3
我是一个 PowerShell 新手。 经过几天的搜索...... 我整理了一个小的 powershell 脚本(如下所示)来检查页面文件、/PAE 开关、/3GB 开关、SQL 服务器最大 RAM、
我在使用 JBOSS 4.2.3GA 的应用程序中遇到问题。我们大约有 20 个用户在线,通常 CPU 运行到 95%、99%。我们使用 jmeter 和其他测试来搜索应用程序中的问题,但没有找到可能
PAE ( Physical Address Extension ) 于 1994 年在 CPU 中引入。这允许 32 位处理器访问 64 GB 内存而不是 4 GB。 Linux 内核从 2.3.2
我正在使用 vmalloc_to_pfn() 获取 32 位 PAE Linux 系统上的物理地址。看起来 vmalloc_to_pfn() 返回“unsigned long”,这意味着它在 32 位
我们在 VMWare 上的 CentOS 5.5 上使用 MySQL 5.0.77: Linux dev.ic.soschildrensvillages.org.uk 2.6.18-194.11.4.
我是一名优秀的程序员,十分优秀!