前言:
都说类和对象是C++中的第一个里程碑节点,那么Linux系统编程部分的第一个里程碑节点就是进程的引入,可以说我们前面的所有学习,都没有真正的开始学习Linux,我们只不过是从0开始了解一个新的软件的最基本使用而已,我们现在开始了解的是更深层次的东西,所以学习进程之前,我们应该具备一定的预备知识,所以本文注重的是预备知识,后面再介绍进程。
1 冯诺依曼体系
这位科学家是一位十分伟大的科学家->冯诺依曼,是他创建了冯诺依曼体系,让计算机跨越了一个新的时代,那么什么是冯诺依曼结构体系呢?
如图所以,就是冯诺依曼结构体系,乍一看好像也没有什么大不了的,我们不妨简要分析一下这个结构图,一共有5个元件,这5个元件拉通了大部分计算机的结构。
输入设备就像键盘,鼠标,话筒等,输出设备比如显示器,扬声器等,存储器的概念是十分广泛的,严谨起见,这里的存储器我们看作内存,实际上存储器分为一个金字塔,主存储器是内存而已:
我们从最上往下看,这就是存储的金字塔,从上往下一次是寄存器,一级缓存,二级缓存,三级缓存,内存,不同类别的硬盘,有人就问了,为什么存储器要那么复杂?
我们先从造价来看,当我们在市面上买内存条或者是硬盘的时候,都会发现内存的价格往往比硬盘的价格要高,我们结合内存金字塔,不难发现,从下往上,就越靠近Cpu,也就是和cpu联系更紧密,并且从冯诺依曼结构体系中Cpu分为控制器和运算器,那么Cpu要进行运算,运算的数据从哪里来呢?
答案就是从存储器,那么也就是说,越靠近Cpu要求的读写速度就越高,所以寄存器的容量很小,只有几个字节,但是速度确实非常的快。
所以我们能得出一个答案就是,越靠近CPU的存储器越贵,越快,容量越小。
这是冯诺依曼结构体系的一个简单介绍,但是这还不足以说明,为什么这个体系足以让世人铭记于此。
是这样的,冯诺依曼引入了存储器的概念,也就是说,在没有存储器之前,Cpu要进行运算只能从输入设备读取数据,可我们都知道cpu的运行速度是难以想象的快,我们从键盘一个一个的输入数据,是不是太难为Cpu了?
最开始计算机被发明就是用来进行计算的,但是奈何后面的cpu的计算速度实在太快了,二者的速度不对等,冯诺依曼引入了存储器,也就是说,解决了木桶效应:
我们都知道,整个木桶能装的水都是看木桶最短的板子是多长,那么计算机同理,整机的速度是取决于速度最慢的硬件。
那么引入了存储器,就能解决速度不对等的问题,具体是因为,cpu计算数据的时候,不再需要等待键盘输入数据,它只需要去内存里面进行读取数据进行,也就是存储器,存储器里面预先加载好数据,然后CPU进行运算即可。那么存储器也不可能全部上最快的,所以存在金字塔的概念,一级一级的递增,从而使计算机跨入了一个新的时代。
而由冯诺依曼结构知道,cpu是不直接和外设打交道的,不管是读取数据还是干什么,cpu能直接打交道的只有存储器,体系中有数据流和控制流,虽然cpu和输入设备存在控制流,但是并不是直接的控制,所以有一个重要结论就是cpu不能直接和外设打交道。
运算也是,运算器从存储器读取数据,然后返回给存储器,此时就完成了cpu的工作。
对于冯诺依曼体系的简单了解我们就到这里。
2 尝试理解操作系统
欸有人就有疑惑了,这和操作系统有什么关系?不要忘记了,操作系统是可以直接杀死进程或者直接回收进程的。
所以我们应该尝试理解操作系统。
从概念上看,我们在最开始已经介绍了操作系统是一个软件,进行软硬件资源管理的软件,那么在Linux最开始的部分,我们知道从广义上来看,操作系统不仅包括了操作系统的内核,还包括了外壳程序(使用户不能直接进行访问操作系统内核的),那么狭义上来看,操作系统就是操作系统的内核,欸?这样是不是很容易让人扑朔迷离,是这样的,操作系统不止是操作系统,它是计算机中的一个大类,里面不仅有操作系统的内核,还有驱动程序,外壳程序,操作系统提供的系统接口等,所以我们知道会有一个结构是关于操作系统的,那么我们先来看一下操作系统的不完整的结构:
这是最简单的一个概念图,从冯诺依曼结构体系,我们知道最底层的应该是硬件部分,那么往上应该是操作系统的内核,所以操作系统的内核就出来了,里面进行了一些管理,比如进程管理,内存管理,文件系统管理等,在网上就是shell指令了,那么肯定有人好奇为什么操作系统和硬件之间夹杂着驱动程序?
你想,操作系统是进行软硬件资源管理的一个软件,那么硬件的数据进行了改变,是不是要在操作系统层面进行更新?但是从冯诺依曼结构体系我们知道,能直接和外设打交道的只有存储器,操作系统是存储器吗?不是吧?那么我们怎么进行管理呢?
我们首先明了一个问题,操作系统管理硬件,是管理的硬件本身还是硬件的数据?是数据吧?所以我们只需要将硬件的数据进行管理即可。那么怎么拿到数据呢?此时驱动程序就有了,又驱动程序获取硬件的数据,驱动程序的来源不是计算机本身有的:
像这种,甚至连接了新的外设之后,我们还需要自己更新驱动,驱动程序是厂商自己写的,比如雷蛇鼠标,第一次连接鼠标之,系统会自动安装驱动,这个过程的本质就是将鼠标的数据拿到,从而实现管理。
现在不难理解,驱动程序就是辅助操作系统实现硬件的管理的。驱动程序有了数据,会将数据以内存块的形式打包给操作系统,操作系统以链表的形式管理硬件,所以操作系统管理硬件,从硬件本身到硬件的数据,实际上就是管理的链表,这是操作系统在硬件方面要做的管理事。
现在我们引入一个问题,C语言和C++语言的区别是什么?相信大部分人都能知道C语言是一门面向过程的语言,C++是一门面向对象的语言。
那么具体体现在哪里呢?C语言解决问题往往是通过一个一个的函数来解决的,C++解决问题的时候,第一件事情往往都是创建一个类,通过面向对象的特点,封装继承多态,封装类里面的函数等,派生类继承父类,一个函数多种实现方法来解决。
那么我们从C++的解决来看,不难看出,我们都是先创建一个类,给类一定的成员变量和一定的成员函数,从而实现解决。
再引入一个问题,你如何证明你是某所高校的学生?难道是直接去给别人说,我是某某高校的学生就可以了吗?当然不可以,这样的话校长也蒙了,我怎么不知道?
校园承认你是它里面的学生往往只会通过一个点,就是,你有对应的数据,比如你的学号,你的宿舍号,你的高中档案等。
这些才能证明,所以!!!结合操作系统,操作系统就是校长,他要对你进行管理,需要的是你的数据,数据怎么来?数据通过描述得来,就像C++一样,通过描述类,来创建对象的来。
那么校长有了对应的数据,就来开始组织了,比如知道你是大一的,那就把你组织成大一的,这就是一种组织方式。
所以,操作系统管理的本质,就是先描述,再组织!
需要有各个数据,然后才能进行对应的管理。这6个字会贯通整个操作系统。
那么我们再来看看操作系统较为完整的结构图:
这里就简单提及一点,如果整个计算机是银行,我们就是老大爷,不知道如何存取钱,所以需要客服带我们去柜台进行相关操作,系统调用结构就是同理,是操作系统提供给用户的函数,那么这势必会暴露操作系统内核,所以有的时候系统被攻击了,部分原因就是因为这个。
所以用户想要访问操作系统,访问操作系统中的进程管理等,就必须需要操作系统提供的系统调用函数。
感谢阅读!
版权归原作者 _lazy. 所有, 如有侵权,请联系我们删除。