2009年7月6日星期一

笨兔兔的故事——带你了解Ubuntu,了解Linux (34~37)

  (34) QQ  
  
主人整来一大堆照片,用GIMP处理了一下,调调颜色,亮度啥的,还别说,调完了还是比以前好看了不少。不过,有道是独乐乐不如众乐乐,主人光自己看着好看不行,还想和朋友分享,怎么办呢?找人吧,这个人您大概也认识——QQ。
  
Qq和皮筋一样,也是一个即时通信软件,也就是个送信的。不过他不是超级牛力从软件源里请的,而是狐狸妹妹直接去QQ的网站上下载的。这QQ是一个叫做疼痛,哦不对,叫疼……疼什么来着?哦,对,疼殉,一开始是疼,后来就殉了-_-b,是一个叫疼殉的公司做的。话说这个疼殉啊,看人家icq软件玩的挺火,于是也弄了个oicq,抢占了国内市场,结果一发不可收拾。后来oicq改名,叫QQ了,可是一直以来,由于各种原因,疼殉这个公司只能做出wdinwos版本的QQ来,linux下的没有。要说没有也不要紧,人家google
talk也没有linux的版本,但是人家是基于开源的XMPP协议的,协议是公开的,于是世界各地的linux牛人们,很轻易的就做出了很多种用来在linux下聊googlt
talk的软件。其实就算他们不做这些,皮筋本身也是支持XMPP协议的,设置一下就能聊gatlk了。可是QQ不一样,QQ的协议是那个疼殉公司自己定的,还不让别人知道,又不提供linux的版本,结果,在linux下使用QQ一直是个很头疼事情。当然,这些都是历史了,现在疼殉公司终于想开了,提供了linux版的QQ,虽然功能简陋的不能再简陋,不过,传个图片还是没问题的。好,废话不多说(这废话就不少了),赶紧叫QQ起床干活去。
  
QQ迷迷瞪瞪的走进工作间,把主人写的文字一条条的打好包,封好信封,寄给那边的QQ。过了一会主人要发图片了,QQ有点忙乱,好像对寄图片这工作不如寄文字来的顺手,不过好歹是寄出去了。mm那边也寄过来两张图片,QQ收下了打开给主人看,主人很满一,让mm多发几张,于是mm一口气发了5张,然后…………QQ就晕了,折腾好几次也没法和对方的QQ建立好连接,结果照片终于没传成。要说这家伙也真是不争气,这么点事情都做不好。主人一气之下,只好把QQ关了,让我去叫醒另一个人——EVA
  
EVA的大名相信大家都听说过,他的英文名字叫EVA,他的中文名字叫新世纪福音战士。话说日本有个贞本义行……哦,对不起,扯远了。忘记贞本义行和新世纪福音战士吧,他们跟我这里的EVA没关系,跟我这个EVA有关的是云帆大姐姐。在疼殉公司还没有给出linux版本QQ的时候,很多人们就用eva来聊qq,这个eva完全是云大姐根据抓包研究的结果,黑盒破解windows的QQ而编写的。功能也算是强大了,基本的聊天,传图片,群里收发自定义表情,都可以。甚至还支持显示好友的自定义头像。(这看似简单的功能,疼殉官方的QQ目前都没实现)于是,在QQ不靠谱的时候,主人还是叫来了可靠的EVA继续跟mm传图片。QQ跟EVA有很多不同,一个是官方的,一个是山寨的(山寨不含贬义);一个是基于GTK的,一个是基于QT的;一个是闭源的,一个是开源的;一个是32位的,一个是64位的。

  (35) 运算
   有人问了,你老说这32位,64位。到底啥意思阿?
  
