08 2009存档
“书非借不能读也”,从图书馆借了《linux设备驱动开发详解》,虽然时间紧迫,但还是重点看了里面的前几章,包括块设备驱动,其它章节不太可能用到,飘过。
总体感觉是写得比较详细的,例子也很具体,如果是学嵌入式做驱动的人很适合;但缺点也就是大而全,厚厚的一本,幸亏是借的,要是买的心痛死了。个人觉得可 以和《linux设备驱动程序(第三版)》一起学习,效果应该不错。不过最好也最便宜的驱动学习方法还是去看linux源代码,比如ext3。
总体感觉是写得比较详细的,例子也很具体,如果是学嵌入式做驱动的人很适合;但缺点也就是大而全,厚厚的一本,幸亏是借的,要是买的心痛死了。个人觉得可 以和《linux设备驱动程序(第三版)》一起学习,效果应该不错。不过最好也最便宜的驱动学习方法还是去看linux源代码,比如ext3。
想限制对远程连接的accept个数,于是在连接数大于MAX的时候不accpet(异步IO,收到EPOLLIN后不accept),结果错误。
正确的做法是先accept,如果发现此时连接数大于MAX再close它。
正确的做法是先accept,如果发现此时连接数大于MAX再close它。
chinaunix上的一则新闻《编程大师Bruce Eckel不看好HTML5》。我对HTML5没有兴趣,对Bruce Eckel也没有兴趣,但我感兴趣的是他老人家什么时候成了“大师”了??
c++ 初起的时候,Bruce写了本《c++编程思想》,普及c++编程,于是满大街都是c++程序员;java风靡的时候,Bruce又写了本《java编程 思想》,普及java“大道”,于是满大街又都变成了java程序员。如此见风使舵之人,称他为“大师”我很难赞同,充其量一个有编程能力的投机作家。
能够创造系统、理解系统的方可称为大师,如果仅仅掌握几门语言的人也算,那Ken Thompson(unix的缔造者)该怎么称呼?Richard Stallman(GNU的缔造者)又该如何称呼呢?
c++ 初起的时候,Bruce写了本《c++编程思想》,普及c++编程,于是满大街都是c++程序员;java风靡的时候,Bruce又写了本《java编程 思想》,普及java“大道”,于是满大街又都变成了java程序员。如此见风使舵之人,称他为“大师”我很难赞同,充其量一个有编程能力的投机作家。
能够创造系统、理解系统的方可称为大师,如果仅仅掌握几门语言的人也算,那Ken Thompson(unix的缔造者)该怎么称呼?Richard Stallman(GNU的缔造者)又该如何称呼呢?
最近做项目用了epoll,于是打算深究一下,看了看linux内核的代码,凑成浅文一篇,欢迎指正。
《poll和epoll内核源码剖析》(一)
《poll和epoll内核源码剖析》(二)
《poll和epoll内核源码剖析》(三)
《poll和epoll内核源码剖析》(一)
《poll和epoll内核源码剖析》(二)
《poll和epoll内核源码剖析》(三)
====== 2010.5.14 ======
基于qixinkui同学的疑问,我修改了“poll是轮询”这一错误提法(在第二篇里),然后增加了对EPOLLET的代码分析(第三篇)。poll和epoll的区别在于fd数量很大时,两者的事件模型效率不同,而NAPI,它是驱动程序的功能,只会影响某个fd的通知速度,所以这里就不补充讨论了。有了NAPI,对poll和epoll都一样有利。
====== 2010.6.8 ======
问:当你讲sys_epoll_wait()->ep_poll()这个函数时,里面有个for循环 。你说它除了睡觉和判断ep->rdllist是否为空外什么也没干。我的疑问是既然它 睡觉了,也就是阻塞了,它还怎么进行判断?这两者的关系是怎样的?
答:下面的代码是ep_poll里的那个“循环”,1531行的代码是判断rdllist是否为空的,1539行是睡觉用的。
你所说,睡觉了,也就阻塞了,也就是1539行的schedule_timeout,当前进程自动放弃CPU,但是,是用的schedule_timeout而不是schedule。用了schedule,当前进程放弃CPU,直到内核在以后的某次进程调度中重新选择该进程;而schedule_timeout,那就是经过一个时间后(这里是jtimeout),进程会重新被唤醒获得CPU,然后从schedule_timeout函数返回。返回后继续循环,继续判断rdllist是否为空,为空就接着 schedule_timeout......
说白了,这个“睡觉”,不是永远睡下去,是一定会醒来的,醒来了再接着判断。不是说他边睡觉边判断。
1524 for (;;) {
1525 /*
1526 * We don't want to sleep if the ep_poll_callback() sends us
1527 * a wakeup in between. That's why we set the task state
1528 * to TASK_INTERRUPTIBLE before doing the checks.
1529 */
1530 set_current_state(TASK_INTERRUPTIBLE);
1531 if (!list_empty(&ep->rdllist) || !jtimeout)
1532 break;
1533 if (signal_pending(current)) {
1534 res = -EINTR;
1535 break;
1536 }
1537
1538 write_unlock_irqrestore(&ep->lock, flags);
1539 jtimeout = schedule_timeout(jtimeout);
1540 write_lock_irqsave(&ep->lock, flags);
1541 }
1542 __remove_wait_queue(&ep->wq, &wait);
1543
1544 set_current_state(TASK_RUNNING);
1545 }
1524 for (;;) {
1525 /*
1526 * We don't want to sleep if the ep_poll_callback() sends us
1527 * a wakeup in between. That's why we set the task state
1528 * to TASK_INTERRUPTIBLE before doing the checks.
1529 */
1530 set_current_state(TASK_
1531 if (!list_empty(&ep->rdllist) || !jtimeout)
1532 break;
1533 if (signal_pending(current)) {
1534 res = -EINTR;
1535 break;
1536 }
1537
1538 write_unlock_irqrestore(&ep->
1539 jtimeout = schedule_timeout(jtimeout);
1540 write_lock_irqsave(&ep->lock, flags);
1541 }
1542 __remove_wait_queue(&ep->wq, &wait);
1543
1544 set_current_state(TASK_
1545 }
1. 如果想在rpm安装时执行一些脚本,可以在%post块里面写这些脚本
2. rpm_build时会为包里的二进制文件找出对应的共享库(.so)依赖,打成rpm包后在安装时会提示缺少依赖并退出。要避免rpm_build帮你找共享库依赖,可以在spec文件里加"Autoreq: no"
2. rpm_build时会为包里的二进制文件找出对应的共享库(.so)依赖,打成rpm包后在安装时会提示缺少依赖并退出。要避免rpm_build帮你找共享库依赖,可以在spec文件里加"Autoreq: no"
初中的时候看某集《军事天地》,讲外军的体力训练,里面有一段配乐,像笛子吹的,很好听,我就想能再听听就好了,但是很遗憾,那时还没有mp3没有网络,况且我连着曲子的名字都不知道。我当时的想法是:以后长大了,去电视台,哼一哼曲调,再问问他们是什么曲子,他们自己放的他们肯定知道....
后来在很多科教、军事、体育节目的背景音乐里常听见它。读高中的时候,一次在书店外听到了喜多郎的曲子,发觉有几分相似,就跑到柜台问,但毕竟柜台有那么多的磁带,总不能都放出来听一遍吧?
再后来就是大学了,我学会上网了,但网络再大、搜索引擎再强,也还没先进到我哼个曲子它就能找到的地步。但我一直相信,这首曲子既然经常被引用,一定很有名。
07年的时候,找到个网页,上面收集了电视台上经常放的背景音乐,我全部down下来听了一遍,可惜,没有那首。
前天,电影台介绍Hans Zimmer,我知道他的,我所钟爱的《断箭》里的配乐就是他做的,很棒。电视里说,他还是《雨人》的配乐者,真是厉害....咦?!我隐约想起以前看《雨人》的介绍片,好像就是放的那首配乐,难道那是《雨人》里的曲子?
噢,天哪。那么久了,终于找到了,就是《雨人》里的"leaving wallbrook, on the road"
后来在很多科教、军事、体育节目的背景音乐里常听见它。读高中的时候,一次在书店外听到了喜多郎的曲子,发觉有几分相似,就跑到柜台问,但毕竟柜台有那么多的磁带,总不能都放出来听一遍吧?
再后来就是大学了,我学会上网了,但网络再大、搜索引擎再强,也还没先进到我哼个曲子它就能找到的地步。但我一直相信,这首曲子既然经常被引用,一定很有名。
07年的时候,找到个网页,上面收集了电视台上经常放的背景音乐,我全部down下来听了一遍,可惜,没有那首。
前天,电影台介绍Hans Zimmer,我知道他的,我所钟爱的《断箭》里的配乐就是他做的,很棒。电视里说,他还是《雨人》的配乐者,真是厉害....咦?!我隐约想起以前看《雨人》的介绍片,好像就是放的那首配乐,难道那是《雨人》里的曲子?
噢,天哪。那么久了,终于找到了,就是《雨人》里的"leaving wallbrook, on the road"
上周五早上坐车去上班,突然肚子疼,拉肚子,只好下车找地方上厕所。我是挑好站下车的——新世界商场,来到地下一层的超市,一问,该死居然没厕所!说一楼
有,但现在没到9点,没开呢。超市边没厕所?我憋的难受,跑到一楼一看,确实没开,商场内用绳子拦出一条过道,仅供去往超市的顾客走动,旁边只有一个女厕
所,我只好问一个胖子保安男厕所在哪里,他一副嫌弃的样子:“没有!”我本想回他两句,但无奈肚子疼,找厕所要紧,一句没说就匆匆出了商场。我边走边默默
的祝福那个死胖子,祝他以后出门就拉肚子,拉肚子就找不着厕所。
我苦着脸来到商场旁的索尼爱立信大厦,这次我不打算问啥了,写字楼肯定有厕所,直接进去好了。刚一进门还没开始找,一个保安就警惕的迎了过来,问我有何贵干,唉,我说啥呢,说上厕所,他说没有。放你的屁!没厕所?索尼爱立信的员工都随地大小便不成?
“旁边新世界商场有厕所”,索爱的保安说
“他也说没有!”,我边回答边又无奈的匆匆出了索尼爱立信大厦。
他妈的!他妈的!他妈的!
我憋得心里直骂这些保安,在这个四周大楼林立,貌似无比繁华的地方,却连个厕所都没有!难道都是一群吃人饭不拉人屎的家伙!?
边骂边继续找,只能去隔一个街区的医院找找了,我边走边苦着脸(憋得难受啊!)路过西门子大厦,噢~~,这个天天回家都要看到的大厦,更是光鲜,但我也知 道他保安更严,周末不上班的时候门卫都一副如临大敌的架势,这会儿肯定是不让进了。突然发现进西门子大厦的员工都瘦小且脸黑,一副愁苦疲劳的样子,而门卫 都虎视眈眈的盯着进去的人——这很像课文《包身工》里的场景,而不像一个大都市白领进写字楼的样子。和我对西门子的想象差太远了。说不定大厦里不是什么写 字楼,而是生产车间呢——制造业么。
拐过西门子,终于来到了医院边的公共厕所,此时离我下车已经过了40分钟。我那个激动啊,感谢市政府啊!感谢公共厕所啊!什么商场、什么外企,都是靠不住的混蛋!
我苦着脸来到商场旁的索尼爱立信大厦,这次我不打算问啥了,写字楼肯定有厕所,直接进去好了。刚一进门还没开始找,一个保安就警惕的迎了过来,问我有何贵干,唉,我说啥呢,说上厕所,他说没有。放你的屁!没厕所?索尼爱立信的员工都随地大小便不成?
“旁边新世界商场有厕所”,索爱的保安说
“他也说没有!”,我边回答边又无奈的匆匆出了索尼爱立信大厦。
他妈的!他妈的!他妈的!
我憋得心里直骂这些保安,在这个四周大楼林立,貌似无比繁华的地方,却连个厕所都没有!难道都是一群吃人饭不拉人屎的家伙!?
边骂边继续找,只能去隔一个街区的医院找找了,我边走边苦着脸(憋得难受啊!)路过西门子大厦,噢~~,这个天天回家都要看到的大厦,更是光鲜,但我也知 道他保安更严,周末不上班的时候门卫都一副如临大敌的架势,这会儿肯定是不让进了。突然发现进西门子大厦的员工都瘦小且脸黑,一副愁苦疲劳的样子,而门卫 都虎视眈眈的盯着进去的人——这很像课文《包身工》里的场景,而不像一个大都市白领进写字楼的样子。和我对西门子的想象差太远了。说不定大厦里不是什么写 字楼,而是生产车间呢——制造业么。
拐过西门子,终于来到了医院边的公共厕所,此时离我下车已经过了40分钟。我那个激动啊,感谢市政府啊!感谢公共厕所啊!什么商场、什么外企,都是靠不住的混蛋!