分类目录归档:操作系统

线程调度和IO多路复用杂谈

做网络编程的话,经常会听到什么epoll(linux下)、kqueue(bsd和苹果下)、io完成端口(windows下)这样的名词,也许看了网上的资料也知道用法是什么样的,但是却对为什么这样做没有很感性的认识。我在尝试设计一个实验能够从线程调度的角度来对这个事情有直观认识,现在勉强也能算是搞出来了,所以写一篇讲讲是做了什么。

继续阅读线程调度和IO多路复用杂谈

x86逻辑地址转物理地址实验

之前一篇文章关于往NetBSD添加系统调用,是为了做这个实验准备的。

想要研究x86架构下的内存管理,最重要的参考文档应该是英特尔官方关于内存管理方面的解释了。在 Intel? 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1 文档的第三个章节,详细解释了整个翻译过程,其中涉及到的寄存器和各种标志位的作用。长是比较长,而且又是英语的,但是说得很清楚。

而实验则是验证自己理解是不是正确的一个很好的方式。理论看了半天,也知道怎么算,套公式好像也能算得出来,但是却不知道有没有算对。有真实的环境,一测试一验证,就知道对不对了。如果自己理解有误,可以及早发现和纠正。

继续阅读x86逻辑地址转物理地址实验

给NetBSD添加系统调用

NetBSD本来官方文档里( http://www.netbsd.org/docs/internals/en/chap-processes.html ,3.2.5节 )就有添加系统调用的相关指导的,但是实际根据那个指导操作的时候,会发现指导文档过期得有点严重,已经无法按照上面说的来达到目的了。然后我在其他地方找到了关于OpenBSD的教学( http://www.onlamp.com/pub/a/bsd/2003/10/09/adding_system_calls.html ),同样可以用在NetBSD上。选用NetBSD是因为它安装包小,内核编译又快,一来减少下载时间,二来减少编译时间。不过如果x86-32和x86-64都想玩过去的话,总下载量也还是会有七百来兆的:两片ISO(每个300多兆)和一个内核代码包(40兆)。

添加系统调用本来的目的是为了做“x86平台内存分页机制”实验的时候来执行一些特权操作的。这里用的系统是NetBSD 6.1.4 i386版本。

继续阅读给NetBSD添加系统调用