DMA设备驱动的常见问题
DMA (Direct Memory Access) 是一种提高计算机系统并发能力的技术。简单地说,它允许外围设备以异步方式操作内存,从而减少了CPU在I/O操作中的参与。
目前的微机和PC服务器都广泛采用了 DMA 技术。由于 DMA 是一种异步操作,因此在撰写驱动时,有很多需要注意的问题。
阅读全文…为什么重复free()比内存泄漏危害更大
C程序设计中,内存操作相关的错误可以说是最常见,同时也是非常隐蔽的一类错误。这类错误往往导致程序莫名其妙地崩溃、耗尽系统资源,或是形成严重的安全弱点。
阅读全文…NULL指针引用和内核bug的利用
总算是发公告了,可以说具体的事情了。
FreeBSD昨天发布了2项安全公告和1项Errata Notice:SA-09:13.pipe、SA-09:14.devfs和EN-09:05.null。两个安全公告修正的是同一类问题,也就是我们常说的多线程程序中的竞态条件(Race Condition);EN-09:05.null则是增加了一个使这类问题不再那么容易被利用达到特权提升目的的功能,但默认并不启用。
阅读全文…主旋律影片飞屋环游记
不知道为什么我总是觉得PIXAR的电影都是主旋律电影,或者说很大程度上都在宣传美国的价值观。
电影开头的部分其实是一段悲剧—-老人和妻子从幼年相识直到暮年,希望通过存钱来完成他们周游南美洲的梦想,但因为一次次意外而不得不放弃,到最后老太太快要去世的时候,老爷子用他们童年时候一样的蓝色气球—-老人后来成了一个钉子户,因为房子是他和妻子一生的回忆。
阅读全文…设计与艺术的区别
蛇头GG发来的一篇文章,值得一读:The Difference Between Art and Design。摘录一下标题:
- 艺术源于灵感,而设计源于动机。
- 艺术为人诠释,而设计为人理解。
- 艺术是一种品味,而设计则是一种主张。
- 艺术来自天赋,而设计来自技艺。
- 艺术为不同的人带来不同的信息,而设计为不同的人带来相同的信息。
一部分应用层协议放进kernel?
先把想法记下来。
- 提供一种描述语言,将应用层协议描述成DFA;
- 一个generator将DFA转换为代码;
- 用户态程序通过某种接口来向kernel请求已经协商好的该种协议的socket并由kernel直接填写一部分数据结构;
- 应用程序对socket的第一个回应有时间限制—-如果一段时间之内不回应,则系统将该socket交给下一个监听进程。
解决的问题:
阅读全文…另外一种DSR结构
dawnh在之前的人肉traceback中提到了 另一种DSR结构。即:
- 服务器端将虚拟IP绑在lo0上(子网掩码为/32);—-确保服务器收包、不广播ARP;
- 负载平衡设备接Internet的网口接路由器进来的VLAN;(“VLAN-Internet”)—-从Internet进入的包发到负载均衡设备上;
- 负载平衡设备的内网网口能够到达服务器;(“VLAN-Incoming”)—-负载均衡设备将请求根据负载均衡的条件路由到VLAN-Incoming上的服务器;
- 路由器提供一个绑定某一内网网址,且能联通服务器的接口;(“VLAN-Outgoing”)—-服务器回应包发到VLAN-Outgoing上的Internet路由器;
- 服务器默认网关设为路由器的内网地址。
(此VLAN划分是出于性能方面的考虑,不划分VLAN并不会导致整个系统不能用)。
阅读全文…改一行代码带来的性能改进
FreeBSD先前的vesa framebuffer驱动有个问题,就是滚屏的时候会比较慢。jkim大长辈于是改了一行代码。
好吧,我承认我之前一直以为是console驱动想要锁&Giant的问题。其实真正的原因是默认的pmap_mapdev并不做写合并,所以应该呼叫更低阶的pmap_mapdev_attr并传入PAT_WRITE_COMBINING参数。
阅读全文…解释一下DSR结构中服务器IP地址的配置
因为有人在我前一篇blog《使用DSR模式实现单IP服务冗余》里提了个问题,这里解释一下。
DSR比较常见的两种配置,一种是我之前文章中提到的禁止外网网卡ARP的方法,另一种是把虚拟IP绑定到lo0上。这两种方法各自有一些优缺点。一般来说,我喜欢用前一种方法。
阅读全文…概率趣题
今天在 Matrix67 的 blog 上看到这么一道题:
一个人有两个小孩儿,其中有一个生于星期二的男孩儿。问另一个是男孩儿的概率是多少?
答案当然不是1/2或者1/4,因为我们已经知道了有一个是生于星期二的男孩,因此这是一个条件概率问题。
阅读全文…