页表基址寄存器是什么?

[复制链接]
12976|17
手机看帖
扫描二维码
随时随地手机跟帖
ttxs|  楼主 | 2009-2-11 20:49 | 显示全部楼层 |阅读模式
我是刚接触虚拟存储器,mmu等概念.
拿普通的二级页表的系统来说,每一个进程有自己的一个页表目录(第一级页表)
但是要区分进程的运行,应该有一个页表基址寄存器吧?
这是什么呢? 
里面存的是当前运行的进程的页表地址吗?
它是mmu自带的一个reg [31:0]abc吗,还是属于内存的一部分?
对它的读写是:给它个地址然后让CPU读写?或直接mmu 自己弄的?
操作系统是不是与之关系紧密啊?
请高手们帮我解解惑.谢谢了.

相关帖子

computer00| | 2009-2-13 08:59 | 显示全部楼层

晕...都给了你具体的书名了,还不去看呀...

在X86里,那个寄存器叫做CR3(属于CPU的一个寄存器),每个进程在调度准备运行时,都要先设置好它的CR3,这样就访问到了对应的物理内存。


如下图:

使用特权

评论回复
computer00| | 2009-2-11 21:25 | 显示全部楼层

建议看看《Linux内核情景分析(上).pdf》这个电子书

使用特权

评论回复
ttxs|  楼主 | 2009-2-11 22:57 | 显示全部楼层

谢谢

我是硬件电路方面的本科生,被分到一个涉及计算机体系结构的soc毕业课题.
主要是用verilog语言搭电路,对操作系统几乎不了解,暂时也没有精力在软件方面研究太深,所以大侠们能否迁就我一下,简单地把硬件实现说一说.

使用特权

评论回复
ttxs|  楼主 | 2009-2-12 19:28 | 显示全部楼层

这样想对不对

操作系统的事交给软件高手.我cpu和ram的字长为32,页大小4k.
以单级页表为例:
假设我的这个最小系统最多同时允许2个进程(分时站用cpu),我就设计一个页表基址寄存器(?位),软件高手的os通过向它不断的写入新值来指向os建好的两个进程的页表.?+20=32,其中20是虚页号的位数.
但cpu是如何寻址页表基址寄存器?他如何编址,且位数应该是32啊?

使用特权

评论回复
high| | 2009-2-12 19:57 | 显示全部楼层

我说一种情况

TLB安排在内存, cpu有一个寄存器, 写内存地址到这个寄存器就设置好页表首地址。

使用特权

评论回复
ttxs|  楼主 | 2009-2-12 22:10 | 显示全部楼层

谢谢high,你可真是个好人啊!

TLB是快表啊,他是内存前一级的一个缓存部分页表项的高速缓存,有使2次访问内存简化为1次的作用.我在想是不是设计2个tlb(FIFO实现),分给两个进程?
您说"TLB安排在内存"是什么意思?
我若用cpu里的寄存器当页表基址寄存器,load r1,baddr;之后cpu addressbus就发出虚拟地址A了,难道在同一个周期也让cpu databus 输出寄存器r1的值?我有些乱了.

使用特权

评论回复
high| | 2009-2-13 02:45 | 显示全部楼层

sorry,我说错了。

TLB安排在内存 --> 页表内容,页表项保存在内存

TLB是一个cache,加速对页表的访问。

使用特权

评论回复
ttxs|  楼主 | 2009-2-13 11:58 | 显示全部楼层

非常感谢computer00

实在是不好意思,我的理解力实在很差的。那本电子书我下载了,看到第一章预备知识后,感觉很有启发。谢谢了。
但是我特别关心硬件连线verilog写法(我表达能力有限,现在才说)。

我有几点理解,您如果觉得问得挺弱智,回答“对”,“错”就行。
1,从用load指令改写CR,到产生最后的物理页面地址整个过程,是由mmu完成的,cpu不占数据总线,换句话,不考虑流水线,则cpu只是执行了刚才的load CR.两次对Ram的读操作以及相加拼接操作,没有CPU的事(它只需保证READ=1就行)
2,CR的32位的值如何从CPU里跑出来?CPU不会自动把它放在databus上,我就想到改写手头的CPU module,给他加上个端口,用32位导线把CR的值倒出来:assign line=CR;

使用特权

评论回复
computer00| | 2009-2-13 12:08 | 显示全部楼层

1. 是的。2. 你可以把它做成一个属于MMU的REG,CPU可以访问它

对于HDL,俺不熟,也没做过。只知道CPU里面有这么一个东西,具体在哪,怎么实现的俺不清楚。

使用特权

评论回复
db10| | 2009-2-14 11:26 | 显示全部楼层

00

 是否已经研究出MMU自己的程序?

使用特权

评论回复
computer00| | 2009-2-17 00:33 | 显示全部楼层

研究个鬼呀...没有深入,只是平时看资料时积累的零碎东西

使用特权

评论回复
thw| | 2009-2-18 02:24 | 显示全部楼层

...

lz不要闭门造车了。找一个PPC或ARM的手册看看MMU是怎么回事,操作MMU/TLB的相关指令再决定你怎么做吧。
如PPC604系列,TLB MISS是由硬件逻辑处理的。e500核的CPU TLB MISS时只报一个中断,TLB miss由软件处理。
搞清楚了MMU是做什么的,为什么这么做。设计一个你自己的MMU吧。
完全参考X86或其他成熟的MMU只会让你自己更糊涂。一个全功能的MMU岂止是几十万行HDL搞的完的。

使用特权

评论回复
ttxs|  楼主 | 2009-2-18 09:19 | 显示全部楼层

谢谢啊。

我手里只有一个sparc V8的IU。我没有找到mmu,TLB的特殊指令,是不是就得硬件电路实现了?

使用特权

评论回复
niuyi| | 2009-2-18 15:33 | 显示全部楼层

CR3

使用特权

评论回复
luhuajiong| | 2009-4-23 16:37 | 显示全部楼层

路过

使用特权

评论回复
平常人| | 2009-4-24 21:45 | 显示全部楼层

从操作的性质上看,寄存器是CPU能够快速访问的存储单元

硬件上有多种实现方式:专用指令访问、存储器映射、专用的I/O设备总线(如8080)等。

使用特权

评论回复
flanker| | 2009-4-28 00:21 | 显示全部楼层

有一点不到位。补充一下。

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。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

27

帖子

0

粉丝