LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: casio1374633

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

 关闭 [复制链接]
发表于 2007-3-15 10:01:51 | 显示全部楼层
“linux他本人”------>应该是“linus他本人”
回复 支持 反对

使用道具 举报

发表于 2007-3-15 10:33:25 | 显示全部楼层
我觉得你的提问,归结下来,其实是在问两个问题:
1、计算机是怎么样一步一步启动到操作系统的。
2、如果没有一个现成的操作系统,如何从源代码编译一个操作系统。



首先,我们先来明确一些基础知识。
1、计算机只能识别0和1,其他一切东西都必须转化成0和1,才能被计算机识别。这一点你在提问时已经提到
Post by casio1374633

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


2、对于软件,我们编写源代码,源代码只有人能读懂,计算机并不能直接识别。所以我们需要把它转化成计算机能识别的的0和1,这项工作由编译器负责。这一点你也时已经提到
Post by casio1374633

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

3、计算机系统是有,硬件、操作系统、应用程序,有低到高堆叠起来的。操作系统控制硬件,应用程序通过操作系统使用硬件。对于完善的操作系统来说,应用程序不能越过操作系统直接使用硬件。编译器是一个应用程序。




我们来说第一个问题。你提到

Post by casio1374633

首先,我们装操作系统,要么是通过光盘启动,或者通过DOS引导进硬盘找到驱动文件。我们进入安装界面,或用鼠标或键盘的操作安装操作系统,

我认为,我们为了装操作系统,要光盘启动计算机,或者启动DOS操作系统。这个启动的含义是就是启动计算机,载入操作系统。
不过这时载入的操作系统是一个用于安装目的的操作系统,而不是我们日常使用的操作系统。
这一点,在linux发行版光盘上很明显。在很多linux发行版光盘上(比如fedora,比如gentoo),都有一个isolinux目录,这个目录下有两个文件vmlinuz和initrd.img,这两个文件就是用于安装目的的操作系统的核心。这个操作系统启动后,在载入或字符界面、或图形界面的安装程序,来安装我们要安装的操作系统。
用于安装目的的操作系统,和日常使用的操作系统,他们两个不太一样的。前者是一个精简操作系统,能完成安装是需要的动作即可。后者相对而言是一个全功能的操作系统。
同样,DOS启动和windows光盘启动,安装操作系统也是一样。DOS启动,就是载入IO.sys,MSDOS.sys和command.com三个文件,这三个文件是DOS操作系统的核心,然后有我们手工运行安装程序(安装98运行setup.exe,安装2k/xp运行winnt.exe)。
windows光盘启动也必然会先载入一个用于安装目的的简单操作系统,只不过这一步在安装界面上没有显示出来,然后载入一些必要的驱动程序,接着自动运行安装程序。



对于,第二个问题:如果没有一个现成的操作系统,如何从源代码编译一个操作系统。我觉得这个问题分为现代和远古时代分别来说比较好。
在现代,操作系统技术和编译器技术高度发达的时代。如有只有硬件和操作系统的源代码,怎么办?其实很简单,找一台其他的装有操作系统和编译器的计算机,把操作系统的源代码编译了,然后复制到这台计算机上,即可。实际上,现在也是这么做的。LFS是这么做得,(参看坛子里LFS的文档),fedora估计也是这么做得,(参看rpm -qi kernel,里面的build host就是指专门用于编译的计算机)。
那么,在远古时代,不存在这么一台“其他的装有操作系统和编译器的计算机”,这么办?我的答案是:进化。一步一步的进化过来。最早的计算机,只能由专家们用0和1(可能更原始一些,开和关)直接控制的。估计,那帮天才们也是用0和1一个字一个字扣出一个操作系统+编译器的。

以上,也不知道对不对,请大家批评。
回复 支持 反对

使用道具 举报

发表于 2007-3-15 12:29:37 | 显示全部楼层
建议楼主去看一遍“微机原理” 里面主要是以8086处理器为基础介绍cpu的工作原理的,希望能有所帮助。

http://www.ahzk.net/wlzx/
回复 支持 反对

使用道具 举报

发表于 2007-3-15 15:36:45 | 显示全部楼层
后面那比较深入是什么意思??搞笑?>_<
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-15 23:55:06 | 显示全部楼层
呵呵..没想到连版主都来了..谢谢版主的提醒,,那本书我已经在下了...

回19楼先...

可能是我理解错了..8086我们有这门课的..8086的内部构架和C51我觉得是差不多的..至于说FPGA是说我老师在说FPGA的时候说FPGA功能很强大(记得好像是刚开始学数字逻辑的时候,讲到后面的CPLD时候说的),上可以变成通用CPU, 下可以变成74系列..大概就是这么个意思..

回22楼...先对你表示敬意先~~你的话我觉得很有受益,,,
不过我想了想,我们现在讨论说到系统,其实我们说得都不全面,首先,,,一直将操作系统和CPU挂在一起,但实际上操作系统应该是和整个电脑挂在一起才对..就像之前说到图形的问题,.可能那本身就是显卡芯片的问题...只是我们讨论的时候就只是把操作系统和CPU挂钩了...你关于第2个问题的回答基本算是让我了解了些情况.,.我再去看看版主推荐的书..可能就能明白好多了..

回23楼..微机原理我学过这门课..主将8086还有8255等intel芯片..主要的还是用汇编的语言...
另:我们还学过接口这门课~~

回24楼..我说的比较深入..就是说这帖子估计就会很多人来一起讨论~~所以叫深入..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-16 00:05:12 | 显示全部楼层
刚刚看完<深入理解计算机操作系统>的前言,非常感谢版主的回答和帮助..我认为我的问题基本可以解决了..谢谢参与讨论的各位..这个帖子应该就此打住了..呵呵要不然就成了无聊帖了..
回复 支持 反对

使用道具 举报

发表于 2007-3-16 09:29:32 | 显示全部楼层
弱弱的问:一开始为什么非得要编译器呢?手工编译不行吗?只是麻烦点了
回复 支持 反对

使用道具 举报

发表于 2007-3-16 09:56:07 | 显示全部楼层
手工编译?那还编译干什么,直接手动写机器码不就好了
回复 支持 反对

使用道具 举报

发表于 2007-3-16 11:06:36 | 显示全部楼层

当然可以 ~~

在这种情况下最先编写的程序是什么呢? 当然是  工具............
回复 支持 反对

使用道具 举报

发表于 2007-5-5 22:29:14 | 显示全部楼层

操作系统的识别问题

我感觉应该是中断识别的,你打我一巴掌,我感觉疼的自然反应一样,机器接触到中断要求就开始执行所谓的代码了.......当然代码组成了一个协调运行的系统,然后就是我们看到的这个操作界面了吧  哈哈 可能你看完会觉得我跟没说一样,但细细想想道理就是这样,不是么?!
回复 支持 反对

使用道具 举报

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

本版积分规则

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