计算机简史(操做系统篇)

引言windows

在人类编写的软件里面,尚未哪种,是如此的重要的,以致于其的出现,深入的影响了整个程序界的走向,能够说,一个操做系统的进化史就能在很大程度的表明了程序世界的发展轨迹函数

本质上,操做系统与其余软件并没有任何的区别,都是逻辑+数据,而后它是如此之重要,因此人们把它与其余软件分离开来测试

操做系统称呼为系统软件,其余基于操做系统的软件称呼为应用软件google

然而这种划分,经常给初学者带来困惑与恐惧,使得他们不敢,不肯意用对待日常软件的日常心去对待它,这是很很差的spa

在正式开始以前操作系统

  不管你是否相信,全部的软件功能都是可以使用硬件实现的,就像是组装积木,硬件就像是简单的三角形,圆形木块,软件就是利用那些三角形,圆形拼成房子,汽车,拼成模拟的世界.net

   软件实际上是一个过程,一个拼装积木的过程,那么若是有一天,你想要一个房子,而有人给你提供了一个房子形状的积木(硬件),那么拼装的过程(软件)就再也不须要了线程

  软件存在的意义就在于,咱们的技术有限,硬件没法提供一个完整的积木,只能使用软件,对那些零散的积木去进行拼装设计

  操做系统是一个软件,应用程序一样是软件,都是一种过程htm

  它们之间的关系,与高级语言中 语言 与 编译器 的关系相似

参考: http://blog.csdn.net/only_lonely/archive/2010/03/16/5386552.aspx

应用软件说 : 哥们,帮我跟硬盘说下,我要XXX文件 –> 与机器无关的,抽象的语意

操做系统对应用软件说 : 好的,您稍等 –> 与机器无关的,抽象的语意

操做系统对硬件说: 硬盘编号9527,把你的磁盘转动三圈半... ... –> 与机器有关的,具体的语意

当硬件操做完毕

操做系统对应用软件说 : "您要的文件在这里,请拿好" –> 与机器无关的,抽象的语意

事实就是如此简单

注意:

操做系统的核心就是抽象掉硬件的细节,为更高层软件服务,这才是它的精髓

所谓的进程,线程,内存管理,系统与应用软件分层,这些都只是操做系统为了更好的完成任务,而创造出的一种概念,一种行为方式

为了让你更好的明白,理解操做系统的核心,请你忽略,无视掉那些纷繁的概念,好的,如今,咱们有一个操做系统,纯净的,不含一丝杂质的操做系统,没有进程,没有线程,没有那该死的内存管理,没有那该死的R3与R0之分,它惟一拥有的只是一个叫作 中断 的东西,好了~一切拖沓的铺垫都已经结束,让咱们开始吧

一 操做系统是死的!

在不少人的眼睛里,操做系统是富有活力的,精力四射的,它无处不在,时刻运行,时刻准备为你提供服务

其实,这是一种错误的理解,要理解这种错误,须要从CPU的工做方式提及

就在不久以前,咱们每台电脑上只有一个CPU,而每一个CPU同一时刻内,只能作一件事情

你能够想象一下,当CPU正在处理你的应用程序的时候.操做系统怎么办呢?

答案很简单,操做系统的代码没有被运行,它就安静的躺在那里,像一具尸体

注意:操做系统并非像不少人认为的那样,是一个无处不在的管家,它只在有须要的时候运行

操做系统只在须要的时候运行?

什么是须要的时候呢?

很简单,当应用程序或硬件呼叫它的时候,有一种被硬件支持的方式 "中断" 高效地实现了应用程序(硬件)调用操做系统(硬件)的服务

什么是中断? 百度一下,你就知道,若是你把它当成函数调用,我也不十分介意

http://baike.baidu.com/view/121718.htm

好的,如今咱们有了一个尸体般的操做系统,当你调用它的时候,它为你服务,当你永远不调用它(这是可能的),它将永远不被执行,这就是最简单的操做系统(如今已经被淘汰,但历史上真的曾经存在),没有线程,没有进程,没有该死的内存管理,你看见了,只要你愿意,一切均可以如此简单

请看下面的一个简单代码

    while(true)

     {

          // do something bad

      }

在咱们仅拥有的"纯净"操做系统中,这样的应用程序代码将会是一个灾难,你的机器将会陷入瘫痪,

毫无疑问,这样作是很差的~

并且有个特别有意思的地方,操做系统的发展能够简单的被认为,就是为了更好的解决上述代码所带来困扰

是的,没错!

   while(true)

     {

          // do something bad

      }

