您当前的位置: 首页 >  操作系统

圆梦,手写了个操作系统

发布时间:2022-09-21 08:30:13 ,浏览量:0

大家好,我是发哥。

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

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

1、Linux内核

2、Windows内核

3、自己写操作系统

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

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

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

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

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

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

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

01

手写操作系统

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

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

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

301f7da3491d282da19aeb313fd4d941.png

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

  1. 语言层面:汇编、C语言。这两门语言要达到精通级别,能融会贯通使用才行。因为写内核会涉及到汇编与C语言之间的互相调用

  2. 操作系统层面,对操作系统的中断机制、进程线程机制、内存机制要非常了解,最好是了解Windows、Linux两个内核对于此的底层实现。这些机制是你写一个能跑的操作系统必备的,你脑海中没有那么多底料,在实现的时候遇到各种奇葩问题,你将束手无策

  3. 尤其要对操作系统的执行流机制非常熟悉,要熟练使用ROP技术构建执行流,在写内核的时候会经常用到此技术,比如任务的退出、fork函数

  4. 硬件层面,需要对BIOS中断、屏幕操作、键盘操作、时钟中断、CPU段页门非常熟悉,熟练使用

  5. 还要了解Linux的可执行文件格式ELF,要熟练使用gcc、nasm,深刻理解编译、链接,没有这一块的知识点,你写的内核将无法调试,也就意味着你写不出来

  6. ……

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

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

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

02

学这个课有什么用

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

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

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

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

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

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

03

课程详细介绍

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

19f348a482eefb6b8a9054ca56a9a787.png

手写操作系统课程安排

06ac01ea41138989b37be1b1be751cca.png

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

cfd8f1c3b433ade1eed02dcfab29a5f0.jpeg

00cca08c90b9d02b70d1f4421eaaa6d3.png

手写操作系统一期大纲

23203e08509fac2b6e7474561a0d2815.png

f0d62794821da7e2ceffe4337c8fedbd.jpeg

d3e1d1b345b36c3aae90049279e76b4b.png

手写操作系统一期代码

06c1215a5d2b219beb41e2ff86537b3c.png

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

  1. 实模式切入保护模式

  2. 实现内存检测、物理内存管理模块、虚拟内存管理模块

  3. 实现了输出模块。要知道你用Linux终端,它会自动翻页,这个功能你如果写内核都是要自己实现的

  4. 实现了键盘中断。就是你键盘敲什么,屏幕就显示什么,为后面加入命令行做准备

  5. 实现了时钟中断,通过时钟中断调度任务。与Windows、Linux一模一样

  6. 实现了进程线程、任务切换、阻塞唤醒。当然,任务模块的东西很多,后面会逐步加入

  7. 实现态的切换,由内核态切入用户态发起系统调用

  8. 实现了系统调用模块,通过0x80中断实现应用态对内核态的范围及返回

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

65001d7093cfff18aa9a0b5d9ad9a24d.png

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

c3d25b7fb73fa4e4378e1e33e1723675.png

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

de037ebc86ba381147c0ba664a0d2036.png

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

f697e7ae4bffbcffba06f4c58796cfa8.png

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

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

09fdeba8a4dadbb3bf3d73e6f46fd602.png

144f2200771625d98ae6bf8acd5bfbf5.png

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

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

如果你想更多了解我,欢迎去我公众号【硬核子牙】看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,应该会对你有很大启发

8.22-9.30为早鸟价,10月开课恢复原价4000

性价比超高,可全网比价!感兴趣的小伙伴别错过超大优惠上车哦~

ca657704fbe98de1f326228a9c8b55f7.jpeg

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    109966博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3933s