thumbnail
读书笔记-中岛敦《山月记》
​ 4月去西藏玩的时候,在去程的火车上把山月记看完了。中岛敦的笔力在叙事方面非常强大,书中的篇章都是通过叙事来展现一个历史故事,或者各地风俗。最能看出笔力的当属2个长篇:《李陵》,《光·风·梦》。对我来说最深刻的我认为是《山月记》。 ​ 看这本书的初衷是多年前在网上看到的《山月记》中最有名,也是最吸引人来看这本书的一段话: 因为害怕自己并非明珠而不…
thumbnail
Ostep 20 Paging Smaller Tables
18章中遗留的2个问题,转换速度和内存开销,我们在19章中找到了TLB,通过缓存解决这个问题。剩下的就是内存开销,我们在第20章讨论这个问题。 最简单的方式,将页变大 转换页表的数量和虚拟页以及物理页的数量有关。在地址空间长度一定的情况下,页的大小越大,页码使用的bit就更少,自然页码范围就更小了。需要用来表达虚拟页和物理页映射关系的页表也就更小了…
thumbnail
Ostep 19 Faster Translations TLBs
本章主要讨论如何加速页码的转换,即如何快速通过虚拟页码找到物理页 TLB的概念 TLB(translation-lookaside buffer)是处理器芯片上内存管理单元memory-management unit的一部分,本质上是一个对于最近转换关系的一个高速缓存,所以从功能来看其实更贴切的名字是address-translation cach…
thumbnail
Ostep 18 Paging Introduction
这章引出了现在操作系统内存管理中最重要,也是最复杂的概念:页。就本书而言,都使用了长达3章的大量篇幅来介绍 基于段管理带来的复杂性以及带来的碎片,还有另外一种方式去管理内存,也就是把内存划分为固定大小fixed-sized的页 文中通过不少深入浅出的概念循序渐进的介绍,在笔记里我们就只总结关键的概念和内容了 页的概念 将内存分为固定大小的块,每块称…
thumbnail
ostep 17 Free-Space Management
这章主要介绍了空闲内存管理的一些内容,不过要先弄清楚前提,本章的内容是基于段来管理内存并且主要描述的是在管理段的内存时,内存分配库(malloc)或者os需要考虑的一些方面或者设计。有一点需要明确,否则很容易混淆:本章主要讨论的是内存分配库或者os管理某一个段内内存的情况。 内部碎片以及外部碎片 结合上一章,在段的前提下,内存的碎片进一步扩展,可能…
thumbnail
ostep-16 Segmentation
这一章还真的有点复杂和晦涩 上一章讲了base和bound的概念,base和bound通过2个寄存器直接描述进程的物理内存起止,并且可以通过base+虚拟内存中的偏移量得到实际访问的物理内存地址。 段的基本概念和基本设计 本章提出了一个新问题:按照第13章中描述的进程内存模型 按照进程内存模型,一个进程的虚拟内存如果是连续的话,其中堆和栈之间的虚拟…
thumbnail
ostep-15-Mechanism-Address-Translation
这章顾名思义,主要介绍了OS中地址转换的细节,之前提到过,用户进程看到的一定是虚拟地址空间,其中虚拟地址空间的转换就由地址转换来做。 这章的后半部分结合地址翻译器,总结了一下目前OS所有需要通过硬件支持做到的事情,包括中断、限制直接执行、地址翻译等等。 其实这章真正描述的地址转换相关内容很少,大概有以下要点: 地址转换主要通过硬件实现,在每个CPU…
ostep学习笔记-14 Interlude: Memory API
这章主要介绍了操作系统给进程提供用的内存的API,主要是C语言的视角。 内存类型 栈 栈内存由进程在编译时编译器就可以决定,栈内存主要是函数中的这类内存: void func() {int x; // declares an integer on the stack...} 简而言之就是函数内的局部变量,这些变量在编译时就可以确定大小以及数量,在函…
thumbnail
ostep学习笔记-13 Abstraction Address Spaces
这章主要描述了内存中对进程来说地址空间是什么东西 地址空间 在进程来看,地址空间分为3部分,代码(code),堆(heap),栈(stack) 在进程自己的地址空间中视图如下 其中随着内存的申请和栈的扩大,堆会在内存中向下扩展,而栈是向上,也就是会逐渐填满free那块。 还有段代码比较经典,打印进程中main函数的地址(代码),堆的地址(使用mal…
ostep学习笔记-11-12 Summary Cpi Virtualization
第11以及第12章主要是通过对话总结并且引申出了内存的虚拟化,并且都是对话内容,所以一起写一篇 CPU的虚拟化 cpu的虚拟化大概有以下要点要理解 进程切换 进程的切换主要由操作系统完成,通过对进程的定义(进程对象中使用一个结构体来保存寄存器的状态),在切换进程时由操作系统将当前CPU的寄存器状态从内存中还原回CPU或者从CPU保存到寄存器中 Li…