Linux-内存管理
1.地址类型
物理地址-—CPU地址总线的寻址物理内存的地址信号,地址变换的最终结果
线性地址(虚拟地址)
逻辑地址-—汇编程序中的地址
逻辑地址—段式管理单元—虚拟地址—页式管理—物理地址
2.段式管理:
16位的CPU拥有20位地址线(8086),它的寻址范围是2的20次方,即1M内存空间.但16位CPU寄存器只有16位置能访问64K。因此CPU加入段寄存器,采用内存分段管理模式。16位吧1M内存分为若干个逻辑段.
逻辑段的起始地址必须是16的倍数,即低4位全零。
逻辑段最大容量位64K.
逻辑地址=段基地址+段内偏移量
物理地址得到方法:
PA=段寄存器值×16+逻辑地址
eg:
访问代码段CS+IP
访问堆栈:SS+SP
3.分页管理
分页单元吧所有的内存划分位固定长度的页,长度一般与线性地址页相同。两者一一映射关系![Image 1][]
分页管理中,每一个32位的线性地址被划分位三部分,页目录索引(12位),页表索引(10位),偏移(12位)![Image 1][]
Linux内核的设计并没有全部采用Intel提供的段机制,仅采用分页机制(很多RISC不支持段机制),每个段的逻辑地址空间范围0-4GB,所有段的基地址均为0,逻辑地址与现行地址保持一致,Linux完全的利用了分页机制。2.6.10版本Linux采用三级分页模型,但从2.6.11版本开始,采用四级分页模型,如下图![Image 1][]
四级分页模型向前兼容,比如64位CPU可能采用多级分页模型,低32位与现32位CPU保持一致,高位为0.
4.虚拟内存
(1)Linux采用虚拟内存管理技术,使得每个进程都有独立的进程地址空间,大小0-3G,利用虚拟地址,不但可以保护操作系统,更重要的是用户程序可以使用比实际内存更大的地址空间。内核空间从3G-4G。
(2)每个进程用户空间是完全独立的.
(3)实际的物理内存只有当进程真的去访问新获取的虚拟内存地址时,才会有“请页机制”产生“缺页异常”,从而进入分配实际页框的程序,该异常会分配物理页,建立对应页表,这之后,虚拟地址才实实在在映射到物理地址上。
5.内存分配函数
#include
void *kmalloc(size_t size,int flags)
get_zeroed_page(unsigned int flags)
__get_free_page(unsigned int flags)
__get_free_pages(unsigned int flags,unsigned int order)
void free_page(unsigned long addr)
void free_pages(unsigned long addr,unsigned long order)
详细用法,参考LDD3的学习笔记
6.内核空间
内核空间完全是由内核负责映射的,不会跟着进程改变,是固定的。
(1)物理内存896MB以上的部分称为高端内存.
![Image 1][]
从3G开始,最大869MB的线性地址成为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系
线性地址=3G+物理地址
(2)动态内存映射区,该区有内核函数vmalloc来分配的,特点是线性空间连续,物理地址空间不一定连续,vmallc分配的线性地址对应的物理页可能处于低端内存,也可能出于高端内存。
阅读(1759) | 评论(6) | 转发(4) |
0
上一篇:I2C协议
下一篇:Linux输入子系统
相关热门文章
- linux 常见服务端口
- xmanager 2.0 for linux配置
- 【ROOTFS搭建】busybox的httpd…
- openwrt中luci学习笔记
什么是shell
linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新…
- sed -e “/grep/d” 是什么意思…
- 谁能够帮我解决LINUX 2.6 10…
给主人留下些什么吧!~~
lmnos2012-10-08 09:43:07
leon_yu: 其实大学本科也就学的一些基础知识,你完全可以应付的…..
哦 ![Image 1][]
回复 | 举报
leon_yu2012-10-08 09:26:31
lmnos: 唉 惭愧,我只念到初中,原来大学也用这玩意儿…..
其实大学本科也就学的一些基础知识,你完全可以应付的
回复 | 举报
lmnos2012-10-07 17:16:31
唉 惭愧,我只念到初中,原来大学也用这玩意儿
回复 | 举报
十七岁的回忆2011-12-21 23:26:20
leon_yu: 大学微机原理课用过这个,不过我这里只是拿来分析理解段机制,有兴趣的话,可以翻翻王爽的那本汇编,讲的很清楚…..
恩~大学还学单片机!
回复 | 举报
leon_yu2011-12-21 10:10:10
十七岁的回忆: 现在还有人用16位的CPU么??4核?…..
大学微机原理课用过这个,不过我这里只是拿来分析理解段机制,有兴趣的话,可以翻翻王爽的那本汇编,讲的很清楚
回复 | 举报
- 首页
- 上一页
- 1
- 2
- 下一页
- 末页
评论热议
[Image 1]:
还没有评论,来说两句吧...