软件测试技术

当前位置:首页 > 软件测试技术

鸟哥的Linux私房菜 基础学习篇(第三版) (第零章)(续)

数据表示方式

事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以计算机常用的数据是二进制的。但是我们人类常用的数值运算是 十进制,文字方面则有非常多的语言,台湾常用的语言就有英文中文(又分正体与简体中文、日文等。那么计算机如何记录 与显示这些数值/文字呢?就得要透过一系列的转换才可以啦!底下我们就来谈谈数值与文字的编码系统哕!

数字系统

早期的计算机使用的是利用通电与否的特性的真空管, 如果通电就是1,没有通电就是0,后来沿用至今,我们称这种只有0/1的环境为进制制, 英文称为binary的哩。所谓的十进制指的是逢十进一位,因此在个位数归为零而十位数写成1.所以所谓的二进制,就是逢二就前进一位的意思。

那二进制怎么用呢?我们先以十进制来解释好了。如果以十进制来说,3456的意义为:

3456= 3x103 + 4x102 + 5x101 + 6x100

特别注意:「任何数值的零次方为1J所以10P的结果就是1哕。同样的,将这个原理带入二进制的环境中,我们来解释一下1101010的数值转为十进制的话,结果如下:

1101010=1x26 + 1x25 + 0x24+ 1x23 + 0x2+ 1x21 + 0x20

=64+32+0x16+8+0x4+2+0x1=106

这样你了解二进制的意义了吗?二进制是计算机基础中的基础喔!了解了二进制后,八进制、十六进制就依此类推啦!那么知道二进制转成十进制后,那如果有十进制数值转为二进制的环境时, 该如何计算?刚刚是乘法,现在则是除法就对了!我们同样的使用十进制的106转成二进制来测试一下好了:

新梦想IT职业教育


最后的写法就如同上面的红色箭头,由最后的数字向上写,因此可得到1101010的数字罗!这些数字的转换系统是非常重要的,因为计算机的加减乘除都是使用这些机制来处理的!有兴趣的朋友可以再参考一下其他计算计概论的书籍中, 关于1的补码/2的补码等运算方式握!


文字编码系统

既然计算机都只有记录0/1而已,甚至记录的数据都是使用byte/bit等单位来记录的,那么文字该如何记录啊?事实上文本文件也是被记录为0与1而已,而这个档案的内容要被取出来查阅时,必须要经过一一个编码系统的处理才行。所谓的「编码系统」可以想成是一个[字码对照表」, 他的概念有点像底下的图示:

新梦想IT职业教育


当我们要写入档案的文字数据时,该文字数据会由编码对照表将该文字转成数字后, 再存入档案当中。同样的,当我们要将档案内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后,再显示到屏幕上。现在你知道为何浏览器 上面如果编码写错时,会出现乱码了吗?这是因为编码对照表写错,导致对照的文字产生误差之故啦!

常用的英文编码表为ASCI系统,这个编码系统中,每个符号(英文、数字或符号等)都会占用1bytes的记录,因此总共会有28=256种变化。至于中文字当中的编码系统目前最常用的就是big5这个编码表了。每个中文字会占用2bytes,理论上最多可以有216=65536,亦即最多可达6万多个中文字。但是因为big5编码系统并非将所有的位都拿来运用成为对照,所以并非可达这么多的中文字码的。目前big5仅定义了一-万干多个中文字,很多中文利用big5是无法成功显示的~所以才会有造字程序说。

big5码的中文字编码对于某些数据库系统来说是很有问题的,某些字码例如「许.盖、功等字,由于这几个字的内部编码会被误判为单/双引号,在写入还不成问题,在读出数据的对照表时,常常就会变成乱码。不只中文字,其他非英语系国家也常常会有这样的问题出现啊!

为了解决这个问题,由国际组织ISO/IEC跳出来制订了所谓的Unicode编码系统,我们常常称呼的UTF8或万国码的编码就是这个咚咚。因为这个编码系统打破了所有国家的不同编码,因此目前因特网社会大多朝向这个编码系统在走,所以各位亲爱的朋友啊,记得将你的编码系统修订一下喔! 


软件程序运作

鸟哥在上课时常常会开玩笑的问:「我们知道没有插电的计算机是一 堆废铁,那么插了电的计算机是什么?」答案是: r- 堆会电人的废铁」! 这是因为没有软件的运作,计算机的功能就无从发挥之故。就好像没有了灵魂的躯体也不过就是行F走肉,重点在于软件/灵魂罗!所以底下咱们就得要了解一下「软件」是什么。

一般来说,目前的计算机系统将软件分为两大类,-一个是系统软件,-个是应用程序。但鸟哥认为我们还是得要了解一下什么是程序,尤其是机器程序,了解了之后再来探讨下为什么现今的计算机系统需要「操作系统」这玩意儿呢!

机器程序与编译程序

我们前面谈到计算机只认识0与1而已,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容,然后撰写让CPU读的懂得脚本给CPU执行,这样就能够让CPU运作了。

不过这样的流程有几个很麻烦的地方,包括:

●需要了解机器语言:机器只认识0与1,因此你必须要学习直接写给机器看的语言!这个地方相当的难呢!

●需要了解所有 硬件的相关功能函数:因为你的程序必须要写给机器看,当然你就得要参考机器本身的功能,然后针对该功能去撰写程序代码。例如,你要让DVD影片能够放映,那就得要参考DVD光驱的硬件信息才行。万你的系统有比较冷门的硬件,光是参考技术手册可能会昏倒~

●程序不具有可移植性:每个CPU都有独特的微指令集,同样的,每个硬件都有其功能函数。 因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运作的!而且程序代码的修改非常困难!因为是机器码,并不是人类看的懂得程序语言啊!

●程序具有专一 性:因为这样的程序必须要针对硬件功能函数来撰写,如果已经开发了一支浏览器程序,想要再开发档案管理程序时,还是得从头再参考硬件的功能函数来继续撰写,每天都在和「硬件」挑战!可能需要天天喝蛮牛了!@ @

那怎么解决啊?为了解决这个问题,计算机科学家设计出一种让人类看的懂得程序语言,然后创造一种[编译程序」来将这些人类能够写的程序语言转译成为机器能看懂得机器码,如此一来我们修改与撰写程序就变的容易多了!目前常见的编译程序有C C++, Java, Fortran等等。机器语言与高阶程序语言的差别如下所示:

新梦想IT职业教育


从上面的图示我们可以看到高阶程序语言的程序代码是很容易察看的!鸟哥已将经程序代码(英文)写成中文说~这样比较好理解啦!所以这样已经将程序的修改问题处理完毕了。问题是,在这样的环境底下我们还是得要考虑整体的硬件系统来设计程序喔!

举例来说,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去,所以你还得要了解到内存的地址是如何定位的,啊!眼泪还是不知不觉的流了下来..怎么写程序这么麻烦啊!

为了要克服硬件方面老是需要重复撰写句柄的问题,所以就有操作系统(Oper ating System, OS)的出现了!什么是操作系统呢?底下就来谈一谈先!

操作系统

如同前面提到的,在早期想要让计算机执行程序就得要参考-堆硬件功能函数 ,并且学习机器语言才能够撰写程序。同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得都一致之故。那如果我能够将所有的硬件都驱动,并且提供一个发展软件的参考 接口来给工程师开发软件的话,那发展软件不就变的非常的简单了?那就是操作系统啦!

●操作系统核心(Kerne)

操作系统(Operating System, OS)其实也是一-组程序 ,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。我们刚刚谈到计算机没有软件只是一 堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值、让主存储器可以开始加载读出数据与程序代码、 让硬盘可以开始被存取、让网络卡可以开始传输数据、让所有周边可以开始运转等等。 总之,硬件的所有动作都必须要透过这个操作系统来达成就是了。

上述的功能就是操作系统的核心(Kernel)了!你的计算机能不能做到某些事情,都与核心有关!只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协议,那么无论你购买了什么样的网卡,这个核心都无法提供网络能力的!

但是单有核心我们使用者也不知道能作啥事的~因为核心主要在管控硬件与提供相关的能力(例如网络功能,这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万-用户不小心将核心程序停止或破坏,将会导致整个系统的崩溃!因此核心程序所放置到内存当中的区块是受保护的!并且开机后就一-直常驻在内存当中。

新梦想IT职业教育


系统呼叫(System Call)

既然我的硬件都是由核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功能!唔!如此-来不是从原本的参考硬件函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊!

为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件 !工程师只要遵守该开发接口那就很容易开发软件了!举例来说,我们学习C程序语言只要参考C程序语言的函式即可,不需要再去考虑其他核心的相关功能,因为核心的系统呼叫接口会主动的将C程序语言的相关语法转成核心可以了解的任务函数,那核心自然就能够顺利运作该程序了!

如果我们将整个计算机系统的相关软/硬件绘制成图的话,他的关系有点像这样:

新梦想IT职业教育

计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源内存使用资源等等),因此只要硬件不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。而由于核心只会进行计算机系统的资源分配 ,所以在上头还需要有应用程序的提供,用户才能够操作系统的。

为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发接口 ,那就是系统呼叫层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在该核心上头运作。所以你可以发现,软件与核心有比较大的关系,与硬件关系则不大!硬件也与核心有比较大的关系!至于与用户有关的,那就是应用程序啦!

新梦想IT职业教育



相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~