不容错过!私藏的几个学操作系统好东西
本文转载自微信公众号「编程技术宇宙」,作者轩辕之风 。转载本文请联系编程技术宇宙公众号。
大家可能读过不少的操作系统的文章,不过这其中很多都是大谈操作系统的理论技术,鲜有探讨现代操作系统实际的实现。
- 你可能知道线程的几个状态和状态的变化,但你知道Linux中是如何进行线程调度的吗?
- 你可能知道线程的栈是怎么进进出出,但你知道Linux的线程栈如何分配管理,栈的最下面藏了什么秘密吗?
- 你可能对TCP/IP协议了然于胸,但你知道Linux中是如何实现TCP协议吗,跟RFC规范又有哪些不同?
- 你可能知道Signal机制,但你知道内核是如何派发信号和执行信号处理函数的吗?
- 你可能知道操作系统内存管理技术,但你知道Linux和Windows同样在x86架构下的实现有哪些区别吗?
- ······
学一项技术,不能只是纸上谈兵,知其然还能知其所以然,还能知如何以然,方达至高境界。
阅读操作系统源代码,是学习操作系统的不二法门。下面就最常见的Linux和Windows系统分别介绍一下。
Linux
Linux属于开源系统,想获取源码轻而易举,不过这里轩辕推荐一个我私藏的网站,不需要你科学上网,不需要你下载源码,在线阅读,哪里有电脑哪里就能看。
网址:https://elixir.bootlin.com/
这个网站有几个好处:
- 在线阅读,免下载,随处可看
- 左边列表集成了Linux自发布以来所有版本的代码,可随意切换至你想要查看的版本。这对于想了解某个技术细节在不同版本中的实现变化非常好用。
- 支持函数、结构体、变量搜索。源代码中出现的这些这些信息,都可直接点击链接,后台将自动在当前版本的Linux代码中搜索到相关定义、引用。速度也非常快。
除了Linux,这个网站还能支持包括glibc、qemu、dpdk等很多其他项目代码的阅读:
用这个网站阅读源码,比在GitHub上的体验有过之而无不及。
Windows
什么?Windows也能看源码?没错是的。
在程序员中有一条鄙视链,用Linux的时常鄙视用Windows的,鄙视Windows系统不如Linux。我不太清楚这种鄙视是何时何因而起,但你若看过Windows操作系统源代码后,也一定会折服于微软工程师的编码能力和设计智慧。阅读这些优秀工程师的C代码宛如欣赏一件艺术作品般让人享受。这其中有太多的宝藏值得我们学习。
虽然,Windows操作系统属于微软商业产品,但这么多年以来,还是有非常多的人想一窥其内核的秘密,这其中就出现了源码泄露、逆向工程、官方发布等多个不同的版本。虽然有些版本已经发布多年,但底层很多实现却是一直沿用至今。
Windows NT 4.0 & Windows 2000
2004年2月,发生了一起Windows内核源码泄露事件,泄露的是Windows NT 4.0/Windows 2000源码。随后便迅速扩散,在GitHub上也多年提供下载,不过后来受到微软施压,GitHub去掉了相关的链接。
WRK
微软也还是挺大方,在2006年左右,为了让高校学生学习操作系统,基于Windows Server 2003的内核,官方发布了一个叫Windows Research Kernel的项目,简称WRK。
WRK是一个“阉割版”的Windows内核代码,去掉了Windows中的窗口实现、TCP/IP协议栈等多个功能模块。但保留了诸如进程/线程管理、内存管理、I/O管理、对象管理等重要功能,虽是“阉割版”,但仍然是非常值得一看的版本,毕竟官方发布嘛。
ReactOS
网址:https://reactos.org/
这里的React可不是前端框架中的那个React,这是一个逆向工程中的集大成之作。
这里简单科普一下逆向工程
我们平时开发软件的过程是“正向”,即编写源代码,然后由编译器编译链接生成CPU指令,最后整合形成一个可执行文件。
逆向工程就是将上面的过程反过来,从一个可执行文件,通过分析文件中的代码指令,最后推导出原来的源代码的过程。
你可能听过逆向分析某一个程序,但你知道有人直接逆向了整个Windows操作系统吗?
注意,这里说的是整个操作系统,不仅仅是底层的Kernel内核,还包括一系列的驱动程序,以及上层的Windows服务程序、动态链接库,甚至还囊括了Windows内置的桌面explorer程序和IE浏览器等等。
ReactOS集成了一大波牛人的劳动,相当于翻版了一个Windows出来,在各种数据结构的设计上,都力求和Windows一致。以实现让Windows上的程序能在它上面也能运行无误。
这个工作量想想都大的吓人。
有趣的是,微软工程师指责ReactOS项目组人剽窃了WRK中的源代码,两者之间的论战也从未间断。
不过需要注意的是,毕竟是一个逆向出来的项目,有不少细节和Windows真实实现还是有差异的,一般在上面几个项目中找不到时,才会来参考ReactOS,有时候还需要结合比对上面几个不同版本的实现,才能熟悉彼此的差异。
源码是有了,不过这么多怎么看呢?欢迎继续关注,后续提供一些阅读方法和经验,探讨一下如何穿行在浩如烟海的源码中,不迷失方向。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
潜伏十年“黑客雇佣军团”曝光 ,盯上欧洲律师事务所
今年继Dark Basin黑客雇佣组织曝光后,卡巴斯基发现第二个黑客雇佣组织Deceptikons。 俄罗斯网络安全公司卡巴斯基在一场网络研讨会中表示,发现了一个新的黑客雇佣组织,该组织已经活跃了近十年。 据卡巴斯基恶意软件分析师Vicente Diaz透露,卡巴斯基将这个组织命名为“Deceptikons”,其针对行业主要四律师事务所、金融科技公司开展攻击,窃取企业的机密数据,主要分布在欧洲,偶尔出现在中东国家,比如以色列、约旦和埃及。 该组织最近一次攻击是在2019年的一次鱼叉式网络钓鱼活动,一系列欧洲律师事务所中招,在这场活动中,该组织在目标企业主机中部署了恶意PowerShell脚本。 尚未利用0day漏洞 俄罗斯安全企业在网络研讨会中的一份书面报告中提及,“该租住在攻击技术上的发展目前还不成熟,就我们所了解到的尚未利用0day开展攻击。” 就该黑客组织的基础设施和恶意软件而言,“巧妙但不算先进”,对感染主机最大的优势在于持久性。 观察其大多数攻击事件可以发现它们具有相似的模式,始于鱼叉式网络钓鱼邮件,邮件携带更改过的恶意LINK(快捷)文件。 如果受害者下载或和邮件互动(比如...
- 下一篇
恕我直言,我也是才知道ElasticSearch条件更新是这么玩的
背景 ElasticSearch 的使用度越来越普及了,很多公司都在使用。有做日志搜索的,有做商品搜索的,有做订单搜索的。 大部分使用场景都是通过程序定期去导入数据到 ElasticSearch 中,或者通过 CDC 的方式来构建索引。在这种场景下,更新数据都是单条更新,比如 ID=1 的数据发生了修改操作,那么就会把 ElasticSearch 中 ID=1 的这条数据更新下。 但有些场景下需要根据条件同时更新多条数据,就像 Mysql 中我们使用 Update Table Set Name=XXX where Age=18 去更新一批数据一样。 正好有同学微信问我怎么批量更新,接下来就看看在 ElasticSearch 中是如何去进行按条件更新的操作。 单条更新 ElasticSearch 的客户端官方推荐使用 elasticsearch-rest-high-level-client。所以本文也是基于 elasticsearch-rest-high-level-client 来构建代码。 首先来回顾下单条数据的更新是怎么做的,代码如下: UpdateRequest updateRe...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8安装Docker,最新的服务器搭配容器使用