Linux内核模块 --- NetFilter

一方面自己开始写OS,一方面也开始做一些Linux kernel相关的研究,顺便写一下kernel的module,因为看到一篇论文是基于net-filter做一个P2P的流量监测器。 自己也对这个有点兴趣,于是乎就开始准备按图索骥了。 不过自己不做这个P2P测量,而是准备做一个网络监管的小module,一方面是来练手,一方面是熟悉linux kernel module的开发流程。 首先就是设计,因为是基于Net-Filter框架所以main函数一定一个钩子。 目前的一个设计的文件结构是这样: ├── COPYRIGHT ├── Makefile ├── README.md ├── conf │   └── websites.json ├── configure ├── src │   ├── Makefile │&nbs... [阅读全文]

Mac 10.10上编译 Bochs

想开始写操作系统了,但是卡在Mac上编译Bochs上,看了几个issue,还是没有头绪, 因为Apple已经放弃了x11和carbon(有兴趣可以看这文档), 终于找到了如下的方法: 第一步,安装SDL库 可以使用HomeBrew的方式: brew install sdl 第二步,Configure Bochs ./configure --enable-ne2000             --enable-all-optimizations             --enable-cpu-level=6    ... [阅读全文]

阅读Redis源码(三) -- redis通信协议与事件驱动

在redis中,关于事件驱动框架的代码集中在ae.h/ae.c中.作者也在头部设置了介绍:a simple event-driven programming library. 这个框架其实很简单,核心就是一个消息 队列,同时只有一个线程负责对其进行处理,这里面的调度思想,还是简单的优先级队列,文件操作优先级永远高于时间操作.而且任务之间并不会进行抢占. 具体执行过程,可以参照如下干特图: time ----------------------------------------------------------------------->| |<---- 10 ms ---->|<---- 10 ms ---->|<---- 10 ms ---->|<---- 10 ms ---->| | FE 1 ... [阅读全文]

阅读Redis源码(二) -- 数据库及持久化策略

之前的一篇文章写了关于Redis的字典数据结构,但是,他并不是与我们直接交互的.因为我们在进行添加字段的时候,往往需要添加过期值,这一点我们在字典数据结构中没有能够得到体现. 所以,我们需要关注另外一个数据结构,redisDb.即Redis的数据库储存,在redis.h中,该结构体的定义如下. typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expires; /* Timeout of keys with a timeout set */ dict *blocking_keys; /* Keys with clients waiting for data (BLPOP) */ dict *... [阅读全文]

阅读Redis源码(一) -- 基本数据结构

调试环境搭建 下载redis源代码包,可以访问"redis"官网进行下载.这边,我使用的是2.8.13的稳定版本. 解压之后使用eclipse for c/c++导入工程,选项是依据makefile的那项. 导入之后会出现一个语法错误,但事实上,这个错误是可以乎略的.就是在热带开始redis.c的第2969行,会有如下的代码: snprintf(buf,1024*16,ascii_logo, REDIS_VERSION, redisGitSHA1(), strtol(redisGitDirty(),NULL,10) > 0, (sizeof(long) == 8) ? "64" : "32", mode, server.port, (l... [阅读全文]