Memory 理解内存映射
在现代个人电脑中,你将在哪里Memory 理解内存映射,memory,assembly,x86,virtual,paging,Memory,Assembly,X86,Virtual,Paging,在现代个人电脑中,你将在哪里 MOV [0x0000], 7 放一个7?它是RAM的第一个字节,还是进程地址空间的第一个字节?假设它触发内存冲突。这取决于系统架构。每个体系结构都提供一个指令集和内存布局。此外,这取决于您使用的操作系统。例如,实时操作系统通常不提供虚拟内存 问候您的意思是假设它不会触发访问冲突?每个过程都有它自己的。前64kiB通常保持未映射状态,因此空指针访问实际上会发出噪音,而不是让程序默默地做坏事 在典型操作系统上的用户空间进程中,0的绝对地址指的是进程虚拟地址空间的第一
MOV [0x0000], 7
放一个7?它是RAM的第一个字节,还是进程地址空间的第一个字节?假设它触发内存冲突。这取决于系统架构。每个体系结构都提供一个指令集和内存布局。此外,这取决于您使用的操作系统。例如,实时操作系统通常不提供虚拟内存 问候您的意思是假设它不会触发访问冲突?每个过程都有它自己的。前64kiB通常保持未映射状态,因此空指针访问实际上会发出噪音,而不是让程序默默地做坏事 在典型操作系统上的用户空间进程中,
0
的绝对地址指的是进程虚拟地址空间的第一个字节
启用分页后,即使内核也无法直接使用物理地址。要写入给定的物理地址,必须创建一个页表条目,将该物理页映射到虚拟页(或查找现有映射),
invlpg
,以确保TLB没有缓存过时的条目,然后使用该虚拟地址。如果它触发内存冲突,那么它如何将该值放入该地址?你的意思是假设它不会触发访问冲突?它处于保护模式吗?什么操作系统正在运行,或者您是否在自己的引导扇区处于真实模式?我的windows 8.1/Ubuntu Linux更可能使用什么?在这些操作系统中运行上述MOV的结果是什么?Win或Linux等操作系统使用虚拟地址空间,这意味着它实际上不是物理地址。上面的指令看起来像是操纵CPU寄存器集的机器指令。(第217页)