硬核子牙:我准备写一本《带你手写64位多核操作系统》的书!
哈喽,我是子牙,一个很卷的硬核男人
深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及Linux内核…
没错!如标题所说,我准备写书了!你一定很想知道我为什么突然决定开始写书了吧,毕竟这几年那么多小伙伴建议我写书我都以忙推辞了…
原因一呢,当真盛情难却了!好几个出版社找我约书,有的出版社隔一阵子就来问一下,我实在不忍心拒绝了…

原因二呢,经过了两年半的奋斗,公司总算过了生存线,也有相对充足的现金流应对可能出现的突发情况,可以腾出点身心去好好写一本大家需要的、通俗易懂的书

你一定又想知道我准备写什么书吧?

你一定还想知道那么多书可以写,我偏偏选了这本吧

因为你只有手写一个64位多核操作系统,你才能将计算机专业课融会贯通:汇编、C语言、C++、数据结构、机组、计网、存储原理、数据库、操作系统…有了这个底子,那计算机世界于你,就通了,天高任鸟飞!基本你想写什么就写什么,想研究什么都可以去研究:Linux内核、Windows内核、病毒、外挂、Java虚拟机、MySQL源码、嵌入式…
还有一个原因,这本书刚好是我的新课【实战Linux内核】中的课程内容,比较熟,写起来比较快!当然,书肯定没有听课来得那么直观,所以学起来有困难又想拿下os的小伙伴,可以考虑加入我的直播课
这本书的内容还是非常多的,我给自己的目标是一周写2-3篇,争取明年年底能够出版,我一定可以做到的!我会先把写出来的内容放公众号【硬核子牙】供大家学习,为即将出版的书攒点人气。如果大家觉得有收获,希望大家帮我转发一下,不然到时候出版没人买,哎呀,那就老尴尬了呀~
本篇是开篇,我给大家整体讲一下这本书会讲哪些内容,大家看完,能学到哪些东西
01 关于本书
本书第一版是基于x64多核架构,后续版本会加入目前主流的CPU架构如:ARM、MIPS、RISC-V。有兴趣写书的、有实力的小伙伴可以加我微信【ziyaos】,备注【写书+CPU架构】,到时一起
你是不是想问:我不是搞x64架构的,我适合看吗?当然!其实对于一个os内核来说,体系架构相关的代码只占整个内核代码的10%可能都不到,绝大多数代码都是与架构无关的,比如:内存管理、进程线程、IPC、ITC、网络…当然,它们依托体系架构提供的机制才能运行,所以那10%是不可或缺的!

相对来说,x64架构是最复杂的,所以多学一种体系架构,多学一种最复杂的体系架构,对于后续的学习,价值是巨大的!不要恐惧学习,学的东西多了,掌握的思想多了,才能练出对某个行业的直觉,接受新知识新思想的能力才会更强!本人亲身经历如此!
本书是一本实战类书籍,即不是光看懂就可以的,你得跟着做,你得写出一个你自己的操作系统才算真正学会!关于学习环境,我之前写过一篇文章,需要的自取 传送门
那大家看完以后,能有哪些收获呢:
-
(最重要的)将汇编、C语言、OS融会贯通
-
深入理解汇编语言,尤其是执行流,能够熟练使用汇编语言编程
-
深入理解C语言,能脑补出C语言编译后的汇编代码及运行时的内存图
-
熟练使用汇编语言操控硬件,汇编、C语言之间的互调及开发时的调试
-
深刻理解CPU运行模式、CPU寻址、用户态内核态之间的互切
-
深刻理解屏幕驱动底层实现,printf、printk底层实现
-
深刻理解物理内存、虚拟内存、CPU的段页机制、CPU的运行逻辑
-
深刻理解中断的底层实现,键盘中断、时钟中断底层实现
-
深刻理解任务切换、线程上下文、系统调用
-
64位CPU的段页门机制、多核中断控制芯片APIC、多核任务切换机制……
我们在Linux平台上开发服务器端程序,我们是面向Linux提供的API编程;我们在Windows平台上开发给用户使用的程序,我们是面向Windows提供的API编程……那我们开发操作系统呢?是面向谁提供的API(机制)编程?是面向核心硬件如主板、CPU、内存、硬盘等提供的机制开发出来的
接下来给大家讲讲,操作系统是如何基于核心硬件提供的机制开发出来的
02 主板
最重要的肯定是主板了。我这里说主板重要不是因为CPU、内存条、硬盘、网卡…都插在上面,当然这也很重要!从手写os的角度来说,还有其他原因
其一,所有的os最开始肯定都是在硬盘中的,有的人可能会说:不是由boot loader将os载入内存的吗?是的,那是谁把boot loader运行起来的呢?对,就是主板!准确地说,是存储在主板上一个被称为【SPI Flash】的芯片中的程序。这里面存储的程序,以前叫BIOS程序,是配套MBR磁盘结构使用的,这套组合已经过时了。现在这里面存储的,就是鼎鼎大名的UEFI程序,当然也可以配套MBR磁盘结构使用,这样就有点大材小用了,它是配套GPT磁盘结构使用的
内存管理在os中是非常非常重要的,但是初始应该是你得先知道你的内存容量才能谈管理。那我们写os的时候,如何知道内存容量呢?当然方式有多种,但是最常见的就是使用BIOS提供的0x15号中断。这就引出了说主板是最重要的第二个原因,主板会为你填充初始的底层硬件中断处理例程,如果没有它,boot loader想将os载入内存是不可能做到的!
可以这样说,主板是os的母体,除了核心硬件,很多总线也非常重要,比如你可能听过这些:地址总线、数据总线、控制总线、PCIe…
忘了提主板上一个很重要的芯片:中断控制芯片。比如单核中断可编程控制芯片8259a、多核中断高级可编程控制芯片APIC
所有这些,都是写一个os必备的,也是我们这本书会重点讲的。我会告诉你如何用汇编去操控激活它们、操控它们,为你所用!期待不?
03 CPU
关于CPU,我之前已经写过一篇文章,建议大家一定要看看 传送门
所有的核心硬件里,CPU的东西是最多的,也是最难理解的,这是从学的角度。如果从教的角度,也是最难讲得通俗易懂的知识点,因为它本身就很抽象。从研究的角度来说,那简直是折磨,几乎没有资料,只能啃这玩意

