免费注册 查看新帖 |

Chinaunix

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

[其他] 我的笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-01 15:43 来自手机 |只看该作者 |倒序浏览
本帖最后由 weiweishuo 于 2015-05-01 16:04 编辑

最近在学linux内核,随手记下来一些笔记,肯定会有错误,希望跟大家交流。

论坛徽章:
0
2 [报告]
发表于 2015-05-01 16:03 来自手机 |只看该作者
本帖最后由 weiweishuo 于 2015-05-01 16:05 编辑

---1,may-----
* 代码段和数据段
  前几天看论坛上有人问,问程序的“代码段”和“数据段”在哪儿。
  有人说这要追溯到intel的分段机制,并且把x86分段机制讲了很多。
  我认为这样答是很不明智的。现代程序的“数据段”,“数据段”,跟cpu的分段机制并不相干。它是编译器生成可执行文件时,组织指令和数据的方式而已。在一款不支持分段机制的cpu上,它的可执行文件同样可以有.text,.data,.bss。

论坛徽章:
0
3 [报告]
发表于 2015-05-01 23:51 来自手机 |只看该作者
* bitfield的一个小缺点
  一直奇怪,linux里为什么很少见到用bitfield,给每个标志位定义一个常量 ,岂不是很麻烦,而且与来或去的,也不直观。
  今天实现irqaction时,索性把其中的flags成员,改成若干个bitfield:
  struct irqaction{
          bool flag_INTERRUPT:1;
          bool flag_SHIRQ:1;
          ...   ... };
  等到实现request_irq(...,unsigned flag)时,才发现问题,用bitfiled不容易作为参数传递。用户调用request,当然希望传递一个整形的flag完事,用传统的标志位常量很容易操作,像比request_irq(...,SA_SHIRQ|SA_INTERRUPT)。这样很简洁,而且可读性很好。如果flags是用bitfield实现的,这里就不好写参数了,即使你设计时,用一个flags和这些bitfiled进行union,SA_xx这样的常量还是不可避免要定义。

论坛徽章:
0
4 [报告]
发表于 2015-05-02 08:26 来自手机 |只看该作者
本帖最后由 weiweishuo 于 2015-05-02 08:33 编辑

*bochs下8253定时器不准确

  不知道你用bochs时有没有发现这一点。
  bochs下,对8253编程,即使用65535来初始化,时钟中断的频率仍旧很快。远大于(1193180/65535 = 18 )次。自己也是被恶心了很长时间。
  今天在osdev上问了一下,原来bochs默认是基于IPS产生clock中断,在bochsrc里启用:clock:sync=realtime,time0=938581955。就好了。
  不过,realtime会牺牲reproducibility(应该是调试内核bug时的可重复性),这时,可以改用slowdown参数,但又损失性能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP