您的位置 首页 芯闻

S3C2440存储控制器和MMU浅析

一、S3C2440存储控制器如果大家写过S3C2440的ARM裸机程序都应该知道通常SDRAM的起始地址是0X30000000,但是大家有没有想过为什么呢?下面我

一、S3C2440存储控制器

假如咱们写过S3C2440的ARM裸机程序都应该知道一般SDRAM的开端地址是0X30000000,可是咱们有没有想过为什么呢?下面我将给咱们做一个扼要的介绍。

查S3C2440的手册可知S3C2440可寻址1G的地址规模,可是S3C2440的地址线只需27根,理论上只能寻址2的27次方等于128M的地址规模。所以S3C2440经过一个叫BANK的东东处理了这个问题。S3C2440引出了8根BANK线(对应nGCS0~ nGCS7),经过这个8根线来选通和封闭不同的存储器,这样S3C2440最多就能够衔接8个128M的存储器,只需在某一时间只选通一个BANK就能够完结1G的寻址空间每个BANK有个地址,对该BANK地址的拜访实践上便是选通该BANK,所以ARM核只需宣布一个地址,然后S3C2440的贮存控制器只需把该地址解说成两部分:一部分是BANK地址一部分是衔接到该BANK存储器内部的地址就能够拜访了。

而作为32位的CPU,能够运用的地址规模理论上能够到达2的32次方等于4G,除掉上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩余的地址空间没有运用。

下面咱们来看到S3C2440存储器的地址空间分布图

左面的是表明CPU从NOR FLASH发动时的地址空间图,右边是CPU从NAND FLASH发动时的地址空间图。从图中能够看出SDRAM接在BANK6上面,地址为0X30000000,这就解说了开端最开端的那个问题。问题又来了为什么CPU从NAND和NOR发动时地址空间不同?这是由于NOR是线性结构,跟一般的内存差不多,它接在BANK0上。而NAND则是别的一种结构,S3C2440有专用的NAND控制器和地址线来衔接,它不能接在BANK0上。CPU发动时必定从0地址开端履行程序,而从NAND发动时,0地址没有存储器,那CPU怎么办呢?所以就呈现了一种叫“起步石”(stepping stone)的东东,它是S3C2440内部的一块4K的存储器,当从NAND发动时,0地址线会衔接到起步石上面,一起CPU会经过内部的硬件将NAND FLASH开端的4K数据复制到起步石里边。起步石里边的程序一般规划为对SDRAM进行初始化,然后将NAND里边的部分程序复制到SDARM,然后跳到SDRAM开端履行程序。所以作为U-BOOT移植使其支撑从NAND的发动时,需求对NAND的前4K程序做处理。

下面咱们再来看看S3C440存储控制器一般所接外设的拜访地址和部分寄存器的拜访地址

二、S3C2440MMU

1.MMU的效果

咱们再榜首部分评论的全部都是物理地址,留意不要与这部分要将的虚拟地址给混杂起来。

内存办理单元(Memory ManagerUnit)简称MMU。它担任将虚拟地址转化成物理地址,然后传给上部分介绍的存储办理器进行寻址。

现代的多用户多进程操作系统经过MMU使各个用户进程都有自己的独立的地址空间:地址映射功用功用使的个进程具有“看起来”相同的地址空间,而内存拜访权限的查看能够维护每个进程所用的内存不会被其他进程损坏。

我来打个糟糕的比如。甲同学(进程甲)去一个图书办理员那儿去借名为“内存”的一本书,说他7点钟要用。图书办理员给甲同学一个牌子上面写着哪个层高楼哪个房间有这本书,不过这块牌子只能7点钟去取书,且只能借三个小时(权限),而乙同学相同要借这本书不过是12点,图书馆相同给乙同学一块牌子,不同的时这块牌子只能12点钟去取书也只能借三个小时。结果是甲乙同学都借到了这本书,他们都感觉具有了这本书,在他们具有这本书的期间不会被其他同学打扰。实践上这儿的同学就代表进程,图书办理员代表是内核,牌子代表的是虚拟地址,书代表实践的内存,而MMU完结的作业便是拿到同学的牌子帮同学找到书的进程。

虚拟地址终究要转成物理地址才干读写实践的数据,这经过将虚拟地址空间、物理地址空间划分为一个相同巨细的一块块小空间,然后为着两类小空间树立映射空间,有或许多块虚拟地址映射到同一块物理地址空间,或许有些虚拟地址空间映射详细物理地址空间上去。发动MMU后,CPU对外宣布虚拟地址,然后MMU将虚拟地址转成物理地址再进行拜访。

2.虚拟地址空间到物理空间的转化进程

在ARM CPU中运用页表的方法进行转化。linux内核一般运用两级页表的方法。页表是个什么东东,他就像咱们的书上的目录,有主目录,次目录。当咱们要找一个知识点的时分先找到主目录,然后再找到次目录再找到相应的知识点。每一个进程都会在内存里边创立一个目录,目录的寄存地址保存起来。当需求拜访目录时,就会将目录放到CPU的一个专用寄存器里边,然后MMU读取这个寄存器里边的值就会帮咱们找到咱们要拜访的物理地址。

页表是怎样树立的呢?

实践上它便是在内存的一个地址内寄存了榜首级目录的内存地址,然后在榜首个级的目录的内存内又寄存了实践的物理地址。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/260600.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部