这个多少多少位,说的是cpu一次运算的二进制数字的位数。这个CPU就像是个计算器,我们软件用CPU就像人类用计算器似的。它很重要,我们要算一丁点东西,也需要用CPU来算。(别跟我说用心算,我是软件,ok?)那么这个CPU算东西的能力,是有限制的,有什么限制呢?你拿出你家的计算器看看,算个28+783,没问题是吧。算个7836-473也没问题是吧,再算个72635446584939202937346537+1,能么?估计99%的同志出问题了(不排除有牛人拥有很牛的计算器):"我哪能按出这么多数来啊,我这计算器总共就能显示下11位数字"。对,这就是计算器的位数限制。CPU也一样,他一次能算的数不能无限的大,总得有个边,只不过不是按照十进制的位数算的,而是按照二进制的位数算的。至于什么叫十进制,什么叫二进制,可以去问问狗狗大哥,不过不知道也没关系,咱暂时按着咱们平常的十进制来说。比如说,我这个CPU只能算99以内的数字,也就是只有2位(十进制位啊)。那我们软件用这个CPU的时候怎么用呢,CPU有很多放数据的小匣子,叫做寄存器,每个寄存器有他特殊的用途,咱们就不多介绍了。要做加法的话,得这么操作:有两个寄存器,也就是小匣子啊,把这两个小匣子打开,往里面放数据,数据比较抽象,就想想成写着数字的纸条吧。不过,由于是2位的CPU(再次声明,咱这是拿十进制做比方啊,真正的CPU没这样的),所以寄存器里只能放2位的数据,也就是说,纸条上只能写99以内的数字放进去。那好,我写一张12,放在A匣子里,再写一张9,放在B匣子里,然后按个写着"加法"的按钮,只听咔嚓一声,CPU自动弹出一张纸,纸上写着21,这就是他的计算功能。再算个大点的,写一张50放进A,写一张51放进B,按钮,咔嚓,出来张纸,写着01。那位说了,这算错了啊这个!别急,紧接着咔嚓一下,又出来一张,写着"对了,还得进一位",这回对了吧。为什么呢?因为这CPU是两位的,只能输出两位数,超出的就告诉你得进位。
  
好了,基本的操作说完了,现在说正题,不同位数的区别。两位的CPU就像刚才说的那样,那么假设现在需要计算3173+644,这里有2位的CPU一个,4位的CPU一个,分别用他们做这个计算,有什么区别呢?  
  
咱先拿这两位的,有人说了,两位的只能算两位啊,这个没法算哪?唉,这机器是死的,咱软件是活的啊,一次只能算两位,咱不会分开了多算几次么。首先,写一张73,写一张44,按钮,咔嚓,出来一张17,咔嚓又出来一张写着还得进位,好,可记住了啊,还得进位。然后再写一张31,写一张6,按钮,咔嚓,出来37。别忙,没完,刚才还得进位呢么不是,再写一张37,写一张1,按钮,咔嚓,出来38。好,最后结果拼一块,高位是38,低位是17,最后结果:3817
  
再拿这4位的算算看。4位的就意味着输入的数据和输出的数据都可以是4位,也就是说我直接就可以写一张3173,写一张644,放进去,按钮,咔嚓,出来一张3817,算完收工~

(36) 位
  
这就是2位的CPU和4位的CPU的不同,从理论上来说,4位的要比2位的快,从上面的例子看的很明显嘛,大一点的数,4位的CPU一下就能算完,2位的CPU要折腾好几次。但是这4位的CPU还得有人会用才行,这就需要4位的软件来用着个4位的CPU。
  
终于说到软件的位数了,CPU的位数就是一次能计算多少位的数,那软件的位数呢?就是说明这个软件需要使用多少位的CPU。软件干活肯定需要计算,计算就得用CPU,2位的软件会用2位的CPU,4位的软件就会用4位的CPU(还是拿十进制位做比喻啊)。比如有一个2位的软件(就说明这个软件会用2位的CPU),那么当这个软件运行在一个2位CPU的电脑上的时候就是这样:还比如要算3173+644,他就会先算73+44,然后记住进位,然后计算31+6,然后加上进位,最后拼起来,得到答案,就像上面描述的那样。那么当这个2位的软件运行在一个4位的CPU上的时候会怎么样呢?他会先算73+44,然后记住进位,然后计算31+6,然后加上进位,最后拼起来,得到答案……有人说了,他怎么不直接算啊?4位的CPU不是能直接就算出来么?但是别忘了他是两位的软件啊,他不会用4位的CPU,但是不会用不等于不能用,他还是可以那4位的CPU当成2位的来用,只是有些浪费而已。那么要想完全发挥4位CPU的性能怎么办呢?当然就得4位的软件出场了。当一个4位的软件运行在一个4位的CPU上时怎么计算3173+644呢?大家大概都知道了,直接算,一次完成。那么当一个4位的软件运行在一个2位的CPU上时会怎么样呢?这个软件会写个3173的纸条要往CPU的寄存器里塞,急的满头大汗就是塞不进去,最后一甩手——不干了,这破CPU没法用!当然,这只是个比喻,并不是说4位软件在2位CPU上算3173+644就算不了,算1+1就能算。4位的软件是根本无法运行在2位的CPU上的。

 (37) 协作
  64位的EVA熟练的使用着64位的CPU;同时,32位的奔流也在使用的同一颗CPU;(当然,是当成32位的用。)同时,皮筋也时不时的汇报一下主人的MSN和GTalk上的好友是否有消息发来;同时,狐狸妹妹也没闲着,游走在个个网站之间;同时………………总之,内存里大家各司其职,一派繁荣和谐的景象。而这和谐景象的背后,是由于我认真的学习了XXX思想,XXX理论,并且还戴了三个表。
