08 2023 档案

摘要:linux内核为用户态进程提供了一组IO相关的系统调用: select/poll/epoll, 这三个系统调用功能类似, 在使用方法和性能等方面存在一些差异. 使用它们, 用户态的进程可以"监控"自己感兴趣的文件描述符, 当这些文件描述符的状态发生改变时, 比如可读或者可写了, 内核会通知进程去处理, 这里的文件描述符可以是socket, 设备文件, 管道等. 使用这组系统调用, 用户态可以实现事件循环机制, 比如redis源码中就基于此实现了自己内部使用的事件循环, 同样还有很多其他专门提供事件循环机制的开源库. 这里通过一个驱动模块实现的poll接口, 去分析内核中poll系统调用的实现原理. 主要讨论了以下3个问题: 1. 用户态进程如何使用poll系统调用? 2. 内核如何处理poll系统调用? 3. 怎样调试从进程发起poll调用到返回的过程? 阅读全文
posted @ 2023-08-25 08:46 编程这点事儿 阅读(1026) 评论(0) 推荐(0)
摘要:之前实现的c语言项目单元测试框架cutest, 功能更新, 已上传至ubuntu ppa仓库, 方便安装使用, 文末附带视频说明. 阅读全文
posted @ 2023-08-20 13:29 编程这点事儿 阅读(197) 评论(0) 推荐(0)
摘要:## 开篇 现在流行的开源项目经历了长时间的开发, 积累了大量的代码, 想要一行一行地阅读代码去学习开源项目, 需要的时间成本是巨大的. 所以, 我们也需要用一种高效的方式去"阅读"代码. 计算机科学发展到现在, 产生了很多高效成熟的工具, 调试器就是其中之一(扯句题外话, 那些大牛程序员似乎就是喜 阅读全文
posted @ 2023-08-08 14:30 编程这点事儿 阅读(996) 评论(0) 推荐(0)
摘要:module_init是linux内核提供的一个宏, 可以用来在编写内核模块时注册一个初始化函数, 当模块被加载的时候, 内核负责执行这个初始化函数. 在编写设备驱动程序时, 使用这个宏看起来理所应当, 没什么特别的, 但毕竟我还是一个有点追求的程序员嘛:P, 这篇文章是我学习module_init相关源码的一个记录, 主要就回答了下面的3个问题, 篇幅略长, 做好准备. 阅读全文
posted @ 2023-08-02 21:46 编程这点事儿 阅读(1296) 评论(0) 推荐(0)