- 博客(65)
- 收藏
- 关注
原创 ARMv9的SVE/SVE2入门教程 (1)
什么是SVENEON指令集是ARM64架构的单指令多数据流(SIMD)的标准实现。SVE(可扩展矢量指令Scalable Vector Extension)是针对高性能计算(HPC)和机器学习等领域开发的一套全新的矢量指令集,它是下一代SIMD指令集实现,而不是NEON指令集的简单扩展。SVE指令集中有很多概念与NEON指令集类似,例如矢量、通道、数据元素等。SVE指令集也提出了一个全新的概念:可变矢量长度编程模型(VectorLength Agnostic,VLA)。传统的SIMD指令集采用固
2022-03-09 19:07:17
2604
原创 ARMv8的NEON指令详解
第三季《ARM64体系结构与编程》已经更新第28次课了,这次笨叔给大家介绍NEON指令的使用和优化。NEON指令在有些场景下能获得10倍以上的性能提升,例如矩阵运算,图像处理,人工智能等。本节课会用4*4矩阵乘积运算作为例子,让大家感受一下10倍以上提升的快感。NEON广泛应用到开源软件优化中,比如ffmpeg,pixman等。学习NEON指令优化显得非常有必要。...
2022-03-09 19:05:16
1138
原创 NEON汇编比纯C代码快17倍
最近在准备第三季的内容时候看了一下NEON汇编指令,挺有意思。我写了个小程序来试试NEON汇编指令究竟能有多少快。有的小伙伴可能不知道啥鸟是NEON。其实NEON就是ARM公司给自家的SIMD指令取了一个好听的花名。SIMD指的是单指令多数据流,它对多个数据元素同时执行相同的操作。这些数据元素被打包成一个更大的寄存器中的独立通道(Lanes)。例如,ADD指令将32位数据元素加在一起。这些值被打包到两对128位寄存器(分别是V8和V9)中的单独通道中。然后将第一源寄存器中的每个通道添加到第二源寄存器
2022-03-08 22:10:48
1530
原创 某大厂ARM64面试必考题
现在越来越多的产品是基于ARM64处理器开发的,例如手机、嵌入式系统、IoT设备、可穿戴设备等,产品开发中所有的岗位都应该或多或少了解ARM64体系结构的基本知识。如果读者准备面试这类公司,在面试之前应该了解和熟悉ARM64体系结构。下面是一份某大厂的ARM64架构面试必考题,如果分数不及格,请不要灰心和放弃。(以ARMv8-A架构为准)以上题目的答案都分布在第三季视频课程中。如果您答对了90%以上的题目,那么恭喜您,您对ARM64架构很熟悉!如果您答对了60%以下的题目...
2022-03-08 22:07:45
462
原创 ARM64架构:为啥子刷icache之后要发IPI中断?
昨天在笨叔第一季VIP群里,有人问了一个很有意思和深度的问题:这位同学问的问题,是关于Linux ARM64内核的flush_icache_range()函数,它是linux5.0/arch/arm64/include/asm/cacheflush.h文件里。第87行的__flush_icache_range()函数会调用“ic ivau”指令来无效[start, end]地址空间对应的指令高速缓存。这位同学感觉比较疑惑的是,为什么第93~94行需要触发IPI中断呢?而且这个
2022-03-08 22:04:09
881
原创 This is a good question,初学者都晕
奔跑吧第二版读者群里有一个小伙伴问了一个好问题:初学者常常犯晕:A64指令集支持64位宽的数据和地址寻址,为什么指令的编码宽度只有32位?笨叔写了一段文字来解释为啥子会这样:奔2有读者交流群吗很多小伙伴希望有一个纯净和纯洁的读者交流群,笨叔建立了一个“奔2自由交流群”,该群以自由交流为主,时间有限不能一一回答,笨叔定时在群里选择典型的问题回答。加群条件:购买了全套3本奔2的小伙伴优先邀请进群,加群前,请拍一张奔2图书的照片!可以先加微信:runningli
2022-03-08 21:25:40
269
原创 里程焦虑的慢速通道:笨叔讲解QSpinLock源代码
QSpinlock申请锁的过程,可以分成快速通道,中速通道,和慢速通道总结一下。 快速通道:有点类似我们现在热门的电车,大家去充电桩充电,如果这个充电桩没有人使用,那你就可以用了,这是快速通道。 中速通道:如果我们去充电时候,发现这个充电桩已经有人在使用,但是没有人在排队等待,那么你就是第一个等待的人,相当于拿到了VIP金牌,这个人充满了之后,就轮到你了。 慢速通道:如果有人在充电,而且已经有人在排队了。你一看,妈呀,剩余的路程数不多了,离下..
2022-03-08 21:14:10
226
原创 try_to_wake_up()中4个内存屏障的使用都想明白,对操作系统的理解将达到二本水平或者FAE水平
内存屏障的合理使用在操作系统实践中是非常重要的,也是有一定难度的,如果能把try_to_wake_up()中4个内存屏障的使用都想明白,那么对操作系统课程或者计算机的理解已经达到普通二本毕业的水平或FAE的水平!...
2022-03-08 16:46:11
417
1
原创 好消息:卷2新增附录E已经上传 - 关于try_to_wake_up()里的内存屏障使用
最近笨叔为卷2新写了一个附录E,由于纸质书已经发行,没有办法把它加入到纸质书里,现在已经上传到网盘share出来。附录E是关于内存屏障的。try_to_wake_up()函数里内置了4个内存屏障,你没听错,一个函数里内置了4个内存屏障,有点蒙圈了吧?新增附录下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。目录:进阶篇->新增附录...
2022-03-08 14:23:47
169
原创 水货笨叔介绍MCS锁
前几天小明同学和笨叔抱怨:现在的spinlock锁的代码变得越来越复杂了,我都看不懂了。的确spinlock的代码从原来简单的几行代码,变成现在复杂的几百行,除了代码变得复杂,里面隐含的原理也不简单。在linux内核的spinlock的实现历史中,一共有三个版本的spinlock实现。第一个是经典的spinlock实现。第二个是Ticket spinlock的实现。第三个是基于MCS算法的queued spinlock的实现。第一个最简单,在ARM64上实现就是几行汇编代码就搞定
2022-03-08 14:05:55
419
原创 综合能力训练:在树莓派上动手写一个小OS(6):实验16-5:进程创建实验
本文节选自《实验指导手册》第二版第16.7章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第二版中第16章的实验16-5:进程实验。我们在前面的实验中已经完成了printk打印函数以及时钟中断的实验了,接下来我们就可以来完成进程创建的实验了。在本实验里,我们要研究进程是如何创建的,了解新创建的进程是如何执行的。在.
2022-03-08 14:01:32
290
原创 综合能力训练:在树莓派上动手写一个小OS(5):实验16-4:中断实验
本文节选自《实验指导手册》第二版第16.6章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第二版中第16章的实验16-4:中断实验。在实现操作系统基本功能之前,我们先实现中断处理功能,我们以树莓派上ARM Core里面的generic timer为中断源,把中断这条路径先打通,以后在做进程创建和进程切换的时候也是.
2022-03-08 13:56:06
653
原创 综合能力训练:在树莓派上动手写一个小OS(4):实验16-3:实现printk函数
本文节选自《实验指导手册》第二版第16.5章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第16章中的实验16-3:实现printk打印函数。前面的实验,我们直接使用串口函数来打印,非常不方便。我们在实现BenOS其他功能之前,还需要需要实现一个简单好用的打印函数,这样我们可以通过串口来打印需要的数据类型,方便我.
2022-03-07 21:31:19
252
原创 综合能力训练:在树莓派上动手写一个小OS(3):实验16-2:切换异常等级
本文节选自《实验指导手册》第二版第16.4章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第16章中的实验16-2:切换异常等级。1. 实验目的1)了解和熟悉ARM64汇编语言。2)了解和熟悉ARM64的异常等级。2. 实验要求1)在实验16-1的基础上输出当前的异常等级。2)在跳转到C语言之.
2022-03-07 21:26:02
456
原创 综合能力训练:在树莓派上动手写一个小OS(2):实验16-1:输出welcome benos
本文节选自《奔跑吧linux内核 入门篇》第二版第16.2.1章和笨叔一起玩树莓派,动手写BenOS!实验16-1:输出“Welcome BenOS!”1.实验目的1)了解和熟悉ARM64汇编。2)了解和熟悉如何使用QEMU和GDB调试裸机程序。2.实验要求1)编写一个裸机程序并在QEMU模拟器中运行,输出“Welcome BenOS!”字符串。2)在树莓派上运行编译好的裸机程序。3.实验详解由于我们写的是裸机程序,因此需要手动编写Makefile和链接脚本。对.
2022-03-07 21:22:20
1583
3
原创 综合能力训练:在树莓派上动手写一个小OS(1):实验前准备
本文节选自《奔跑吧linux内核 入门篇》第二版第16章学习操作系统最有效且最具有挑战性的训练是从零开始动手写一个小OS(操作系统)。目前很多国内外知名大学的“操作系统”课程中的实验与动手写一个小OS相关,比如麻省理工学院的操作系统课程采用xv6系统来做实验。xv6是在x86处理器上重新实现的UNIX第6版系统,用于教学目的。清华大学的操作系统课程也采用类似的思路,他们基于xv6的设计思想,通过实验一步一步完善一个小OS——ucore OS。xv6和ucore OS实验都采用类似于英语考试中完形填空.
2022-03-07 21:21:08
842
原创 进程调度案例分析与常见疑惑1:为何不能调度?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第9.3.5章现在JD有半价抢购活动,如果您觉得本文还可以,千万不要错过哟!https://item.jd.com/13051268.html1. 问题引入假设Linux内核只有3个内核线程(见图9.15),0号线程创建了内核线程1和内核线程2,它们永远不会退出。当系统时钟中断到来时,时钟中断处理函数会检查是否有进程需要调度。当有进程需要调度时,调度器会选择运行线程1或者线程2。假设0号线程先.
2022-03-07 21:19:24
469
原创 进程调度案例分析与常见疑惑2:为啥fork之后有两个返回值?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第7.3.6章在用户空间可以使用fork()接口函数来创建一个用户进程,或者使用clone()接口函数来创建一个用户线程,它们在内核空间都是调用_do_fork()函数来实现的。读者常常会对_do_fork()函数的返回感到疑惑,例如以下两个问题。1. 以fork()接口函数为例,为什么会有两次返回?其中父进程的返回值是子线程的PID,而子进程返回0。子线程是如何返回0的?2. 子进程第一次返回用户空间时,它是返回.
2022-03-07 21:13:31
519
原创 关于vim看linux 内核源代码时的代码补全
有小伙伴昨天问笨叔,我按照入门篇第二版第2.5章的内容来配置vim,使用vim看linux 内核源代码的时候,代码补全咋没有出来呢? 大家可以尝试下面的方法来补救一下:1)安装python-is-python3。YCM默认使用python3$sudoaptinstallpython-is-python32)重新编译YCM。$cd/home/rlk/.vim/bundle/YouCompleteMe/$python3...
2022-03-07 21:11:32
866
原创 一个有趣的文件系统实验
本文节选自《实验指导手册》第二版第14.1章,下载《实验指导手册》:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。有趣的文件系统实验入门篇第二版第14章是新增的一章,讲文件系统相关的入门知识。实验14-1非常有趣,群里有小伙伴问笨叔,这个实验怎么做啊?这个实验是这样的:使用dd命令创建磁盘文件file.img并格式化为ext2文件系统,然后通过mout命令挂载到Linux主机文件系统。(1)查看文件系统的信息,比如数据块的数量、数据块的大小、inode 个数、空闲.
2022-03-07 21:07:58
401
原创 内存管理实战案例分析1:缺页异常和文件系统引发的宕机
微信公众号:[奔跑吧linux社区]本文节选自《奔跑吧linux内核》第二版卷1第6.3章1.问题描述阿里工程师在Linux 5.0内核开发期间报告了一个宕机现象,https://lore.kernel.org/linux-ext4/1540858969-75803-1-git-send-email-bo.liu@linux.alibaba.com/从内核日志信息来看,有两个线程发生了死锁的情况。下面是task1进程的函数调用关系。task1:[<ffffffff811.
2022-03-07 21:05:48
727
原创 内存管理实战案例分析2:KSM和NUMA引发的虚拟机宕机
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第6.3.2章1.问题描述对于RHEL发行版以及Ubuntu服务器版本,客户都报告了这样的问题。在一台至强服务器(使用x86_64处理器)上发现好几个正在运行的虚拟机发生了死锁,即虚拟机没有响应。这台服务器是基于NUMA架构的服务器,内建多个CPU节点和内存节点。在主机的Linux中开启了KSM机制和numad监控程序。虚拟机是基于KVM和QEMU构建的。主机的Linux发行版是Ubuntu 16.04。主机的Lin.
2022-03-07 20:58:44
756
原创 内存管理实战案例分析3:为何分配不出一个页面?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧Linux内核》第二版卷1第6.3.3章1.问题描述下面是有问题的OOM Killer内核日志,其中空闲页面为86048KB,最低警戒水位为22528KB,低水位为28160KB。读者可能会感到疑惑,为什么即使空闲页面远远大于最低警戒水位也无法分配出一个物理页面?<OOMKiller的问题内核日志>[150.257731]insmodinvokedoom-killer:gfp_mask=0x6000c0(GFP...
2022-01-22 20:35:15
1819
原创 ARM64的函数调用标准和栈布局
欢迎订阅奔跑吧linux社区微信公众号本文节选自《奔跑吧Linux内核》第二版卷1第1.6章函数调用标准(Procedure Call Standard,PCS)用来描述父/子函数是如何编译、链接的,特别是父函数和子函数之间调用关系的约定,如栈的布局、参数的传递等。每个处理器架构都有不同的函数调用标准,本章重点介绍ARM64的函数调用标准。ARM公司有一份描述ARM64架构函数调用的标准和规范文档,这份文档是《Procedure Call Standard for ARM 64-Bit Arch.
2022-01-15 19:07:59
1636
原创 GCC内联汇编常见陷阱
欢迎关注微信公众号:[奔跑吧linux社区]本文节选自《奔跑吧Linux内核》第二版卷1第1.5章在Linux内核代码中常常会使用到GCC内联汇编,GCC内联汇编的格式如下。__asm____volatile__(指令部:输出部:输入部:损坏部)GCC内联汇编在处理变量和寄存器的问题上提供了一个模板和一些约束条件。 在指令部(AssemblerTemplate)中数字前加上%,如%0、%1 等,表示需要使用寄存器的样板操作数。若指令部用到了几个不同的操作数,就说明有几个...
2022-01-15 19:04:11
704
原创 进程调度案例分析:为何不能调度?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第9.3.5章现在JD有半价抢购活动,如果您觉得本文还可以,千万不要错过哟!https://item.jd.com/13051268.html1. 问题引入假设Linux内核只有3个内核线程(见图9.15),0号线程创建了内核线程1和内核线程2,它们永远不会退出。当系统时钟中断到来时,时钟中断处理函数会检查是否有进程需要调度。当有进程需要调度时,调度器会选择运行线程1或者线程2。假设0号线程先.
2022-01-15 18:55:17
890
原创 笨叔:ARM64体系结构与编程之cache必修课(下)
第三季视频课程ARM64体系结构与编程之cache基础知识(下)重点教你如何看MESI状态图。看懂MESI协议状态图对我们实际工作有什么影响?奔跑吧第二版卷1真快来了自从2019年3月Linus宣布Linux 5.0正式发布那天开始,笨叔就致力于把蓝色奔跑吧Linux内核这本书重新更新到Linux 5.0。大家也许无法想象更新一本快1000页的书,要付出多少精力。这是一次全面和全新的修订,90%的内容和第一版不一样,90%的内容重新编写和编排,各中的汗水只有笨叔自己知道。和Linux相关.
2022-01-15 18:53:23
536
1
原创 笨叔:ARM64体系结构与编程之cache必修课(中)
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系统软件人员,下面几个常常疑惑的问题: cache的内部组织架构是怎么样的?能否画出一个.
2022-01-15 18:51:18
593
原创 arm64的mov指令,简单而不简单
小明同学正在学习笨叔的《arm64体系结构与编程》,发现简单的mov指令还真不简单。下面两条mov指令,为啥一条可以,另外一条不行呢?下面这条指令,可以编译通过。movx0,0xffff0000ffff而这条指令,只是前面少了一个f,为啥就编译不过呢?movx0,0xfff0000ffff编译出错:aarch64-linux-gnu-gcc-g-Iinclude-MMD-csrc/asm_test.S-obuild/asm_test_s.osrc/...
2022-01-15 18:46:02
2814
原创 第15课-ARM64内存管理MMU
第三季的第15节课开始和大家介绍ARM64内存管理MMU的相关知识。这节课的主要内容包括: 本科操作系统课程中和内存管理相关的基本知识 ARMv8中内存管理的相关知识点 Linux内核页表建立的代码 7个相关的MMU的实验 ...
2022-01-15 18:44:38
389
原创 ARM64+树莓派4b+JLINK仿真器实验环境搭建指南
ARM64体系结构与编程,全球原创的ARM64实验,笨叔带队,等你哟!ARM64体系结构与编程-yx音频:00:00/00:20奔跑吧第三季视频课程实验设备清单 硬件开发平台:树莓派4B (2G或者4G内存) 软件模拟平台:QEMU BenOS定制版 开发主机:Ubuntu Linux 20.04 MicroSD卡一张以及读卡器 USB转串口线一根 J-Link v11仿真器 注意: J-Link仿真器需要额外购买,请登录SE.
2022-01-15 18:40:41
3686
3
原创 如何让树莓派4上固件的debug日志输出到串口?
第三季奔跑吧旗舰篇视频课程:arm64体系结构与编程2020年10月1号重磅上线笨叔带队,以练带学,几十个实验,等您来撸!树莓派4上的FW我们玩过树莓派的小伙伴都知道,树莓派4上有几个固件,我们是需要把这些固件拷贝到MicroSD卡里的,这些固件包括如下几个文件。 bootcode.bin:引导程序。树莓派复位上电时,CPU处于复位状态,由GPU来负责启动系统。GPU首先会启动固化在芯片内部的固件(BootROM代码),读取MicroSD卡中的bootcode.bin文...
2022-01-09 21:25:32
690
原创 大陷阱:我可以把adrp指令换成ldr伪指令吗?
arm64里的adrp和ldr伪指令的区别,这是个大坑和陷阱。在linux内核的汇编启动代码里,下面的指令能否把adrp改成ldr,为什么呢?上面是linux 5.0内核的启动汇编代码,小明同学试着把上面的第一处修改了,重新编译内核,发现能跑。然后修改第二处,重新编译内核,发现不能跑了,这是为啥呢?小明:为啥enable mmu之后可以,enable mmu之前不行么?笨叔…笨叔:建议你先做第三季的实验,等你把实验做完了,你就更容易理解这个问题。
2022-01-09 21:23:51
313
原创 使用JLINK仿真器调试树莓派4
学习armv8,怎么能没有开发板呢?有的小伙伴说,我可以用QEMU啊?笨叔要很负责任的说,QEMU不能100%地模拟armv8的硬件行为,有不少地方QEMU模拟不出来的,所以还是需要一个真实的硬件板子。例如下面的2个例子, QEMU能跑,但是在树莓派上跑却跑飞了。所以,使用真实的物理板子是有必要的。其中树莓派4就是一个优秀的代表,4核cortext-A72的IP核心,高端上档次。而且价格超级便宜,只需要200~300多块RMB,搭配一个几块钱的USB串口,就可以玩树莓派了。在树莓
2022-01-09 21:22:41
1805
原创 灵魂拷问之调度与切换十六问
调度与切换之灵魂拷问,看看你大学学的操作系统课是否学到老师的真本领?没答对,说明你上课和笨叔一样睡觉,旷课,炒股,打游戏,和女同学聊天了调度和切换的疑惑有不少小伙伴问笨叔关于调度和切换的问题,在笨FAE看来,是对调度和切换没有理解透彻,处于一种是懂非懂的状态。就算大学里学过操作系统这课,也只是学点理论,没有学到老师的真本领。笨叔特意翻阅了好几个国外经典的教材,有的书简单提了一下,有的貌似干脆不讲切换比如《现代操作系统》。比如这本书《深入理解计算机系统》,就简单几句,总结很好,不过一般人会看晕,.
2022-01-09 17:40:46
136
原创 第一季视频更新:代码分析7之ARM64启动汇编和内存初始化
我们在上一期节目中和大家介绍了ARM64内存管理方面的硬件知识,那么这一期节目接着介绍ARM64内存管理相关的内容:ARM64启动汇编和页表初始化等内容。我们在代码分析第一期节目时候介绍过ARM32的启动汇编,有不少小伙伴希望笨叔讲ARM64的启动汇编,因为现在基本上很多公司都用ARM64了,原来用ARM32的都大部分切换到ARM64了。另一方面,ARM64已经成了主流,比如华为鲲鹏用ARM64做服务器,其他手机芯片公司比如MTK,展讯等早已经使用了ARM64了,现在传说OPPO也准备自研手机芯片,很多嵌入
2022-01-09 17:33:59
133
原创 视频更新:代码分析8之单步调试ARM64启动汇编与重定位
今天更新的视频节目,讲另外一个有趣的话题,如何用gdb来调试ARM64的启动汇编代码,可能大家都想尝试去单步调试启动汇编代码,但是又苦苦不知道怎么搞。在上一期节目中,我们和大家详细分析了ARM64启动汇编代码,还有在启动汇编代码里面做了哪些内存映射。有不少小伙伴看了那一期视频,都觉得不错,有不少小伙伴给笨叔提出了批评,觉得笨叔讲的太啰嗦,代码讲的过细,听的有点晕晕的。没有办法,众口难调。世间上难得有一个fae可以苦口婆心地和你讲Linux 5.0和ARM64,对吧。这样的fae去哪里找呢?录制视
2022-01-09 17:32:06
294
1
原创 [首发][Ubuntu]VSCode搭建Linux Kernel单步调试IDE环境
编者荐语:推荐使用vscode来单步调试奔跑吧内核,在按F5单步之前,请先设置断点,例如在start_kernel函数设置断点,直接在源代码左侧点击左键即可。以下文章来源于弹指码通,作者弹指神通弹指码通.自博客平台:jackeyt.cn 原创技术分享,涵盖AI、端到端、边缘计算、ARM、嵌入式Linux、OpenCV、嵌入式端AI模型剪枝、量化继上一篇介绍纯Win10下VSCode搭建Linux Kernel单步调试IDE环境本篇继续介绍在纯Ubuntu下用VSCode搭...
2022-01-09 17:29:34
1369
原创 Linux内核内存管理总结
微信公众号:奔跑吧linux社区加奔跑吧微信群请先加微信:runninglinuxkernel欢迎订阅奔跑吧配套旗舰篇视频节目:https://weidian.com/?userid=1352872851这篇对《奔跑吧Linux内核》第一版的内存管理 做了很棒的笔记和总结。《奔跑吧Linux内核》第一版各大书店有售。这篇文章作者是:Arnold Lu@南京原文:https://www.cnblogs.com/arnoldlu/p/8051674.html?from=groupmessage.
2022-01-09 17:21:59
265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人