当前位置: 首页 > news >正文

硬核子牙:我准备写一本《带你手写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架构是最复杂的,所以多学一种体系架构,多学一种最复杂的体系架构,对于后续的学习,价值是巨大的!不要恐惧学习,学的东西多了,掌握的思想多了,才能练出对某个行业的直觉,接受新知识新思想的能力才会更强!本人亲身经历如此!

本书是一本实战类书籍,即不是光看懂就可以的,你得跟着做,你得写出一个你自己的操作系统才算真正学会!关于学习环境,我之前写过一篇文章,需要的自取 传送门

那大家看完以后,能有哪些收获呢:

  1. (最重要的)将汇编、C语言、OS融会贯通

  2. 深入理解汇编语言,尤其是执行流,能够熟练使用汇编语言编程

  3. 深入理解C语言,能脑补出C语言编译后的汇编代码及运行时的内存图

  4. 熟练使用汇编语言操控硬件,汇编、C语言之间的互调及开发时的调试

  5. 深刻理解CPU运行模式、CPU寻址、用户态内核态之间的互切

  6. 深刻理解屏幕驱动底层实现,printf、printk底层实现

  7. 深刻理解物理内存、虚拟内存、CPU的段页机制、CPU的运行逻辑

  8. 深刻理解中断的底层实现,键盘中断、时钟中断底层实现

  9. 深刻理解任务切换、线程上下文、系统调用

  10. 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 先看题目&#xff0c;题目要求我们先找到hint.php。 看这个get请求头&#xff0c;我们先用php://filter协议读一波 得到提示&#xff0c;让我们前往/test2222222222222.php 源码如下 <?php ini_set("max_execution_time&qu…...

字节码进阶之JVM Attach API详解

字节码进阶之JVM Attach API详解 文章目录 字节码进阶之JVM Attach API详解附加到虚拟机加载代理和获取信息分离虚拟机 使用Attach API的基本步骤1. **获取虚拟机实例**&#xff1a;2. **附加到虚拟机**&#xff1a;3. **加载代理或获取信息**4. **从虚拟机分离**&#xff1a;…...

Kubernetes 部署 kubeflow1.6.1

前言 安装前请注意捋清楚版本关系&#xff0c;如kubeflow版本对应的K8S版本及其相关工具版本等等 我们此处使用的是是kubeflow-1.6.1和K8s-v1.22.8 单机部署 部署K8S 初始化Linux 1.关闭selinux setenforce 0 && sed -i "s/SELINUXenforcing/SELINUXdisable…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...