计算机软件
0.3 数据表示方式
回到顶部二进制和十进制的转换
回到顶部十进制数3456可以用下面的等式表示:
3456 = 3x10^3 + 4x10^2 + 5x10^1 + 6x10^0
任何数值的零次方为1:n^0=1。 二进制数1101010就可以表示如下:
1101010=1x2^6 + 1x2^5 + 0x2^4 + 1x2^3 + 0x2^2 + 1x2^1 + 0x2^0 = 64 + 32 + 0x16 + 8 + 0x4 + 2 + 0x1 = 106
二进制是计算机基础中的基础!八进制、十六进制转成十进制也是同样的道理! 以十进制数106为例,十进制数转二进制数方法如下:

根据红色箭头的方向,由最后的余数向上写可得到106的二进制数为1101010 这些数字的转换系统是非常重要的,因为计算机的加减乘除都是使用这些机制来处理的!
文字编码系统
回到顶部当我们要写入文件的文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入文件当中。 同样的,将文件内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后,再显示到屏幕上。 每一种文字在存入计算机之前都会对其编码,如果在读出的时候没有用对应的编码表进行解码,就会出现所谓的乱码现象。 这时候只要尝试修改一下文件编码就可以正常显示了。
常用的英文字符编码表为ASCII系统,每个符号(英文、数字或符号等)占用1bytes,总共会有2^8=256种变化。 至于中文字当中的编码系统早期最常用的就是big5这个编码表了。每个中文字占用2bytes,理论上最多可以有2^16=65536个中文字。 在实际应用过程中,包括中文在内的非英语系语言的编码常常出现各种问题!
为此国际组织ISO/IEC制订了统一的Unicode编码系统, 目前网络上常用的Unicode编码就是UTF8。
软件程序运作
回到顶部机器程序与编译程序
回到顶部cpu执行的指令肯定都是二进制,如果直接用cpu指令来编写程序,对cpu来说非常容易识别和执行, 但是对于人类来说真是非常痛苦的事情。 就像文字有对应的编码系统一样,人们把一条条计算机二进制指令编码成方便人类阅读识别的文字, 例如移动指令是10001011,真的是太难记了,干脆就把10001011标记为move好了, 以后看到move就知道这是一条移动指令了。这就是最早的汇编语言。
每一条二进制指令都有一个对应的英文标记,人们在编写程序的时候就用汇编语言编写, 让计算机执行的时候,就先转换为对应的二进制指令就可以了。
汇编语言虽然大大解放了生产力,但是还是有很多不足之处。 例如汇编指令和cpu指令一一对应,不具备可移植性。每种cpu的指令集都是不一样的,在x86上面编写的汇编程序无法在arm处理器上运行。
为此计算机科学家设计出了和硬件无关的,可移植性更好,更方便人类编写的高级程序设计语言, 常见的高级程序设计语言有C, C++, Java, Fortran等。 上面提到的都是编译型语言,另外还有供计算机程序解释执行的脚本语言。 例如linux系统管理必须使用的shell脚本语言,就是由shell程序执行的语言,而shell则是由c语言编写的计算机程序。 所以可以将脚本语言称为高级语言的语言。
这样人们在编写计算机程序的时候,只需要用这些高级程序设计语言或者脚本语言编写就可以了。
在让计算机运行的时候,会先由编译器编译成对应计算机的汇编指令,再由汇编器转换成cpu可以执行的cpu指令序列。
而我们在linux下执行的大部分命令都是由这些高级程序设计语言编写。
操作系统
回到顶部一个cpu在某个时刻只能同时执行一个计算机程序,如果我们手头有好多程序,希望同时提交到内存给cpu执行, cpu忙不过来怎么办?内存不足装不下怎么办?
另外在编写程序的时候,希望操作某个硬件,但是别人已经针对该硬件编写过驱动程序了,还需要重新编写吗?
如果每个人都针对同一个硬件编写同样的驱动程序,岂不是浪费时间, 最明智的做法就是直接调用别人编写好的硬件驱动程序就可以了,完全没有必要重复造轮子。
那么怎么调用别人写好的驱动程序呢?写好的驱动程序怎么提供给有需要的人呢?
这些都是需要操作系统(Operating System, OS)的辅助。 我们在linux上执行的命令就是在运行别人或者自己写好的计算机程序, 这些程序也都是在操作系统提供的环境下编写而成,例如操作系统会为程序提供操作底层硬件的api接口,提供硬件驱动程序等。
操作系统内核(Kernel)
回到顶部系统调用(System Call)
回到顶部操作系统内核通常会提供一整组的开发接口给工程师来开发软件! 工程师只要遵守 该开发接口那就很容易开发软件了!linux内核会提供C语言函数的api接口,不需要再去考虑其他内核的相关功能。
应用程序和linux内核的关系如下图所示:
图 0.4.2、操作系统的角色
计算机系统主要由硬件构成,然后内核程序主要在管理硬件,提供合理的计算机系统资源分配(包括 CPU 资源、内存使用资源等等), 因此只要硬件不同(如 x86 架构与 RISC 架构的 CPU),内核就得要进行修改才行。
而由于内核只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供,用户才能够操作系统的。
为了保护内核,并且让程序设计师比较容易开发软件,因此操作系统除了内核程序之外,通常还会提 供一整组开发接口, 那就是系统调用层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件, 该软件就能够在该内核上头运作。 软件与内核有比较大的关系,与硬件关系则不大!硬件也与内核有比较大的关系! 至于与用户有关的,那就是应用程序啦!
在定义上,只要能够让计算机硬件正确无误的运作,那就算是操作系统了。 所以说, 操作系统其实就是内核与其提供的接口工具,一般我们提到的操作系统通常是指包括内核与相关的应用软件在内的一整套系统!
操作系统的内核层直接参考硬件规格写成, 所以同一个操作系统程序不能够在不一样的硬件架构下运作。 个人计算机版的 Windows 8.1 不能直接在 ARM 架构 (手机与平板硬件) 的计算机下运作。
操作系统只是在管理整个硬件资源,包括 CPU、内存、输入输出设备及文件系统文件。 如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当(Ready)而已!并无法运作其他功能。 所以你现在知道为何Windows上面要达成网页影像的运作还需要类似PhotoImpact或Photoshop之类的软件安装了吧?
应用程序的开发都是参考操作系统提供的开发接口, 所以该应用程序只能在该操作系统上面运作而已,不 可以在其他操作系统上面运作的。
内核功能
既然内核主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重 要的就是CPU与主存储器, 因此,内核至少也要有这些功能的:
系统调用接口(System call interface)
刚刚谈过了,这是为了方便程序开发者可以轻易的通过与内核的沟通,将硬件的资源进一步的利用, 于是 需要有这个简易的接口来方便程序开发者。
进程管理(Process control)
总有听过所谓的多任务环境吧?一部计算机可能同时间有很多的工作跑到 CPU 等待运算处理, 内核 这个时候必须要能够控制这些工作,让 CPU 的资源作有效的分配才行!另外, 良好的 CPU 排程机制(就是 CPU 先运作那个工作的排列顺序)将会有效的加快整体系统效能呢!
内存管理(Memory management)
控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序代码与数据都必须要先存放 在内存当中。 通常内核会提供虚拟内存的功能,当内存不足时可以提供内存置换(swap)的功能哩。
文件系统管理(Filesystem management)
文件系统的管理,例如数据的输入输出(I/O)等等的工作啦!还有不同文件格式的支持啦等等, 如果你的核 心不认识某个文件系统,那么您将无法使用该文件格式的文件啰!例如:Windows 98 就不认识 NTFS 文件 格式的硬盘;
设备驱动(Device drivers)
就如同上面提到的,硬件的管理是内核的主要工作之一,当然啰,设备的驱动程序就是内核需要做的事情 啦! 好在目前都有所谓的可加载模块功能,可以将驱动程序编辑成模块,就不需要重新的编译内核啦! 这个也会在后续的第十九章当中提到的!
事实上,驱动程序的提供应该是硬件厂商的事情!硬件厂商要推出硬件时,应该要自行参考操作系统的驱动程序开发接口, 开发完毕后将该驱动程序连同硬件一同贩卖给用户才对!举例来说,当你购买显示适配器时, 显示适配器包装盒都会附上一片光盘,让你可以在进入 Windows 之后进行驱动程序的安装啊!
操作系统与驱动程序
老实说,驱动程序可以说是操作系统里面相当重要的一环了!不过,硬件可是持续在进步当中的! 包 括主板、显示适配器、硬盘等等。那么比较晚推出的较新的硬件,例如显示适配器,我们的操作系统 当然就不认识啰! 那操作系统该如何驱动这块新的显示适配器?为了克服这个问题,操作系统通常 会提供一个开发接口给硬件开发商, 让他们可以根据这个接口设计可以驱动他们硬件的驱动程序, 如此一来,只要用户安装驱动程序后, 自然就可以在他们的操作系统上面驱动这块显示适配器了。
操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能;
一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序;
要使用新硬件功能,必须要安装厂商提供的驱动程序才行;
驱动程序是由厂商提供的,与操作系统开发者无关。所以,如果妳想要在某个操作系统上面安装一张新的显示适配器, 那么请要求该硬件厂商提供适当的 驱动程序吧! ^_^! 为什么要强调适当的驱动程序呢? 因为驱动程序仍然是依据操作系统而开 发的, 所以,给 Windows 用的驱动程序当然不能使用于 Linux 的环境下了。
应用程序软件
回到顶部需要注意的是,应用程序是与操作系统有关系的。因此,如果你下载新软件, 请务必下载和操作系统对应的版本! 例如在windows上可以安装的软件是不能运行在linux操作系统上的,需要有对应的linux版本 Office 2013 是一套应用程序,要安装前必须要了解他能在哪些操作系统上面运作。
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读