点击联系客服
客服QQ: 客服微信:

中山老站长

 找回密码
 立即注册
查看: 1206|回复: 50

如何学习操作系统?

[复制链接]

1

主题

1

帖子

-7

积分

限制会员

积分
-7
发表于 2021-9-30 07:42:07 | 显示全部楼层 |阅读模式
大家好,我是轩辕。

今天我要和大家深入交谈。如何学习操作系统这门课才能更牛逼?

一、做好前置功课

不要一上来就啃书,要在学任何科目之前做好作业。

这是什么课?你在说什么?

在整个计算机技术知识体系中处于什么地位,有哪些相关课程?

学这门课有什么用?一上来就啃书,一不小心就会掉进枯燥的技术名词海里,什么都学不到。

首先,我们来了解一下操作系统是什么。为什么会出现操作系统?

20世纪中期,电脑刚诞生20 ~ 30年,没有什么是操作系统。程序员编写的程序是直接部署在电脑上运行。

因此,当时的程序员必须对计算机的硬件设备(CPU、存储设备、输入设备、输出设备)有所了解,才能编写能够运行的程序。

将程序直接放置在计算机上运行是手动操作,执行一个,然后放入另一个。(阿尔伯特爱因斯坦,电脑名言)但是随着电脑速度的提高,人工操作的性能瓶颈开始显现。这就是著名的“人机矛盾”。这时,计算机科学家开始思考,能否提前输入所有程序,使计算机自动切换多个程序。

因此,计算机科学家创造了控制转换其他程序的管理程序。(另一方面,电脑也是如此。)。

部署系统、多部署系统相继诞生,操作系统的概念开始出现。

计算机硬件的发展越来越快,同时可以运行多个程序。这个管理程序逐渐演化成操作系统,功能也越来越强,不仅负责管理其他程序的运行,还负责管理计算机的所有硬件资源(CPU、内存、内存、网卡、输入/输出设备)。

所以,操作系统这门课程,讲的就是这个计算机的大管家,是如何管理程序的运行,以及如何管理计算机硬件资源并提供接口给程序使用的一门计算机基础课程!

因此,操作系统的核心由以下内容组成:

运行虚拟机管理程序:线程管理,流程管理

内存资源管理:内存管理

管理硬盘资源:文件系统

网卡资源管理:网络堆栈

I/o管理:中断管理、同步和异步

为应用程序提供接口:系统调用

如你所见,操作系统书的所有部分都不是凭空而来的。在学习操作系统的所有章节时,要清楚所学的这一部分在做什么。(大卫亚设,Northern  Exposure(美国电视剧),操作系统,操作系统,操作系统,操作系统)只有知道海洋在操作系统中的位置,才能不迷失方向。

二、选择几本好书

准备工作做好了,下面是选择几本好的学习教材。

在这里我一定要说几句!

大家必须区分一个概念:操作系统理论和具体的操作系统实施,这是两码事!

根据相同的操作系统机制、操作系统实施情况,可能会有所不同。要知道书上写的是操作系统的理论还是操作系统。(威廉莎士比亚、操作系统、操作系统、操作系统、操作系统、操作系统、操作系统、操作系统、操作系统)。
ff08;比如UNIX)中的实现,不要以为UNIX是这么做的,所有操作系统就都是这样,这就走入误区了!

我推荐,操作系统学习一定要准备三本书:

1、写操作系统理论的书 2、写Linux操作系统实现的书 3、写Windows操作系统实现的书 首先,建议从理论书籍看起走,它会告诉你操作系统的发展历史,以及各个操作系统概念的作用。这类书籍偏重计算机科学性质,也就是有点学院派的意思。

光看理论还是虚的,犹如空中楼阁,你只能想象它的存在,却看不见摸不着。所以学了理论书籍,也要来看一下现代主流操作系统的具体实现,才能进一步加深你对这个知识点和技术的理解深度。



操作系统理论书籍中也会捎带介绍一些操作系统具体的实现,但是只是蜻蜓点水式的,不会太深入。想要真正了解某一个系统,最好是深入学习这个操作系统的实现。

如果是偏后端开发的,建议以Linux为重点,重点研究Linux下的实现,可顺便看一些Windows。

如果是网络安全(尤其是二进制方向)、客户端开发的,重点研究下Windows的实现,可顺便看一些Linux。

比如同样是线程,Linux和Windows的实现有着巨大的差异,比较posix线程和win32线程的实现差异,从内核数据结构到应用编程接口,学习原理和使用的差异,理解线程这个东西在操作系统中到底是一个什么样的存在。

比如内存管理,同样是基于x86下的段页式内存管理机制,对比Linux和Windows的管理实现差异,缺页异常处理、写时拷贝机制有哪些异同之处。

又比如系统调用,线程调度、中断处理、异常处理、锁等等,通过对比学习二者的差异,你会对这些操作系统概念了解的更加深刻,也会更加体会,理论与实际的差异所在。

在书的选择上,理论书籍毫无疑问首推黑皮书:《现代操作系统》

讲Linux的推荐:《Linux内核设计与实现》

讲Windows的推荐:《Windows内核原理与实现》

看书的时候,不一定非要从第一页看到最后一页,不要这么死脑筋,学会灵活应对。如果进程管理看不下去,可以先看内存管理,同步与异步看不下去就先放着,等其他方面的知识储备够了,再回头来看,可能就会事半功倍。

