手写操作系统+手写网络协议栈,太硬核了

news2024/12/27 13:55:09

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

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

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


哈喽,小伙伴们好,我是子牙。深入研究Windows内核、Linux内核、Hotspot源码…聚焦做那些大家想学没地方学的课程:手写操作系统、手写虚拟机、手写模拟器、手写编程语言…

大家期待已久的手写操作系统课程终于来啦!既手写JVM课程后又一全网唯一的硬核课程!本期为三期招生,三期包含八大专题,三个月时间,直播授课,手把手带你实现一个可运行的操作系统及手写网络协议栈,让你自实现的OS具备网络功能

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

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中断实现应用态对内核态的范围及返回

  9. 编写网卡驱动获取本地网卡信息,编码实现ARP、DHCP、IP、TCP、UDP等协议,自实现网络协议栈,可以与Linux协议栈通信,更可以劫持Linux socket通信

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

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

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

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

最后介绍下自己:前阿里P8。2021年加入图灵学院成为一名讲师,2022年离职创业尝试做手写JVM,运气较好,一举成功。所以才有机会做手写OS这个课程。后面我会做更多的大家想学又没地方学的课程:Linux内核、手写编程语言、手写MySQL……

手写OS目前有500位VIP,他们来自各行各业,大家真的学的很认真,也很积极,积极帮助其他小伙伴解决问题,这是你想要的学习氛围吗?

​我也收获了很多好评,分享一下。没有炫耀或做秀的意思,就是想让大家看到我的课程质量

目前来说应该是是全网为数不多能够把手写操作系统深入浅出讲解清楚的课程了!

5.23 - 5.31为早鸟价4199

6.1 - 6.18为618优惠价4299

6.19开课,开课恢复原价4500

操作系统性价比超高,可全网比价!感兴趣的小伙伴可点击下方按钮跳转到我的公众号详情了解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:PythonShebang介绍:如何为python脚本添加shebang?

Python Shebang 介绍:如何为python脚本添加shebang? 如果您是一个有10年python编程经验的工程师,那么您一定熟悉Python Shebang。在这篇文章中,我们将深入探讨Python Shebang是什么,为什么它很重要,并演示…

如何检测docker是否支持host.docker.internal

要检查您的 Docker 是否支持 host.docker.internal 主机名,可以尝试执行以下步骤: 一、启动sh临时容器 运行一个临时容器:使用以下命令在交互模式下启动一个临时容器。 docker run -it --rm alpine sh这将在 Alpine Linux 容器中启动一个交…

杂记(四)

目录 校徽与校训 历史 [14] 19世纪 20世纪 作为一位专业的音乐人你如何评价以下歌词“The Cure - Lady Gaga Written by:Lady Gaga/Lukas Nelson/Nick Monson/Mark Nilan/Paul Blair Ill undress you cause youre tired Cover you as you desire 作为一位专业…

JavaEE进阶5/24

1.IOC 控制反转 把对象的生命周期的控制权由程序员反转给其他人。 控制反转减少了代码的耦合性。 哪里发生了反转?f 1.对象生命周期的控制权由程序员转交给Spring 2.对象创建的顺序反转了,原本程序员通过new来创建的是从外层到内层的,控制反转…

Turtlebot4 和 Turtlebot3 和 Turtlebot2 ROS开源机器人说明及参数对比

一、TB4和TB3产品参数对比: 二、Turtlebot 3和Turtlebot 4的比较: 很多未接触过Turtlebot ROS机器人系列的用户,看到TB3和TB4两型号,就会很自然地认为TB4肯定比TB3高级,会问到TB4和TB3的区别,TB4进行了哪些…

k8s入门实战-Service

k8s入门实战-Service Service 和 Label Service 通过一组 Pod 路由通信。Service 是一种抽象,它允许 Pod 死亡并在 Kubernetes 中复制,而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理…

基于PHP的毕业设计管理系统的设计与实现(源码+配套论文)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题,今天给…

“懒人”设计师必备的AI绘画软件,轻松实现建筑设计闭环

最近这两个月AI设计席卷整个设计圈 现如今手头上没一两个AI工具 你都不好意思说自己是新时代设计师 目前主流的AI绘画软件有midjourney、Stable Diffusion 基本上都能自动打造超高质量的渲染图纸 但即便如此,仍有不少“懒人”设计师打着怕麻烦的旗号 抵触AI画…

