我心中的操作系统

w908065729 2011-03-08 09:31:01
看了几天操作系统不知道想的对不对

要想说操作系统是个什么东西那就必须要先谈谈计算机是怎么工作的。行家(虽然我不是)总是把计算机比作人的躯体,而把操作系统比作人的灵魂。然而此举太过抽象以至于我们这些初学者还是无法理解。
每一种东西刨根问底都不会有尽头,然而却总可以从某一处开始。计算机亦是如此。我们实在无法弄清楚计算机微观世界的奥妙,但我们却可以理解,由于各种电路的组合,各种逻辑门的的配合,它确实可以根据那些0,1运行不同的指令。

大家知道计算机的的结构由当年的冯•诺依曼冯大侠提出的。它最大的创新就是将指令与数据存储起来让CPU去读取其中的东西,CPU只与能内存和寄存器打交道(不考虑缓存,它对操作系统是透明的,仅从一个编程人员的角度来说)。那么CPU究竟都干了什么呢?每一本计算机原理的书上都已对此分类,本人就不在这里卖弄了。从我的角度来说它只做了两种工作:(1)将各寄存器,存储单元中的数据搬来搬去(也就是确定每一个单元的值) (2)计算。我们不妨将CPU比作一个机器人,它会搬砖,还会数自己搬了几块砖。如果我们要盖一座房子,我们只要告诉它往哪儿搬几块砖就可以堆出一个房子来,那个时候我们就是操作系统。
说了这么多还都是废话,今天就说说CPU和与其直接接触部件的关系,以后再说如何合理管理他们。CPU通过总线与存储器、外设接口(寄存器)相连接并交换数据,从而达到控制存储器和外部设备的目的。这个很好理解,拿显卡来说,要向显示器输出文字,只要将数据写到显存中,剩下的就不是CPU的事儿了,显卡自己会每隔一定时间从显存的某一位置开始读取满屏数据转换为显示器信号,并把这些信号送给显示器。若要控制显卡从那一位置开始读取数据,再或者控制显卡的显示模式就是向外设端口(即显卡上的寄存器)写入控制数据,显卡会根据这个数据来决定是以什么模式来运行。
CPU可以读写这些内存单元,还可以通过这些外设的寄存器来控制设备,似乎一切都已经解决了(我想让显示器显示什么它就显示什么,我想叫声卡唱什么它就唱什么)。其实不然,问题才刚刚出来。CPU要做到这一切前提是他必须的知道要与他进行交互的存储单元,寄存器的位置。你可能要说那就为这些东西一个个编址好了,何必在此费口舌。可问题是我们该如何编址呢?拿我的电脑来说,512的内存条,256的显卡,电脑里还有bios,声卡内存等等,我是该把这些存储器的位置设为多少呢?还有如果我现在想再加1G的内存条它又会如何编址呢?
这个问题属于存储器映射的范围。很久以前呢,存储芯片被焊接在计算机上,外部设备也比较少(其中的RAM就更少了)。计算机被生产出来的时候的结构已然确定,用户是无法对其进行配置的,也就是存储器的地址是以硬接线的方式与CPU连接确定,每一种机型它每个存储器的地址已经固定下来了。但是随着技术的发展,内存的价格下降,人们希望有属于自己的配置,同时由于CPU可以寻址的范围增加,一个更加突出的问题出来了,以前的CPU 20位总线可以寻址1MB空间,DOS操作系统就是架设在这上面,这就意味着由DOS管理的1MB 空间已经确定,而且每一个位置处是什么设备也已经确定,假设在地址2000处必须是显卡,这样就必须保证DOS系统和它的程序必须在2000出必须能访问到显存,如果不能的话就无法使计算机正常工作。后来CPU总线增加到了32、36、64根,它可以寻址1MB以外的空间,现在的问题是我们有两种方案来面对现在的情况:(1)我们将新的CPU完全重新硬接线来重新确定各种存储器的地址范围,但是这样的结果就是以前的操作系统将无法在现有的机器上运行,最重要的是将来的某一天它依然会过时,那个时候现在的东西也不能用了。 (2)存储器地址重映射(今天的主角)。我们可以在现有的CPU中加入一种机制,由一个寄存器的值来控制CPU运行于现在和以前两种不同的模式(比如保护模式和实模式)。在实模式下寻址范围和以前一样,我们可以按照以前的规范对现有的存储器和外设进行地址分配(比如我有256的显存,512的内存条,我们只将这其中的一部分进行编址,并且与以前的地址一样)。在保护模式下寻址范围增加,我门还可以对所有的东西范围都重新映射将剩下的内存全部编址。
现在从电脑启动开始说起,电脑启动时它从ROM中读取执行指令,此时其他的某些存储单元还没有被编址(比如显存,内存条,但是显卡中的ROM却可以寻得所以我们可以看到有东西出来),此后BIOS(由主板和CPU生产商共同开发)便按自己的程序设置对计算机中的存储设备进行地址分配,然后将CPU让给操作系统,而操作系统可以根据BIOS中断来获取计算机的内存地址分配。说到此,我想你一定在想,既然BIOS可以对地址进行分配,那么操作系统为什么不能呢?就是如此剩下的就是操作系统怎么分配的事了。

