Linux内核初探4
来源:互联网 发布:淘宝助手5.5官方下载 编辑:程序博客网 时间:2024/05/18 03:13
一.CPU特权级别:
现代CPU都提供了几种特权级别,每个特权级别都有各种限制。英特尔处理器区分4种特权级别,但Linux只使用两种用户状态:核心态和用户态。
从用户态到核心态的切换通过系统调用的特定转换手段完成。
虚拟和物理地址空间:将实际可用的物理内存映射到虚拟地址空间的区域,采取的方法:用页表来为物理地址分配虚拟地址。物理内存页经常称作页帧。页专指虚拟地址空间中的页。
页表:
用来将虚拟地址空间映射到物理地址空间的数据结构称为页表。对虚拟地址空间的每一页,都分配一个数组项,该数组项指向与之关联的页帧(物理内存)。实际为多级分页。一般用三级页表,Linux采用四级页表。
PGD PMD PTE OFFSET 虚拟地址
全局页表 中间页表 页表 页帧
索引进程中的一个数组 指针,指向下一级的数组 映射就此完成
虚拟地址最后一部分称为偏移量。
此种机制的特色:对虚拟地址空间中不需要的区域,不必创建中间页目录或页表。
缺点:必须逐级访问多个数组才能访问到物理地址。
但也有相应的解决方法:
(1) CPU中有一个专门的部分较MMU(内存管理单元)可以优化内存访问操作。
(2) 并且将最频繁访问的地址保存到称为地址转换后备缓冲器的CPU高速缓存中。
二.内存映射
映射方法可以将任意来源的数据传输到进程的虚拟地址空间中。作为映射目标的地址空间区域可以像普通内存那样用通常的方法访问。
物理地址的分配:
在内核分配内存时,必须记录页帧的已分配或空闲状态,以免两个进程使用同样的内存区域。将整个大的完整的页帧内存划分为更小的部分的工作则委托给用户空间中的标准库,其将来源于内核的页帧拆分为小的区域,并为进程分配内存。
另外(伙伴系统简介)
目的:快速检测内存中的连续区域。
系统中的空闲内存块总是两两分组,每组中的两个内存块称作伙伴。伙伴的分配可以是独立的。但如果两个伙伴都是空闲的,内核将其合并为一个更大的内存块,作为下一层次上某个内存块的伙伴。
在应用程序释放内存时,内核可以直接检查地址。
三.SLAB缓存
目的:将伙伴系统提供的页划分为更小的部分。为频繁使用的对象实现了一个一般性的缓存SLAB缓存。
方法与实现:
对经常使用的对象,内核定义了只包含了所需类型对象实例的缓存
对通常情况下小内存的分配,内核针对不同大小的对象定义了一组SLAB缓存。
其与伙伴系统进行交互保持
四.页面回收和页面交互
页面交换通过利用磁盘空间作为扩展内存,从而增大了可用的内存。通过缺页异常机制,这种切换操作对应用程序是透明的。
页面回收用于将内存映射被修改的内容与底层的块设备同步,为此有时也简称为数据回写。
- Linux内核初探4
- 初探linux内核
- Linux内核初探1
- Linux内核初探2
- Linux内核初探3
- Linux内核初探5
- Linux内核之中断初探
- 内核开发初探, 如何编译linux内核
- Linux内核task_struct初探(1)
- linux内核0.12之MINIX文件系统初探
- 初探Linux——内核编译
- 初探Linux 2.6 内核--第一个内核模块
- linux下使用skyeye调试arm-linux内核初探
- linux内核模块和驱动程序的编写之初探
- Linux手机DIY.内核初探.系统后台启动简单介绍
- Linux手机DIY.内核初探.系统后台启动简单介绍
- linux内核初探.系统后台启动简单介绍
- poky linux初探 -- 添加自己的内核食谱
- Redis作者谈Redis应用场景
- Discuz收费插件模版合集包;discuz大部分插件下载地址;http://pan.baidu.com/s/1nt5hwU1
- Spring线程池开发实战
- Installing Play
- .NET学习之抽象类和接口
- Linux内核初探4
- 第一步 hadoop 2.6.0 64位ubuntu 下编译
- mac下phpize报错Cannot find autoconf. Please check your autoconf installation解决方法
- android SQLite InsertOrUpdate的使用
- android 遮罩制作 圆形( 多边形)头像
- Creating a new application
- Jetbrains
- 回调函数 学习
- Mongodb在Ubuntu下的安装配置(单机)