这个虚拟是通过系统和硬件的双重工作,做的一种点对点的映射(当然实际内存分配是按照页来处理)。
也就是软件不需要考虑内存数据的物理地址,只需要用虚拟地址做数据存储处理就行了。
这样一个好处是,软件不需要自己做内存分配,也不需要考虑别的软件的内存占用问题。 *** 作系统会根据当前的内存使用情况,动态的分配内存空间。虚拟内存地址还一个好处是因为是虚拟的,所以内存并不一定非要在物理内存中。可以存放在任何位置,比如把暂时不用的数据放进硬盘上的虚拟内存,腾出真实的物理内存交给程序运行而提高多程序时运行的效率。而且因为每个软件的虚拟内存地址都是从 0 开始,每个软件的寻址都是独立而且顺序的。程序编写和运行时,都好像是机器里面只有自己一个程序在运行,程序开发起来也很容易。软件不需要考虑内存分配的问题,也不需要担心内存不足和两个程序抢同一片内存导致系统整个崩溃的情况。
根据pid获取pcb,根据pcb获取vm,之后就可以了埃 下面是一个样本代码: pcb=find_task_by_pid(pid); pgd=pgd_offset(pcb->mm,va)pud=pud_offset(pgd,va)pmd=pmd_offset(pud,va)pte=pte_offset_kernel(pmd,va)欢迎分享,转载请注明来源:内存溢出
评论列表(0条)