目录
在认识进行相关的知识之前我们需要先认识一下关于操作系统的相关的知识。
据我们所知操作系统是位于软件和硬件之间的,可以协调软件和硬件之间的工具,那么我们的操作系统到底是怎么处理硬件与软件之间的关系呢?操作系统又是怎么与硬件链接起来的呢?那么我们就从硬件开始入手,一步步带大家认识一下操作系统的作用原理,以及其中进程的概念。
冯诺依曼体系结构
一提到硬件就不可不提到冯诺依曼体系结构。他是一种计算机设计的理念。在冯诺依曼体系结构当中我们的计算机大致可以分为五部分:输入设备,存储器,运算器,控制器以及输出设备。
我们的数据通过输入设备加载到存储其当中,经过运算器的处理回到存储器当中,最后通过输出设备反映给用户。
这五部分仅仅是一个大致的概念。
冯诺依曼体系结构五大组成部分
就比如我们的输入设备可以有好多工具,例如鼠标,键盘,摄像头,磁盘,话筒,网卡等等都属于输入设备。
存储器指的就是我们的内存。
运算器主要对我们的数据进行计算任务。(主要分为算数运算以及逻辑运算)
控制器主要对我们的计算机硬件流程进行一定的控制。
输出设备主要包括显示器,播放器(硬件),磁盘,网卡等等
我们可以发现的是对于输入设备和输出设备有的工具是重复的,比如网卡和磁盘即使输入设备又是输出设备。这是因为我们不仅可以向磁盘当中写入数据还可以从磁盘当中读出数据,我们的网卡也是相同的道理。
我们需要注意的是:对于数据在输入设备和输出设备的转换只能通过存储器进行。当我们的运算器将数据处理完毕之后也只能重新将数据写入到存储器当中之后再向输出设备进行输出。但是为什么要这样设计呢?
为什么数据只能通过存储器进行输入和输出
要想解释这个原因我们就需要向大家介绍一下存储金字塔的概念:
由于计数以及材料的制约,我们会发现当我们的数据处理速度越快的时候,我们生产该材料所花费的费用也就越高。其中CPU的运算速度是最高的,其次是内存,最后是硬盘等外部存储设备。
当我们采用的材料越好我们数据的运算速度也就越高,但是我们计算机的成本也就越高。当然我们可以全部采用最好的材料来保证我们的计算机高速的数据处理效率,但是这样并不是我们每一个人都可以承受这样的支出成本的。
计算机之所以能够普及不仅仅是因为其便利的作用,也是因为其价格普遍人员都可以接收,这也正是计算机得到广泛应用的原因。因此我们需要适当的调整成本。
所以我们的计算机组成的部分就分为高速运转的CPU部分,以及作为中转设备的内存部分,以及主要用于存储的硬盘部分。由于我们数据的处理速度逐渐减少,所需成本也逐渐减少,因此内存可以采用的空间要比CPU大得多,而我们的硬盘的存储空间又比内存空间大得多。
由上述的结论我们可以知道,CPU部分的数据处理的速度很快(运算器+控制器)。但是我们的硬盘也就是我们的输入设备的数据存储速度很慢,所以就会产生很大的数据差,造成运行速度的浪费的情况。因为在CPU当中的数据处理早就已经结束了,但是我们的数据还在缓慢的进行输入。
为了解决这种数据处理不匹配的问题也就有了我们的冯诺依曼体系模型。我们采用一个数据存储速率较为适中的工具存储数据,等到数据存储到一定的量的时候我们在将数据传给CPU进行处理。在数据存储的过程当中CPU还可以处理其他事务,这样就避免了我们机器效率的浪费。这也正是我们的计算机需要一个存储器来作为数组中间介质的原因。
当我们想要向同学发送一条消息的时候。数据就会经过CPU处理之后存储到运算器当中,之后从输出设备进行输出,之后到达朋友的输入设备当中,进而存储到存储器当中,在经过CPU的处理,最终到达我们的输出设备也就是我们的显示屏幕上面。
操作系统
但是我们会发现硬件上的内容大部分都是独立存在的,那么我们要怎样将这些独立存在的东西相互链接起来呢?这个时候就用到了我们的操作系统。
操作系统的要作用分为两点:1.帮助用户,管理好下面的软硬件资源。2.给用户提供一个良好的运行环境。
要想有一个安全良好的运行环境那么就意味着我们的操作系统当中的数据不能随便被用户进行访问并修改。但是我们的操作系统又要为用户提供服务。
概念一:访问操作系统的请求都是通过系统调用完成的
就好比在银行当中,我们既需要在银行当中存取钱,又不能让我们任意的修改银行当中的账号数据。所以我们就需要采取一定的措施:为用户提供软件接口。就和银行当中的窗口一样,我们的操作系统为了自身的安全并且保证为用户提供服务,会有一个"窗口"(函数接口)。我们在窗口当中可以做符合要求的事情。
这就有了我们操作系统的第一个概念:访问操作系统的请求都是通过系统调用完成的。
所以我们硬件的使用也不例外,硬件想要被使用就需要通过系统调用接口被操作系统进行操作。硬件的系统调用接口也就是我们通常中所知道的驱动程序。
操作系统如何管理用户信息
那么我们又是通过怎样的方式被操作系统所管理的呢?举一个简单的例子:假如我们在上大学,大学的校长想要管理学校的学生的成绩信息,难道校长需要亲自找你见一面之后,亲自问问你的成绩怎么样吗?当然不会。校长只需要有一个成绩单,上面汇总了你各科的成绩,平时的学分,绩点等情况,这样就可以大致得出你平时的学习情况。
操作系统对于用户信息的管理大致就类似于学校校长的管理情况。在操作系统当中系统会将各部分需要进行管理的软硬件的信息汇总成为一张信息表。比如优先级,进程的编号,进程的优先级等等。之后将这些信息通过链表的形式汇总起来,形成一张完整的信息表,之后我们想要知道一个软件或者硬件的使用情况只需要查看这张使用表即可。
概念二:先描述,再组织。
我们几乎所有的软件和硬件都是通过上述的形式被操作系统所管理起来的。这种管理的步骤大致可以分为两类:先描述再组织。首先我们可以将一个个体的相关信息描绘成为一个结构体。就比如想要描述一个学生的信息我们就可以定义学生的年龄,身高,成绩等相关信息为一个结构体。之后通过特定的数据结构将实例化的对象组织起来,形成一张表,就可以放到我们的操作系统当中进行管理了。大致情况如下:
进程的概念
进程实质上就是一个个被打开的软件。就是我们现实中见到的软件的"后台"。当我们打开一个软件我们就需要生成一个进程对我们的软件进行管理,管理人还是我们的操作系统。管理的方式还是通过先描述再组织最终形成一个结构体,我们将这个结构体再链接进入指定的序列当中就可以对该进行进行管理了。
在Linux当中我们将上述生成的结构体成为pcb。pcb结构体当中包含进程的所有属性。
我们平时编写的代码想要在变成一个进程我们只需要运行即可。但是我们平时编写的程序太短,一旦运行结束那么进程也就相对应的结束了。我们可以编写一个死循环代码便于我们进行观察:
左边是我们还处于死循环当中的程序,右边是我们使用特定的指令查找到的进程编号,(具体的指令会在下一篇博客当中详细讲解)
之后通过进程编号进行观察文件夹当中的内容:
详细展示如下:
可能这一大部分大家都看不懂,当然我们也不需要看懂,我们只需要了解一个知识点即可。
操作系统在管理进程信息的时候不仅仅是管理进程的代码或者是进程号等信息。会在形成一个特定的结构体之后将这个结构体和我们的代码同时存储到相应的序列当中。当然存储的代码也并不是我们平时编写的代码,它仅仅是一串地址。操作系统可以通过这串地址找到我们所编写的代码。
测试结果如下:
其中cwd表示的是当前代码所存储的路径的地址。我们在编写代码的时候如果需要在当前目录下面创建指定的文件就是通过这个目录所进行创建的。