当前位置:网站首页>学内核之四:关于内核与硬件的衔接
学内核之四:关于内核与硬件的衔接
2022-08-02 04:19:00 【龙赤子】
要理解软件的行为,特别是底层的行为,比如内核的实现,就需要对硬件有所了解。
最近在学习内核时,遇到了一些理解上的问题,思考后发现,在硬件层面做一些工作,特别有助于对内核的学习,更有助于对上层软件工作过程的理解。
即便计算机技术以日新月异的速度发展到今天,其内在本质的体系结构仍未有脱离图灵机模型,强调这一点,是为了进一步强调,计算机的那些基础技术仍然是管用的,特别是中央控制器和内存的基本工作原理。要想理解操作系统层面软件的很多行为(比如原子操作、各种锁、每CPU变量、各种类型的栈、中断异常、各种上下文、系统调用、Cache一致性等等),最重要的就是理解CPU和内存的工作过程。
那怎么去掌握这些内容呢?这里讲讲我的方法。
实际上,现代CPU已经不是几年、甚至十几年前的样子了,很多新特性在不断地融入进来。其中涉及的细节,绝对让人望而生畏。随便一个现代CPU的手册都有上千页,这实实在在是一个系统工程。
所以,我们需要舍去一些细节的东西,一步一步来,逐渐的将自己的黑盒变成白盒。否则,陷入很多细节中就会出现只见树木不见森林的结果。
为了更好的掌握上面几个点,经过思考,我重新梳理了之前的一些东西,将其整理到一幅图中,通过这幅图,来辅助理解之前遇到的几个问题。
这幅图是原理性的,有很多简化之处,不过,目前这幅图可以帮助我们理解很多东西。
首先,简单说说图中的内容。上图左边一个大块,表示了CPU。该CPU内部有4个核心。右边那条代表了内存。
CPU里的每个核心,基本构成都是一样的,包括控制单元,算术运算单元,寄存器以及L1 Cache。
L2 Cache由部分核心共享,L3 Cache,则由所有核心共享。同时CPU内部还有内存管理单元MMU。MMU为了缓存表目,还有一个TLB。
当然,前面说了,上图中只是原理性的,很多东西没有体现出来。这包括一部分暂时还不清楚的东西。比如,对于MMU来讲,是每个核心一个还是所有核心共享。或者说,不同的CPU设计,两种可能都有。从有些资料上可以看到,TLB现在都是每CPU一个。如果可以独享,那么各个核心就可以并行访问内存。当然,共享也可以,无非就是多一些条目,每个核心分一点。
对于Cache和TLB,谁在前谁在后,也是一个问题。有的可能是先Cache再TLB,有的可能反过来。这就涉及VIVT/PIPT/VIPT等了。
还有Cache一致性协议MESI,也没有体现出来。这些东西,遇到了再补充。
好了,现在就以上图为基准,看看一些问题的处理,该如何理解。
边栏推荐
- Learn about the sequential storage structure of binary tree - heap
- AFMG SysTune1.3.7使用图解
- Deep Blue Academy - Fourteen Lectures of Visual SLAM - Chapter 4 Homework
- 高等数学(第七版)同济大学 总习题三(后10题) 个人解答
- 多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
- 论文速读:Homography Loss for Monocular 3D Object Detection
- 批量--10---根据set数拆分文件
- P1192 台阶问题
- C语言:结构体总结
- JDBC再回顾
猜你喜欢
什么是接触电流怎么测?
falco 【1】入门
Jetson Nano 2GB Developer Kit Installation Instructions
UI自动化测试框架搭建——标记性能较差用例
6个月测试经验,面试跳槽狮子大开口要18K,只会点点点,给我整无语了。。
直播 | 7.30 ApacheCon Asia 2022 IOT/IIOT专题,IoTDB PMC 乔嘉林担任出品人
Deep Blue Academy - 14 Lectures on Visual SLAM - Chapter 7 Homework
无主复制系统(2)-读写quorum
Deep Blue Academy - Visual SLAM Lecture Fourteen - Chapter 5 Homework
Nuscenes数据集总结(下)
随机推荐
安装部署 Kubernetes 仪表板(Dashboard)
PDF文件转换格式
Batch normalization (BN) based on deep learning
MySQL存储函数详解
Minecraft 1.18.1、1.18.2模组开发 23.3D动画盔甲制作
日本痴汉打赏女主播1.5亿,结果。。。
A Practical Arrangement of Map GIS Development Matters (Part 1)
【FreeRTOS】12 任务通知——更省资源的同步方式
Scala basics [common method supplement, pattern matching]
使用GD32F207的高级定时器来产生PWM波出现的隐藏BUG
UI自动化测试框架搭建——标记性能较差用例
ADSP21489数据手册表摘要
PyQt5_pyqtgraph鼠标在折线图上画直线
一次跳出最外层循环
C程序调试过程常见的错误
Visual SLAM Lecture Fourteen - Lecture 13 Practice: Designing a SLAM system (the most detailed code debugging and running steps)
EasyCVR视频广场切换通道,视频播放协议异常的问题修复
不会多线程还想进 BAT?精选 19 道多线程面试题,有答案边看边学
C语言:结构体总结
26. 如何判断一个对象是否存活?(或者GC对象的判定方法)?