1. 计算机软件
官方一点讲,我们所谓的“计算机”指的是计算机硬件与软件,纯计算机硬件只能根据自然现象做无意义的响应。这就需要我们制定相应的逻辑去干预。而如何制定合理逻辑,如何让冰冷的机器理解,以及如何让其高效准确地执行,这就是软件需要考虑的问题。
1.1 二进制
由于计算机是由 电能驱动 ,那么如何让计算机能理解我们的信息(数据)并处理就是要面对的首要问题。
很容易联想到的一个方案就是用电流或电压的大小来表示数据:1V表示1,2V表示2……那么要表示从地球到月球有多少米呢?这种方式有点耗能量,也有点危险……
换一个思路,我们使用一个开关来控制“有电”或者“没有电”,有电表示1,没有电表示0。那么在存储数据时,可以抽象地理解为通过该存储单元是否有电(1或0)来表示信息。
由此,可以使用两个状态来表示各种数据(只要空间够大)。比如现在有8个存储单位,分别都可以表示0或1,那么这些单位组合起来一共可以表示 28 种不同的状态。每一个存储单位叫做位(bit),这8位空间就叫做一个字节(Byte)。
按照计数基本方法,我们将使用2个数字来表示各种数据,这就是 二进制(Binary),类比十进制,二进制逢二进一,那么十进制的2,用二进制将表示为10。
以下为十进制数字与二进制数字的简要对照,供初学者理解
1.2 程序
机器语言(Machine Language)
由于计算机底层只能理解二进制数,所以欲传达指令,则使用由0与1组合的数字为媒介,这就需要机器能理解指令。
计算机芯片在诞生之时,该能力已经由生产厂商赋予。
开发人员按照厂商所给的“语法”进行开发,这就是机器语言(Machine Language)。
随着社会的发展,计算机要解决的问题越来越复杂,是用该方式开发的弊端暴露无遗:机器语言人类太难直观理解,开发、调试、修改困难。
汇编语言(Assembly Language)
为了解决以上问题,厂商将该“语法”进行了升级,用简单的单词缩写来代替二进制代码,即汇编语言(Assembly Language),如此一来大大减小了开发难度(相对而言)。
汇编语言虽然提高了人类对于开发语言的理解,但是依然非常底层(即逻辑接近机器),开发程序需要学习大量计算机理论,门槛较高,同时依然面对与机器语言相同的问题,不易于维护。
高级语言
高级语言是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示,有较高的可读性,以方便对计算机认知较浅的人亦可以大概明白其内容。
高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。
但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。
这里所谓的“高级”的意义是距离人类逻辑较近,即更易理解。
1.3 操作系统(Operating System)
由于不同的硬件厂商生产的产品不同,所给的语法(即指令集(ISA))不同,使用汇编开发的程序移植性很差,而高级语言最终也需要转为机器语言才可让硬件理解,并且即使是同一个机器上的不同程序,也会有大量的相同逻辑,来负责硬件资源调度等基本工作,以提供一个可能执行业务计算的前提。由此就迫切需要一个通用的代码,负责与底层硬件交互,为应用程序提供运行环境。
这就是现代操作系统(Operating System)的主要任务之一。它弥合了底层硬件的差异,对上层提供一致的接口与规范。比如:如何让读取数据,如何驱动声卡发声等。程序可以直接调用该库进行工作,即系统调用。
由于系统调用虽然提供了相关能力,但是依然太过于底层,仅仅使用系统调用的方式开发应用程序太过于困难,对于程序员的学习要求也过高。所以一个完整的系统一般会在用户空间将系统调用再次封装,使之成为有实际作用的接口,封装后的接口通常以C库的方式对外提供。即API(Application Programming Interface),程序员可使用这些库调用进行开发,也可以直接使用系统调用,实现更能灵活的代码操作。
操作系统的另一个任务就是要协调各个应用。计算机底层实质上是一堆逻辑电路的组合,故在某一刻只能执行一项运算,随着硬件运算能力的提升,这种机制对于计算能力的浪费是巨大的。这就需要程序有一个约定好的“规则”,以确定如何使用硬件资源。
操作系统可以作为“监控者”,合理分配运算与存储资源给各个应用程序。同时,其还提供其他能力,如,将通用的功能封装为接口,以供程序调用。
目前主流的操作系统有:
Windows,个人电脑主流操作系统,VMS内核
MacOS,苹果公司生产的Mac电脑操作系统,FreeBSD内核
Linux,服务器或商业主流操作系统,拥有众多发行版
Android,移动终端主流操作系统,实质上是运行在Linux之上的Java虚拟机
IOS,苹果公司生产的移动终端操作系统,流畅高效
end