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


    哈喽,大家好,我是子牙

    作为一个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。如果你也喜欢研究底层,欢迎关注我的公众号【硬核子牙

  • 相关阅读:
    推荐两款超高质量的壁纸软件
    零基础学习React(Html)
    GIT解决冲突的方法
    数据结构与算法之时间复杂度和空间复杂度(C语言版)
    使用 Python 的基于边缘和基于区域的分割
    c<8>指针
    《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿
    【深入理解Kotlin协程】协程的创建、启动、挂起函数【理论篇】
    About Critical Values
    JMeter关于influxDB 2.x 后端监听器使用
  • 原文地址:https://blog.csdn.net/b98982016/article/details/126698565