Assembly 堆栈指针如何从虚拟内存转换为物理内存
我一直在处理大量的汇编程序,在回顾虚拟内存时遇到了一些新的困惑 简单地说,我不理解汇编中的地址(与处理器直接接口的代码)如何从虚拟地址转换为物理地址 我总是被告知,操作系统处理从虚拟内存到物理内存的映射,但程序集直接引用地址而不进行任何系统调用,如果不直接调用,操作系统如何进行干预Assembly 堆栈指针如何从虚拟内存转换为物理内存,assembly,paging,virtual-memory,Assembly,Paging,Virtual Memory,我一直在处理大量的汇编程序,在回顾虚拟内存时遇到了一些新的困惑 简单地说,我不理解汇编中的地址(与处理器直接接口的代码)如何从虚拟地址转换为物理地址 我总是被告知,操作系统处理从虚拟内存到物理内存的映射,但程序集直接引用地址而不进行任何系统调用,如果不直接调用,操作系统如何进行干预 地址(mov eax,[0xDEADBEEF])在哪里使用操作系统中的页表从虚拟地址空间转换到物理地址空间,而无需专门调用操作系统?,因为CPU直接支持这种转换,使用。操作系统预先设置这些页表,告诉CPU当它引用内存
地址(mov eax,[0xDEADBEEF])在哪里使用操作系统中的页表从虚拟地址空间转换到物理地址空间,而无需专门调用操作系统?,因为CPU直接支持这种转换,使用。操作系统预先设置这些页表,告诉CPU当它引用内存地址时应该在哪里查找。翻译就是这样透明地进行的。因为CPU直接支持这种翻译,使用。操作系统预先设置这些页表,告诉CPU当它引用内存地址时应该在哪里查找。翻译就是这样透明地进行的。在汇编语言中,您使用的是逻辑地址。操作系统使用页表将逻辑地址映射到物理地址。CPU自动将本地地址转换为物理地址 逻辑地址可能没有映射到它的物理地址。当CPU遇到这种情况时,它会调用操作系统的页面错误处理程序 操作系统必须在辅助存储器上维护进程地址空间的副本。这是“虚拟”内存。发生页面错误时,操作系统将确定虚拟内存中是否存在被引用的页面。如果是这样,页面错误处理程序会将页面读入物理内存,更改页面表,使逻辑地址映射到正确的物理地址,然后重新启动指令
如果虚拟页不存在,操作系统将引发访问冲突异常。在汇编语言中,您使用的是逻辑地址。操作系统使用页表将逻辑地址映射到物理地址。CPU自动将本地地址转换为物理地址 逻辑地址可能没有映射到它的物理地址。当CPU遇到这种情况时,它会调用操作系统的页面错误处理程序 操作系统必须在辅助存储器上维护进程地址空间的副本。这是“虚拟”内存。发生页面错误时,操作系统将确定虚拟内存中是否存在被引用的页面。如果是这样,页面错误处理程序会将页面读入物理内存,更改页面表,使逻辑地址映射到正确的物理地址,然后重新启动指令
如果虚拟页不存在,操作系统会引发访问冲突异常。操作系统会事先在CPU中设置映射。CPU自行进行转换,如果出现问题,将引发异常。这就是操作系统如何获得控制权,例如从分页文件加载页面。
x86
和x86-64
使用分页:还有osdev文章和英特尔官方手册。邮件或电话转发的方式相同。它会给你留下你知道的地址,但在这个过程中,地址会被同时知道两个地址空间的人更改。堆栈与指令获取与其他非堆栈数据访问无关。mmu转换地址,其中一个主要卖点是软件不知道物理地址,也不关心它的虚拟空间。mmu的位置通常在处理器核心和内存总线之间。操作系统预先在CPU中设置映射。CPU自行进行转换,如果出现问题,将引发异常。这就是操作系统如何获得控制权,例如从分页文件加载页面。x86
和x86-64
使用分页:还有osdev文章和英特尔官方手册。邮件或电话转发的方式相同。它会给你留下你知道的地址,但在这个过程中,地址会被同时知道两个地址空间的人更改。堆栈与指令获取与其他非堆栈数据访问无关。mmu转换地址,其中一个主要卖点是软件不知道物理,也不关心它的虚拟空间。mmu的位置通常在处理器核心和内存总线之间。谢谢,我忘了TLB和mmu是cpu的一部分,而不是OST谢谢,我忘记了TLB和MMU是cpu的一部分,OSI不理解汇编是逻辑地址,我只是对逻辑地址如何在cpu级别转换为物理地址感到困惑,因为我忘记了TLB和MMU是cpu的一部分,我知道汇编是逻辑地址,我只是对逻辑地址如何在cpu级别转换为物理地址感到困惑,因为我忘记了TLB和MMU是cpu的一部分,而对这些表进行故障处理会导致OS查找。