免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 794 | 回复: 0
打印 上一主题 下一主题

内核阅读感想 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-07 13:29 |只看该作者 |倒序浏览
好长时间都没来了,今天再来发发贴哦!^_^ 看了内核第一感觉是整个设计确实很精致,在很小的地方都可以体现开发人员的素养。比如在网络程序中内核采用统一的调用接口sys_socketcall(int call,unsigned long *args),而在sys_socketcall根据call来确定具体的调用。这样统一的接口给人的感觉是很方便的,只要传入特定的参数就OK了。在内核中保证操作的原子性是一个贯穿始终的问题,很多地方都可以看到spin_lockxxxx的东西,这就是为了保证原子性而设计的。为了解决不同类型的原子性问题,spin_lock就设计了一个系列的函数。 在对进程的控制中也有很经典的地方,在内核中利用哈希表使得对进程的查询速度很快,利用哈希表时主要解决的是解决冲突的问题,在内核中用的是链地址法来解决的,就是如果利用哈希函数时得到的是同一个地址,则将其加入到这个地址的一个链表中,这样就可以解决其冲突问题;建立进程数的时候用的是一个双向的链表,利用宏SET_LINK来插入一个元素到双向链表中; #define SET_LINK (p) do { \ (p) ->next_task = &init_task; \ (p) ->prev_task = &init_task; \ init_task->prev_task = (p); \ init_task->prev_task->next_task = (p); \ (p) ->pysptr = NULL; \ if((p)->p_osptr = (p)->p_pptr->p_cptr) != NULL) (p) ->p_osptr->p_ysptr = p; \ (p) ->p_pptr->p_cptr = p; \ }while(0) 不过中间也有些问题实在想不通,比如在2.4内核中开始要解析环境参数,用的函数 static void __init parse_options(char *line) { char *next,*quote; int args, envs; if (!*line) return; args = 0; envs = 1; /* TERM is set to 'linux' by default */ next = line; while ((line = next) != NULL) { quote = strchr(line,'"'); next = strchr(line, ' '); while (next != NULL && quote != NULL && quote = MAX_INIT_ENVS) break; envp_init[++envs] = line; } else { if (args >= MAX_INIT_ARGS) break; if (*line) argv_init[++args] = line; } } argv_init[args+1] = NULL; envp_init[envs+1] = NULL; } 不知道传入的cmd_line到底是什么样的格式,如果就是象嵌入式中很常见的"noinitrd root=/dev/mtdblock/0 init=/linuxrc console=ttyS0"那样传入的话,这个函数就不可能达到预期的效果,因为在解析时开始是以引号和空格作为标志的,如果是这样在while循环中找到开始找到第一个"然后进入就找的最后一个"就根本不能解析里面的字符串,但是从if (!strncmp(line,"init=",5))来看参数确实应该是按上面这种方式传入的,我也按照他这种方式做过试验,不管用那种方式都得不到想要的结果,学习当中,各位有撒想法可以一起研究啊,呵呵! ^_^!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7547/showart_227696.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP