早期想让电脑执行程序就要参考一堆硬件功能函数,并且学习机器语言才能够编写程序。同时每次编写程序时都必须重新改写,因为硬件功能与软件功能不见得都能一致,如果我们能够将所有硬件都能驱动,并且提供一个软件的参考接口来给工程师开发的话,那开发软件不就变得非常简单了吗?这就是操作系统。
![ddc519b5bd3dda7484c28609eac14f72.png](https://i-blog.csdnimg.cn/blog_migrate/9f7c5462471d9b2906bdc8e78bae2c12.jpeg)
操作系统
操作系统内核
操作系统(OS)其实也是一组程序,这组程序的重点在于管理电脑的所以活动及驱动系统中的所有硬件。我们刚刚谈到电脑没有软件就是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数据,让内存可以开始加载或读出数据与程序代码,让硬盘可以被存取,让网卡可以传输数据,让所有外置设备开一开始运转等。总之,硬件的所有操作都必须通过操作系统来实现。
![eb955851145ff0ffc95477ebd866d8d1.png](https://i-blog.csdnimg.cn/blog_migrate/c4a5fb929b51e8939646cea29d6982d2.jpeg)
上诉的功能就是操作系统的内核来完成的。你的电脑能不能做到一些事情,都与内核有关只有内核提供的功能,你的电脑系统才能帮你完成。举例来说,如果你的内核并不支持TCP/IP的网络协议,那么无论你购买了什么样的网卡,这个内核都无法提供网络功能。
![da953b13eeb3381d201d1136a6a9570a.png](https://i-blog.csdnimg.cn/blog_migrate/0cca731d0d3f2c431a8a979d4a0fff94.jpeg)
电脑内核
但是单有内核我们用户也不知道能做什么事情,因为内核主要是在管理硬件与提供给相关的功能(例如读写硬盘、网络功能、CPU、资源分配),这些管理的操作都非常重要,如果用户能够直接使用内核的话,万一用户不小心将内核程序停止或破坏,将会导致整个系统的坏掉。因此内核程序放置到内存当中的区块是受保护的,并且启动后就一直常驻在内存当中。
![e6d4c23bd587b8492cc54a90dc1b637a.png](https://i-blog.csdnimg.cn/blog_migrate/7a185662ef8046c8fe876606edb6c233.jpeg)
内存快
系统调用
既然硬件都是用内核管理的,那么如果我想要开发软件的话,自然就要去参考这个内核的相关功能。如此一来不是从原本的参考硬件函数变成参考内核功能,还是很麻烦,有没有简单的方法?
为了解决这个问题,操作系统通常会提供一套程序编程接口(API)给程序员来开发软件,工程师只要按照API就很容易开发出软件了。举例来说,我们学习java语言只要参考java语言的函数即可,不需要再去考虑其他内核的相关功能,因为内核的系统调用接口会主动地将java语言的相关语法转成内核可以了解的任务函数,那内核自然自然就能够顺利运行该程序。
![c3b3d74501b898cc844f470ed5ad270e.png](https://i-blog.csdnimg.cn/blog_migrate/95ee84c44fb788c2bade350b7b0d2024.jpeg)
API接口
如果我们将整个代电脑系统的相关软件或硬件绘制成图的话,它的关系有点像:
电脑系统主要由硬件构成,然后内核程序主要是在管理硬件,提供合理的电脑系统资源分配(包括CPU资源、内存资源等),因此只有硬件不同(如X86架构与RISC架构的CPU),内核就得要修改才行。而由于内核只会进行电脑系统的资源分配,所有在上面还需要由应用程序的提供,用户才能够使用系统。
![cee0474b48a2677283adec3cf8b43706.png](https://i-blog.csdnimg.cn/blog_migrate/c6b3c7c3828ee2078384862a1a948b13.jpeg)
操作系统的角色
为了保护内核,并且能让程序员比较容易开发软件,操作系统除了内核程序之外,通常还会提供一套API,那就是系统调用层,程序员只要按照公认的系统调用参数来开发软件,该软件就能够在该内核 上运行。所以你可以发现,软件与内核有很大的关系,与硬件则不大,硬件与内核有比较大的关系,至于与用户有关的就是应用程序。