linux内存知识总结

虚拟地址与物理地址

1 大多数情况下,单个虚拟地址空间就比系统中可用的物理内存要大。在每个进程都有自身的虚拟地址空间时,情况也不会有什么改善。因此内核和CPU必须考虑如何将实际可用的物理内存映射到虚拟地址空间的区域。

可取的方法是用页表来为物理地址分配虚拟地址。虚拟地址关系到进程的用户空间和内核空间,而物理地址则用来寻址实际可用的内存。

下图是两个进程的虚拟地址空间,都被内核划分为很多等长的部分。这些部分称之为页。物理内存也划分为同样大小的页。

2 物理内存也称为页帧,页指虚拟空间中的页。

3 第五个页帧是两个进程显示共享的页帧,这种情况是可能的,因为两个虚拟地址空间中的页可以映射到同一物理内存页(内核可以决定哪些内存区域在进程之间共享,哪些不共享)。

4 并非所有页(虚拟地址中的页)都映射到某个页帧。

可能是因为某个页没有使用,也可能数据不需要使用而没有载入内存中。还可能是页已经换出到硬盘,将在需要是再换回内存。

5 用户运行的应用程序的不同说法:

BSD社区通常称为用户层,指所有不属于内核的东西。

用户空间,不仅可以表示应用程序,还指代了应用程序所运行的虚拟地址空间的一部分,与内核空间相对。


页表与多级分页

1页表,将虚拟地址空间映射到物理地址空间的数据结构。

2多级分页的必要性:如果虚拟地址空间都分配一个数组,那么将会消耗巨大的内存资源

3linux为四级分页

4 例,使用三级分页来说明分页机制

 

× 全局页表目录,PGD用于索引进程中的一个数组(每个进程有且只有一个)

PGD的数组项指向另一些数组的起始地址

× 上诉的这些数组称为PMD,在通过PGD的数组项找到对应PMD之后,便使用PMD来索引PMD,PMD的数据项也是指针,指向下一级数组,称为页表或目录。

× 虚拟地址第三部分称为PTE,用作页表的索引。

虚拟内存页和页帧之间的映射就此完成

× 虚拟地址最后一部分为偏移量

这样带来的弊端是每次访问内存时,必须逐级访问各个数组才能将虚拟地址转化为物理地址,CPU采用以下方法加速:

①内存管理单元(MMU),优化内存访问操作

②地址转换中最频繁的那些地址,保存到地址后备缓存器(TLB)的cpu高速缓存中,加速地址转换。

5内存映射

 内存映射是一种抽象手段,内核中大量使用,也可用于应用程序。

 映射方法可以讲任意来源的数据传输到进程的虚拟空间中。作为映射目标的地址空间区域,可以像普通内存那样用通常的方法访问,但任何修改都会自动传输到原数据源,这样可以使用相同的函数处理完全不同的目标对象。

 内核在实现设备驱动程序时直接使用了内存映射。外设的输入输出可以映射到虚拟地址空间的区域中。对相关区域的读写会有系统重定向到设备。

6设备驱动

 万物皆文件,设备驱动文件用于系统连接的输入输出装置通信。对外设的访问可利用/dev目录下的设备文件来完成。设备驱动程序的任务在于支持应用程序经由设备文件与设备通信。换言之,使之能够按适当的方式在设备上读取/写入数据。、

(注,本文使用内核版本2.4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值