来源:yifengyou
浏览 1499
扫码
分享
2020-03-18 07:42:42
第8章-内核代码
- 首先,必须要声明一点,从这一章开始,作者笔锋突变。。呃,其实没变,只是作者应该也曾试图探索如何更傻瓜式的让读者领会内核要领。但是呢,身为菜鸡,我特么就想问了,你直接每个源代码文件注释,我怎么能懂嘞?动动脑筋,你应该能领会
- 内核,很多函数,在初始化期间并不会调用,典型的panic(),panic一调用,系统就JJ,它是针对特定场所提供的。所以,你必须要明白,内核初始化主函数执行过程中,切换到任务0。它初始化其实只是调用内核函数,预分配一些内存用来做缓存,或者外设初始化开始正常工作,硬盘初始化可以读写,软盘初始化等,这些初始化的目的就是为了给后面,正常程序使用做铺垫。初始化,本质,就是分配内存,用来存放对应模块状态或者给对应模块找个坑,让它之后的工作能够正常进行。
- 好比食堂开饭前,大叔大妈忙的啥?肯定是准备菜啊,那种菜摆哪个窗口基本固定(内核新特性=新开特色菜窗口),但是你得有空间用来摆放菜啊,酱紫童鞋们去食堂,根据窗口标签,知道这个窗口提供什么菜。但是PC很傻很天真,它没有眼睛,你得明确告诉它,当前内核固定到某个地方获取全局参数,固定到某个地方调用函数。
- 辣么多内核函数,类别不同,参数不通,执行流不同,但是,都堆到一个文件里,内核镜像,启动的时候加载内核镜像,这个时候OS kernel就跑起来了。这其中编译器帮我们做了非常多的工作。
- 内核为什么要导出符号?就是那个键值对,“字符串=地址”的形式,就是为了给其他程序使用,你想调用啥就得到固定地址去折腾。可是平常内核模块没有要求我们这么折腾?那还不是编译器链接器,还有内核模块加载器的配合。知道了他们的工作,对底层又是一方不一样的透彻心扉。
- 但是呢?说这么多,到底该如何去领会?该怎么学?。。其实这个问题本质在于,你想学到什么程度?如果你只想理解基本原理,好的,你不用继续看了。因为已经没有啥高大上的原理了。从体系结构到os自举再到task运行,到这一章节之前已经搞定。剩下的章节,其实就是os的扩充,进程调度,怎么个使劲折腾CPU才爽快,文件系统,怎么个存锤子更方便高效等等,衍生出多种调度策略,多种文件系统。。可特么的这些东西目的就一个,高效利用资源。
- 可能某个模块复杂到家,需要你花一辈子时间去搞定,but,有必要么?这年头很多东西都谈扩展性,无非就是留了个接口而已
- 所以其后的章节,包括这一章,都是按照源码目录来的,你得这么想。内核提供了什么功能模块?这个功能模块怎么实现的就可以了。别想着一根筋从main函数开始,莫得智障了哈~