成长记录

欢迎喜欢计算机技术的朋友进来交流
 
« 上一篇: Jar与Jad 下一篇: J2ME System.getProperty标准参数例表 »
Jason @ 2008-07-17 23:15

操作系统不能完全用高级语言来实现。实际上,所谓的高级语言也不是一个绝对的概念。汇编语言,应该算是公认的低级语言了,
java算是高级语言了,但c语言却很难界定。由于c语言和汇编语言一样是属于编译性的语言,所以c语言的程序性能才会有极大的优
化空间,这点上,c语言很接近于低级语言。但c语言又是面向过程的,并不是汇编那样的机器级指令,这样来看,他又很像高级语
言。而java语言,并不是编译性的语言,java程序编译出的目标文件是字节码文件,是用java自己的虚拟指令集实现的。而其程序
能够运行则需要java虚拟机将其虚拟指令集转换成真正可以执行的机器指令。所以java这种高级语言是不能用于实现操作系统的,
因为要实现操作系统只能依赖cpu的实指令集,或者说这时候并没有可以依赖的虚拟指令集,因为这时候还没有其他软件。这也决
定了,需要实现操作系统,必然应该选取编译性的语言。
    前面说过了,c语言是编译性的语言,但是,操作系统的实现并不能完全的依赖c语言。正如全面说的,c语言在设计的时候就是
以一种面向过程的语言来设计的。这也是c语言区别于汇编的根本,否则c语言就退化成汇编语言了。这也就决定了c语言更多的是
过程设计,而一些细节的实现c语言是实现不了的(最直接的,c语言不能直接访问寄存器),这部分还是需要依赖汇编。比如引导
程序,中断处理,低级I/O等。说白了就是c语言不能实现所有的机器指令集。如果想全部用c语言来实现的话,除非扩展标准的c语
言,比如定义一些新的语法,你可以自己扩展编译器来实现。
    很多人都说linux是用c语言写的,其实linux是用c和汇编写的。其实关于c和汇编之间的区别也不是那么大,因为他们都是编译性
的语言,所以他们之间的联系也异常紧密,只要固定目标文件格式,c语言编译的目标文件和汇编编译的目标文件是可以链接的。 
     ps:我自己写过操作系统,不过只写完引导和简单中断处理就懒惰了:)




评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

日历
网志分类
『所有网志』 (322)
生活 (41)
工作 (11)
运动 (3)
情感 (1)
java (65)
c/c++ (16)
.net (23)
linux (6)
网络 (73)
数据结构与算法 (6)
数据库 (4)
体系结构与编译技术 (2)
Flash (0)
图形图像 (0)
黑客与系统安全 (8)
病毒 (0)
XML (1)
windows视窗 (2)
操作系统 (13)
wimax (12)
手机 (14)
数学 (4)
日语 (0)
法语 (0)
美剧 (0)
计算机硬件 (6)
站内搜索
友情链接
我的歪酷 非非共享界
订阅 RSS
0047898
歪酷博客