标题:[Linux] 操作系统
@水墨不写bug
目录
正文开始:
一、冯 . 诺依曼体系结构
1.冯诺依曼体系结构简介
什么是体系结构?体系结构其实就是一套方法,是用来管理某个问题的方法策略。我们常见的计算机,比如我们身边的笔记本电脑;此外还有我们不太常见的计算机,如服务器,大部分都遵循冯诺依曼体系结构。
什么是冯诺依曼体系结构?
简单来说,冯诺依曼体系结构可以用上面这样的一幅图来表示。到目前为止, 我们所认识的计算机都是由一个一个相对独立的硬件组成的,比如我们常用的鼠标,键盘,显示器,打印机等。
其中,根据如图的分类举例如下:
输入设备:比如键盘,鼠标,扫描仪,书写板,硬盘等;
输出设备:比如显示器,打印机,音响,硬盘等;
中央处理器(CPU):含有运算器和控制器等;
2.对冯诺依曼体系结构的理解
我们由常识可知:CPU的速度非常快(纳秒级),输入输出设备(通常是硬盘)速度相对于CPU非常慢(毫秒级),这就导致了速度的代差,最终导致整机的效率表现为输入输出设备的效率。冯诺依曼体系的存储器的存在就是为了缓解这样的问题,存储器一般就是内存。
你一定听说过存储金字塔:
根据存储金字塔,我们发现内存就是在硬盘和CPU之间的 “缓解矛盾”的中间人。内存通过预加载硬盘中的数据来为高速的CPU提供运算需要的数据;同时,内存也暂时接收保存CPU运算产生的数据结果,以便提供给慢速存取的硬盘使用。内存类似于CPU和硬盘之间的一个缓冲区,这样一来,整机的速度就可以提升到接近于内存的速度了。
关于冯诺依曼体系结构,需要强调:
1.这里的存储器就是指内存;
2.不考虑缓存情况,CPU能且只能对内存进行读写,不能访问外部设备(输入输出设备)
3.外设(输入输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
总结成一句话:所有设备只能直接和内存打交道。
具体情景:
(1)如果你通过QQ给家人发送消息,数据是如何流动的?
其实每一步都是按照上述图片结构体系运行的:
在发送端:
首先,我们通过输入设备(键盘)输入数据(消息),这些数据被加载到内存中,接下来,QQ信息数据通过CPU的加密,压缩处理后再次被写入内存,最后通过网卡设备发送出去。
在接收端:
首先通过网卡设备接受到数据,随后被加载到内存中,这些数据需要通过CPU的解压缩,解码处理后再次被加载到内存中,然后存储在输出设备(硬盘)中。(因为接受的聊天消息记录不会因为关机而消失,所以可以确定接受的消息是存储在硬盘中的)
(2)如果发送的是文件,数据又是如何流动的?
首先,我们将文件拖入对话框的过程就是把文件从硬盘加载到内存的过程,接下来,文件数据通过CPU的处理后,重新写入内存,然后通过网卡设备发送出去。
接受时,通过网卡设备接受,接下来写入内存中,通过CPU的处理后重写入内存,最终存放在硬盘中。
二、操作系统定位
1.为什么需要操作系统?
因为用户不善于直接操作硬件设备。你一定见过单片机吧,你能够直接在物理上操作电位的高低来直接控制单片机吗?这不太现实,然而计算机就是一个比单片机复杂的多的冯诺依曼的体系结构,如果仅仅给你几个硬件设备,你几乎无法直接控制操作这些硬件设备,更别说让它们协调起来一起工作了。
而操作系统就是为了给用户提供一个使用和管理下面的软件和硬件资源的中间层:
操作系统协助用户,管理好下面的软硬件资源;同时,给用户提供一个良好(稳定,高效,安全)的运行环境。
2.操作系统是什么?
操作系统是一款进行软硬件管理的软件。
操作系统内部维护有各种各样的数据,但是操作系统不相信任何用户!但是操作系统还是要帮用户的忙,为用户管理资源,提供服务。所以,操作系统为了保证自己的数据安全,也为了保证给用户能够提供服务,操作系统以接口的方式给用户提供调用的入口,以此来获取操作系统内部的数据。
操作系统提供的调用接口,就是系统调用。Linux是用C语言实现的,所以系统调用就是一个个的C语言的函数。所有访问操作系统的行为,都是通过系统调用来实现的。
但是你可能会有疑问,既然有系统调用,那么C语言的库函数又是什么?C语言的库与系统调用的接口又是什么关系?
接下来,就需要具体分析上面这一副图了:
向下,操作系统管理硬件:
操作系统内部进行着内存管理,进程管理,文件管理,驱动管理;驱动管理对接于下层的驱动,操作系统也无法直接管理硬件资源,对硬件资源的直接管理的是各种驱动:操作系统通过管理驱动,间接管理各种硬件资源。
向上,系统调用 封装程度低,门槛高,难以使用:
所以为了便于专业人员进行软件开发,一些大佬就写出来各种库,于是就有了我们常常使用的stdio.h,string.h的等等的库。比如C语言就有各种各样的函数库,这些库的实现本质就是为了方便后人在C语言的基础上进行软件开发;除此之外,其他计算机语言如:C++也是如此。
但是系统调用与此又有什么关系?其实,库里面的函数本质上就是通过调用系统调用接口来实现的。各种语言的函数库就是对系统调用接口的封装。
三、系统调用和库函数
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高。所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。(图片来源于网络)
完~
未经作者同意禁止转载