嵌入式linux 内核驱动 内存管理,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(4)、内存管理(Linux内存管理)—①...

NFS

起根文件系统只能先放一放了,实再是不行了,必须继续进行下面的了~~

最可悲的是昨天的考试还被抓了~~

日了~~

(四)、嵌入式Linux内核驱动进阶

(4)、内存管理(Linux内存管理)—①

1、32位CPU的段式管理、页式管理

首先呢,介绍一下32位CPU的段式管理以及业式管理。

1)段式管理

学过微机原理的肯定是知道段式管理的,所以我也就是不说了。

32位PC的内存管理仍然采用“分段”的管理模式,逻辑地址同样由段地址和偏移量两部分组成,32位的PC的内存管理和16位PC的内存管理有相同之处也有不同之处,因为32位PC采用了两种不同的工作方式:实模式和保护模式。

32位CPU内有6个段寄存器,其值在不同的模式下有不同的含义:

实模式(这个完全可以忽略,因为不用):

在实模式下,32位CPU的内存管理与16位CPU是抑制的。

段寄存器的值*16就是段地址

保护模式:

段基地址长达32位,每个段的最大容量可达4G,段寄存器的值是段地址的“选择器”(Selector),用该“寄存器”从内存中得到一个32位的段地址,存储单元的物理地址就是该段地址加上段内偏移量,这与32位CPU的物理地址计算方式完全不同。

段寄存器的值是一个选择器,间接指出一个32位的段地址

如图:

2)分页管理

从管理和效率的角度出发,线性地址被分为固定产度的组,称为页(page),例如32位的机器,线性地址最大可位4G,如果用4KB为一个页来划分,这样整个线性地址就被划分为2的20次方个页。

另一类页称为物理页,或者页框、页桢。分页单元把所有的物理内存也划分为固定长度的管理单位,它的长度一般与线性地址页是相同的。

如图:

a4c26d1e5885305701be709a3d33442f.png

①、分页单元中,页目录的地址放在CPU的cr3寄存器中,是进行地址转换的开始点。

②、每一个进程,都有其独立的虚拟地址空间,进行一个进程,首先需要将它的页目录地址放到cr3寄存器中,将其它的进程保存下来。

③、每一个32位的线性地址被划分为三部分:

页目录索引(10位)、页表索引(10位)、偏移(12位)

然后就是转换步骤:

①、装入进程的页目录地址(操作系统在调度进程时,把这个地址装入 rc3)

②、根据线性地址前十位,在页目录中,找到对应的索引项,页目录中的项是一个页表的地址。

③、根据线性地址的中间十位,在也表中找到页的起始地址。

④、将页的起始地址与线性地址的最后12位相加,得到物理地址。

2、Linux内存管理

介绍完32位的内存管理,然后就是Linux的内存管理。

Linux内核的设计并没有全部采用 Intel 所提供的段机制,仅仅是有限度的(设置可以说就是没有用到)使用了分段机制。

这不仅仅简化了Linux内核的设计,而且为把Linux移植到其他平台创造了条件,因为很多RISC处理器并不支持段机制。

所有的段的基地址均为0

由此可以得出,每个段的逻辑地址空间范围为0~4GB。因为每个段的基地址为0,因此,逻辑地址与线性地址保持一致(既逻辑地址的偏移量字符的值与线性地址的值总是相同的),在Linux中所提到的逻辑地址和线性地址(虚拟地址),可以认为是一致的。看来Linux巧妙地把段机制给绕过去了,而完全利用了分页机制。

前面介绍的二级页管理架构,不过有些CPU(Alpha 64位)使用三级、设置四级架构,Linux

2.6.29内核为每种CPU提供了统一的界面,采用了四级页管理架构,来兼容二级、三级、四级管理架构的CPU。

a4c26d1e5885305701be709a3d33442f.png

这司机分别为:

1、页全局目录(Page Global Directory):既pgd,是多级页表的抽象最高层。

2、页上级目录(Page Upper Directory):既pud。

3、页中间目录(Page Middle Diretory):既pmd,是页表的中间层。

4、页表(Page Tabbl Entry):既pte。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值