怎么学linux内核?linux最好用的系统
老铁们,大家好,相信还有很多朋友对于怎么学linux内核和linux最好用的系统的相关问题不太懂,没关系,今天就由我来为大家分享分享怎么学linux内核以及linux最好用的系统的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
要如何学习linux内核
1.首先要了解为什么要学习内核?下图已表明,如果要从事驱动开发或系统研究,就要学习内核。
2.内核的知识就像下面的绳结一样,一环扣一环,我们要解开它们,就必须要先找到线头也就是内核中的函数接口。初学阶段,我们一般不深入的研究内核代码,会使用内核的接口函数就不错了。
3.下面提供了如何学习这些内核函数的方法,就像解绳子一样
4.学习内核的四步法则,思维导图的设计尤为重要,这也是能否学习好内核的关键
5.语言基础也需要扎实,所以需要把C语言巩固巩固
Linux内核学习笔记——内核页表隔离KPTI机制
Linux内核探索:深入理解KPTI机制对抗Meltdown& Spectre漏洞
在现代计算机体系结构中,Meltdown和Spectre两大漏洞利用了CPU预测执行的微妙特性,通过非法操作在rax被清零前传递关键信息。其攻击策略主要包括非法指令标记、rax清除、缓存中的信息泄露以及利用时间差异定位关键地址。针对这一挑战,Linux内核引入了KPTI(Kernel Page Table Isolation)机制,以KAISER为基础,旨在增强用户和内核空间的隔离,同时尽可能减少性能影响。
KPTI的核心在于精细化的页表管理。当运行用户应用时,只保留必要的内核异常映射,避免直接暴露敏感信息。设计了trampoline kernel PGD(跳板页全局目录),在用户权限进入内核时,负责执行转换,确保用户无法触及kernel data。
Unmap kernel mapping过程
从内核返回用户空间时,正常情况下kernel_exit会调用trampoline的退出处理,将内核映射替换为trampoline,这个过程被称为unmap kernel mapping,旨在强化隔离。
而TLB(Translation Lookaside Buffer)作为虚拟地址到物理地址转换的高速缓存,其刷新策略至关重要。在最初的系统设计中,每个进程独立的虚拟地址空间导致地址转换时的混乱,进程切换时会刷新TLB。引入KPTI后,操作系统区分了内核和用户空间,内核空间使用全局TLB以提高效率。
PCID和ASID的引入
为了应对KPTI需求,引入了PCID(进程上下文标识符)和ASID(地址空间标识符)。这样,每个进程都拥有独特的标识,TLB条目根据当前进程的ASID进行标记。
这样做的好处在于,内核空间不再是全局共享,确保了隔离性。同时,避免了在内核用户模式切换时刷新TLB,从而避免性能损失。
通过这些策略,KPTI机制有效地防止了恶意攻击,同时也为用户和内核提供了一层额外的安全防护层。
深入了解KPTI机制
若想深入了解KPTI的实现细节和影响,可以参考原文:[Link to original article]()
如何自学linux内核
1学习一些操作系统的理论知识,一些概念。比如:进程,内存管理,文件系统等等。关于这一方面的书籍太多了,自己找一本就行了
2学习x86汇编,虽然linux用的是AT&T汇编,但二者只是格式不同而已。而且学习x86汇编有助于了解x86系统结构。书籍推荐王爽的《汇编语言》,我学的时候用的不是这个,后面看到这本书,才觉得自己做了“苦功了”。学完大部分汇编指令时,找些汇编程序读读,熟悉这些指令的用法。不需要有写汇编程序的能力,能读就行了,当然会写更好
3赵炯的《Linux内核0.11完全注释》。这个linux内核版本低,作者也讲得很详细。不过关于x86体系的那一部分,作者讲得很繁琐,这一部分一定要大体看懂,那后面章节的内容就没有多大的问题了。我先把书通看了一遍,用了1个月的时间。后来,再返回来一个一个研究,用了2个月。
之所以看这本书,是让自己对内核有个实质的感受,不仅仅只是理论上的东西。
4毛德操的《linux内核情景分析》。linux内核版本2.4.0,这本书很厚,上下两册。我通读一遍,用了2个月时间。后来,再返回来一个一个研究,现在已用了2个月,正在研究中。。。。就我个人觉得,linux内核最难的是内存管理,这2个月我就只大体搞清内存页面的周转,但搞清了这个,就会对内核的整体结构有个大致的了解,因为你已经清楚了用户进程和内核的其它部分是怎样使用内存页面的。
5学习linux内核最需要的是坚持和思考。这是一个很长的过程,也许你会发现学了linux内核,并不会给你带来什么,我现在就是这样觉得的,感觉自己什么都不会做,真希望有人能我一些建议!不过学习学习也是有好处的,比如看了赵炯的《Linux内核0.11完全注释》后,你再去看UCOS-II,会感觉那太容易了!也许学习linux内核会对将来的工作有所帮助吧!