当前位置:
文档之家› 看图说话:学习Linux内核(1)-ver-1.0
看图说话:学习Linux内核(1)-ver-1.0
页表
物理内存页 某字节
CR4寄存器
标志是否开启PAE
PDPT
页目录
页表项 页目录项
CR3寄存器
PDPT基地址的物理地址
PDPT项
内存管理(cont.11)
• 80x86内存访问优化
– TLB和Cache – TLB
• 缓存已经转换好的<线性地址↔物理地址>对 • 当CR3的值发生变化时,所有表项失效
内存管理(cont.5)
GDTR/LDTR
32bit
内存中:段描述符表 段地址 8 内存的某段
非编程寄存器装段描述符
段描述符 32bit 某字节
输入:段选择符(段寄存器)
13bit的index 1bit的TI 2bit的RPL
输入:逻辑地址
32bit
段地址
输出:线性地址
32bit
内存管理(cont.6)
第31bit
由分段机制ቤተ መጻሕፍቲ ባይዱ生出来的线性地址
第0bit
10bit页目录索引
10bit页表索引
12bit页内偏移 物理内存页
页表
某字节
页目录
页表项
CR3寄存器
页目录项
页目录基地址的物理地址
内存管理(cont.8)
• 80x86中的分段/分页
– 分页实现 – 硬件支持的扩展分页(4M或2M) – 注意兼容性的考虑
概述(cont.3)
• Linux发展的三条线索
– Linux内核出现
• GNU已经完成了对几乎全部UNIX的软件的重写,除了内核 • GNU的内核项目Hurd,进展缓慢 • 1991年,Linus Torvalds在一个教学的UNIX-like的操作系统Minix基础上 开发了Linux内核,并以GPL发布 • Linux内核实现了Posix标准,能很好的和GNU软件配合,成为了GNU系 统的内核 • Linux内核飞速发展,很多公司利用GNU软件+Linux内核发布自己的操作 系统,例如RedHat、Debian、FedoraCore和Gentoo等,这些系统被称 为GNU/Linux系统,一般就直接叫做Linux
内存管理(cont.10)
• 80x86的分段/分页
– 当物理内存大于4G时,如何利用之
• 80x86的寻址能力是64G(36bit地址宽度)
– PAE和PSE,PSE不被Linux支持
• 原理很简单,32 → 36
– 实现很难: » 区分虚拟地址空间 » 兼容扩展分页机制 » 注意这是硬件层面
• 因为已经解耦,页表项存的 基地址+页内偏移=36即 可
标记 标记 物理地址 物理地址
0/1 0/1
内存管理(cont.12)
• 80x86内存访问优化
– Cache
• 改善分页机制 • 缓存<内存中的内容↔线性地址>对 • 直接映射 → 全关联映射 → 组关联映射
直接映射
函数运算 线 性 地 址 标记 某块内存 (多字节) 某块内存 (多字节)
内存中的块和缓存中的块 是多对一,而且不可变。 例如:内存块映射到内存 块基地址mod缓存的总块 数
• 80x86分段/分页
– PAE的实现:增加一级(注意页表项/页目录项是8字节,其中 24bit用于和页内偏移来合成物理地址) – CR3每指定一个PDPT就可以寻址4G – 如何在程序中使用呢?
第31bit 由分段机制产生出来的线性地址 第0bit
2bit PDPT 9bit页目录索引 9bit页表索引 12bit页内偏移
• 80x86的分段/分页
– 分页概览
• 分页
– 打白条,拆东墙补西墙 – 也可能相反
• 把线性地址(虚拟地址)空间中的某块和物理地址(物理内存)中的 某块映射起来
– 利用索引找到基地址 – 加上偏移量
• 这种映射是以固定大小(页)为单位
– 80x86是4096,但是支持扩展分页到4M
• 其过程是:
• 进程内存空间布局 • 内核态虚拟地址空间
– 异常、中断、陷入、软中断、软件中断、底半(BH) – 上下文、抢占、内核栈、中断栈
• 总结
前言
• 内核 → 操作系统
– 内核:管理硬件资源,提供进程运行环境
• • • • 设备管理 进程管理 内存管理 文件管理
– 操作系统:内核+系统软件+其他常用软件
• 核心进程 • 编辑器 • 交互界面等
前言(cont.1)
• 操作系统(内核)的讲法
– 内存管理 – 系统调用 – 中断处理 – 内核同步 – I/O管理 – 文件系统......
• 我们
– 以内存管理为线索,把部分几个串起来
提纲
• 前言 • 概述
– Linux发展简史 – Linux内核简介
商业版本繁荣 • POSIX→标准化
概述(cont.2)
• Linux发展的三条线索
– GNU的发展
• UNIX并不是免费的,其软件也不是开源的 • Richard Stallman在1983年发起开源软件项目,为了构建一个免费的操作 系统:包括编辑器、编译器、文本处理和内核等 • 很多UNIX上的软件都被重写,并以GPL发布 • Emacs和GCC是旗舰项目
• Linux发展简史
– Linux是一个UNIX-like操作系统内核 – UNIX是个商标,被Open Group拥有 – UNIX用来表达符合Unix标准的操作系统
• 被Open Group的“Single UNIX Specification”认证通过才可使用UNIX 商标,否则被称为UNIX-like系统
• 内存管理
– 实模式 – 保护模式 – 虚拟地址到物理地址的总体映射关系(分区)
• 进程内存空间布局 • 内核态虚拟地址空间
– 异常、中断、陷入、软中断、软件中断、底半(BH) – 上下文、抢占、内核栈、中断栈
• 总结
概述
• 约定
– 用Linux表示使用Linux内核的操作系统,即发行版本,如Debian – 用Linux内核来表达一个内核
标记
某块内存 (多字节)
内存管理(cont.14)
• 80x86内存访问优化
– Cache
组关联映射
标记 某块内存 (多字节)
线 性 地 址
内 存 块 号 组 号 块 内 偏 移
内 存 块 号 块 内 偏 移
标记
标记
某块内存 (多字节)
内存管理(cont.13)
• 80x86内存访问优化
– Cache
全关联映射
比较运算 线 性 地 址 标记 某块内存 (多字节) 某块内存 (多字节)
内 存 块 号 块 内 偏 移
标记
全关联中,缓存中的块 和物理内存中的块没有 函数关系,必须挨个比 较“标记”来检查缓存中是 有该块。 硬件可以用一次比较来 实现,但是复杂度高。
• 概述
– 一个计算机系统(硬件)包括:
• 中央处理器 • 存储器 • 外设
– 存储器
• 是一切操作的场地(Arena) • 操作系统的操作都必须在一个内存空间中完成
– – – – 运行进程 中断处理 系统服务 I/O处理
– 解析内存管理的思路:
• 硬件支持和接口 → Linux对内核态虚拟地址的映射 → 用户态虚拟地 址的映射
提纲
• 前言 • 概述
– Linux发展简史 – Linux内核简介
• 内存管理
– 实模式 – 保护模式 – 虚拟地址到物理地址的总体映射关系(分区)
• 进程内存空间布局 • 内核态虚拟地址空间
– 异常、中断、陷入、软中断、软件中断、底半(BH) – 上下文、抢占、内核栈、中断栈
• 总结
内存管理
线性地址 逻辑地址 分段单元 分页单元 物理地址
段选择符(给出段地址)
内存管理(cont.3)
• 80x86的分段/分页
– 分段概览
内存中:段描述符表
段地址
内存的某段
段描述符
输入:段选择符(段寄存器)
某字节
16bit
输入:逻辑地址
32bit
段地址
输出:线性地址
32bit
内存管理(cont.4)
• 80x86的分段/分页
看图说话:学习Linux内核(1)-ver1.0
——以内存管理为线索
腾讯研究院/北京分院/无线组 周晓波(xiaobozhou) 2010-03-29
提纲
• 前言 • 概述
– Linux发展简史 – Linux内核简介
• 内存管理
– 实模式 – 保护模式 – 虚拟地址到物理地址的总体映射关系(分区)
– Linux发展的三条线索
• UNIX的发展 • GNU的发展 • Linux内核的出现
概述(cont.1)
• Linux发展的三条线索
– UNIX的发展
• 世界上没有一个操作系统叫UNIX——白马非马 • 1969年,Ken Thompson和Dennis Ritchie在AT&T贝尔实验室实现了 Unix→Multics涅磐 • 1973年,用C语言重写Unix→飞速发展 • AT&T以分发许可证的方式,把Unix分发给大学和研究机构,及至 Unix第六版,AT&T意识到商业价值,成立USL,并宣布对Unix所有 权→开放到封闭 • 同时伯克利成立CSRG,开发并发布BSD Unix→Tcp/IP • AT&T引入BSD的一些优点,发布Unix System V→它和BSD成为现 代UNIX的两个分支 • 很多公司基于这两个分支发布自己的系统Solaris,HP-UX,AIX等→
内存管理(cont.10)
• 80x86分段/分页