下面简单谈谈内存条与PCI设备的存储单元地址如何分配(具体的可以看《高性能个人计算机硬件结构及接口》国防工业出版社)。CPU通过总线与其它的存储单元连接,由于缓存对操作系统是透明的我们便不再这儿说了。有图中我们可以看出在这些东西中最重要的要数主桥了(也就是传说中的北桥芯片)。主桥对存储空间的映射起主要作用。对于内存条这种主存,主桥芯片中设置了几个寄存器来用来指定每根内存条的边界,当然也就是为他分配地址了。对于PCI设备来说,每个PCI设备中都有一段空间叫做PCI配置空间,它是独立编址,顾名思义我们可以在配置空间中对PCI设备进行配置,这当中就少不了对它的RAM的地址分配,和他的端口的分配。啊,到现在我们可进行地址重映射了,也就是说计算机的硬件给我们提供了更灵活的选择,我们可以通过软件来映射每个存储单元的的地址,我们愿意对以前的东西兼容就按它以前的分配一样就行了,不想的话就自己来一套。但是由于种种原因,CPU的生产商还是对我们的行为作了某些约束(比如让你把某一类设备映射到那些位置之间)。
说到此我想起了以前我想过的而现在觉得好笑的问题,我记得当时我怎么也弄不清BIOS运行完后,操作系统是否还会去ROM里去读取它,还有,人们在讨论4G内存,1G显卡为什么系统里显示内存变小了的时候都是说物理地址从顶端开始要优先分配给PCI设备,我怎么也不明白为什么会是优先分配给PCI设备呢,再说现在的电脑一般都是36、64的机器了,它为什么不把它分配到更高的空间,肯定不是BIOS干的这种傻事。对了,是那32位的操作系统它不能寻址那么高的物理地址当然要把它重新做一下安排了。  
唉!不知道以前学习的时候有多少次都是感觉书上说的跟现实中的不太一样。书上没有错,现实也没有错,只是我们没有在这两个时代里经过,所以我们错过了计算机发展的好多东西。书上讲的若干年前的东西并非一去不复返,而现实中的东西又变的太快了,我们又无法随时追赶。所以呀我认为我们应该对我们自己有一个很好的定位,我们要从编程人员的层次出发而不要从电子工程师的眼光来看。我们只要仅仅关注好每一个硬件提供的功能,和这个硬件提供的编程接口就行了。这样的话即便是有一天CPU里突然按了一个陀螺仪,然后提供了某些寄存器去控制它的时候,我们只需要知道我们要用这个陀螺仪去干什么(可能是测地震还是其它的),然后在我们的系统中使用它就行了。我们以后将不会在细谈硬件的知识,因为所有的东西说起来就那么一句话:我们需要的,硬件一定存在这样的功能;如果硬件没有提供这种功能,软件是不能做到的;欲知硬件有何功能,详见技术手册。




...全文
76 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyyoung 2011-03-08
  • 打赏
  • 举报
回复
os ?

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