LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2542|回复: 33

咨询:操作系统是怎么被机器识别的?(比较深入~)

 关闭 [复制链接]
发表于 2007-3-14 12:46:08 | 显示全部楼层 |阅读模式
第二次装linux。。已经可以QQ,上网,安装删除软件了,基本一般办公用没有问题。但是我还是有很多疑问的。

首先,因为我学习并使用过89C51系列单片机。肤浅的了解过FPGA,不过都明白,需要在windows下面通过专门的编译器将C语言(或汇编)编程的程序转换成最起码的HEX文件,然后通过烧写器烧写进芯片的存储器中。学习单片机了解,所有的芯片(包括CPU)就只认识0,1。通过晶震一遍又一便的循环扫描程序。

在单片机情况下,可以通过烧写和编译器搞定转换,至少转变成HEX。

但是操作系统是如何被装进裸机的呢?我也看过linux的发展介绍,说linux本人是在GCC1.4的编译器环境编译的linux操作系统,这个我还是比较好理解的,内核源代码是用C语言写的。但是我的疑问我相信大家很多人肯定都有,不过是没有发现罢了。。

首先,我们装操作系统,要么是通过光盘启动,或者通过DOS引导进硬盘找到驱动文件。我们进入安装界面,或用鼠标或键盘的操作安装操作系统,但是,各位有没有想过,CPU在没有任何底层的情况下(即裸机状态),是怎么识别出操作系统的?在安装不论是windows还是linux还是什么,就会发现首先是找到各个硬件,然后配置,书本说操作系统是最底层的,再下面就是物理层了。我们现在安装操作系统,鼠标点点,图形界面,但是我们安装的本身的存储器(光盘,硬盘)都是用2进制码存储的,然后机器在一上电开始,通过BIOS(有人说BIOS是最底层的操作系统),指定存储器,然后CPU通过扫描光盘或硬盘的存储单元(应该是从第一个单元开始扫面起吧?)但是那些存储单元都是2进制的,我们看到的是图形的,这里面肯定需要编译器吧。那这个编译器是在什么地方呢?

如果说linux本人是通过GCC编译器写的C语言内核,那他又是在什么环境下写的这些代码并成功转换成2进制代码的呢?

这里好像陷入了一个先有蛋还是先有鸡的问题,首先,我们写的程序需要编译器,但是编译器又是需要有操作系统做底层的,这里,那世界上第一个操作系统是拿什么语言写的呢?如果是C或者汇编,也是需要编译器的啊,那些编译器又是怎么在没有操作系统的机器上面运行的呢?

乱谈一通~~~希望达人帮忙解决

---------------------------------------------------------------------------------------------------

既然这么多人来一起晕~~那我就都编辑到一起好了~~

首先来回答2楼的...
我个人觉得2楼说得比较有理,首先,计算机的发展最初就是为了方便计算的.这个我们现在还在使用的小型计算器我想就是最初的计算机了..所以没有什么操作系统..不过同样没有一起讨论到细节..呵呵..我也不知道什么是细节~~

接着是3楼.....
你说的我似乎有一点明白,,不过..存储器里面只有一堆一堆的代码,,你说的情况,以前只是执行数学操作还是可以的,通过纸带形式.但是现在,有的是要输出图像,有的要输出声音,有的要打印..CPU是只认识0,1的不需要编译的话,他怎么知道什么代码需要执行哪些?还有,我个人有个想法,可能编译器就好比一本电子词典,你输入英文-他就变成2进制码?不知道对不对

然后是5,6楼....
兄弟说出了汇编..可是我就是用汇编的,将单片机的时候,我们老师就讲过:"你只需要知道汇编就行了,至于汇编怎么变成2进制并运行在单片机上面,是intel的事情..我们也不知道怎么变的.."你说的编译器的不断演变,,还是蛮有意思的...我还不知道这个呢...我听说一个关于编译器的是一个编译器花了18年时间做成,可见编译器很难做啊~

回7,8楼......
CPU只知道执行命令是这样的..不过我了解过一点点FPGA,也听老师说,通用CPU和FPGA ,CPLD,其实是一个构架(大概这么说的..说错了不要骂我老师就行),也就是说CPU也是逻辑门阵列..那么我们用CPLD或者FPGA就是使用VHDL硬件描述语言来指定它的内部与非门的状态,然后达到引脚的输入输出的功能实现..操作系统大概就是让CPU在不同的时间进行不同的门阵列的状态变化吧~
就算说VHDL,也是一种语言,还是需要编译器的...你说的图形,我问问,既然CPU只知道执行2进制码.它怎么知道什么码段要送到什么地方?