-_-b
  好吧,其实之所以大家能够如和谐的同时工作,都因为我是一个多任务的操作系统。什么是多任务呢?直观的说,就是你能一边聊天,一边看电影还一边打字。(什么?你说你不能?那是因为你的大脑不是多任务系统。)有的人要说了,哪个电脑哪里系统不能一边聊天一边打字了?这说来又话长了,话说很久以前,还是那有点软的公司,在查皮的老祖宗问世之前,有点软公司赖以起家的,是一个叫做"剁死"(DOS)的操作系统。这个操作系统就是单任务的,也就是说,同时只能有一个软件在内存里运行。
  难道多让几个程序跑进内存里很难么?答案是——没错。我们工作用的内存阿CPU阿,都是很重要的资源,尤其CPU,一个CPU同时只能有一个程序在用(现在的多核心CPU对程序来说就是多个CPU),如果要让很多程序同时跑进来一起干活,就一定要对CPU进行合理的分配。剁死系统就比较简单,基本不管分配的事情。比如主人要启动狐狸妹妹(那念头当然还没有狐狸妹妹,咱就打个比方),如果是剁死系统的话,他就会跑去叫醒狐狸妹妹,然后跟她说:狐狸阿,起床干活了,你看咱这有一个奔腾166的CPU,16M的内存,够你用的不够?狐狸说,够了。然后剁死就说,那好,你去干活吧,我就不管了,干完了叫我。然后剁死就睡觉去了,整个机器归狐狸妹妹控制。所以不可能同时运行两个程序嘛。  
  那多任务的系统又是怎样的呢?比如我和隔壁的查皮,都是多任务的操作系统,我们不会把整个计算机的所有资源都给一个程序用,而是进行合理和规划。还比如叫狐狸妹妹,我会去跟她说:狐狸阿,起床干活了。狐狸妹妹会起来跟我说,好,我现要10M的内存。我说检查一下内存空间,然后告诉她,可以,那一块10M的地方给你用。然后狐狸就走进工作室,开始工作的时候,一定要用到CPU,需要用的时候狐狸要找到我,向我提出申请。我根据情况,看现在有没有人正在用CPU,要是有的话就让狐狸等一下,没有的话就给她用。但是给她用也不能就让他一直用,只能让她用一会,因为还有别的程序要用。这个"用一会"的时间,专业的说法叫做时间片。每个运行着的程序都轮流的"用一会",也就是每个程序都分配一定的时间片。没有分到时间片的程序就等着,不过这个切换的时间是非常短的,在主人那里根本感觉不到程序等待使用CPU的时间的,所以在主人看来,就是多个程序一起运行了,也就是我们所说的多任务。
  多任务的实现也有不同的模式,有协同式多任务,和抢占式多任务。
  协同式多任务,需要每个正在使用CPU的程序主动放弃CPU控制权,并由操作系统再次分配。如果我是个协同式多任务的操作系统,那就是这个样子的:狐狸妹妹用了一会CPU说,好了,我暂时不用了,去网口等个数据包去。兔子哥你让下一个程序用吧。然后我就回收了CPU的控制全,扭头一看,皮筋那里等了半天了,就把CPU给他用,他用了一会说,好了,我一会再用,先让下一个程序来吧……就这样,大家互相谦让,内存里一派繁荣和谐的景象。这主要是因为我学习XXX思想,XXX理论……戴了三个表。不过这样做得缺点就是万一有个程序不和谐就坏了。比如狐狸妹妹用了半天了,我跟她说:狐狸呀,你看,你用CPU都用了1秒了(对于我们程序来说,1秒已经是相当长的时间了)是不是该让其他的小朋友们……哦,不对,是不是刚让其他的程序用用阿?狐狸扭头斩钉截铁的说:不!于是我也没办法。如果狐狸始终不能放开CPU,那其他程序就一直等着,直到天荒地老,沧海桑田,直到机器重启,直到小区停电。
  抢占式多任务是怎么样呢?就是由操作系统决定什么时候收回CPU的控制权,而不是靠程序主动放弃。这种方式的核心就是一个字——抢!如果我是个抢占式多任务的操作系统,其实不用如果,我就是个抢占式多任务的操作系统。那么情况就是这个样子的:狐狸妹妹用了一会CPU,我对她说,你本次使用CPU的时间已到,立刻停止使用并重新排队。然后狐狸就乖乖的交出CPU,排到队尾等待下一次使用CPU。我则让下一个程序来使用CPU,使用了一段时间后,我又让这个程序停止使用,让再下一个来,如此循环往复,一派繁荣和谐的景象,这主要是……思想……理论……还戴三块表。
当!哎哟~

没有评论: