
读书
文章平均质量分 65
codingart
这个作者很懒,什么都没留下…
展开
-
Beautiful Code {16. The Linux Kernel Driver Model: The Benefits of Working Together}
题目好像很玄的样子,有点《集市与教堂》的味道。 从代码上来讲,这是一个用c实现面向对象的继承特性,像是解释C++的继承如何实现的。记得有个朋友提醒过我子类对象的内存不一定是父类的内存在后面,虽然实际是这样的,但标准没有要求。 #define container_of(ptr, type, member) ({ / con原创 2010-02-24 22:42:00 · 346 阅读 · 0 评论 -
linux内核情景分析{2,存储管理}
现在才明白了内核空间和用户空间的区别。内核空间是所有用户进程共享的,用户空间则是每个进程有自己的一份。凡是存在内核空间的数据都可以在用户进程之间共享。内核管理内存完全采用了分页管理。 找到一本好书《Understanding the Linux Kernel》,简称ULK,和ACUP一样牛。以后研究。原创 2010-03-04 00:06:00 · 301 阅读 · 0 评论 -
linux内核情景分析{中断 系统调用 内存}
Linux的系统调用是通过中断来实现的,从用户态进入系统态。用户态和系统态有很清晰的区分,保证了安全。系统调用表是系统调用的跳转表。使用寄存器传递参数,而不是栈,因为用户态是无法访问系统栈的。地址错误是通过页面异常来处理的。Linux内核并不支持真正意义上的线程,LinuxThreads是用与普通进程具有同样内核调度视图的轻量级进程来实现线程支持的。这些轻量级进程拥有独原创 2010-03-08 01:53:00 · 545 阅读 · 0 评论 -
linux内核情景分析 UNIX环境高级编程 {进程 文件 内存}
FILE结构封装的是一个流,内核中的文件描述符是它的一部分。标准IO的缓存:全缓存,行缓存,无缓存。这个缓存是在应用层,进程间是隔离的。而内核中文件的缓存是进程间共享的,作为inode的一部分来管理的。FILENO调用获得FILE结构的文件描述符,用于dup2。mmap避免了两次数据拷贝,标准IO库的写产生了两次数据拷贝:原创 2010-03-06 01:35:00 · 682 阅读 · 0 评论 -
linux内核情景分析{信号 进程}
Alloca函数,用于在栈上分配内存,gcc的动态数组就是通过它来支持的。中断和信号的概念是不同的,信号是发给进程的,硬中断是内核和硬件之间,都是异步的,不可预知的。系统调用进入内核是不发生进程切换的。DIRECT_IO不使用系统IO缓存,还要保证缓冲区内存不被swap,这个用于那些用户层进行缓存的应用程序。可重入的一定是线程原创 2010-03-09 01:18:00 · 553 阅读 · 0 评论 -
Unix Network Programming {socket 选项}
SO_BROADCAST 是否支持广播,只能用于UDP,ETHERNET等支持广播的协议。SO_DEBUG 只支持TCP协议。开启时,内核会跟踪所有发送和接受的数据包,用trpt 命令来分析。SO_ERROR是一个用于读取socket错误的选项。SO_KEEPALIVE 如果连接双方超过两个小时没有数据交换就发送探测包。这个时间的修改要看各种内核原创 2010-03-10 00:05:00 · 623 阅读 · 0 评论 -
Unix Network Programming {Nonblocking IO}
/dev/poll和kqueue都是类似于epoll的技术,解决select/poll的效率问题,分别是Solaries和FreeBSD的技术。Connect超时时间是由系统决定的,recv和send的超时可以SO_RCVTIMEO and SO_SNDTIMEO决定,select和epoll可以设置超时时间。当然这都是针对block的socket的。用fc原创 2010-03-11 01:10:00 · 579 阅读 · 0 评论