灵魂拷问之调度与切换十六问
调度与切换之灵魂拷问,看看你大学学的操作系统课是否学到老师的真本领?没答对,说明你上课和笨叔一样睡觉,旷课,炒股,打游戏,和女同学聊天了调度和切换的疑惑有不少小伙伴问笨叔关于调度和切换的问题,在笨FAE看来,是对调度和切换没有理解透彻,处于一种是懂非懂的状态。就算大学里学过操作系统这课,也只是学点理论,没有学到老师的真本领。笨叔特意翻阅了好几个国外经典的教材,有的书简单提了一下,有的貌似干脆不讲切
视频更新:代码分析8之单步调试ARM64启动汇编与重定位
今天更新的视频节目,讲另外一个有趣的话题,如何用gdb来调试ARM64的启动汇编代码,可能大家都想尝试去单步调试启动汇编代码,但是又苦苦不知道怎么搞。在上一期节目中,我们和大家详细分析了ARM64启动汇编代码,还有在启动汇编代码里面做了哪些内存映射。有不少小伙伴看了那一期视频,都觉得不错,有不少小伙伴给笨叔提出了批评,觉得笨叔讲的太啰嗦,代码讲的过细,听的有点晕晕的。没有办法,众口难调。世间上难得
第一季视频更新:代码分析7之ARM64启动汇编和内存初始化
我们在上一期节目中和大家介绍了ARM64内存管理方面的硬件知识,那么这一期节目接着介绍ARM64内存管理相关的内容:ARM64启动汇编和页表初始化等内容。我们在代码分析第一期节目时候介绍过ARM32的启动汇编,有不少小伙伴希望笨叔讲ARM64的启动汇编,因为现在基本上很多公司都用ARM64了,原来用ARM32的都大部分切换到ARM64了。另一方面,ARM64已经成了主流,比如华为鲲鹏用ARM64做
MAC上用word写文档没visio咋画图?
自从笨叔去年去美帝出差,被同事忽悠花了9000大洋买了一个MAC BOOK,传说美帝买MAC便宜,特别是俄勒冈州免税,再加上朋友的工卡可以打折,笨叔就这么上钩了😊😭本以为MAC用起来很爽。但是,当笨叔装上MS Office之后,发现没有visio,傻眼了!该死的微软,为啥不给MAC开发一个visio!笨叔很土,平时写文档和写书稿都是用word,然后用visio画图,它们俩可以无缝对接。那MAC对笨
来来来,动手DIY一个RSIC-V的Debian系统
最近几年开源指令集RSIC-V火遍大江南北,很多公司开始密谋基于RISC-V来淘金了,国内很多公司已经开发了RISC-V的MCU芯片,准备去替代ARM公司的Cortex-M系列的MCU。但是,对于我们想学习的小白来说,基于RSIC-V的开发板却很难买到,而且很贵,要命了!为RISCV站台的公司真不少不像基于ARM64的树莓派,便宜好用,在某宝上很容易买到。那想学习RSIC-V的同学怎办呢?不着急,
重温20年前的辉煌:蓝点Linux2.0
最近这几天IT届都在讨论芯片和操作系统的事情,很多人觉得操作系统没有那么难,但现实生活又总是打脸!难于上青天!为啥全球这么多公司玩开源,只有红帽(服务器),ubuntu(PC Linux)和Android(手机)能玩起来,其他都基本上没戏,这个值得深思!包括很多公司玩开源都没有流行起来,包括meego,mobin,ubuntu mobile phone,webos,firefox os等等。国内很
ARMv9的SVE/SVE2入门教程 (2)
如何运行SVE程序?在深入学习SVE指令之前,我们需要搭建一个能运行和调试SVE指令的实验环境。由于树莓派4b不支持SVE扩展,我们可以采用QEMU+ARM64实验平台来模拟SVE指令。runninglinuxkernel_5.0项目在github里,或者腾讯coding仓库中,如何使用请参考里面的Readme.访问github:https://github.com/figozhang/runni
ARMv9的SVE/SVE2入门教程 (1)
什么是SVENEON指令集是ARM64架构的单指令多数据流(SIMD)的标准实现。SVE(可扩展矢量指令Scalable Vector Extension)是针对高性能计算(HPC)和机器学习等领域开发的一套全新的矢量指令集,它是下一代SIMD指令集实现,而不是NEON指令集的简单扩展。SVE指令集中有很多概念与NEON指令集类似,例如矢量、通道、数据元素等。SVE指令集也提出了一个全新的概念:可
ARMv8的NEON指令详解
NEON指令优化详解第三季《ARM64体系结构与编程》已经更新第28次课了,这次笨叔给大家介绍NEON指令的使用和优化。NEON指令在有些场景下能获得10倍以上的性能提升,例如矩阵运算,图像处理,人工智能等。本节课会用4*4矩阵乘积运算作为例子,让大家感受一下10倍以上提升的快感。NEON广泛应用到开源软件优化中,比如ffmpeg,pixman等。学习NEON指令优化显得非常有必要。
NEON汇编比纯C代码快17倍!
最近在准备第三季的内容时候看了一下NEON汇编指令,挺有意思。我写了个小程序来试试NEON汇编指令究竟能有多少快。有的小伙伴可能不知道啥鸟是NEON。其实NEON就是ARM公司给自家的SIMD指令取了一个好听的花名。SIMD指的是单指令多数据流,它对多个数据元素同时执行相同的操作。这些数据元素被打包成一个更大的寄存器中的独立通道(Lanes)。例如,ADD指令将32位数据元素加在一起。这些值被打包
绝密:某大厂ARM64面试必考题
现在越来越多的产品是基于ARM64处理器开发的,例如手机、嵌入式系统、IoT设备、可穿戴设备等,产品开发中所有的岗位都应该或多或少了解ARM64体系结构的基本知识。如果读者准备面试这类公司,在面试之前应该了解和熟悉ARM64体系结构。 下面是一份某大厂的ARM64架构面试必考题,如果分数不及格,请不要灰心和放弃。(以ARMv8-A架构为准)以上题目的答
This is a good question,初学者都犯晕!
奔跑吧第二版读者群里有一个小伙伴问了一个好问题:初学者常常犯晕:A64指令集支持64位宽的数据和地址寻址,为什么指令的编码宽度只有32位?笨叔写了一段文字来解释为啥子会这样:奔2有读者交流群吗很多小伙伴希望有一个纯净和纯洁的读者交流群,笨叔建立了一个“奔2自由交流群”,该群以自由交流为主,时间有限不能一一回答,笨叔定时在群里选择典型的问题回答。加群条件:购买了全套3本奔2的小伙伴优先邀请进群,加群
里程焦虑的慢速通道:水货笨叔讲解QSpinLock源代码:
QSpinlock申请锁的过程,可以分成快速通道,中速通道,和慢速通道总结一下。快速通道:有点类似我们现在热门的电车,大家去充电桩充电,如果这个充电桩没有人使用,那你就可以用了,这是快速通道。中速通道:如果我们去充电时候,发现这个充电桩已经有人在使用,但是没有人在排队等待,那么你就是第一个等待的人,相当于拿到了VIP金牌,这个人充满了之后,就轮到你了。慢速通道:如果有人在充电,而且已经有人在排队了
try_to_wake_up()中4个内存屏障的使用
内存屏障的合理使用在操作系统实践中是非常重要的,也是有一定难度的,如果能把try_to_wake_up()中4个内存屏障的使用都想明白,那么对操作系统课程或者计算机的理解已经达到普通二本毕业的水平或FAE的水平!下面是笨叔讲解try_to_wake_up()中4个内存屏障使用的视频的预览片。
好消息:卷2新增附录E已经上传 - 关于try_to_wake_up()里的内存屏障使用
最近笨叔为卷2新写了一个附录E,由于纸质书已经发行,没有办法把它加入到纸质书里,现在已经上传到网盘share出来。附录E是关于内存屏障的。try_to_wake_up()函数里内置了4个内存屏障,你没听错,一个函数里内置了4个内存屏障,有点蒙圈了吧?新增附录下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。目录:进阶篇->新增附录
水货笨叔介绍MCS锁
前几天小明同学和笨叔抱怨:现在的spinlock锁的代码变得越来越复杂了,我都看不懂了。的确spinlock的代码从原来简单的几行代码,变成现在复杂的几百行,除了代码变得复杂,里面隐含的原理也不简单。在linux内核的spinlock的实现历史中,一共有三个版本的spinlock实现。第一个是经典的spinlock实现。第二个是Ticket spinlock的实现。第三个是基于MCS算法的queu
综合能力训练:在树莓派上动手写一个小OS(6):实验16-5:进程创建实验
本文节选自《实验指导手册》第二版第16.7章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第二版中第16章的实验16-5:进程实验。我们在前面的实验中已经完成了printk打印函数以及时钟中断的实验了,接下来我们就可
综合能力训练:在树莓派上动手写一个小OS(5):实验16-4:中断实验
本文节选自《实验指导手册》第二版第16.6章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第二版中第16章的实验16-4:中断实验。在实现操作系统基本功能之前,我们先实现中断处理功能,我们以树莓派上ARM Core里
综合能力训练:在树莓派上动手写一个小OS(4):实验16-3:实现printk函数
本文节选自《实验指导手册》第二版第16.5章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第16章中的实验16-3:实现printk打印函数。前面的实验,我们直接使用串口函数来打印,非常不方便。我们在实现BenOS其
综合能力训练:在树莓派上动手写一个小OS(3):实验16-2:切换异常等级
本文节选自《实验指导手册》第二版第16.4章实验指导手册是奔跑吧Linux内核入门篇第二版配套实验书,pdf版本已经release,可以免费下载和自由打印!下载方法:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。本文是《奔跑吧Linux内核 入门篇》第16章中的实验16-2:切换异常等级。1. 实验目的1)了解和熟悉ARM64汇编语言。2)了解和熟悉ARM64的异常等级。2