页表基址寄存器是什么?
我是刚接触虚拟存储器,mmu等概念.<br />拿普通的二级页表的系统来说,每一个进程有自己的一个页表目录(第一级页表)<br />但是要区分进程的运行,应该有一个页表基址寄存器吧?<br />这是什么呢? <br />里面存的是当前运行的进程的页表地址吗?<br />它是mmu自带的一个reg abc吗,还是属于内存的一部分?<br />对它的读写是:给它个地址然后让CPU读写?或直接mmu 自己弄的?<br />操作系统是不是与之关系紧密啊?<br />请高手们帮我解解惑.谢谢了.<br />晕...都给了你具体的书名了,还不去看呀...
在X86里,那个寄存器叫做CR3(属于CPU的一个寄存器),每个进程在调度准备运行时,都要先设置好它的CR3,这样就访问到了对应的物理内存。<br /><br /><br />如下图:<img src="https://bbs.21ic.com/upfiles/img/20092/200921385510864.gif">建议看看《Linux内核情景分析(上).pdf》这个电子书
谢谢
我是硬件电路方面的本科生,被分到一个涉及计算机体系结构的soc毕业课题.<br />主要是用verilog语言搭电路,对操作系统几乎不了解,暂时也没有精力在软件方面研究太深,所以大侠们能否迁就我一下,简单地把硬件实现说一说.这样想对不对
操作系统的事交给软件高手.我cpu和ram的字长为32,页大小4k.<br />以单级页表为例:<br />假设我的这个最小系统最多同时允许2个进程(分时站用cpu),我就设计一个页表基址寄存器(?位),软件高手的os通过向它不断的写入新值来指向os建好的两个进程的页表.?+20=32,其中20是虚页号的位数.<br />但cpu是如何寻址页表基址寄存器?他如何编址,且位数应该是32啊?我说一种情况
TLB安排在内存, cpu有一个寄存器, 写内存地址到这个寄存器就设置好页表首地址。谢谢high,你可真是个好人啊!
TLB是快表啊,他是内存前一级的一个缓存部分页表项的高速缓存,有使2次访问内存简化为1次的作用.我在想是不是设计2个tlb(FIFO实现),分给两个进程?<br />您说"TLB安排在内存"是什么意思?<br />我若用cpu里的寄存器当页表基址寄存器,load r1,baddr;之后cpu addressbus就发出虚拟地址A了,难道在同一个周期也让cpu databus 输出寄存器r1的值?我有些乱了.sorry,我说错了。
TLB安排在内存 --> 页表内容,页表项保存在内存<br /><br />TLB是一个cache,加速对页表的访问。非常感谢computer00
实在是不好意思,我的理解力实在很差的。那本电子书我下载了,看到第一章预备知识后,感觉很有启发。谢谢了。<br />但是我特别关心硬件连线verilog写法(我表达能力有限,现在才说)。<br /><br />我有几点理解,您如果觉得问得挺弱智,回答“对”,“错”就行。<br />1,从用load指令改写CR,到产生最后的物理页面地址整个过程,是由mmu完成的,cpu不占数据总线,换句话,不考虑流水线,则cpu只是执行了刚才的load CR.两次对Ram的读操作以及相加拼接操作,没有CPU的事(它只需保证READ=1就行)<br />2,CR的32位的值如何从CPU里跑出来?CPU不会自动把它放在databus上,我就想到改写手头的CPU module,给他加上个端口,用32位导线把CR的值倒出来:assign line=CR;<br /><br />1. 是的。2. 你可以把它做成一个属于MMU的REG,CPU可以访问它
对于HDL,俺不熟,也没做过。只知道CPU里面有这么一个东西,具体在哪,怎么实现的俺不清楚。00
是否已经研究出MMU自己的程序?研究个鬼呀...没有深入,只是平时看资料时积累的零碎东西
...
lz不要闭门造车了。找一个PPC或ARM的手册看看MMU是怎么回事,操作MMU/TLB的相关指令再决定你怎么做吧。<br />如PPC604系列,TLB MISS是由硬件逻辑处理的。e500核的CPU TLB MISS时只报一个中断,TLB miss由软件处理。<br />搞清楚了MMU是做什么的,为什么这么做。设计一个你自己的MMU吧。<br />完全参考X86或其他成熟的MMU只会让你自己更糊涂。一个全功能的MMU岂止是几十万行HDL搞的完的。谢谢啊。
我手里只有一个sparc V8的IU。我没有找到mmu,TLB的特殊指令,是不是就得硬件电路实现了?CR3
路过
从操作的性质上看,寄存器是CPU能够快速访问的存储单元
硬件上有多种实现方式:专用指令访问、存储器映射、专用的I/O设备总线(如8080)等。有一点不到位。补充一下。
TLB其实是分两部分。一部分是内存里面的页表,另一部分是最近用到的,放在MMU的全相连Entry里面。当访问到MMU没有mapped的tlb entry,会触发系统的exception或trap。在OS提供的exception handler中,会在内存TLB中查找相关entry并置入MMU中。如果内存TLB中,logic address 是mapped 到virtual memory的,则执行换页操作,将硬盘上的数据导入内存。如果是没有mapped的address,则报page fault,做coredump,杀掉process。在kernel中会引起panic。
页:
[1]