内功决定一个程序员的上限,这是每个程序员都知道的道理。程序员要修哪些内功呢:汇编、C语言、C++、操作系统内核…

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

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


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

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

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

01

手写操作系统

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

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

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

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

  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

课程详细介绍

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

手写操作系统课程安排

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

手写操作系统一期大纲

手写操作系统一期代码

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

  1. 实模式切入保护模式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圆梦,手写了个操作系统相关推荐

  1. 圆梦,手写了一个操作系统

    哈喽,大家好,我是子牙 作为一个Java Coder,我的梦想是手写JVM.这个梦想在疫情来临的那年春节实现了,因为手写了JVM被图灵学院的周瑜老师认识,经周瑜推荐,离开阿里加入图灵学院成为一名讲师, ...

  2. 手写一个X86操作系统实战:从零开始构建一个U盘启动的自制操作系统(一)

    这个标题可能有点大了:-) 一个操作系统至少应该有自己的文件系统和进程机制,不过我们的最终目标应该是这个~ 无论如何,看完本文,你应该可以手写一段通过U盘启动的在PC上运行的不需要其他软件来协助的自启 ...

  3. 基于HAL库手写一个轻量化操作系统——参考ucos

    目录 1前言 2准备 3汇编 4过程 4.1工程文件 4.2汇编语言 4.3OS系统的初始化 4.3.1任务初始化函数 4.3.2创建任务函数 4.3.3空闲任务 4.3.4OS启动 4.4多任务的实 ...

  4. 手写操作系统(1)——HelloOS

    让我们一起学习,由简单的Hello OS入手,最终码出一个属于自己的操作系统! 文章目录 **前言** Hello OS 引导程序 环境准备 下载源代码 编译操作系统 **流程** **编译** ** ...

  5. 手写操作系统(3)——开发环境建立与内核架构设计

    之前介绍了简单的Hello OS以及代码是如何运行的.接下来我们会真正动手开始往我们的Hello OS中增加功能,但是--操作系统架构是一个极其精细的活.如老话所言"凡事三思而后行" ...

  6. 手写操作系统+文件系统开源啦

    哈喽,我是子牙,一个很卷的硬核男人.喜欢研究底层,聚焦做那些大家想学没地方学的课程:手写操作系统.手写虚拟机.手写模拟器.手写编程语言- 今年是我创业的第二年,已经做了两个课程:手写JVM.手写操作系 ...

  7. android 手写字体识别,一种基于Android系统的手写数学公式识别及生成MathML的方法...

    专利名称:一种基于Android系统的手写数学公式识别及生成MathML的方法 技术领域: 本发明属于模式识别技术领域,涉及数学公式中字符间的空间结构分析,具体涉及一种基于Android系统的手写数学 ...

  8. 清华学霸直博全自主写CPU、操作系统、编译器!刘知远点赞!(附链接)

    来源:知乎.blog.miskcoo等 本文约3300字,建议阅读8分钟. 本文介绍了清华直播学霸实现了全自主写CPU.操作系统.编译器的简历. [ 导读 ]清华大学直博面试的一则简历上了知乎热榜:& ...

  9. 用python实现的的手写数字识别器

    概述 带GUI界面的,基于python sklearn knn算法的手写数字识别器,可用于识别手写数字,训练数据集为mnist. 详细 代码下载:http://www.demodashi.com/de ...

最新文章

  1. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
  2. 应用开发也去中心化?基于BCH的筹款平台Akari-Pages与Lighthouse正面交锋
  3. java 消息传递示例_java actor模型和消息传递简单示例
  4. navigator工具_Javascript常用工具类
  5. hanlp 词频统计_10.HanLP实现k均值--文本聚类
  6. POJ 1724 ROADS(bfs最短路)
  7. noip复赛电脑有excel吗_指南 | 现在就必须了解的信息学竞赛(高一学生)
  8. C#Winform频繁刷新导致界面闪烁解决方法
  9. paip.oracle query export to insert sql
  10. Proteus 封装 全加器 FA
  11. LVDS通信协议以及概念
  12. 使用QRencode 生成个人微信二维码,欢迎大家来微信和我做朋友
  13. 达梦数据库DM8安装配置和使用
  14. iOS混合开发之uni-app本地打包集成到iOS原生项目
  15. D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵
  16. php网站mercury安装,水星路由器怎么安装?Mercury无线路由器安装示意图解
  17. 在某OC字符串中,搜索指定的某字符串:-rangeOfString:
  18. JAVA 面试知识点(个人总结)
  19. 南加大计算机专业本科sat要求,南加州大学申请条件有哪些?
  20. lrs_receive函数超时问题

热门文章

  1. 【已解决】535 Login Fail. Please enter your authorization code to login. More information in http://servi
  2. oracle oaf结构,配置Oracle ebs的oaf开发环境步骤详解
  3. 数据挖掘之ID3算法
  4. 手机数控模拟器安卓版_数控机床模拟器手机版下载-数控机床模拟器最新版v1.1.4 安卓版 - 极光下载站...
  5. PTA-支票面额(C语言)
  6. 【skLearn 回归模型】岭回归 ---- 选择最佳正则化参数 <带交叉验证的岭回归RidgeCV()>
  7. 笔记本电脑蓝屏问题处理
  8. Python: 相乘
  9. 微软经营模式的第二次丧钟
  10. 科沃斯扫地机器人无语音提示_科沃斯机器人DN33常见问题及解决办法汇总