10+秒,AIGC炸出抖音小红书爆款!国产Fashion Diffusion颠覆时尚行业

AI进军时装秀,已经开始改造时尚行业了!国产FD大模型能够在10秒打造小红书爆款,T台走秀之光来了。 近日,西湖心辰和知衣科技联合推出了一款面向服装设计行业的AI大模型——Fashion Diffusion(以下简称FD模型&#xff09…

STM32F4新建寄存器版本MDK(Keil5)工程(正点原子)

1. 前期准备 1.1 下载 STM32Cube 固件包 1.1.1 ST官网搜索STM32Cube 首先进入ST官网,在搜索栏输入 STM32Cube 找到 STM32CubeF4 点击进去 在这里可以选择版本进行下载,这里我选择1.26.0(后续不使用官方的因为太冗杂了,这里只…

CSDN周赛回顾

CSDN周赛回顾 55期参赛体验近两期难度题型报告 参赛回顾CSDN 题库每日一练举报题库 最后的吐槽新题目相似度判定奖品 55期参赛体验 近两期难度 最近的题目有点难度了,老顾个人感觉至少达到了中级算法程度了,所以老顾的成绩变得稀碎。。。。 题型 再来…

Centos7 第一次正常连接, 隔天连接不上

记录现象: ping:www.baidu.com bash: ping:www.baidu.com: 未找到命令... 其他没有配置错的情况下 1. 原因 vi /etc/sysconfig/network-scripts/ifcfg-ens33 因为配置的静态链接所以 不需要NetworkManager 2. 解决方案 a. 关闭NetworkManager systemctl stop NetworkMa…

Docker 下 OnlyOffice 社区版安装

一、官方信息 官网地址:ONLYOFFICE - Secure Online Office | ONLYOFFICE 官方文档:Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICE 二、介绍 ONLYOFFICE Docs是一个在线办公套件,包括文本、电子表格和演示文稿的…

小红书产品运营的书有哪些,爆款笔记的套路

随着小红书平台的规模逐渐扩大,已经不仅仅局限于单一的产业了,甚至于出现了多元化的一个现象。有关小红书运营的书的出版就是最好的证明。今天,就来和大家一起探讨一下小红书产品运营的书有哪些,爆款笔记的套路。 一、小红书运营的…

十四、进程信号

文章目录 一、什么是信号二、信号列表(一)查看系统定义的信号列表 三、信号处理四、信号产生(一)通过终端按键产生信号1.什么是核心转储?2.核心转储功能有什么用?3.core dump标志 (二&#xff0…

突围低代码下半场,未来悬而未决

低代码行业的整个赛道的未来依然蒙着一层充满未知的迷雾,最开始,低代码的目的是让不具有软件开发能力的用户也能根据自己的需要创建各种应用程序,由此也诞生了“IT革命”“抢走程序员饭碗”等噱头。 但噱头归噱头,程序员的饭碗并…

软件测试之自动化测试详解

文章目录 一.前言二.selenium介绍三.selenium的组成部分四.Selenium的环境搭建下载浏览器配置环境变量验证环境是否搭建成功 五.Selenium的API打开浏览器元素的定位操作测试对象等待操作信息获取鼠标操作键盘操作选项操作浏览器操作 六.需要用到的包 一.前言 自动化测试指软件…

软件接口测试有什么作用?接口测试有哪些好用工具?

一、软件接口测试有什么作用? 在软件开发过程中,接口是不可避免的一部分。接口测试是为了检查软件系统中不同模块之间的接口能否正常工作,以及模块之间的数据是否能够互相传输而进行的测试。接口测试的主要作用包括保证系统区域间的互通性、降低软件的…

树莓派 CM4 RTC 时间同步

需求:树莓派 接pcf85063a RTC模块进行时间同步,上层使用Qt 开发应用,进行时间的读取与设置 一,树莓派配置: /boot/config.ini 文件 修改 二,读取时间 直接读取系统时间 TIME TimerManager::getSystemLocalTime() {TIME t;time…

【高级语言程序设计(一)】第 7 章:指针

目录 一、指针和指针变量 (1)指针 (2)指针变量 (3)指针变量的定义 (4)指针变量的初始化 (5)指针变量的一般使用 ① 给指针变量赋值 ② 直接使用指针…