大家好,我是发哥。

我不止一次在公众号上强调学习操作系统的重要性。至于学习的方法,无外乎看书、看视频、看源码等等。

也有推荐过跟着老师一起手写操作系统,但很少有学习方法能同时兼顾以下三点:

1、Linux内核

2、Windows内核

3、自己写操作系统

如果只学一种操作系统,很容易陷入到一种认知偏差,觉得操作系统只能这样,或者把某个操作系统的实现就认为是所有操作系统的标准。

今天,我要推荐的一个学习方式,就把这三点完全融合起来了。既学习了主流的Windows和Linux内核知识,还要动手写自己的内核,可以说是把理论、实战、实用非常好的结合了起来。

这类修内功的课程,市面上少有人做,做相关课程的人,大多缺实战经验,所以课程偏理论,大家学起来总感觉软绵绵的不得劲…

这个操作系统课程的老师是子牙老师,我之前已经推荐过。子牙老师之前是JVM专家,离开图灵后做了手写JVM小班,一举成功,这次带来的是他的新课程手写操作系统,非常硬核、重实战…推荐给大家


哈喽,小伙伴们好,我是子牙。深入研究Windows内核、Linux内核、Hotspot源码…

大家期待已久的手写操作系统课程终于来啦!既手写JVM课程后又一全网唯一的硬核课程!一期包含七大专题,三个月时间,直播授课,手把手带你实现一个可运行的操作系统。

知道你有很多问题想问,别急,听我娓娓道来。为了方便大家更好地了解课程,我录了个更相信的视频版。虽然是课程试看视频,我也其中也分享了很多与操作系统学习相关的知识…

01

手写操作系统

手写一个操作系统,应该是所有Coder的梦想吧。奈何这方面的资料奇缺,虽然有部分书籍,但是没有一定的基础也是看不懂的,导致很多Coder这一生都没能实现这个梦想。

我比较幸运,十多年时间,误打误撞补齐了手写操作系统需要的绝大多数基础,于是在手写JVM课程做完之后,做了这个课程。

先说下一个完整的操作系统包含哪些,如图

笔记本原系统镜像(手写了个操作系统)(1)

那实现一个操作系统需要哪些基础呢:

  1. 语言层面:汇编、C语言。这两门语言要达到精通级别,能融会贯通使用才行。因为写内核会涉及到汇编与C语言之间的互相调用
  2. 操作系统层面,对操作系统的中断机制、进程线程机制、内存机制要非常了解,最好是了解Windows、Linux两个内核对于此的底层实现。这些机制是你写一个能跑的操作系统必备的,你脑海中没有那么多底料,在实现的时候遇到各种奇葩问题,你将束手无策
  3. 尤其要对操作系统的执行流机制非常熟悉,要熟练使用ROP技术构建执行流,在写内核的时候会经常用到此技术,比如任务的退出、fork函数
  4. 硬件层面,需要对BIOS中断、屏幕操作、键盘操作、时钟中断、CPU段页门非常熟悉,熟练使用
  5. 还要了解Linux的可执行文件格式ELF,要熟练使用gcc、nasm,深刻理解编译、链接,没有这一块的知识点,你写的内核将无法调试,也就意味着你写不出来
  6. ……

看到这,有些小伙伴就慌了:这我能学得会吗?稳住,别怕,有我!课程会在合适的节点穿插讲汇编、C语言、操作系统内核、硬件、gcc、elf、Makefile等关联知识,还有课后答疑及课后练习。

你只要感兴趣,都可以学,不用担心基础问题,是真的能让你学得会的操作系统课程

不过你确实需要花费一点努力,下点苦功夫才能学会。这些知识你今天不学,迟早还是要学。技术这行,如果没有实力支撑,就是吃青春饭,底层功力扎实,才能越老越吃香!而且互联网红利已经结束,进入内卷时代,与其被别人卷,不如主动卷,成为TOP!

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:嵌入式物联网学习资料(头条)

笔记本原系统镜像(手写了个操作系统)(2)

笔记本原系统镜像(手写了个操作系统)(3)

02

学这个课有什么用

咱们也不能空谈理想,聊点现实的:写一个操作系统,有什么现实意义呢?

