Linux操作系统三十年的发展特点及未来(🏆 幸运奖)

596 阅读8分钟

本文正在参与 “走过Linux三十年”话题征文活动。

该篇文章获得了🏆 幸运奖,我觉得这份幸运不应该只属于我,应该属于所有看到这篇文章的小伙伴们

1.引言

说实话,我们每时每刻都离不开操作系统,你以为鼠标点击,键盘输入都是上帝安排好的,感叹岁月静好,其实哪有什么静好啊,不过是有人替你负重前行,换句话说是操作系统扛下来了一切,而你打开应用程序只需要鼠标点击,就能看电影,听音乐享受一切。

它这么牛,难道就不值得为其写篇文章,让后人深入的了解它嘛?答案当然是值得的,而且很值得,所以就有了这篇文章,我不信命,我相信命运是可以靠自己掌控的,而且只要我想做,我就相信我一定能做的到,所以就有了这篇文章,写这篇文章的初衷就三点理由:1.想做,2.能做,3.愿意去做

2.Linux操作系统的发展

2.1初识Linux操作系统

如果我问你这个问题,你该如何回答呢?你会说:Linux操作系统是一款操作硬件的系统,也类似于一款软件更像第三方,更准确的说是一种生态,我们的应用软件都是运行在操作系统之上,由操作系统来操作硬件完成我们想要的功能,比如最简单的运算,然后给我们一个结果等等。

好,很明显这样的回答是不够深入的,我们先不着急回答,我们基于这个了解的基础上进行初次学习,看看如何把上面的语言改的专业一点。

2.2Linux早期

Linux最开始启动的时候,先进入的实模式,之后会切换到保护模式,实模式是Linux初创的时候采用的模式,初创的时候肯定是什么都需要自己干,由于要自己干那记录的所有的地址都是物理地址,肯定不能是虚拟的,只有分页机制的引入,Linux才可能从实模式切换到保护模式。

我们常说:软件是虚的,软件的开发离不开基础架构的建设,而操作系统更是横跨在硬件和软件之间的桥梁,因此要想让操作系统很容易的移植到多平台,必须对操作系统的代码进行硬件和软件的划分,Linux做到了这一点,它的所有硬件相关的代码都在arch目录下。 image.png Linux早期是基于x86架构开发的,x86的系列中8086808816位的处理器,而从80386开始变为32位的处理器,这种处理器的过渡看起来是处理器位数的变化,但本质上却是处理器体系架构的变化,这种变化也带来了新的寻址方式,也为Linux从实模式到虚模式的转化提供了可能。

2.3Linux中期

Linux发展到了中期的时候,肯定不是什么活都自己干,而且任务也多了起来,于是引入了多进程和保护模式,进程多了那就需要建立相应的规则,就像人多了就需要建立相应的制度和法律,任务来了,你不能胡来啊,任务指派给哪个进程,之间如何调度,什么时间该干什么,进程管理说的算,但这个阶段接的还都是中型项目。

进程多了,确实能处理多任务,但早期只有一个cpu呀,硬件资源那么贵,如何让cpu上一直有进程在运行,以达到最大化的利用cpu的资源的目的呢?那你就需要出台相应的进程调度和调度策略规则,用进程调度来保证下一个最该执行的进程,用调度策略来确保公平和高效。那我们的进程都有什么呢?这里简单提一下包括正文段、用户数据段和系统数据段,你可以把它就想象成一个对象,详细描述如下:

  1. 正文段(Text):待执行的机器指令,权限只读,但多进程之间可以共享,比如多个用户都想读同一个文件,那就可以把读操作存储到内存中的一个副本中,然后多个进程共享同一副本即可。
  2. 用户数据段(User Segment):这里面主要是存放进程执行时所需要的所有数据的,包括进程所需要的全部变量在内,前面说了进程之间可以共享正文段,那用户数据段能不能共享呢?答案是否定的,每个进程是需要有每个进程专用的数据段的。
  3. 系统数据段(System Segment):该段存放程序的运行环境,这正是程序和进程的区别,程序是什么呢?程序就是一组指令和数据组成的静态事物,对应我们的正文段和用户数据段,而系统数据段是有别于程序的独有部分,这一部分存储进程的控制信息,操作系统就是通过这个信息来管理和控制进程的运行,Linux为每个进程都创建了task_struct数据结构来容纳这些控制信息。

同样,任务多了数据也会随之增长,设备也多了起来,文件也多了,消耗资源也大了,这个时候要出台相应的管理政策:比如设备管理、内存管理、文件管理。

2.4Linux后期

随着Linux进一步发展壮大,周边已经无法满足它的野心了,于是把目标瞄准海外,通过互联网互联互通,促进对外交流和国际合作,很快就获得了大笔订单,于是有了网络通信和进程间通信。

中期搞的都是中型项目,一个进程就能搞定,现在接手大型项目,还要保证效率,肯定要引入多人协作机制,为了保证进程之间能在同一任务中协调合作,于是引入了进程通信,例如:在一个shell管道中,第一个进程的输出作为第二个进程的输入,依次传递,构成一个庞大的流水线。

Linux支持许多不同形式的进程间通信机制CIPCC,最有用的进程通信机制即管道、SystemVIPC机制及信号。管道有匿名管道和命名管道两种,而SystemVIPC机制有着信号量、消息队列和共享内存三种通信方式,还有Linux支持的完全进程间网络通信Sockets

进程之间最有效的通信方式自然是读写文件,一个进程写,另一个进程读文件,只要俩个进程之间都有权限操作就行,而且传递的数据量也大,你会觉得这不挺好嘛?但是也带来了一些问题:一个是空间的浪费,写进程可能写的文件非常大,另外就是时间的浪费,读进程可能要浪费一些读操作,如果读进程运行快于写进程,那读进程就要经常进行读操作,这导致本来一次就能读完的数据就得读很多遍。

综述,管道就是一个不错的选择,管道即pipe文件,是用于连接一个读进程和一个写进程,以实现它们之间用于通信的共享文件,写进程以字符流的形式像管道输入大量的数据,然后管道把数据输出给读进程,两个进程是基于管道通信的,因此又被称为管道通信。为了协调通信,管道通信机制必须具备以下三点:

  1. 互斥:一进程对pipe读写时,另一个必须等待
  2. 同步:写进程写一定数据之后就去睡眠等待,直到读进程取完数据后才去唤醒,反之亦然。
  3. 存在:只有双方都存在,才去进行通信

具体细节先不提了,接下来说说网络通信Socket,也叫套接字,它是网络通信中应用程序对应的进程和网络协议之间的接口,这里简要介绍下socketsocket在网络系统中的作用如下:

  1. socket位于网络协议之上,屏蔽了不同网络协议之间的差异
  2. socket是网络编程的入口,提供了大量的系统调用,构成网络通信程序的主体
  3. Linux系统中,socket属于文件系统的一部分,网络通信可以看作成是对文件的读取

2.4Linux末期

Linux末期就更敢玩了,什么虚拟化、容器化、集群,更多元化的虚拟化方式。

2.4Linux未来

如今Linux是遍地开花、服务全球、关于未来对于一个只有一周学习Linux的人来说不敢提,但我知道一件事:哪里有需求哪里就有未来。未来将是智能物联网的天下,可移动可穿戴的设备会成为主流,也许那里就是Linux的未来。

最后,请大家给个三连 image.png

3.题外话

作为建设新时代的主力军我们应该夯实自己的底层知识结构,不断学习、不断进取,为将我国建设成为社会主义现代化强国贡献自己的力量,我爱你中国。