如果确实觉得看书很枯燥,看不进去,也可以尝试看看我之前写过的系列故事文章,通过第一人称视角的方式,用有趣的故事形式讲解这些底层知识。

比如,讲中断技术:

CPU明明8个核,网卡为啥拼命折腾一号核?

讲内存管理:

一个故事看懂内存管理

讲DMA技术:

一个故事看懂DMA技术

三、学习阅读源码
除了看书,另外一项非常重要不可或缺的工作就是阅读源码!

一边看书,一边对照着源码学习,这是最直接最高效的学习方式。

不要觉得看操作系统源码是个很庞大的工程,自己可能看不下去。首先克服自己心里的恐惧,操作系统也是人写的,又不是让你一口气看完,你学哪一部分,就看那一部分的,没有那么遥不可及,等你通过阅读源码get到了书上写的某个知识点,那种感觉是非常舒适的。而一旦你习惯了这种舒适,就会形成正向反馈,推动你不断学习更多知识,也会养成通过源码学习和解决问题的良好习惯。

Linux是开源的这地球人都知道,去下载一份源码到自己电脑上,然后用sourceinsight这个工具打开,这个工具便于查看定位各种数据结构、函数的定义。

比如我用它来查看Windows XP的源代码:



阅读源码一定要带着目的性,毕竟,操作系统源码的规模是几千万行级别。

比如最近在学习系统调用,就先看书,把系统调用的概念、原理弄清楚,再找到源码中讲系统调用的部分,结合源代码进行分析,和书上讲的内容进行结合对照,把这一块源码好好琢磨琢磨,加深对其理解。

(PS:顺便说一下,书的出版有一定的时效性,要注意手里的操作系统源码版本是不是和书上的一致,有可能会出现不一样的情况,从而产生疑惑)

四、一定要动手实践
纸上得来终觉浅,绝知此事要躬行!

对于大部分人来说,能做到结合看书+源码分析,就已经足够了,对于操作系统的理解就已经达到一定的深度。

但如果你想有更进深一步的学习,这还不够!

毕竟,看书也好,看源码也好,都是看来的,操作系统真的就如书上和源码中描述的那样吗?

我学习一个东西,绝不听信书上所言,一定要亲自验证才为真,这样留下的印象想忘也忘不了。

那什么叫亲自验证?

可以通过ARK级别工具,观察内核中的数据结构,如系统调用表、内存管理中的全局描述符表GDT、中断管理中的IDT。去看一下里面到底装了什么东西,然后尝试用书上讲解的知识,去解读这些数据结构,看看是不是书上写的那样。



还通过内核级调试工具,跟踪操作系统系统调用流程、文件创建过程、数据包处理流程···

再然后,自己编写内核驱动程序,加载到内核空间,去遍历所有的进程,去自己翻译虚拟地址,去劫持线程执行流···

能做到这个程度,操作系统就是你的玩具了。

五、几个好东西
最后,收藏党的福利时间,推荐几个学习操作系统的好东西:

1、Linux源码在线查看网站,墙裂推荐,函数、数据结构可以关联检索,各种Linux版本应有尽有:


https://elixir.bootlin.com/linux/latest/source


2、Windows源码(包含开源的WRK、泄露的Windows NT、Windows XP、还有逆向工程版本的ReactOS全家桶打包合辑)



3、操作系统学习书籍资料免费送给大家:



觉得有用,记得点个赞哦~
回复

使用道具 举报

1

主题

624

帖子

-357

积分

限制会员

积分
-357
发表于 2021-9-30 07:42:07 | 显示全部楼层
帮你顶下哈!!
回复

使用道具 举报

0

主题

630

帖子

-406

积分

限制会员

积分
-406
发表于 2021-9-30 08:02:20 | 显示全部楼层
LZ真是人才
回复

使用道具 举报

0

主题

659

帖子

-393

积分

限制会员

积分
-393
发表于 2021-9-30 08:22:45 | 显示全部楼层
学习了,谢谢分享、、、
回复

使用道具 举报

1

主题

618

帖子

-354

积分

限制会员

积分
-354
发表于 2021-9-30 08:42:56 | 显示全部楼层
沙发!沙发!
回复

使用道具 举报

1

主题

585

帖子

-345

积分

限制会员

积分
-345
发表于 2021-9-30 09:02:59 | 显示全部楼层
难得一见的好帖
回复

使用道具 举报

0

主题

592

帖子

-398

积分

限制会员

积分
-398
发表于 2021-9-30 09:23:52 | 显示全部楼层
小手一抖,积分到手!
回复

使用道具 举报

0

主题

601

帖子

-416

积分

限制会员

积分
-416
发表于 2021-9-30 09:44:45 | 显示全部楼层
LZ说的很不错
回复

使用道具 举报

1

主题

626

帖子

-416

积分

限制会员

积分
-416
发表于 2021-9-30 10:05:12 | 显示全部楼层
难得一见的好帖
回复

使用道具 举报

1

主题

602

帖子

-317

积分

限制会员

积分
-317
发表于 2021-9-30 10:25:20 | 显示全部楼层
好好 学习了 确实不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|无图版|手机版|小黑屋|中山@IT精英团

GMT+8, 2022-8-15 12:42 , Processed in 0.379767 second(s), 30 queries .

Powered by Discuz! X3.4

© 2020 Comsenz Inc.

快速回复 返回顶部 返回列表