当前位置:  技术问答>linux和unix

又是2个弱弱的问题:)

    来源: 互联网  发布时间:2015-11-10

    本文导语:  弱弱问题集: 1, 操作系统是祼机上的第一个程序,它本身也是个很庞大复杂的程序,是个程序就要编译,链接,而编译,链接,又是个程序。到底最初的不需要编译,链接就能执行的程序是什么?linux大多数源码最...

弱弱问题集:
1,
操作系统是祼机上的第一个程序,它本身也是个很庞大复杂的程序,是个程序就要编译,链接,而编译,链接,又是个程序。到底最初的不需要编译,链接就能执行的程序是什么?linux大多数源码最低也就低到汇编,汇编不是机器码,应该也需要程序将它翻译成机器码,C语言就更不用说了。
  谁能告诉我,假设我只有一堆硬件,其它的什么也没有,按一张图纸连接好线路,组装成了一个PC,现在我要给它编一个操作系统,让它动起来,我都需要有步骤,有次序的做些什么?(注明,我并不是很有野心的要写操作系统,我只是想了解这个过程)

2,
为什么最适合编写操作系统的语言是C?书上说,“因为C语言编写操作系统的最大优点是具有很高的可移植性,因为C语言是和机器无关的,而汇编语言是和具体的硬件环境相关的。”但是C语言和机器无关是通过不同操作系统下的GNU C/C++编译器实现的。也就是说C语言是个规范,不同操作系统编译C程序是针对不同机器的,也就是说硬件相关性被操作系统及其C编译器透明化了。 现在有了Java,为什么不用java写操作系统呢?为什么java不是最适合写操作系统的语言呢?java上虚拟机能做到的。
如果程序的编译,链接是操作系统之下,裸机之上的程序,我觉得java才是最适合编写操作系统的语言



|
PC机已经成了一个标准,这个标准决定了CPU首先执行的是BIOS程序,BIOS的入口地址(CPU第一条执行的指令)由硬件来决定的,一般这个BIOS程序是由主板厂商实现的,所以对于操作系统来说是透明的,而BIOS将对CPU的控制权交给操作系统的入口地址是一种规范,这个地址是不会改变的(这个地址就是存储器上的某个位置)!!!!

你可以将BIOS看作是一个简单的操作系统,它也有自己的中断处理与驱动,只是目前的BIOS没有多任务的功能,操作系统的最前面一段代码由汇编写成,而操作系统在这个时候却要访问硬件(需要用中断的方式),它自身此时却没有处理中断的能力,只有借助于BIOS了。操作系统中的驱动是比BIOS驱动更强的东东,它提供了更高级的功能,当你的应用程序需要访问硬件时,就需要借助于操作系统的驱动。当操作系统完全启动之后,早已把BIOS的那块程序复盖了,所以应用程序就再不能调用BIOS的功能了(当然最重要的是保护模式的原因)。BIOS是由什么语言来写并不重要,重要的是用什么语言来写最适合,由于现在的CPU在硬件上都不支持虑拟机,所以它只认机器码,那么无论你用C或是其它来写,必须最后生成机器码才行。当然,用汇编加C的方式是现在通用的做法

保拟模式与实模式相对应的,引入保护模式的最根本的原因是进行内存保护的需要,现代操作系统都是可以支持多任务的,如果一个进程可以任意访问其它进程的资源的话,那么岂不是在一个进程中可以为所欲为????一个进程死了之后,其它进程也要受到影响!!!为了避免这种情况的发生,就引入了保护模式。

在X86上,系统启动之后首先是在实模式下,而实模式下按16位寻址,这种情况主要是为了兼容,再者,进入保护模式前需要做一些准备工作的。

在保护模式下,CPU按32寻址,这样可以利用的内址空间可达4G,比16位的方式提高了可利用空间。在保护模式下可以利用MMU,CACHE等高级功能,这样就在性能上提高了,至于MMU,CACHE等功能你去看一下<<LINUX内核完全注释>>这本书,然后在网上查阅一下你就明白了,不是一下就能说清楚的。

|
1.不需要编译与链连的可执行的程序就是机器码,但机器码也需要放在硬件上才能上电后运行,在计算机早期情况下,可能由手工的方法将机器码用打孔的方式放在了存储卡上,而硬件设置成从存储卡上读取数据并启动,这就是一个最简单的“操作系统”,然后可能用同一种方法来实现第一个“编译器”,之后就可以用这个操作系统与编译器来实现其它程序的编译连接,然后再升级自己的操作系统与编译器,这就是鸡与蛋的问题了
在现代这样发达的信息世界里,如果需要自己实现一个操作系统,那么你需要先在另一台有操作系统等丰富软件的机子上来开发,如果是同一种类型的CPU,那么就直接利用现有机子上的编译器与开发环境来开发就行了,如果不是同一类CPU,就需要交叉编译环境,这方面的东东比较复杂,你可以在网上找一下资料,有了操作系统之后,就需要开发一个在此操作系统上的编译器(也可以不用,示具体情况而定,说起来比较复杂的),然后就需要开发在此操作系统之上的应用程序了