一、从面试角度来说,无论你是Java、Python、go,亦或是c、c ,面试中都会被问到操作系统或者硬件相关的问题,你可能不知道,或者背答案应付。问题一变,就哑口无言了。如果你写过一个操作系统,你将深入理解这些,面试官问一个问题,你能答出一串,获得好感,占得谈薪先机

二、从工作角度来说,如果你写过操作系统,打通了这层认知,你写的每一行代码,你能一眼看穿它的本质,想想这种坚定的感觉,再想想你平时惴惴不安的感觉,你选哪个?

三、从就业角度来说,未来是万物互联时代,IOT、人工智能、虚拟现实等这些产业的背后涉及的操作系统,无不是Linux系。我的这个手写操作系统课程,会结合讲Windows内核、Linux内核,写一个自己的内核。一个课程,让你学会三个操作系统,为不确定的未来留点后路

四、从学习角度来说,新技术层出不穷,底层技术已经基本稳定。追逐新技术,没有尽头。万变不离其宗,操作系统就是技术行业的宗,学一次,受益终身。学习,要追求效率,要学习那些相对不变的,有个这个基础,再去学那些变化的,秒懂。比如你学会了linux的多线程,就等于同时学会了所有编程语言的多线程

五、从个人发展角度来说,如果你没有底层功力,技术这行你能达到的高度是非常有限的,因为你没有自学能力,遇到问题你只能问别人,等别人的答案,可能还不一定是正确答案…想想求人的痛苦,为何自己不成为实力的拥有者呢?

03

课程详细介绍

前面讲的可能看起来有点牛叉,不免会让有些人怀疑我是不是在吹牛,所以我准备给出有力的事实

笔记本原系统镜像(手写了个操作系统)(4)

手写操作系统课程安排

笔记本原系统镜像(手写了个操作系统)(5)

先给大家看下完整的手写操作系统课程安排,一共五期,当前是一期招生

笔记本原系统镜像(手写了个操作系统)(6)

笔记本原系统镜像(手写了个操作系统)(7)

手写操作系统一期大纲

笔记本原系统镜像(手写了个操作系统)(8)

笔记本原系统镜像(手写了个操作系统)(9)

笔记本原系统镜像(手写了个操作系统)(10)

手写操作系统一期代码

笔记本原系统镜像(手写了个操作系统)(11)

一期课程相关的代码我已经全部写完

  1. 实模式切入保护模式
  2. 实现内存检测、物理内存管理模块、虚拟内存管理模块
  3. 实现了输出模块。要知道你用Linux终端,它会自动翻页,这个功能你如果写内核都是要自己实现的
  4. 实现了键盘中断。就是你键盘敲什么,屏幕就显示什么,为后面加入命令行做准备
  5. 实现了时钟中断,通过时钟中断调度任务。与Windows、Linux一模一样
  6. 实现了进程线程、任务切换、阻塞唤醒。当然,任务模块的东西很多,后面会逐步加入
  7. 实现态的切换,由内核态切入用户态发起系统调用
  8. 实现了系统调用模块,通过0x80中断实现应用态对内核态的范围及返回

课程配套代码,分支我是按照课时打的,方便大家到时阅读代码

笔记本原系统镜像(手写了个操作系统)(12)

课程笔记已经做好了,与上面贴的课程大纲一模一样,会严格按照笔记授课,可以放心

笔记本原系统镜像(手写了个操作系统)(13)

多任务切换是怎么切的?看下酷帅的代码片段

笔记本原系统镜像(手写了个操作系统)(14)

你如果看过其他相关的视频,你会发现大家没办法调试C语言。如果这样,无疑让学习门槛变得很高,在我这里是不允许的,于是我花了大量时间攻克了此。即,我提供的环境,是可以调试你写的C语言的

笔记本原系统镜像(手写了个操作系统)(15)

最后介绍下自己:前阿里P8。2021年加入图灵学院成为一名讲师,专注讲JVM与操作系统。2022年离职创业尝试做手写JVM,运气较好,一举成功。

一年多开设了五期班,积累了500多VIP。课程干活满满,全网唯一,零差评。

笔记本原系统镜像(手写了个操作系统)(16)

笔记本原系统镜像(手写了个操作系统)(17)

手写操作系统,依旧将是零差评。

真心做教育,践行“子牙出品,必属精品”

原文作者:子牙

原文来源:嵌入式Linux

原文链接:https://mp.weixin.qq.com/s/gtienBgt9TZic8rofaDVtw

,