admin 管理员组文章数量: 1184232
最近读了一些关于内存管理系统的文章,感觉好多博主讲的很好,大概了解了一些知识,为了避免自己遗忘,根据自己对其他博主文章的理解,在此记录一下自己的想法
首先计算机的memory并不是连续的,是分页的,对于32位系统来说,最多对应4GB的memory,并且每个页的大小是4KB。也就是每4KB,可以看做是一个小的内存块,这4KB空间范围内地址的低12位以上的地址是相同的。
因为使用memory的过程中,程序希望内存是连续的,但是如果只有physical memory的话,很难保证是连续的,因为进程存在着进行和退出,难免会出现内存碎片化,所以这就促使了virtual memory的出现,程序地址在virtual memory中是连续的,达到了内存连续的目的,同时virtual memory和physical memory存在着映射关系,这个映射关系就是通过MMU来实现
假设这个映射关系是由两级的页表实现的,也就是页目录表和页表。如果memory从Disk中读取一个8MB大小的程序,可以先在memory中找出一块空闲的4KB大小的physical memory,用作页目录表(这个页目录表的每个表项分别存储着页表在内存中的物理地址的首地址,大小为1024个表项,也就是对应着1024个页表,每个表项为4字节),此时再从physical memory中找一个空闲的4KB内存页,作为页表(这个页表存储着每个程序数据所在内存页的基地址,共1024个表项,对应着1024个内存页,每个表项为4字节),并将这个页表在physical memory中的基地址存放在页目录表的第一个表项,接着再从physical memory中找一块空闲的内存页存储程序的数据,并将这个存放数据的内存页的基地址存放在页表的第一个表项,同时可以将disk的4KB的程序数据读取到physical memory中。此时页目录表和页表均存储了一个表项,并且已经往内存中读取了4KB的数据。接着同样在physical memory中找空闲的4KB内存页,找到后将基地址放入页表中,并读取数据,重复同样的操作,指导程度数据都读取到了physical memory中,一个页表的1024个表项共可以对应4MB大小的physical memory空间。所以8MB读取完成后,页目录表中
版权声明:本文标题:代码世界的导航员:MMU、TLB与Cache如何协调VA & PA的转换旅程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1770603964a3535548.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论