Fork me on GitHub
摘要: 1.Copy和Drop 我们无法为一个类型同时实现 Copy 和 Drop 特征。因为实现了 Copy 的特征会被编译器隐式的复制,因此非常难以预测析构函数执行的时间和频率。因此这些实现了 Copy 的类型无法拥有析构函数。 #[derive(Copy)] struct Foo; impl Drop 阅读全文
posted @ 2022-08-21 20:37 BabyMelvin 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 1.介绍 方法调用的点操作符看起来简单,实际上非常不简单,它在调用时,会发生很多魔法般的类型转换,例如:自动引用、自动解引用,强制类型转换直到类型能匹配等。 假设有一个方法 foo,它有一个接收器(接收器就是 self、&self、&mut self 参数)。如果调用 value.foo(),编译器 阅读全文
posted @ 2022-08-18 22:35 BabyMelvin 阅读(247) 评论(1) 推荐(0) 编辑
摘要: 现在的compiler与CPU为了最佳化执行效能,必要时可能重新安排执行程式的流程顺序。 1.compiler最佳化可依据CPU的instruction issue数目,执行的latency cycles以及程式流程,在不影响程式上下文结果下重排或简化程式。 2.硬件设计最佳化: multiple 阅读全文
posted @ 2022-01-23 17:27 BabyMelvin 阅读(239) 评论(0) 推荐(0) 编辑
摘要: kernel本身就是个multithread concurrent的系统。在没有适当条件保证下,存取共享资源很容易发生race condition.共享资源包括周边IO及共享内存中的数据结构等。可通过适当的synchronization机制提供critical section来保证资源的存取。个人认 阅读全文
posted @ 2022-01-23 16:49 BabyMelvin 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 1.内存屏障 内存屏障的作用:内存屏障主要解决的问题是编译器的优化和CPU的乱序执行 基本的内存屏障有4种: 1.写屏障 2.数据依赖屏障(常与写屏障成对出现) 3.读屏障 4.通用内存屏障 1.1 代码优化 编译器会对c语言进行代码优化,生成的汇编语言可能和c语言执行顺序不一样。在需要严格按照c语 阅读全文
posted @ 2022-01-23 16:35 BabyMelvin 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 1. asm格式 GNU的C编译器使用asm关键字:asm段格式如下: asm ("assembly code"); 一些汇编器使用制表符字符缩进指令以便区分和标签。GNU编译器不需要这样做,单为保持一致使用这样方式。 asm("mov $1, %eax\n\tmov $0, %ebx\n\tint 阅读全文
posted @ 2021-11-14 19:58 BabyMelvin 阅读(589) 评论(0) 推荐(0) 编辑
摘要: ARM汇编语言源程序语句:一般由指令,伪操作,宏指令和伪指令组成. ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令. 目前常用的ARM编译环境有2种: ARMASM: ARM公司的IDE中使用了CodeWarrior的编译器,绝大多数windows下的开发者都在使用这一环境,完全按照ARM 阅读全文
posted @ 2021-11-14 17:16 BabyMelvin 阅读(1004) 评论(2) 推荐(1) 编辑
摘要: 1.从 System.map 文件中直接得到地址 内核镜像的 System.map 文件存储了内核符号表的信息, 可以通过此文件获取到具体的信息 查看内核函数的地址 grep perf_trace_do_sys_open /boot/System.map-4.4.0-72-generic 查看地址对 阅读全文
posted @ 2021-10-24 22:16 BabyMelvin 阅读(1067) 评论(0) 推荐(0) 编辑
摘要: 1. printk输出函数 多年工程经验看,printk()最简单有效的调试方法。 printk默认的配置实在配置文件中CONFIG_MESSAGE_LOGLEVEL_DEFAULT 4 通常高于这个值才会输出到控制台或者串口。可以通过如下几种方式修改: 可以手动修改内核为: <arch/arm64 阅读全文
posted @ 2021-10-24 21:39 BabyMelvin 阅读(988) 评论(0) 推荐(0) 编辑
摘要: 介绍 kernel有很多的同步和异步机制,做简单整理,力求能够熟练使用。 1.同步机制 并发:多个执行单元同时被执行 竞态:并发的执行单元对共享资源(硬件资源和软件上的全局变量等)的访问导致竞争状态。 并发与竞态。 假设有2个进程试图同时向一个设备的相同位置写入数据,就会造成数据混乱。处理并发常用的 阅读全文
posted @ 2021-10-24 21:26 BabyMelvin 阅读(359) 评论(0) 推荐(0) 编辑