操作系统基础(内存管理)

内存管理是任何操作系统的重点和难点。它旨在为系统中的所有Task提供稳定可靠的内存分配,释放与保护机制。
Android中的音频系统,GUI系统以及Binder的实现机理等,都与内存管理是息息相关的,内存管理的底层原理基本都是不变的。以下是几个核心的理解点:

  • 虚拟内存
  • 内存分配与回收
  • 内存保护

1. 虚拟内存

随着软件体积的增大,出现了机器不能一次性将整个程序读入内存的情况。虚拟内存的出现为大体积程序运行提供了可能,它的基本思想是:

  • 将外部存储器的部分空间作为内存的扩展(例如从硬盘划分4GB)
  • 当内存资源不足的时候,系统将按照一定算法自动挑选优先级低的数据库,并把它们存入硬盘中
  • 后续如果需要用到硬盘中的这些数据库,系统将产生“缺页”指令,将它们交换回内存中。
  • 这些操作都是由操作系统内核自动完成的,对上层应用完全透明

1.1 逻辑地址(Logic Address)

它又被称为相对地址,是程序编译后产生的地址,由两部分组成:

Segment Selector:段选择子
用于描述逻辑地址所处的段,16bit

Segment Selector

TI:Table Indicator,它的值对应的是两个table——

  • GDT (Global Descriptor Table):有效范围是全局的
  • LDT (Local Descriptor Table):进程自己创建本地表,以增加额外的段

他们都是用来记录各种段描述符(Segment Descriptors),而表本身的存储地址则是由GDTR和LDTR这两个cpu寄存器来保存
因此,TI的作用就是代表GDTR/LDTR中的序号:0表示GDT,1表示LDT。

**Offset:段内偏移值
用于描述段内的偏移值,32bit。

CPU提供了专用的寄存器来承载段选择子

寄存器名称 描述
CS Code Segment Register,代码段寄存器
DS Data Segment Register,全局与静态数据段寄存器
SS Stack Segment Register,堆栈段寄存器
ES Extra Segment Register,附加数据段寄存器
FS,GS 通用段寄存器

逻辑地址需要两次变换才能得到物理地址:


地址空间转换过程简图

并不是所有的操作系统都同时致辞后段页式的内存管理,有些操作系统只提供了页式的管理机制,而Linux 内核虽然理论上式段页式的,但也只是实现了分页机制(分段机制只用到了一部分功能)。

1.2 线性地址(Linear Address)

线性地址式根据逻辑地址经过分段机制后形成的,其基本思想:

  • 根据段选择子中的TI字段,得知存储在GDT/LDT中
  • 通过GDTR/LDTR获得GDT/LDT的存储地址。
  • 根据段选择子中的INDEX字段,到GDT/LDT中查找对应的段描述符。
  • 根据段描述符获得此段的基地址。
  • 由基地址+段内偏移值得到线性地址


    逻辑地址到线性地址转换

1.3 物理地址

开启了分页机制后,线性地址还需要一次转换才能到物理地址:


线性地址到物理地址

逻辑地址到物理地址转换详细过程参考

1.4 缺页

缺页

如图,当线性地址中某些与物理内存的页没有映射关系,就说明它们实际上暂时并不在内存中,就会发生缺页中断,操作系统此时会介入,通常式用算法将最不常用的页调出内存,从而为线性地址中的“缺失页”腾出位置,然后将“缺失页”从外存储器重新取回,然后返回中断点,继续操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容