深入Linux内核架构
最后更新于
最后更新于
前两章前段时间线下读的,读书笔记就以后再整理了
Linux内核组织虚拟内存时候,是会预留3:1的空间的比例来完成对用户空间和内核空间的内存分配比,如果是32位,此时虚拟内存为4GB,会使用最高的1GB来完成对内核空间的分配,
两种管理物理内存的方法:
一致内存访问
非一致内存访问
两种计算机体系结构的内存管理方式的区别如下:
左边是一致内存访问,可以理解成就对多个CPU而言,所访问到的内存是完全一致的(类似于Java当中的主内存),还是每个CPU都有属于自己的工作内存(与Java不同,Java当中线程的工作内存是类似于线程独占的,不会产生共用,这里CPU可以高速访问到自己的工作内存,对于别的CPU的工作内存,则需要通过总线的方式来进行访问,比较缓慢。并且没有主内存这个概念)。
本书内容集中在前一种,Linux内核当中对非一致内存访问的抽象是把NUMA看成一个节点,对于UMA则看成是由多个NUMA伪节点构成的即可。
内核内存管理抽象:内存划分成节点,每个节点直接关联到系统中的处理器当中去,节点可以进一步划分成内存域,至多只能分成四个内存域,并且某些内存域可能为空,之所以需要四个,是因为对计算机体系结构的兼容。每个内存域都关联到一个页帧(物理内存页)数组来完成对该内存域所包含的物理内存的访问与管理。
各个内存节点保存在一个单链表当中供内核管理。