Linux-内存管理

我就是我 2022-06-18 03:28 324阅读 0赞

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.内存分配函数

  1. #include

  2. void *kmalloc(size_t size,int flags)

  3. get_zeroed_page(unsigned int flags)

  4. __get_free_page(unsigned int flags)

  5. __get_free_pages(unsigned int flags,unsigned int order)

  6. void free_page(unsigned long addr)

  7. 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…

给主人留下些什么吧!~~

28_avatar_small.jpg

lmnos2012-10-08 09:43:07

leon_yu: 其实大学本科也就学的一些基础知识,你完全可以应付的…..

哦 ![Image 1][]

回复 | 举报

40_avatar_small.jpg

leon_yu2012-10-08 09:26:31

lmnos: 唉 惭愧,我只念到初中,原来大学也用这玩意儿…..

其实大学本科也就学的一些基础知识,你完全可以应付的

回复 | 举报

28_avatar_small.jpg

lmnos2012-10-07 17:16:31

唉 惭愧,我只念到初中,原来大学也用这玩意儿

回复 | 举报

05_avatar_small.jpg

十七岁的回忆2011-12-21 23:26:20

leon_yu: 大学微机原理课用过这个,不过我这里只是拿来分析理解段机制,有兴趣的话,可以翻翻王爽的那本汇编,讲的很清楚…..

恩~大学还学单片机!

回复 | 举报

40_avatar_small.jpg

leon_yu2011-12-21 10:10:10

十七岁的回忆: 现在还有人用16位的CPU么??4核?…..

大学微机原理课用过这个,不过我这里只是拿来分析理解段机制,有兴趣的话,可以翻翻王爽的那本汇编,讲的很清楚

回复 | 举报

  • 首页
  • 上一页
  • 1
  • 2
  • 下一页
  • 末页

评论热议

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,324人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux-内存管理

    1.地址类型 物理地址\---CPU地址总线的寻址物理内存的地址信号,地址变换的最终结果 线性地址(虚拟地址) 逻辑地址\---汇编程序中的地址 逻辑地址—段式管理单元

    相关 Linux内存管理

    摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Lin

    相关 linux内存管理

    内核和用户进程在分配内存时不同,内核更复杂,需更小心,不能太奢侈 物理页:内存管理基本单位,32位(4k),64位(8k),struct page代表每个物理页 str