*Nix and Win32 Kernel
一部分应用层协议放进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上。这两种方法各自有一些优缺点。一般来说,我喜欢用前一种方法。
阅读全文…使用DSR模式实现单IP服务冗余
FreeBSD支持以DSR(Direct Server Return,即服务器直接将流量通过路由器返回,而不经过负载平衡设备;俗称"单臂模式")模式提供服务。为了改善服务的可用性,可以使用这种方法来配置服务器。这种方法非常适合于大并发、大流量的环境。
阅读全文…模拟实模式x86 CPU
前一段时间commit了来自XFree86 -> NetBSD -> OpenBSD的x86emu,这是一个大约9千行C代码的x86实模式CPU模拟器。
由于 amd64/EM64T “long mode” 不支持先前 x86 保护模式中的 “vm86” 扩展(虚拟实模式环境),因此,这个模拟器使得 FreeBSD 能够在 amd64(EM64T) 平台上支持 vesa、dpms 等功能了。
阅读全文…New BSD Licensed debugger
So finally Doug Rabson has make it. It’s written with D Language and is in git here.
参与评论垃圾收集里面用到的一种同步机制
先胡乱记一笔。
利用原子操作(CMPXCHG)来修改正扫描的栈帧上的返回地址,令其指向修正垃圾收集表的子程序。这样做的好处是避免了垃圾收集器在程序运行过程中为配合垃圾收集器运行而需要引入的额外开销(垃圾收集器通过扫描栈来了解应用程序目前知道的内存,并将其从准备释放的内存列表中删去,因此,垃圾收集器会希望在扫描栈的时候那个栈帧不发生变化,或者能够检测到这种变化,通常的做法是垃圾收集器提供一套机制来让正在运行的线程阻塞,而这种逐栈帧扫描并配合适当的返回指针修改的做法,则可以几乎完全不阻塞正在运行的线程,同时避免了在收集器不动作时的日常同步开销)。
参与评论FreeBSD CAM/AHCI committed
下周一的8.0-BETA2会包含这个。CAM/AHCI是按照CAM框架重写的AHCI驱动(之前是ata(4)),提供了包括NCQ等硬件特性的支持,并改善了对SATA光驱的支持。与OpenBSD的实现不同,FreeBSD实现通过扩展CAM框架使其直接对ATA设备提供支持。
阅读全文…驱动程序是什么
Disclaimer: 这是一篇科普文章,不会涉及太多的技术细节。
简单地说,驱动程序是操作系统与硬件(有时也包括其他的软件或在硬件上运行的firmware)之间的一种接口程序。对于操作系统来说,驱动程序是非常重要的
不过,在现代系统中,多数情况下,驱动程序并不只是简单机械地翻译操作系统的请求,更多的时候,驱动程序还有另外的很重要的作用,即绕过硬件本身的问题,常见的例如,临时加载一份较新版本的固件、针对某些版本的硬件禁用某些会导致问题的特性、分配内存的时候确保按边界对齐或只在前4GB分配以绕过DMA引擎寻址能力差的问题、通过增加延迟来解决硬件制造时对时序过于敏感的问题,等等。通过驱动程序绕过这些问题,能够让用户看不到(或者,至少在硬件负载不大的情况下看不到)问题的存在,并消除一小部分问题(例如原先随硬件发布的固件版本存在一些问题,而又没有提供更新固件的接口,新版本的驱动可能会在系统引导的过程中上传一份新版的固件到设备的临时存储)。
一般来说,驱动程序可以在逻辑上分为以下三个部分:
阅读全文…