您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    Java 开发者需求研讨 JDK,Linux 开发者需求研讨 Kernel
    时间:2020-03-07 08:09 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

     

    Java 开发者需求研讨 JDK,Linux 开发者需求研讨 Kernel

    2019 年是 Linux 内核降生的第 28 年,1991 年 8 月 26 日,当年还是大先生的 Linus Torvalds 向 comp.os.minix 旧事组的成员泄漏了出于“专业快乐喜欢”而正在研讨操作系统的音讯。

    Linux Kernel 是全球最大的开源项目,知名的科技公司简直都参与其中,包括微软、谷歌、Red Hat、SUSE、Intel、Facebook、百度、阿里、华为、Oracle 与腾讯等。同时,基于 Kernel 衍生出的发行版与各种周边项目也让其生态多姿多彩。

    另一方面,在当今云原生高速开展的时代,其底层也大多基于 Linux Kernel,甚至连微软也表示 Linux 运转了 Azure 任务负载的 50% 以上。

    Linux Kernel 短期内不会过气,而是会进一步影响到更多开发者,但是 Linux Kernel 的入门和实际却很困难,这让许多初学者望而生畏,哪个开发者说本人是 Linux Kernel 范围的,那其别人必定会肃然起敬。

    最近了解到有一本值得初学者学习的相关书籍《知晓 Linux 内核——智能设备开发中心技术》,我们就如何学习 Linux Kernel、Linux Kernel 2019 年的开展与相关运用范围等成绩采访了作者姜亚华,希望能给到想要了解、研讨 Linux Kernel 的开发者一些启示。以下是对话内容,姜教员会抽取三位留言的读者送出图书

    2019 年 Linux Kernel 进入了 5.x 时代,虽然 Linus 本人说从 4.20 到 5.x 只是由于本人手指不够用,但是实践上以您的了解,这关于项目的生命周期管理、特性兼并或许社区文档树立等方面有没有比较大的影响呢?

    姜亚华:

    5. x 其实更新蛮多的,patch 文件 40 多 M,触及 10000 多个文件。

    这是一个大版本更新,从用户看法角度来讲,4.x 曾经是旧的了,就似乎 iPhone 更新,Apple 维持两年一个大更新的节拍,买了一款 iPhone,下一年的小更新不会有啥觉得,但是第二年大更新后,才觉得我的手机不是最盛行的了。

    新的项目,文档等一定都需求向 5.x 看齐了。

    从代码角度来讲,我们可以从内核更新的进程中学习到很多优化的思绪。我末尾写作《知晓 Linux 内核——智能设备开发中心技术》的时分外核还是 3.x,在书中也刻意保留了部分 3.x 的讨论(sysfs、进场切换等),就是为了经过比照总结这方面的阅历。

    书中讲到文件系统,但是没有关于最近微软件开放出来的 exFAT,猜想是由于您这书曾经在此之前就写了,那目前您有没有继续研讨 exFAT 相关的内容呢?目前 exFAT 也曾经在 5.4 中支持,它的才能上会带来什么影响呢?

    姜亚华:

    是的,我接上去计划再深化一些模块,exFAT 是其中之一。它的未来如何还很难说,Linux 曾经有很多优秀的文件舷了,它们都经过了多年的验证,bug 能够也相对少一些,exFAT 还需求在 Linux 上经过时间的考验。

    近期另一个内核新特性也惹起了普遍的讨论,那就是内核锁定,这个特性其实讨论了多年,最后它的表现方式似乎也挺让人不解的。该特性限制了 root 角色的权限,但是 root 是系统的最初级权限都有不能拜访的中央,这关于 root 来说是挺奇异的一件事情,在开发、运维或许日常运用上这会产生什么比较大的影响吗?

    姜亚华:

    内核锁定主要是为了避免 root 帐户窜改内核代码,从而在用户态进程和代码之间划清界限。启用锁定模块后,各种内核功用都会遭到限制。其中包括对内核功用的拜访限制;对 /dev/mem 的读写操作的阻止;对 CPU MSR 拜访的限制;以及避免系统进入睡眠形状等等。

    这对 root 来说其实并不奇异,它依然是超级用户,可以拜访一切正常的门。只不过内核锁定把一些“后门”去掉了,这些门常闭或许不存在了。

    引入内核锁定(CONFIG_SECURITY)后,root 的拜访遭到限制,开发、运维等进程中运用的脚本或许 sequence 能够就不能任务了。比如 root 可以经过 /dev/mem 文件拜访内存,引入内核锁定后能够会遭到限制。

    说句题外话,root 是个挺风险的东西,慎用。记得我担任管理部门效劳器的时分,有一次供应商帮我移植驱动的进程中,安装软件的时分不小心删除了一些文件,效劳器断电后就无法启动了。我带着光盘,在有数效劳器轰鸣的实验室中,花了好几天赋将它“抢救”回来。

    置信很多开发者,或许刚在大学学计算机的人在了解了 Linux Kernel 之后都会想要去读它的源码,但是应该大部分都会不得其法,最终保持。您是怎样阅读 Linux 内核源码的呢?有什么工具、办法与其它阅历可以分享?

    姜亚华:

    我也是一行一行代码看上去的,几点建议供大家参考。

    首先,先大约弄清原理,再细心研讨代码,事半功倍。关于曾经成熟的模块,可以先借助书籍和博客大致了解它的基本信息。

    其次,边读代码边做笔记,避免看了前面遗忘前面。做笔记的软件蛮多的(比如微软的 OneNote),选择用的习气的就好。

    最后,自我鼓舞,坚持究竟,最好是兴味使然。

    好在大家不需求从头末尾了,我曾经把本人看过的代码的截图放在随书材料中了,算是一小段捷径吧。这些截图外面,某函数、它调用的函数等函数调用关系运用红线标示(如下图),内容包括内存管理、文件系统和进程管理三大模块。

    Java 开发者需求研讨 JDK,Linux 开发者需求研讨 Kernel

    大家遇到疑问也可以联络我,共同讨论,OSC 站内信(always_first_meet)或许邮件(linux_kernel_os@163.com)都可以。

    Linux 内核十分庞大,阅读源码的时分哪些部分是最末尾的时分必须的,而哪些部分可以作为后续针对性的补充?

    姜亚华:

    内核代码量庞大,模块间的关系也扑朔迷离,建议初学者可以从相对复杂而且独立的模块入手,比如一个复杂设备的驱动。

    先了解驱动本身的逻辑,之后是它的上下游,然后扩展到相关模块,最后自在发扬。

    举个例子,在 drivers/input/keyboard 下面的文件是键盘驱动,我们选择一个文件。

    第 1 阶段,查看 xxx_probe 等函数,梳理控制和数据流程,了解驱动需求做什么。

    第 2 阶段,适当拓展,代码内调用的函数大约是如何完成的,驱动触及的中缀、定时器、input 子系统等机制的原理,这些机制相对独立,文档也多,多花些时间即可。

    第 3 阶段,追根溯源,研讨 xxx_probe 是如何被调用的,i2c 总线的驱动(假定键盘接 i2c 总线),device/device_driver/bus 的关系(驱动架构)。

    阶段 2 与 3 可以同时停止。

    第 4 阶段,自在发扬,按照任务需求和兴味,进军内存管理、文件系统和进程管理等模块。

    (责任编辑:admin)