没有软件的运作,计算机的功能就无从发挥,硬件资源需要软件的调度才能发挥作用,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序
一.机器程序与编译程序
计算机最重要的运算与逻辑判断是在CPU内部, 而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容, 然后撰写让CPU读的懂得指令码给CPU执行
综上的话,我们需要如下技能
所以不难看出,直接使用机器语言是非常有难度的一个事情
为了解决这个问题,计算机科学家设计出一种让人类看的懂得程序语言, 然后创造一种『编译器』来将这些人类能够写的程序语言转译成为机器能看懂得机器码, 如此一来我们修改与撰写程序就变的容易多了!目前常见的编译器有C, C++, Java, python等等
机器语言与高阶程序语言的差别如下所示:
但是此时依旧有问题存在,当你需要将运作的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去, 所以你还得要了解到内存的位址是如何定位的,为了要克服硬件方面老是需要重复撰写控制码的问题,所以就有操作系统(Operating System, OS)的出现了
二.操作系统
操作系统简单说就是将所有的硬件都驱动, 并且提供一个发展软件的参考介面(API)来给工程师开发软件
1> 操作系统核心(Kernel)
操作系统的功能就是让CPU可以开始判断逻辑与运算数值、 让主内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网络卡可以开始传输数据、 让所有周边可以开始运转等等,硬件的所有动作都必须要透过这个操作系统来达成
操作系统的核心(Kernel)决定计算机能不能做到某些事情, 只有核心有提供的功能,你的计算机系统才能帮你完成!举例来说,你的核心并不支持TCP/IP的网络协定, 那么无论你购买了什么样的网卡,这个核心都无法提供网络能力的
核心主要在管控硬件与提供相关的能力(例如网络功能), 这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一使用者不小心将核心程序停止或破坏, 将会导致整个系统的崩溃!因此核心程序所放置到内存当中的区块是受保护的! 并且开机后就一直常驻在内存当中
TIPS:
所以只有核心的话,我们就只能看著已经准备好运作(Ready)的计算机系统,但无法操作他! 这个时候就需要软件的帮忙
2>系统呼叫(System Call)
硬件都是由核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功能! 唔!如此一来不是从原本的参考硬件函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊!
为了解决这个问题,操作系统通常会提供一整组的开发介面给工程师来开发软件! 工程师只要遵守该开发介面那就很容易开发软件了!举例来说,我们学习C程序语言只要参考C程序语言的函式即可, 不需要再去考量其他核心的相关功能,因为核心的系统呼叫介面会主动的将C程序语言的相关语法转成核心可以了解的任务函数, 那核心自然就能够顺利运作该程序了!
如果我们将整个计算机系统的相关软/硬件绘制成图的话,他的关系有点像这样:
计算机系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等等), 因此只要硬件不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。 而由於核心只会进行计算机系统的资源分配,所以在上头还需要有应用程序的提供,使用者才能够操作系统的。
为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发介面, 那就是系统呼叫层。软件开发工程师只要遵循公认的系统呼叫参数来开发软件,该软件就能够在该核心上头运作。 所以你可以发现,软件与核心有比较大的关系,与硬件关系则不大!硬件也与核心有比较大的关系! 至於与使用者有关的,那就是应用程序啦!
3>核心功能
既然核心主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与主内存, 因此,核心至少也要有这些功能的:
应用程序
应用程序是参考操作系统提供的开发介面所开发出来软件,这些软件可以让使用者操作,以达到某些计算机的功能利用。 举例来说,办公室软件(Office)主要是用来让使用者办公用的;影像处理软件主要是让使用者用来处理影音数据的; 浏览器软件主要是让使用者用来上网浏览用的等等
6.云计算&大数据_linux基础知识(5)计算机为何物_计算机如何运作(内功)
原文:https://www.cnblogs.com/zhimahu/p/11746402.html