免费注册 查看新帖 |

Chinaunix

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

[内核入门] 源代码,编译器和目标机器的关系 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-30 14:16 |只看该作者 |倒序浏览
对与同一台目标机器,不同的源代码用不同的编译器可以实现相同功能。
那么对于指令集不同的目标机器,相同的源代码是不是必须用不同的编译器才能实现相同功能呢?
对与编译器而言,它能不能不用操作系统就可以直接使用并编译应用程序呢?为什么说对应与某某操作系统的编译器,不说对应某某CPU体系的编译器呢?并不是后者无法实现把?
是编译器产生的提前还是操作系统产生在前还是程序设计语言在前呢?
在某种意义上,编译器的设计堪比操作系统设计的难度吧,而程序设计语言的技术难度不如前两者大对吗?
比如设计C语言的时候,是怎么的思路呢,它的目的是什么,它依托的东西是什么。
求指点,很困惑

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
2 [报告]
发表于 2012-10-30 20:53 |只看该作者

最早的圣人们使用0和1编程。这是真的。
那时还没有操作系统,你写的那个程序就是那台计算机要运行的全部。
================================================
接下来就有人写了一个程序,这个程序可以加载另外的程序运行,这就是最早的操作系统。
同时,用0和1编程太费劲,于是有了汇编语言。最早的汇编语言使用0和1写的,相信我这应该也是真的。
================================================
汇编语言也有点弱,于是就有了Fotran. 这应该是最早的高级语言,如果没猜错,它是用汇编写的。
================================================
于是你可以用Fotran,也可以用汇编来实现C语言。
================================================
同时操作系统理论以及硬件也在发展,有了虚拟内存空间之类的抽象。
================================================
于是发展到后来,语言所需要的工具成为一个链条,预处理,编译器,汇编器,链接器。Java之流就更别提了。
================================================
它们是交叉发展的。
================================================
现在要理清整个历史,鸡生蛋还是蛋生鸡已经非常困难。不过对于现在来说,操作系统是由编译工具链生成的。
================================================
奇怪的是编译工具链是一套应用程序,它们一般在操作系统上运行。
================================================
所以实际的发展路径大约是这样子的,
你有了一个操作系统。
你在这个操作系统上写了一个工具链。
你写了一个更强的操作系统,用工具链生成。
你有了一个更强的操作系统。
你继续完善工具链。
你用这工具链来写操作系统。
...
================================================

工具链生成的东西,二进制的,是有格式的。这种格式要操作系统才能认识。比如Linux系统认识的格式叫elf. 当然工具链也可以生成裸的二进制文件。有一组操作二进制文件的工具叫做binutils. 有一个操作各种二进制文件的库叫做bfd(?).

认识下链接脚本,这玩意不错。假设你需要在一个裸板上(毫无疑问,除了CPU和电路板什么的什么都没有的裸板)搭建“操作系统”,这个是需要的。

================================================

编译器复杂,操作系统也很复杂。
它们的复杂的地方也不太一样。
就是说没得比较或者不好比较,不太好说它们哪个更...
不过相对来说,目前都有比较成熟的理论基础了。以后的东西不敢预料,虽然我个人通常有还有人能想到更XX的东西吗之类的疑问。

复杂的也不单是它们。比如数据库什么的。比如那些大网站的构架。比如Google神马的。比如百万级别并发神马的。各自有各自复杂的地方。

不然这世界为什么需要这么多搞这搞那的。

================================================

虽然是内核版块,我个人内核的水准也就那样(相对来说,还行. 哥还是知道Makefile和Kconfig怎么写, 怎么放到menuconfig那菜单。 写个这样那样的模块自娱自乐也能用。不过我一般很少逛这版,这版高手很高,菜鸟很菜),不过还是斗胆给LZ推荐几本书籍。这些书籍可能慢慢能打消LZ的疑惑。毫无疑问,LZ这样的疑惑几年前我也有。

================================================

《深入理解计算机系统》
《Linker and Loader》
《程序员的自我修养》
《Linux内核设计与实现》 内核入个门
《深入理解Linux内核》 (内核的一大把,不再说了)
《自动机理论,语言和计算导论》很好的自动机理论书籍,里面的证明比编译原理的书籍要全面
《编译原理》即龙书
《编译原理与实践》这本不错
《Draft a Compiler, C语言描述》看英文版,不难
《计算机程序的构造与解释》即SICP, Lisp神马的有意思的说
《七周七语言》这本我最近偶尔翻翻,木时间,只是想见识下多种语言的编程范式?这个不错。ruby, io, prolog, clojure, erlang, haskell...

声明下。上面这些书籍毫无疑问本人翻过。翻到什么层次了别问我。总之反正遇到问题了我还会翻它们。还有一些基本功修炼的就不说了,比如汇编神马的,基本是必须的。

================================================

论坛徽章:
0
3 [报告]
发表于 2012-10-30 23:58 |只看该作者
回复 2# captivated


    非常非常感谢,感谢码了这么多字,感谢细心耐至,感谢感谢

论坛徽章:
0
4 [报告]
发表于 2012-10-31 00:09 |只看该作者
回复 2# captivated


    非常非常感谢,感谢码了这么多字,感谢细心耐至,感谢感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP