免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenrvmldd
打印 上一主题 下一主题

也谈谈这四年来对内核的研究 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2011-07-02 10:34 |只看该作者
真是好帖子,我也研究了一段时间,感觉内存管理是蛮难的,我从文件系统入手到现在也只是学了些皮毛

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
42 [报告]
发表于 2011-07-02 10:36 |只看该作者
我们发现内存管理是Linux系统最复杂的部分,她和其他的模块的关系非常紧密,到目前为止,还有许多流程我不清楚,在什么情况下会触发。chenrvmldd 发表于 2011-06-30 15:29



    多说一句,很多人都说内存管理是最复杂最重要的。我却认为中断-异常才是最重要的最关键的。
比如你说的在什么情况下会触发,比较难于理解,我一直觉得是由于同步/伪并行/并发导致情况变复杂,而除此之外大多数情况下都不过是“静态”图景而已。

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
43 [报告]
发表于 2011-07-02 23:13 |只看该作者
很好奇LZ是什么公司,能让你们从0开始搞2年,这个魄力小公司可是没有的

论坛徽章:
0
44 [报告]
发表于 2011-07-02 23:38 |只看该作者
回复 42# smalloc


    中断其实我觉得不是特别的难理解,操作系统书上讲的比较具体,如果你再去看一下Linux的实现,会发现其实和书上讲的差不多,可是内存管理操作系统书上虽然讲了,但是很笼统,甚至有些东西都没有讲到,比如:碎片管理算法slab,大内存管理buddy system,都没有涉及到,可是中断这么多年了,原理还是老一套的,主要是对8259A的控制,自己去注册相关的中断处理函数,不过对于Linux来讲,为了提高系统的实时性,增加了中断线程化得概念而已!也许我理解的还不够深刻,希望广大兄弟提出批评!

论坛徽章:
0
45 [报告]
发表于 2011-07-02 23:39 |只看该作者
回复 43# goter


    呵呵,其实这个项目不是在公司里面参加的,是作为学生的时候参加的!

论坛徽章:
0
46 [报告]
发表于 2011-07-02 23:40 |只看该作者
为什么第二个问题到现在为止还没有兄弟解答了?难道我表达的有问题,今天暂时就不把答案贴出来了,等有兄弟回答,或者提出疑问,我再来公布我理解的答案,希望广大内核爱好者积极参与我们的讨论,让我们的版更活跃

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
47 [报告]
发表于 2011-07-03 09:14 |只看该作者
回复  goter


    呵呵,其实这个项目不是在公司里面参加的,是作为学生的时候参加的!
chenrvmldd 发表于 2011-07-02 23:39



    本科 ?
另第2问估计关心的人不多。对PC的DDR 有个组织JEDEC制定了规范 和系统总线连接的首先是一个 DDR控制器 所以可以通过固定地址读写控制器间接取芯片上的参数型号等。
要说困难也都是纯硬件上的。内存控制器的逻辑和内存芯片的逻辑比中断控制器逻辑要复杂。但对于软件来说也就限定在读写寄存器做些配置而已。没做过的基本不关心这个,就算关心看看文档就差不多了。没有什么复杂的状态机。
嵌入式好象就是针对硬件直接写的死的。因为没什么需要配置的。

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 感谢分享

查看全部评分

论坛徽章:
0
48 [报告]
发表于 2011-07-03 17:59 |只看该作者
本帖最后由 futex 于 2011-07-03 18:12 编辑

俺来回答一下:
1:u-boot一般通过bootargs来通知内核内核某些信息,比如rootdev, 内存大小等,典型如:set bootargs root=/dev/mtdblock3 console=ttySAC0,115200 mem=64M 设置内核启动的根文件系统设备,控制台设备及其波特率,内存大小。u-boot将bootargs串封装在 ATAG_CMDLINE类型的tag中,内核通过parse_tag_cmdline,来分析该tag中的各设置并做相应处理(boot程序通过一个tag表向内核传递各种参数)。在arm体系中,比如s3c2440,在其machine_desc对象的boot_params参数中指定tag表的内存地址来获取各tag并分析其内容,一般该地址放在soc内存起始地址+0x100的地方,当然u-boot也要遵循这个约定。
2:x86体系不太清楚,大概是grub通过bios来获取这些参数后也是通过taglist传递给内核吧。

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 感谢分享

查看全部评分

论坛徽章:
0
49 [报告]
发表于 2011-07-03 18:08 |只看该作者
本帖最后由 futex 于 2011-07-03 18:14 编辑

同意smalloc关于中断和异常才是导致系统复杂的主要因素,如果没有这俩东西,一切都是井然有序,天下太平。中断处理本身简单的,而由中断和异常带来的整个系统设计的复杂性是巨大的。

论坛徽章:
2
申猴
日期:2013-12-26 22:11:31天秤座
日期:2014-12-23 10:23:19
50 [报告]
发表于 2011-07-03 23:02 |只看该作者
我也同意smalloc和ls的看法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP