摘要:
limlog 作一篇文章记录实现,驱动优化迭代。 代码仓库 用法 实现 后端实现 前端实现 日期时间的处理 线程id的获取 日志行的其他项处理 优化 整形字符串格式化优化 测试 benchmark 性能分析 TODO Change Log 参考 对日志库的 特点期望: 正确性,这个是最重要也是最基本 阅读全文
摘要:
环境 实现机器为VMWare的虚拟机,操作系统为 Debian-11(无桌面版本),内核版本为 5.10.0,指令集为 AMD64(i7 9700K),编译器为 GCC-10. 代码 Lab 的代码克隆自 https://pdos.csail.mit.edu/6.828/2018/jos.git Q 阅读全文
摘要:
Graphviz Graphviz 是一个自动排版的作图软件,可以生成 png pdf 等格式。 dot 语法介绍 部分图形属性介绍 示例 使用VSCode进行预览生成 参考 dot 语言 Graphviz 构建组件为 图,节点,边,用属性对其进行描述。 以下是定义DOT语言的抽象语法,约束的规则如 阅读全文
摘要:
C 表达式中的汇编指令 asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析。 asm 表达式有两种形式,第二种 asm-qualifiers 包含了 goto 语句。 第一种形式为常见的用法,AssemblerTe 阅读全文
摘要:
epoll(2) 源码分析 文本内核代码取自 5.0.18 版本,和上一篇文章中的版本不同是因为另一个电脑出了问题,但是总体差异不大。 引子留下的问题 关键数据结构 提供的系统调用 就绪事件相关逻辑 epoll 间的相互影响及处理 问题的解答 引子留下的问题 在上一篇文章中留下了几个问题,本文将针对 阅读全文
摘要:
epoll(2) 源码分析前的准备 本文代码取自内核版本 4.17 epoll(2) - I/O 事件通知设施。 epoll 是内核在2.6版本后实现的,是对 select(2)/poll(2) 更高效的改进,同时它自身也是一种文件,不恰当的比方可以看作 eventfd + poll。 多路复用也是 阅读全文
摘要:
eventfd(2) 结合 select(2) 源码分析 本文代码选自内核 4.17 eventfd(2) - 创建一个文件描述符用于事件通知。 使用 源码分析 参考 #include <sys/eventfd.h> int eventfd(unsigned int initval, int fla 阅读全文
摘要:
poll(2) poll(2) 系统调用的功能和 select(2) 类似:等待一个文件集合中的文件描述符就绪进行I/O操作。 使用 实现 select(2) 的局限性: 关注的文件描述符集合大小最大只有 1024 文件描述符集合为顺序的,不能任意指定 fd,浪费占用的fd poll(2) 对 se 阅读全文
摘要:
select(2),同步的 I/O 复用 直接看 epoll 的源码把自己绕晕了,先整个简单点的下手。 使用 源码分析 select(2) 提供的用户接口 #include <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *wr 阅读全文
摘要:
链接 在实际操作的过程中,测试的数据和 CS:APP 里面的内容有一些出入了,如重定位的方式,现在默认都使用 GOT+PLT 的方式进行重定位,与此带来的是 .rel.data 被干掉,使用 GOT 的方式访问。 编译过程 静态链接 目标文件 可重定位目标文件 符号解析 链接静态库 重定位 可执行目 阅读全文