硬核子牙:我准备写一本《带你手写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…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
