Linux 学习基础 -- 软件程序运作

2019-04-14  本文已影响0人  熊猫人和熊猫猫

1. 机器程序与编译程序

Linux 学习基础--了解计算机硬件里可以了解到,计算机只认识0与1而已,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU通过微指令集工作,因此如果想让CPU帮忙工作,就要通过参考该CPU硬件的微指令集的内容,然后撰写让CPU读的懂的脚本给CPU执行。
这样做听起来顺理成章,但是却很麻烦:

怎么解决这么复杂的问题呢?
计算机科学家创造出一种“编译程序”(简称编译器),将人类看得懂的程序语言转译为机器语言,从而达到操纵机器完成人类工作的目的。

2. 操作系统

编译器已经帮助人类将程序修改问题处理完毕,但是,问题仍然没有完全解决。
这样的环境底下还是需要考虑整体的硬件系统设计程序:例如你需要将运作的数据写入内存中,就要自行分配一个内存区块出来让自己的数据能够填上去,还要了解内存的地址是如何定位的,还要重复写句柄(句柄是什么? 可以把它想象成一个指针,通过它的指向在内存区提取我们想要的一连串数据)。
👆这段有点不懂吧?没关系,我们不需要懂,因为”操作系统“帮助我们把这些问题解决了,重点是要了解操作系统的组成以及它们对应的功能。

2.1 核心 (Kernel)

操作系统(Operating System,OS)其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。计算机若是没有软件。只是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值,让主存储器可以开始加载/读出数据与程序代码、让硬盘可以开始被存取、让网络卡可以开始传输数据、让周边可以开始运转等等。总之,硬件的所有动作都必须要透过这个操作系统来达成。
而提供上述功能的,就是操作系统的核心(Kernel)。只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协议,那么无论你购买了什么样的网卡,这个核心都无法提供网络能力。
由于核心的管理动作非常重要,如果使用者能够直接使用到核心,万一不小心将核心程序停止或破坏,将会导致整个系统的崩溃。因此核心程序所放置到内存当中的区块是受保护的,而且开机后就一直常驻内存当中。

2.2系统呼叫(System Call)

硬件都是由核心管理,如果我们想要开发软件的话,就应该去参考这个核心的相关功能。如此以来便从原本的参考硬件函数变成参考核心的功能。但,仍然很麻烦嘛。为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件,工程师只要遵守该开发接口就很容易开发软件了。而这个开发接口,就是系统呼叫。拿C语言编写程序举例,我们只要参考C语言的函式即可,不需要再去考虑其他与”核心“相关的功能,因为“核心”的系统呼叫接口会主动的将C语言的相关语法转成核心可以了解的任务函数,让核心能够顺利运作该程序。
如果将整个计算机系统的相关软/硬件制成图,就有这样的关系:

操作系统的角色

软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在核心上运作。核心之外的这组开发接口,就是图中的系统呼叫层。

简单得整理一下“用户操作”与“计算机硬件”的工作关系:

用户操作应用程序-->应用程序发出指令-->在"系统呼叫"接口将命令转化成核心可以了解的任务函数-->”核心“管理和驱动计算机系统中的硬件-->达到完成工作的目的

2.3 “核心”的功能

理解了什么是核心?什么是系统呼叫?再来看看“核心”的功能吧。

既然核心主要是在负责整个计算机系统的资源分配与管理,我们还指导整部计算机系统最重要的就是CPU与主存储器,因此,核心也是要有这些功能的:

什么是文件系统?
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。通俗得讲,没有文件系统,操作系统就不知道该怎么读取硬盘。

例如 Linux 文件系统 和 DOS 文件系统


Linux 文件系统 和 DOS 文件系统

插播:应用程序

应用程序是我们终端计算机用户一直都在接触的,认识起来就轻松多了。(👆的内容是不是总感觉陌生又烧脑呢?如果同感,Panda 和你🤝,刚开始学习是感觉眼花缭乱)

应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件可以让用户操作,以达到计算机的功能利用。值得注意的是,应用程序是与操作系统有关系的,这也是为什么我们在下载软件时总要选择适合自己计算机操作系统版本的原因,例如Windows系统的软件在Mac系统上无法正常运行,这是由于他们开发接口参数不同,操作系统的“核心”无法识别其命令所致。

上一篇 下一篇

猜你喜欢

热点阅读