|
2.一台没有操作系统的机子,由硬件决定CPU从内存(或者其它存储器上)取第一台指令并执行,从此CPU的控制权就交给了那个第一条指令。。。。。。你的JAVA程序是一种需要用虚拟机来解释的,那么你的JAVA虚拟机如果可以用硬件来实现的话,那么你就可以直接用JAVA来写操作系统,如果没有这种硬件支持的话,你怎么让你的JAVA代码执行呢(CPU只认机器码)???JAVA虚拟机还不是用C来实现的啊,当然还一种办法,在硬件上用C写一个JAVA虚拟机,再在上面运行JAVA的操作系统,但JAVA执行效率并不高,操作系统对效率的要求却相对较高,所以一般都不用JAVA写操作系统。
C语言之所以最适合写操作系统,因为它灵活,高效,移植性好(各种平台下都有C编译器),年代久远(程序员基本上都是从C学起),而且操作系统基本都是用C来写的,这种广泛的支持下,还有其它语言在编写操作系统的必要吗?

|
对一个磁盘操作,有两种方式:其一是直接操作扇区,其二就是你所说的按一定的逻辑组织方式(就是所谓的文件系统)来操作。当操作系统还没有完全启动起来的时候(就是文件系统驱动还没有运行起来的时候),按第一种方法(就是你最先所说的调用BIOS驱动的方法),当操作系统正常运转之后,按第二种方法来操作硬盘(或者其它存储体)。
磁盘的主引导区是一种规范,这是约定好的,至于目录区与数据区那是人为的逻辑

|
现在的编译器是操作系统之下的软件,汇编编译器最终同样是二进制码,现在的汇编编译器一般也都是由C写成的
GCC是编译工具,用它来编译LINUX源代码,然后再将编译后生成的文件存储在磁盘上,由这个磁盘来启动你的目标操作系统就行了,你可以在网上查找一下如何制作一个小型的LINUX操作系统的文章
java虚拟机是一个运行在操作系统上的软件,它本身也是可执行文件,在操作系统下,它的确需要调用到操作系统的API才行,但是你可以在嵌入式上做一个在硬件上可以直接运行的JAVA虚拟机,只不过这个虚拟机包含了操作系统的功能,它本身就是操作系统与虑拟机的结合体
现在好像没什么编译器把JAVA代码直接编译成机器语言的,都是生成了中间代码,由JAVA虚拟机来解释运行的,如果直接将JAVA代码编译成机器语言的话,就损失了JAVA本身所具的优势了

    
 
 

您可能感兴趣的文章:

  • 又是一个继承问题
  • 又是一个简单问题!
  • 又是几个问题JList XYLayOut applet下
  • @@@@servlet问题!!(但愿我这最后5分不要又是泥牛入海a!!!!!!)@@@@
  • 天啊,又是中文问题:utf-8编码转成GBK,因为位数不同而产生字符丢掉问题!!
  • 又是一个很菜的问题但是不得不麻烦大哥大姐了啊~
  • 又是菜鸟问题
  • 怪事,又是RedHat7.1的安装问题。
  • 又是书本上的问题:很简单的Applet,为什么不能显示?有请各位.
  • 又又是一个小儿科的问题——不知错哪了
  • 又是中文问题啊1
  • 又是一个巨简单的问题,怎么偶老是问这样的问题?
  • 急死了,又是中文问题,java,jsp 高手请进,高分送!!!!!!!!!!!能指个方向的也给分!
  • 又是中文乱码问题,呵呵,不知道为什么又会出来烦我?
  • 又是汉字问题,哎...
  • 菜鸟问题:./configure是干什么的?make install又是干什么的?
  • 晕了!!!!!!又是100个错误??????晕了??????(编译器没有问题)????????
  • 又是MotoSDK2问题:怎么编译java程序,并生成jar文件呢?
  • 又是java参数传递的问题,看里边的例子。。。
  • 又是dns问题,都被搞懵了!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • shtm是什么技术,jsp又是什么技术?
  • 请问tomcat与apache是什么关系? jakarta又是什么?
  • servlets 能打包成.jar文件吗?打包之后又是怎样调用呢?
  • 又是50分,给我提醒,我就给分给你。共一百分!
  • 又买了一个版本的.net,又是装不上,烦也烦死了,还是java爽呀。散点分玩玩。
  • 更改主机名,用hostname更改后启动,又是原来的主机名
  • 环境变量怎么设啊(@.@又是菜鸟一只)
  • 弱问:一个设备能不能既是字符设备又是块设备?
  • 又是几个问题JList XYLayOut applet下 iis7站长之家
  • 请问在JAVA里将小写字母换为大写字母是用什么函数,大写转成小写又是用哪个函数?
  • ZOD-dvd-x86_64.iso中的ZOD是什么意思?Final zod又是什么意思?
  • pwd|sed 's//cygdrive/([a-z])/1:/' | sed 's///#/g'`\/(pwd代表绝对地址)这个sed又是什么
  • 又是100分
  • 新手送分题(又是无法显示)!!
  • 请问/dev下的device file比如fd1, hd1,这些文件是怎么做成的,它里面的内容又是些什么呢
  • LINUX中怎么样编译C文件??查看自己IP又是怎么样?
  • 使用TCP协议通讯,如果有很多种数据要传输,如:注册信息等,在C++中,我们可以使用结构,java中通常大家又是如何打包的呢?
  • 请教:什么叫扩展字符集,什么又是不扩展阿?
  • 市面上卖的red hat linux软件69元是正版,那我下载的算不算盗版,如果是盗版我就去买个正版的,开源一说又是什么回事?
  • 大家看看:有点纳闷,为什么linux下的参数那么多重复的?那么多求助的方式?比如一会儿用--help一会儿又是-help一会儿又变成/?了


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3