Intel开发手册!!我口语不行,看英文文档贼溜,就是这么练出来的!看了好多好多英文文档了,感觉都形成惯性了…
04 内存
关于内存,我之前也写过一篇,建议大家一定要看看 传送门
其实从硬件角度来说,内存是没什么东西的,就是通过0x15号中断,或者UEFI提供的函数GetMemoryMap,或者通过解析ACPI表,来获取到内存信息,就没了。对了,还有一个,CPU的页机制,就是大家所熟知的虚拟内存。如果你听过CPU有段机制,是的,对内存也有一定的影响。但是这些都是非常简单的
但是很明显大家在研究Linux的内存管理的时候,发现远远比这个要复杂N倍,这个复杂度是os带来的,比如Linux中的伙伴算法、slab、VMA、缺页管理、页面回收、反向映射…这些东西你为什么很难理解呢?其实还是欠缺基础造成的。这些基础,都在这本书里!
任何行业,学习节奏是非常重要的,节奏对,事半功倍,节奏不对,事倍功半。其次重要的就是答疑,在答疑的过程中给你做知识串联。这也是学习要找名师的原因所在!
enjoy·结语
开篇就讲到这里吧,相信从这篇文章里,你已经知道了,这将是一段特别有趣的旅程,我应该会写得很快乐!你是不是想问你能不能学得很快乐,哈哈,那应该不可能,学习总是痛苦的,不痛苦那就不是在学习,是在复习!
因为痛苦,所以很多人不愿意学习,也就改变不了自己的命运,求而不得,最后生怨!何苦,何必…
对了,如果你汇编、C语言不是很好,可以看看我讲课的视频,免费分享
相关文章:
硬核子牙:我准备写一本《带你手写64位多核操作系统》的书!
哈喽,我是子牙,一个很卷的硬核男人 深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS…...
c++访问修饰符与继承关系
前言 C提供了三个修饰符来限定类成员的被访问权限,分别是public、protected、private。通过限定访问权限,可以达到程序编写者想要解决的安全问题和权限问题。这种权限的设置对于安全是非常必要的。 不同修饰下的类成员被访问权限 类成员默认访问权限为…...
【RTOS学习】事件组 | 任务通知
🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 事件组 | 任务通知 🚁事件组🛴大概原理🛴使用事件组的函数同步…...
【TES605】基于Virtex-7 FPGA的高性能实时信号处理平台
板卡概述 TES605是一款基于Virtex-7 FPGA的高性能实时信号处理平台,该平台采用1片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元,采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元,具有2个FMC子卡接口,各个处理节…...
Java Azure开发 使用已有token字符串创建GraphServiceClient
一、背景说明 在已有的项目中,已经获取到了Graph的AccessToken并保存在内存里面。所以不希望再通过client secret或者certificate去创建GraphServiceClient对象。希望使用现有的token字符串来创建初始化创建GraphServiceClient从而来实现Graph其他API功能。 二、具体…...
【Qt】消息机制和事件
文章目录 事件event()事件过滤器案例:检测鼠标事件案例:定时器 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事…...
爬虫模拟用户登录
使用爬虫模拟用户登录过程一般包括以下几个步骤: 导入所需的库:一般需要导入requests和BeautifulSoup库来发送HTTP请求和解析HTML。 import requestsfrom bs4 import BeautifulSoup 发送GET请求获取登录页面:使用requests库发送GET请求&#…...
asp.net企业招聘管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计
一、源码特点 asp.net 企业招聘管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net企业招聘管理系统 二、功…...
艾泊宇产品战略:假如中国禁止直播带货,网红和店家该如何应对?
近日,印尼宣布将禁止直播带货,这一消息引起了广泛关注。有人欢喜有人忧,很多人为此拍手叫好,但也有很多人为此感到担忧。 今天,我们就来做一个战略推演,假设中国也禁止直播带货,入局直播带货者…...
C#调用C/C++从零深入讲解
C#调用非托管DLL从零深入讲解 一、结构对齐 结构对齐是C#调用非托管DLL的必备知识。 在没有#pragma pack声明下结构体内存对齐的规则为: 第一个成员的偏移量为0,每个成员的首地址为自身大小的整数倍子结构体的第一个成员偏移量应当是子结构体最大成员的整数倍结构体总大小…...
MyBatis篇---第五篇
系列文章目录 文章目录 系列文章目录一、MyBatis 中见过什么设计模式?二、MyBatis 中比如 UserMapper.java 是接口,为什么没有实现类还能调用? 一、MyBatis 中见过什么设计模式? 二、MyBatis 中比如 UserMapper.java 是接口&#…...
十三水中各种牌型判断LUA版
近期回归程序行业,由于业务需求需要做十三水游戏,什么是十三水就不在多讲,下面是判断十三水牌型的方法(带大小王) GetSSSPaiType {}; local this GetSSSPaiType; local huaseTable {}; local numTable {}; functi…...
2023.10.19 关于设计模式 —— 单例模式
目录 引言 单例模式 饿汉模式 懒汉模式 懒汉模式线程安全问题 分析原因 引言 设计模式为编写代码的 约定 和 规范 阅读下面文章前建议点击下方链接明白 对象 和 类对象 对象和类对象 单例模式 单个实例(对象)在某些场景中有特定的类,…...
4个鲜为人知的Python迭代过滤函数
在Python中,迭代器可以帮助你编写更多Pythonic的代码,并在处理长序列时提高效率,内置的itertools模块提供了几个有用的函数来创建迭代器。 当你只需要遍历迭代器、检索序列中的元素并对其进行处理,而无需将它们存储在内存中时&am…...
使用logger.error(“自定义错误信息描述“,e)将错误信息输出到日志文件上
之前一直用e.getMessage()来获取错误信息 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController public class ClassF…...
音乐的数字未来:虚拟演唱会与TikTok的巅峰融合
在数字时代,音乐产业正在经历着革命性的变革。虚拟演唱会与TikTok的融合正引领着音乐的数字未来,为艺术家、粉丝和创作者带来了前所未有的互动性和娱乐体验。本文将深入探讨这一巅峰融合,以揭示音乐产业的新前景。 虚拟演唱会的崛起 虚拟演唱…...
基于图像识别的跌倒检测算法 计算机竞赛
前言 🔥 优质竞赛项目系列,今天要分享的是 基于图像识别的跌倒检测算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…...
NSS [SWPUCTF 2021 新生赛]PseudoProtocols
NSS [SWPUCTF 2021 新生赛]PseudoProtocols 先看题目,题目要求我们先找到hint.php。 看这个get请求头,我们先用php://filter协议读一波 得到提示,让我们前往/test2222222222222.php 源码如下 <?php ini_set("max_execution_time&qu…...
字节码进阶之JVM Attach API详解
字节码进阶之JVM Attach API详解 文章目录 字节码进阶之JVM Attach API详解附加到虚拟机加载代理和获取信息分离虚拟机 使用Attach API的基本步骤1. **获取虚拟机实例**:2. **附加到虚拟机**:3. **加载代理或获取信息**4. **从虚拟机分离**:…...
Kubernetes 部署 kubeflow1.6.1
前言 安装前请注意捋清楚版本关系,如kubeflow版本对应的K8S版本及其相关工具版本等等 我们此处使用的是是kubeflow-1.6.1和K8s-v1.22.8 单机部署 部署K8S 初始化Linux 1.关闭selinux setenforce 0 && sed -i "s/SELINUXenforcing/SELINUXdisable…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