这是一段神奇的代码,操做系统的一次又一次的发展,进化,就是为了减缓,下降上面代码带来的杯具~

二 中断让尸体动起来

如前所述,操做系统就像尸体,你不去用中断去刺激它,它永远不会动一下

那如何让尸体(操做系统)动起来,像个正常的人同样?

很简单,不断的用中断,去刺激它就行,

感谢万能的计算机,让这个世界上,有一种中断叫时间中断

何谓时间中断?

就是每隔一个固定的时间,触发一个中断,打断CPU的执行序列,去执行操做系统的代码

嗯,如今好了~尸体已经动起来了

但是,一个动起来的尸体,有什么用呢?

让咱们再来看一下那段神奇的代码

while(true)

     {

          // do something bad

    }

当你的计算机陷入到上述代码不能自拔的时候,操做系统有机会借由时间中断,抢夺过CPU的拥有权,从而使得它有机会终止那个错误的程序,或者安排另外一个程序运行

安排另外一个程序运行

我但愿读者不要忽视这句话,安排是个动词,是一我的才能作到的事情,而不是一具尸体能够作到的,经过时间中断,尸体般的操做系统,作到了人才能作到的事情,这在医学上叫作什么呢? 借尸还魂?

这是问题的一个方面,另外一个方面是 "另外一个程序运行",嗯~有意思了哦,

作一个恶毒的假设,若是你的电脑在听音乐的时候不能看小说,在打字的时候,不能听音乐,在挂QQ的时候,没法浏览网页,你会想砸掉电脑,另买一个吗?(要是我,我会有那种冲动),CPU一个时刻只能运行一个程序,正是有了时间中断,快速的切换,才可以让咱们的电脑看上去,好像可以同时运行多个程序

接下来的,要引出一个内存的概念

别惧怕,这里要说的是一个最基本的内存的概念.

什么是内存,内存就是一个地方,存放着程序的代码,数据,让CPU去存取,操做

嗯,回到刚才的话题,时间中断制造出了多任务的假象,可使得计算机好像是能同时运行多个程序

只有一个问题,那多个运行的程序,存放在哪里呢?

它们连同操做系统(操做系统也是个软件)存放在同一个内存里

让咱们再看一下,那段悲情的代码

while(true)

     {

          // do something bad

    }

while(true)的问题,经过时间中断解决了,但是那句 do something bad 呢?

你知道的,连同操做系统在内的全部程序都存在内存里面

若是,那句 do something bad 恰巧把操做系统代码所在的内存中的内容给破坏

当下一个时间中断降临时,将会发生什么?

2012 ... ...

三 面包,有了~奶酪,也有了

若是,这个世界上,有某种东西,可让每一个应用程序之间独立运行,不受干扰,

若是,这个世界上,有某种东西,可使得就算应用程序设计的再糟糕,再乱来,也没法破坏其余应用程序所拥有的内存

是的,那不是幻想,是真实存在那种东西,那种东西是一系列技术的集合,笼统的咱们把它叫作虚拟内存技术.

嗯,面包有了,奶酪也有了,一瞬间,世界变的美好起来了,不是吗?

有关于虚拟内存技术的实现细节,拜托,若是要说,那能够再写5000字

有兴趣的童鞋,能够baidu或者google

值得一提的事是,从虚拟内存地址到真实内存地址的映射,是由硬件提供的~

抽象硬件,给应用程序更好的接口,这本是操做系统的责任,如今却由硬件完成,这再一次证实了,硬件与软件之间,没有明显的界限

出于娱乐的目的,咱们再看一下,那段神奇的代码

while(true)

     {

          // do something bad

    }

你能够在do something bad 中任意加上你认为足够胡闹的代码,而后测试一下,看它能不能干掉你的操做系统

四 一点声明

本文并非严谨的论文,仅仅是从一个方面,粗浅的讲述了一下操做系统的发展历程,本文没有涉及到的内容,概念有不少,可是,只要把握操做系统的核心--"抽象硬件,为应用程序提供更方便的接口",从这里出发,不要心怀畏惧,一切都会很简单 :-)

五 windows下的一个小例子

  当按下键盘上A键时,键盘(硬件)触发一个中断,操做系统运行,检索出是哪一个键按下,而后把按键信息发送到当前激活的窗口的消息循环,而后,当该程序运行的时候(时间中断),从消息循环中取出消息,识别,然后处理... ... :-)

 

only_lonely 原创,欢迎转载,请务必注明出处

相关文章
相关标签/搜索