哈喽,大家好,我是子牙

作为一个Java Coder,我的梦想是手写JVM。这个梦想在疫情来临的那年春节实现了,因为手写了JVM被图灵学院的周瑜老师认识,经周瑜推荐,离开阿里加入图灵学院成为一名讲师,专注教底层。

2021年3月,一年合同即将到期,我就在想,我有这个梦想,会不会其他人也有这个梦想?于是离开图灵做了手写JVM小班,运气不错,一举功成。一年多来,500多VIP加入学习,志同道合,大家学得很嗨皮…

作为一个Java Coder的梦想实现了,我就想去实现作为Coder的梦想:手写操作系统。写文章的今天,这个梦想也已实现。接下来与大家分享我写操作系统的一些经历。

纵观技术圈,顶级的技术、系统、论文,都来自国外。国内教你写JVM、操作系统、编译器等顶级技术的人基本没有,我想补充这一块的市场空白,哪怕它很难、研究很苦、备课很累、不赚钱…

手写JVM,一年多的时间,我已经高强度的备课,更新了五期,把JVM中的绝大多数知识点,其中很多是市场上空白的,都已经讲完了。

手写操作系统正在写课件,预计九月份开始招生,到时会在公众号发文详细介绍,如果你感兴趣,记住关注我的公众号【硬核子牙

先给大家看一个视频:再现Linux当年的辉煌之多任务切换

再现Linux当年的辉煌之多任务切换

巨涨功力

写操作系统真的巨涨功力,写完以后,我感觉我对之前的很多知识点理解得更深刻了。

写操作系统是很多基本功的综合应用,那需要哪些基本功呢?
1、语言层面:汇编、C语言。如果你是开创者,没人手把手教,这两门语言要达到精通级别,能融会贯通使用
2、操作系统层面,对操作系统的中断机制、进程线程机制、内存机制要非常了解,最好是了解Windows、Linux两个内核对于此的底层实现。这些机制是你写一个能跑的操作系统必备的,你脑海中没有那么多底料,在实现的时候遇到各种奇葩问题,你将束手无策
3、尤其要对操作系统的原生执行流非常熟悉,要熟练使用ROP技术构建执行流
4、硬件层面,需要对BIOS中断、屏幕操作、键盘操作、时钟中断、CPU段页门非常熟悉,熟练使用
5、还有要了解Linux的可执行文件格式ELF,要熟练使用gcc、nasm,深刻理解编译、链接,没有这一块的知识点,你写的内核将无法调试,也就意味着你写不出来

一个完整的操作系统大纲要实现这么多

一个能跑的操作系统,实现其中的40%就可以了,我写的操作系统,目前大概实现了其中的40%,剩下的我会陆续让我的操作系统支持,然后做成课程分享给想学习这块的小伙伴

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

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

按照顺序:下一个是文件系统、然后是网络模块……

fork函数

fork函数是Linux创建多进程的一个函数,这个函数很特别,实现起来很复杂

特别在哪呢?一次调用,会返回两次
复杂在哪呢?需要父进程在创建的那一刻,因为要构建执行流,需要对子进程的内存空间做手术

看下我的实现成功

酷帅的代码片段

在写内核的过程中,萌生了很多问题,查了很多资料,让大家看下我的努力

作为一个Java Coder,你有什么梦想呢?
作为一个Coder,你又有什么梦想呢?

结语

我是子牙老师,喜欢钻研底层,深入研究Windows、Linux内核、JVM。如果你也喜欢研究底层,欢迎关注我的公众号【硬核子牙

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

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

    内功决定一个程序员的上限,这是每个程序员都知道的道理.程序员要修哪些内功呢:汇编.C语言.C++.操作系统内核- 这些修内功的课程,市面上少有人做,做相关课程的人,大多缺实战经验,所以课程偏理论,大家 ...

  2. 手写实现一个HashMap

    手写实现一个HashMap 前言 HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想 ...

  3. 【手写系列】纯手写实现一个高可用的RPC

    前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A.通常都是B把API上传到Maven私服,然后B开始写A ...

  4. 老婆离家三周,我写了一个操作系统!

    我出生于1943年,今年已经78岁了,依然战斗编程的第一线,今天给大家讲讲我当年写操作系统的故事...... 我小时候特别喜欢鼓捣电器,玩了10年. 当我去加州大学伯克利分校读电子工程的时候,我发现课 ...

  5. 手写一个栈 java,数据结构|用java自己手写实现一个栈

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~ https ...

  6. 交了19.9元瑞文IQ测试被坑后,手写了一个自己慢慢测~

    这里写目录标题 前言 问卷准备 素材准备 题目 答案 评价标准 测试 参考 前言 追溯到今年寒假,在老家过年闲来无事,自觉挺聪明(不知道哪来的幻觉-)于是在某乎的测智商的广告宣传下,测试了...花了小 ...

  7. 考研为了背单词,我手写了一个背单词小 app

    1. 背景 2022年考研的考研狗,寒假一个人孤苦伶仃背单词,想检查却无人提问,于是萌生了手写一个提问单词的小应用. 最初只是想做一个web端的网页,用浏览器来使用,但总感觉差点意思,就封装了一下,封 ...

  8. 自己如何写mysql数据库_自己手写的一个初始化MySQL数据库的工具!

    由于项目需要,我写了一个初始MySQL数据库的工具: 一, 思路: (1),首先读取包含mysql语句的脚本(其中有创建数据库,表,插入初始数据等!). (2),然后替换里面的一些数据值(如guid, ...

  9. 向高手进阶,从 0 开始手写实现一个 RPC 框架!

    前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A.通常都是B把API上传到Maven私服,然后B开始写A ...

最新文章

  1. 【组队学习】【35期】李宏毅机器学习(含深度学习)
  2. Java web应用引用外部jar包 运行时报ClassNotFoundException 解决方法
  3. (五十九)iOS网络基础之UIWebView简易浏览器实现
  4. sqlite 复合唯一索引_sqlite 批量插入, 重复插入(更新)
  5. SAP EWM 根据物料号获得包装规格
  6. CSDN Markdown 图片排版显示
  7. python 赚钱 小项目_用Python赚钱的5个方法,教你业余时间月赚几千外快
  8. 张朝阳:走出焦虑,不再焦虑
  9. UiPath-定时任务原理
  10. 怎么制作证件照电子版?安利下面这三款软件给你
  11. 低功耗设计及其UPF实现第四节(最后一节)
  12. html css设计网页初步
  13. 用递归方法将十进制转化为二进制数
  14. 四种常见的 POST-- content-type数据提交方式
  15. 地势坤,君子以厚德载物
  16. 对比学习在微博内容表示的应用
  17. 基于PLSQL的数据库备份方法
  18. 算法笔记 最大公约数、最小公倍数、素数(质数)
  19. [Errno 13] Permission denied: ‘/home/robot/catkin_ws/build‘
  20. 清新文艺黄色家居发布PPT模板

热门文章

  1. 我的创作纪念日-512天了
  2. 为什么建议定制开发app?定制开发有哪些好处
  3. 模型每次跑的结果不同怎么办?
  4. Centos使用Docker搭建Lamp环境,一步到位
  5. Java中模拟浏览器访问网页(三)
  6. 微型计算机题,初三微机考试试题
  7. 小程序源码免费html5,微信小程序静态页面案例(附源码)
  8. springboot2整合drools规则引擎(kie-spring+drools-core)
  9. 将String数组之中通过连接的数组转化为Map表
  10. YModem协议简介