回9楼..
我自己也是这么觉得..感觉我们在装操作系统的话,一切的编译和协调大概就是由BIOS来完成的..也就是说.介于物理层和底层的操作系统应该是存放在BIOS里面的,不知道各位是否认同?

回11楼..你说的我也不了解啊~~~不过有一点请各位了解..所有的芯片不过是一群一群的与非门~~所谓的安装可能是CPU先进入光盘或者硬盘某位置,读取2进制码.然后通过门阵列输出有的输出到打印机,有的输出到硬盘,有的输出到显卡...所谓的指令不识别大概就是输入指令经过CPU运算得出输出不是想要的输出吧?

回12楼..
你说cpu把自己认为是显示数据的2进制码~~~
我给你一串2进制码..你能告诉我哪部分要给显卡吗?没编译器或者什么器的..CPU哪里知道哪段码该给哪个哦~~

好了..大致先看到这么多..真累啊~~~呵呵~~只是乱弹啊~~大家一起来迷糊~~
发表于 2007-3-14 13:05:52 | 显示全部楼层
我的粗浅的理解就是,最初的机器没有操作系统,人们直接用0和1编码(媒介就是直接改变开关管的工作状态,然后慢慢有了打孔纸带之类的东西)在此基础上开发了汇编,再用汇编写成c编译器,然后就什么都有了。

人类工具的发展史应该也大概如此,现在可以用机床加工工具,但是第一台机床肯定是用榔头和锉刀弄出来的,第一个铁质榔头和锉刀应该是用青铜榔头锉刀弄出来的,再早就是木棒和石器的时代了。

人类的一大本领就是善于制造那些制造工具的工具,且不断加以改进,有点拗口,但是猩猩也会拿木棒够那些远处的东西,只不过它永远不能改进木棒,更别说铁棒了。
回复 支持 反对

使用道具 举报

发表于 2007-3-14 13:13:53 | 显示全部楼层
搂主好混乱,说得我也晕了……

CPU只知道执行机器码指令,并不在乎你是什么操作系统。
编译器是把文本源代码转换成2进制文件的程序,程序执行过程中不需要编译器。
我只知道很早的时候,计算机专家可以通过纸带打孔直接输入机器码,来编写程序。毕竟,没有编译器,人类不是不能编写程序,而是编写起来太困难……
就像加工零件用的机床,那么机床的零件又是如何加工的呢?
回复 支持 反对

使用道具 举报

发表于 2007-3-14 13:14:03 | 显示全部楼层
真有意思.  
回复 支持 反对

使用道具 举报

发表于 2007-3-14 13:36:28 | 显示全部楼层
首先,我们写的程序需要编译器,但是编译器又是需要有操作系统做底层的,这里,那世界上第一个操作系统是拿什么语言写的呢?如果是C或者汇编,也是需要编译器的啊,那些编译器又是怎么在没有操作系统的机器上面运行的呢?
答:最早的“现代操作系统”(定义“操作系统”为一个通用的硬件和软件资源平台的话)是在IBM的大型机上用汇编和一些简单的脚本语言写的。它之上是“原如操作系统”(可能能管理专门的硬件,用汇编之类写成)。最早的FORTRAN
是汇编写的
回复 支持 反对

使用道具 举报

发表于 2007-3-14 13:39:57 | 显示全部楼层
另,编译器通常是由旧一点编译器实现的,
一个小故事就是最早的UNIX的老是可以被UNIX之父LOGIN进去
呵呵,因为它们用的是UNIX之父的编译器生成的编译器实现的UNIX
呵呵
回复 支持 反对

使用道具 举报

发表于 2007-3-14 13:44:52 | 显示全部楼层
一点一点来说:
"CPU在没有任何底层的情况下(即裸机状态),是怎么识别出操作系统的?"
不知道楼主所谓识别操作系统什么意思,cpu不知道什么系统不系统的,它只是知道执行命令而已。

"但是那些存储单元都是2进制的,我们看到的是图形的,这里面肯定需要编译器吧。"
编译是指将程序源代码转变为机器可以识别的语言,比如c程序变为二进制,或者verilog程序变成网表(是这么叫吧),那么里显然不需要编译,已经是二进制的机器码了。至于怎么从二进制到图形,那是程序的事情。
回复 支持 反对

使用道具 举报

发表于 2007-3-14 14:32:14 | 显示全部楼层
好长,越看越糊涂了。。。机器要识别操作系统干啥
回复 支持 反对

使用道具 举报

发表于 2007-3-14 15:01:38 | 显示全部楼层
现代操作系统中
最早的图形功能是由BIOS提供的,比如显示和字符之类的。
BIOS是由各大硬件厂家提供的。
回复 支持 反对

使用道具 举报

发表于 2007-3-14 15:22:07 | 显示全部楼层
应该是系统给硬件的信息
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表