- 论坛徽章:
- 0
|
今天上来看了一下,发现几个兄弟做了一些回复,基本上和我理解的差不多,可是,我喜欢兄弟们更深的去思考一下,问题背后的不同设计的差异,为什么会使用A设计而不使用B设计,目的是什么?这才是我提问题的目的,其实,工作不到1年的时间,我发现,知识没有思维重要,这也就解释了公司里面有些人工作了5年还是老样子,有的人工作才1-2年就成为项目负责人(当然这还有其他的原因),知识学起来很快,可是思维就没有那么快形成!
先回答几个兄弟的问题:
Smalloc 兄弟的问题:中断的重要性,你说的非常对,中断让整个系统的设计变的复杂,但是中断本身并不复杂,其实操作系统中任何一部分都是重要的,没有最重要,也没有相对重要,只是说内存管理比价复杂,难以理解,中断本身不难理解,但是它的出现使得系统变的复杂,这正是我想表达的!
futex:这个兄弟说的非常的对,可是中断你觉得难理解吗?如果你学过计算机组成原理,相信你也写过中断处理程序吧?8259A
懂医术的厨师:这个兄弟说,内存管理是东凑西拼出来的,这句我不太理解,希望你能详细的解释一下!
下面公布一下我理解的答案:
其实“懂医术的厨师:”这个兄弟的答案和我的差不多:
我先把他的答案贴出来,然后再补充一下:
一:
1.内核启动先执行bios, bios则通过探测总线获取所有的内存区。
2,setup.s中会搬运这些探测结果到memory 0页
3.内核引导,读取这些内存区信息,e820。先验证,若通过直接用,否则猜测使用。继而形成PGlist, zone等区域
二:
boatload则依赖于不同硬件体系结构,一般会预先定义好内存BANK。并在一个文件中定义。形如lowmemory.S
内核启动时直接传入
关于第一个问题,我想说的,回答的非常好:就是在第三个小点漏了一点:e820形成之后到PGLIST和zone这块,其实还应该有过关于bootmem这样的一个过程,bootmem是初始化的时候为各个初始化模块提供内存管理的!
第二个问题:其实在嵌入式的bootloader中,我们是根据不同的板子信息,在板子的/include/configs下面的板子头文件中定义了内存的大小,物理地址的编址,而在x86的体系结构下,我们是通过“int 0x15,功能号为0xe820:的BIOS调用
其实这个为问题的本身,我觉得不是特别的难,看过linux内核情景分析的都知道,看过嵌入式的Uboot也清楚,可是我系统通过这个问题:让大家进一步思考:为什么嵌入式的Bootloarder和PC机下的bootloader就应该不一样了?
其实我的理解是:在嵌入式领域:Uboot和内核都是靠我们自己去移植的,因为,我们会自己去配置自己的硬件(比如:nandflash,nor flash,等等,地址都是我们自己去编的,大小,我们在移植也已经订好了,以后就不会改变了),比如不同的flash,不同的phy,等等,不同的应用会导致硬件差别特别的大,而且灵活性也很大!
而在PC机领域就不存在上面的问题:比如,有可能内存条我们会自己变换,如果我们变换一次就需要修改操作系统,那么对于操作系统的用户来讲,那是不可能的! |
评分
-
查看全部评分
|