读薄「Linux 内核设计与实现」(1) - 从内核出发

举报
远航 | FIBOS 发表于 2020/12/03 01:10:16 2020/12/03
【摘要】 这篇文章是《读薄「Linux 内核设计与实现」》系列文章的第一篇,本文主要讲了两个问题:内核编程的特点以及 GNU C 在内核开发中的特点。 0x00 内核编程特点 无 libc 库,不能访问标准 C 文件使用 GNU C无内存保护机制慎用浮点数计算注意同步和并发可移植性考虑:保持字节顺序、64位对齐、不假定字长和页面长度 0x01 GNU C 内联函数...

这篇文章是《读薄「Linux 内核设计与实现」》系列文章的第一篇,本文主要讲了两个问题:内核编程的特点以及 GNU C 在内核开发中的特点。

0x00 内核编程特点

  • 无 libc 库,不能访问标准 C 文件
  • 使用 GNU C
  • 无内存保护机制
  • 慎用浮点数计算
  • 注意同步和并发
  • 可移植性考虑:保持字节顺序、64位对齐、不假定字长和页面长度

0x01 GNU C

  • 内联函数:将函数展开至调用位置,省却函数调用代价
  • 内联汇编:在确定体系结构的情况下,在 C 代码中直接嵌入汇编代码
  • 分支声明:分支时可根据预知条件发生的概率进行优化

例:

if(error){
/* do something */
}
  
 
  • 1
  • 2
  • 3

优化后:

if(unlikely(error)){ //error为0的概率大
/* do something */
}
  
 
  • 1
  • 2
  • 3

或:

if(likely(success)){ //success为0的概率大
/* do something */
}
  
 
  • 1
  • 2
  • 3

本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!

文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/51601042

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。