免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
1 [报告]
发表于 2011-07-04 09:29 |显示全部楼层
回复 34# chenrvmldd

内存管理部分都是东拼西凑,相互验证猜测的,回答下Lz:
一:
1.内核启动先执行bios, bios则通过探测总线获取所有的内存区。
2,setup.s中会搬运这些探测结果到memory 0页
3.内核引导,读取这些内存区信息,e820。先验证,若通过直接用,否则猜测使用。继而形成PGlist, zone等区域

二:
boatload则依赖于不同硬件体系结构,一般会预先定义好内存BANK。并在一个文件中定义。形如lowmemory.S
内核启动时直接传入

评分

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

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2011-07-04 09:32 |显示全部楼层
另外期待lz关于体系结构的大作

论坛徽章:
0
3 [报告]
发表于 2011-07-04 21:54 |显示全部楼层
回复 60# chenrvmldd

我想就第一个问题谈谈我得看法:
早期的linux内核版本比如0.11(够早的^^)进程切换是借助CPU提供的硬件机制完成的。简单来说就是每个进程对应一个RSS,记录进程上下文
(主要指寄存器),切换时由硬件对上下文全盘替换。
后来虽然内核的发展,设计者发现CPU的这种机制是非常消耗时间的。于是进程切换实现为软件机制。由软件来替代保存上下文,但为了不绕过CPU
自身的机制,只是简单走过过场,保存TSS描述符。这个在LINUX源码分析有句话说的很地道:铁打的营盘流水的兵。
至于进程上下文嘛:就是当前进程所有的寄存器值,以及打开文件,信号,堆栈(其实也是寄存器描述的)等。
至于优化嘛:只能说内核开发者永远不会盲从于权威,就算你是INTEL设计的,该不用我也照样不用。内存管理部分同样也有这样的案例。

论坛徽章:
0
4 [报告]
发表于 2011-07-04 21:58 |显示全部楼层
回复 63# futex

3:理论上可以,调用sched_setscheduler将进程设为最高实时优先级并把调度策略设为SCHED_FIFO,并且在进程中不主动放弃cpu或调用主动放弃cpu的相关系统调用(比如阻塞的read)。

这个貌似不行吧,时钟中断一来,就算你不主动放弃还是会被强制替换的。??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP