听说,手写一个操作系统是每个Coder的梦想?
2023/3/7 23:21:56
本文主要是介绍听说,手写一个操作系统是每个Coder的梦想?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
点此进入>>《手写操作系统》课程
(扫码领取课程优惠券,或添加微信号:imooc999)
作为程序员,大家都对操作系统充满了好奇。比如编程语言这种虚拟的东西是如何操控实实在在的硬件、操作系统是如何充分发挥CPU多核多线程特性实现进程线程机制、操作系统是如何基于硬盘实现文件系统实现存储、操作系统是如何基于网卡实现socket连接世界、计算机这个行业学会了哪些能够一劳永逸,新技术追腻了都……这些问题的答案,学会了操作系统内核自然就知道了。
但无论是我们每天办公或追剧用的Windows、Mac,还是一统服务器领域的Linux,内核相关的资料还是很少的,低门槛重实战的视频课程,基本没有。国内教计算机底层学科的,基本都是讲原理,这就是国内的现状,这也是那么多计算机行业的牛人选择出国的原因,麻省理工、斯坦福等,他们的计算机基础学科还是非常强大的。
所以:优秀的老师是怎么学会这些的?实话实说:手写操作系统。计算机圈有个不成文的规则:不重复发明轮子。这个原则是针对干活,从学习的角度,重复发明轮子,把自己放在设计者的角度,而不是学习者、研究员的角度去学习,是最高明的学习方式
经常也有人问,手写操作系统有什么意义呢?能升职加薪吗?不说个例不靠技术走上去的人,大体来说,技术行业,位居高位年限百万的,基本都是技术牛叉的那波人吧。所以你有答案了吗?
手写操作系统
手写一个操作系统,应该是所有Coder的梦想吧。奈何这方面的资料奇缺,虽然有部分书籍,但是没有一定的基础也是看不懂的,导致很多Coder这一生都没能实现这个梦想。
而我们的课程讲师——子牙老师比较幸运,十多年时间,误打误撞补齐了手写操作系统需要的绝大多数基础。先说下一个完整的操作系统包含哪些,如图
那实现一个操作系统需要哪些基础呢?
1、语言层面:汇编、C语言。这两门语言要达到精通级别,能融会贯通使用才行。因为写内核会涉及到汇编与C语言之间的互相调用
2、操作系统层面,对操作系统的中断机制、进程线程机制、内存机制要非常了解,最好是了解Windows、Linux两个内核对于此的底层实现。这些机制是你写一个能跑的操作系统必备的,你脑海中没有那么多底料,在实现的时候遇到各种奇葩问题,你将束手无策
3、尤其要对操作系统的执行流机制非常熟悉,要熟练使用ROP技术构建执行流,在写内核的时候会经常用到此技术,比如任务的退出、fork函数
4、硬件层面,需要对BIOS中断、屏幕操作、键盘操作、时钟中断、CPU段页门非常熟悉,熟练使用
5、还要了解Linux的可执行文件格式ELF,要熟练使用gcc、nasm,深刻理解编译、链接,没有这一块的知识点,你写的内核将无法调试,也就意味着你写不出来
……
看到这,有些小伙伴就慌了:这我能学得会吗?稳住,别怕,《手写操作系统》课程会在合适的节点穿插讲汇编、C语言、操作系统内核、硬件、gcc、elf、Makefile等关联知识,还有课后答疑及课后练习,你只要感兴趣,都可以学,不用担心基础问题,是真的能让你学得会的操作系统课程!
不过你确实需要花费一点努力,下点苦功夫才能学会。这些知识你今天不学,迟早还是要学。技术这行,如果没有实力支撑,就是吃青春饭,底层功力扎实,才能越老越吃香!而且互联网红利已经结束,进入内卷时代,与其被别人卷,不如主动卷,成为TOP!
学了有什么用?
咱们也不能空谈理想,聊点现实的:写一个操作系统,有什么现实意义呢?
一、从面试角度来说,无论你是Java、Python、go,亦或是c、c++,面试中都会被问到操作系统或者硬件相关的问题,你可能不知道,或者背答案应付。问题一变,就哑口无言了。如果你写过一个操作系统,你将深入理解这些,面试官问一个问题,你能答出一串,获得好感,占得谈薪先机
二、从工作角度来说,如果你写过操作系统,打通了这层认知,你写的每一行代码,你能一眼看穿它的本质,想想这种坚定的感觉,再想想你平时惴惴不安的感觉,你选哪个?
三、从就业角度来说,未来是万物互联时代,IOT、人工智能、虚拟现实等这些产业的背后涉及的操作系统,无不是Linux系。《手写操作系统》会结合讲Windows内核、Linux内核,写一个自己的内核。一个课程,让你学会三个操作系统,为不确定的未来留点后路
四、从学习角度来说,新技术层出不穷,底层技术已经基本稳定。追逐新技术,没有尽头。万变不离其宗,操作系统就是技术行业的宗,学一次,受益终身。学习,要追求效率,要学习那些相对不变的,有个这个基础,再去学那些变化的,秒懂。比如你学会了linux的多线程,就等于同时学会了所有编程语言的多线程
五、从个人发展角度来说,如果你没有底层功力,技术这行你能达到的高度是非常有限的,因为你没有自学能力,遇到问题你只能问别人,等别人的答案,可能还不一定是正确答案…想想求人的痛苦,为何自己不成为实力的拥有者呢?
总结来说就是,手写一个操作系统,是实力的象征。技术这个行业,谁会不喜欢一个技术牛叉的coder呢?跟面试官聊嗨了,面试官对你刮目相看的时候,你想要的薪资不就有底气聊了吗?
课程详情
(扫码领取课程优惠券,或添加微信号:imooc999)
点此进入>>《手写操作系统》课程
课程相关的代码已经全部写完
1、实模式切入保护模式
2、实现内存检测、物理内存管理模块、虚拟内存管理模块
3、实现了输出模块。要知道你用Linux终端,它会自动翻页,这个功能你如果写内核都是要自己实现的
4、实现了键盘中断。就是你键盘敲什么,屏幕就显示什么,为后面加入命令行做准备
5、实现了时钟中断,通过时钟中断调度任务。与Windows、Linux一模一样
6、实现了进程线程、任务切换、阻塞唤醒。当然,任务模块的东西很多,后面会逐步加入
7、实现态的切换,由内核态切入用户态发起系统调用
8、实现了系统调用模块,通过0x80中断实现应用态对内核态的范围及返回
9、实现了硬盘驱动、仿EXT文件系统内核、文件系统API、文件系统shell命令
课程配套代码,分支是按照课时打的,方便大家到时阅读代码
课程笔记已经做好了,与上面贴的课程大纲一模一样,会严格按照笔记授课,可以放心
如果你打算手写一个操作系统,千万不要错过这期课程哦!课程正值“暮春”活动季,扫码添加小姐姐,立领大额优惠券!最后几天,优惠截止到3月10日哦!
点此进入>>《手写操作系统》课程
(扫码领取课程优惠券,或添加微信号:imooc999)
这篇关于听说,手写一个操作系统是每个Coder的梦想?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南