此章节内容主要与硬件层和操作系统层面相关,与高层编程隔离,了解之。
其中,
仲裁器
多处理器计算机,多个CPU共享同一主存
主存由RAM芯片构成
RAM芯片读写操作必须串行执行
所以,每个RAM芯片与总线之间存在仲裁器(硬件电路),当RAM空闲时,允许1CPU操作。
段选择符
段选择符表明选择的段索引/指示/权限。对应的,段需要有段描述符,来标示不同内存地址段的特征,条目存放于GDT(global descriptor table,1个/CPU)或LDT(local descriptor table,进程单独设置);
上文提到的段特征,可以认为有几种常用类型:代码段、数据段、任务状态段、描述LDT的段,分别对应不同段描述符;
分段单元转换方法
硬件电路实现分段单元功能,转换方法如下:
Linux中分段
然而,Linux中未充分利用分段机制。使用4段(用户数据段/用户代码段/内核数据段/内核代码段),段起始地址均为0,从而0*index+offset= offset,线性地址即为逻辑地址。
缓存
除此之外,每个CPU内还存在TLB(translation lookaside buffer),记录线性地址对应转换后的物理地址,下次访问无需转换,无需保证多CPU内的TLB一致性。
参见http://www.wowotech.net/memory_management/tlb-flush.htm
【学习笔记】深入理解Linux内核第三版 ——第二章 内存寻址
原文:http://www.cnblogs.com/matric/p/6372173.html