1. 机器程序与编译程序
从Linux 学习基础--了解计算机硬件里可以了解到,计算机只认识0与1而已,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU通过微指令集工作,因此如果想让CPU帮忙工作,就要通过参考该CPU硬件的微指令集的内容,然后撰写让CPU读的懂的脚本给CPU执行。
这样做听起来顺理成章,但是却很麻烦:
- 需要了解机器语言:机器只认识0与1,因此要学习直接写给机器看的语言,相当难!
- 需要了解所有硬件的相关功能函数:这就要参考硬件的技术手册,了解硬件本身的功能,然后针对功能去撰写程序代码。
- 程序不具有可移植性:因为每个CPU都有独特的微指令集,所以每个CPU硬件都有其功能函数,你为A计算机写的程序,理论上没办法在B计算机上运作;再加上机器代码不是人类看得懂的程序语言,修改起来也非常困难。
- 程序具有专一性:因为这样的程序必须要针对硬件功能函数来撰写,如果已经开发了一支浏览器程序,想要再开发一款具有其他功能的程序,如文件管理程序,就要从头参考硬件的功能函数来继续撰写。这简直是每天都在和“硬件”挑战啊!
怎么解决这么复杂的问题呢?
计算机科学家创造出一种“编译程序”(简称编译器),将人类看得懂的程序语言转译为机器语言,从而达到操纵机器完成人类工作的目的。
2. 操作系统
编译器已经帮助人类将程序修改问题处理完毕,但是,问题仍然没有完全解决。
这样的环境底下还是需要考虑整体的硬件系统设计程序:例如你需要将运作的数据写入内存中,就要自行分配一个内存区块出来让自己的数据能够填上去,还要了解内存的地址是如何定位的,还要重复写句柄(句柄是什么? 可以把它想象成一个指针,通过它的指向在内存区提取我们想要的一连串数据)。
👆这段有点不懂吧?没关系,我们不需要懂,因为”操作系统“帮助我们把这些问题解决了,重点是要了解操作系统的组成以及它们对应的功能。
2.1 核心 (Kernel)
操作系统(Operating System,OS)其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。计算机若是没有软件。只是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值,让主存储器可以开始加载/读出数据与程序代码、让硬盘可以开始被存取、让网络卡可以开始传输数据、让周边可以开始运转等等。总之,硬件的所有动作都必须要透过这个操作系统来达成。
而提供上述功能的,就是操作系统的核心(Kernel)。只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协议,那么无论你购买了什么样的网卡,这个核心都无法提供网络能力。
由于核心的管理动作非常重要,如果使用者能够直接使用到核心,万一不小心将核心程序停止或破坏,将会导致整个系统的崩溃。因此核心程序所放置到内存当中的区块是受保护的,而且开机后就一直常驻内存当中。
2.2系统呼叫(System Call)
硬件都是由核心管理,如果我们想要开发软件的话,就应该去参考这个核心的相关功能。如此以来便从原本的参考硬件函数变成参考核心的功能。但,仍然很麻烦嘛。为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件,工程师只要遵守该开发接口就很容易开发软件了。而这个开发接口,就是系统呼叫。拿C语言编写程序举例,我们只要参考C语言的函式即可,不需要再去考虑其他与”核心“相关的功能,因为“核心”的系统呼叫接口会主动的将C语言的相关语法转成核心可以了解的任务函数,让核心能够顺利运作该程序。
如果将整个计算机系统的相关软/硬件制成图,就有这样的关系:

软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在核心上运作。核心之外的这组开发接口,就是图中的系统呼叫层。
简单得整理一下“用户操作”与“计算机硬件”的工作关系:
用户操作应用程序-->应用程序发出指令-->在"系统呼叫"接口将命令转化成核心可以了解的任务函数-->”核心“管理和驱动计算机系统中的硬件-->达到完成工作的目的
2.3 “核心”的功能
理解了什么是核心?什么是系统呼叫?再来看看“核心”的功能吧。
既然核心主要是在负责整个计算机系统的资源分配与管理,我们还指导整部计算机系统最重要的就是CPU与主存储器,因此,核心也是要有这些功能的:
- 系统呼叫接口(System call interface)
上面已经提到它,可以方便程序开发者的程序与核心高效沟通,通过核心实现硬件资源的利用,这个简易的接口是为了方便程序开发者。 - 程序管理 (Process control)
我们操作一台计算机时,可能同时有很多的任务跑到CPU等待运算处理,核心这时就必须能够控制这些工作,让CPU的资源有效的分配才行!而且良好的CPU排程机制将会有效的加快整体系统效能。(排程机制:CPU运行多个工作的先后顺序) - 内存管理(Memory management)
控制整个系统的内存管理,内存的控制非常重要,因为系统所有的程序代码与数据都必须要先存放在内存当中。 - 文件系统管理 (Filesystem management)
例如数据的输入和输出等工作。
什么是文件系统?
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。通俗得讲,没有文件系统,操作系统就不知道该怎么读取硬盘。
例如 Linux 文件系统 和 DOS 文件系统

- 装置的驱动(Device drivers)
我们都知道,硬件的管理是“核心”的主要任务之一,因此装置的驱动程序就是核心要做的事情。一般来说,硬件厂商推出硬件时,都会自行参考操作系统的驱动程序开发接口来开发驱动程序,将驱动程序和硬件一起卖给用户,用户安装其硬件后还要进行相应驱动程序的安装,这样,“核心”才可以行驶管理和驱动功能。
插播:应用程序
应用程序是我们终端计算机用户一直都在接触的,认识起来就轻松多了。(👆的内容是不是总感觉陌生又烧脑呢?如果同感,Panda 和你🤝,刚开始学习是感觉眼花缭乱)
应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件可以让用户操作,以达到计算机的功能利用。值得注意的是,应用程序是与操作系统有关系的,这也是为什么我们在下载软件时总要选择适合自己计算机操作系统版本的原因,例如Windows系统的软件在Mac系统上无法正常运行,这是由于他们开发接口参数不同,操作系统的“核心”无法识别其命令所致。
网友评论