Operating System
Dark-Rich
Let the code into my blood
展开
-
理解解释器中的JIT机制
原始代码long add4(long num) { return num + 4;}JIT代码0x48, 0x89, 0xf8, // mov %rdi, %rax0x48, 0x83, 0xc0, 0x04, // add $4, %rax0xc3 // r...原创 2019-11-12 14:40:28 · 395 阅读 · 0 评论 -
常见线程模型
连接独占线程或进程在这个模型中,线程/进程处理来自绑定连接的消息,在连接断开前不退也不做其他事情。当连接数逐渐增多时,线程/进程占用的资源和上下文切换成本会越来越大,性能很差,这就是C10K问题的来源。这种方法常见于早期的web server,现在很少使用。单线程reactor以libevent, libev等event-loop库为典型。这个模型一般由一个event dispatcher等...原创 2019-10-29 18:15:03 · 739 阅读 · 0 评论 -
学习制作操作系统 0
自己动手写操作系统原创 2014-04-26 23:28:10 · 925 阅读 · 0 评论 -
Linux内核架构演化
Linux内核架构演化原创 2017-02-10 20:04:16 · 820 阅读 · 0 评论 -
CPU Cache
局部性原理程序的运行存在时间和空间上的局部性,前者是指只要内存中的值被换入缓存,今后一段时间内会被多次引用,后者是指该内存附近的值也被换入缓存。如果在编程中特别注意运用局部性原理,就会获得性能上的回报。CacheCache的工作原理是基于程序访问的局部性。对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布...原创 2019-09-16 14:44:11 · 384 阅读 · 0 评论 -
Cache Blocking
背景提高缓存命中率的一个重要技巧是Blocking,数据块将逐块计算,使得存储器访问是一个具有高内存局部性的小邻域。通过在缓存中使用/重用这些数据,我们减少了进入内存的需求(减少内存带宽压力)。Blocking避免了应用程序中的内存带宽瓶颈,可以在1-D,2-D或3-D空间数据结构上执行Blocking。在代码的角度,Blocking通常会涉及到循环拆分和交换。实现1-D Blocki...原创 2019-09-17 17:10:53 · 1946 阅读 · 0 评论 -
使用Flex&Bison创建新的编程语言
简介Flex是一个词法分析器,是unix lex的gnu克隆,作用是把"词"抽象成符号,供程序识别。Bison则是一个文法分析器(也是unix yacc的gnu克隆),语法就是在这里定义,是语言设计的核心。如果你需要分析或处理Linux或Unix中的文本数据,可以使用flex和bison迅速解决问题。不但可以应付复杂的语法处理,也可以拿来制作简单的分析器,如配置文件等。...原创 2019-09-10 16:28:02 · 1197 阅读 · 0 评论