当前位置: 首页 > 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…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)

文章目录 PWRPWR&#xff08;电源控制模块&#xff09;核心功能 电源框图上电复位和掉电复位可编程电压监测器低功耗模式模式选择睡眠模式停止模式待机模式 修改主频一、准备工作二、修改主频的核心步骤&#xff1a;宏定义配置三、程序流程&#xff1a;时钟配置函数解析四、注意…...