心中的内核
心中的内核 —— 在阅读内核代码之前先理解内核 原文:The Kernel in the Mind [TOC] 介绍 这并非一部教你编写内核代码的指南,而是一场探寻Linux内核设计思维的思想之旅。 在系统编程的世界里,人们常常迷失于符号定义、头文件结构与实现细节的丛林中。然而剥离代码表象,内核实则是一个井然有序的响应式系统——它受上下文环境所规约,以分离原则为基石,从内存管理到任务调度的每一处设计,都浸透着精准的设计意图。 ...
心中的内核 —— 在阅读内核代码之前先理解内核 原文:The Kernel in the Mind [TOC] 介绍 这并非一部教你编写内核代码的指南,而是一场探寻Linux内核设计思维的思想之旅。 在系统编程的世界里,人们常常迷失于符号定义、头文件结构与实现细节的丛林中。然而剥离代码表象,内核实则是一个井然有序的响应式系统——它受上下文环境所规约,以分离原则为基石,从内存管理到任务调度的每一处设计,都浸透着精准的设计意图。 ...
指令集(ISA),微架构,操作系统 指令集简单来说就是一套语言规范,定义指令类型,寄存器,数据类型,还有cpu的管理模式等。而微架构是依据指令集设计出的处理器硬件结构与实现方案。相同的指令集设计出来的微架构可能完全不同,比如Intel和amd的芯片都是x86指令集。但是设计出来的cpu结构完全不同,性能和能耗也天差地别。影响cpu性能的大部分是微架构设计,工艺制程,系统级整合等,而指令集带来的差异往往只是小头。指令集的流行主要是商业和生态决定的。 ...
系统概述与启动流程 (关注宏观状态流转:从 Machine Mode 到 Supervisor Mode,再到第一个用户进程的诞生) 核心概念 启动流程的本质是特权级的逐级让渡:从硬件最高特权(Machine Mode)出发,经过层层初始化和降权,最终将控制权交给最不信任的用户程序。整个过程是一条从"全权控制"到"受限执行"的信任链——每一步都在缩小 CPU 的权限范围,同时建立更多的软件抽象层。 ...
cpp这门语言与其他语言设计上的不同之处,在于cpp为了高效运行,没有采用在堆上分配对象通过GC管理对象。而是选择了一种更加高效但是更加困难的方式,通过尽量在栈上分配内存。因为栈上分配和释放内存只需要几条cpu指令就能完成,而在栈上则需要调用分配函数这需要更多的时间。而且栈的内存布局更加紧凑,对缓存更加的友好。但是也因为栈的先进先出的特性,这让对象的生命周期更加的难以管理,因为栈帧返回后直接就释放了。而且函数参数的传参也变得复杂,有很多的方式减少传参带来的开销,许多cpp特性就是为了解决这个问题产生的。 ...
线程 线程的创建 在cpp中线程的创建有两种形式 默认构造 传入可调用对象如: 函数, 函数对象, 对象的成员函数, 对象的静态函数, lambda表达式 线程的构造函数会按值复制所有参数,这点很重要, 对于想要传递引用的变量时,要使用std::ref() ...
为ide配置代码转跳 所有的ide或者实现代码转跳,语法检查的功能都是依赖cmake,Makefile等构建脚本中的编译选项的, 因为这些功能的实现需要知道项目的完整构建流程, 包括文件之间的依赖关系, 已经特殊的编译选项如不同的平台. ...
Hash 【C++ 哈希表查找口诀】 想知道有没有 key? → 用 count: if (map.count(key)) 想查并用它的 value? → 用 find: if (map.find(key) != map.end()) 口诀: count 大于 0,就说明有 find 不等于 end,就说明找到了 两数之和 vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hashtable; for (int i = 0; i < nums.size(); i++){ auto it = hashtable.find(target - nums[i]);//判断是否存在 if (it != hashtable.end()){ return {i, it->second}; } hashtable[nums[i]] = i;// 添加元素, 这里的添加顺序不可提前,因为我想做的是先查找,如果先添加会影响这一次查找 } return {}; }
计算机与物理世界交互的方式,通过各种io设备,能够使用计算机做任何事 就像人操作各种机器一样,机器提供各种开关和按钮,仪表和指示灯,进料口和出料口。计算机中的io设备将这些物理操作抽象成了寄存器和地址,通过访问或设置不同的寄存器和地址实现和io设备的交互 ...
计算机中的硬件, 软件,操作系统都是可以看作一个状态机 先讲os, os的模型简单说就是一个管理多个软件(状态机)的一个状态机. os的每个状态就是当前时间下的所有其他进程的状态, 在单核处理器下, 每次os的状态转移时会随机选择一个程序运行下一步,这就是调度. os的状态机中除了进程外,还有为了进程通信的缓冲区. ...
这是一个关于linux的一种自我的想象, 是我自己为了更好的理解linux而写的一种笔记, 我通过不同的视角,来描述这个程序的世界, 主要的目的不是为了完全掌握或者完整的类比操作系统的所有结构. 我的目的只是在于对os的各个部分有一个更加直观的理解, 这种理解是一种直观的, 表面的理解, 因此他并不能提高自己的linux编程水平, 就像来到一个新的城市, 我可以直观的了解城市的大致样貌, 但是关于城市是如何事无巨细的运行的, 这必须要真实的去体验才能真正了解. ...