1.第一章 计算机基础和Linux安装 -- 计算机基础(一)

第一章 计算机基础和Linux安装

内容概述

  • 计算机系统
  • 计算机硬件组成
  • 操作系统
  • Linux相关介绍
  • Linux哲学思想
  • 获取Linux
  • 虚拟机
  • Linux 安装
    我们先看一下这个小结大概介绍的内容,首先我们会讲计算机系统,计算机有什么,计算机系统是什么,里面包括什么组件,计算机系统主要分成两部分,一个是软件,一个是硬件,我们先说硬件,在企业中因为确实有些公司它有自己的生产总的各种服务器,所以你对这些硬件还是要有所了解的,虽然说我们的工程师不是硬件工程师,不是IDC机房的工程师,但是这些硬件说起来你也不能陌生,而且这部分内容我们也不需要太去细究,目前有一个大的发展趋势就是虚拟化、云的环境,未来有些公司可能都看不到物理服务器了,直接买的是阿里云的服务器,远程管就行了,电脑都看不见,你就身边有个笔记本电脑远程连就行了,所以硬件不像以前那么关键了,以前我们还得详细讲各种机房的一些硬件设置什么的,现在实际上就不需要那么复杂了,我们可以把这块适当的弱化,大家重点来学软件,说实在硬件东西你学好了也不是不行,但是IDC工程师工资有多高呢,并不是特别高,还不如我们学运维的工资高,所以这部分内容大家可以不用去细究,作为一个了解即可,我们目前学习的前期阶段主要是给大家讲Linux操作系统,所以操作系统的基础知识我们还是要介绍的,操作系统是怎么发展的,包括我们今天学习的Linux系统是怎么来的,它里面有哪些特性,比方说它的重要的哲学思想,这些哲学思想是曾经有面试问过的,就是问你说这个Linux的思想是什么,或者是Linux的原则是什么,或者是Linux的哲学是什么,那有人就答不出来,实际上就是换个说法而已,我们今天要带着大家把Linux装好。

1.计算机系统

计算机(Computer):俗称电脑,是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速地处理,然后把处理结果输出的现代化智能电子设备。
计算机有很多形式,比如:生活中常见的家用电脑、笔记本、智能手机、平板电脑等,还有生产环境中提供重要业务支撑的各种服务器(Server),都算是计算机。
其中一个完整的计算机系统由硬件(Hardware)系统和软件(Software)系统两大部分组成。
在这里插入图片描述图1-1 计算机组成

计算机英文单词叫Computer,计算机它是一个什么东西,计算机我们平常大家都叫电脑,但实际上这个称为电脑这是一个称呼,实际上不是特别准确,那么准确的说计算机是一种能够接收存储,并且将利用存储在内部的程序,对这些信息进行自动化的高速处理,并且把处理完的结果给它输出出来的这样一种智能电子设备,这个就是计算机,这里面实际上提到了好几个要点,比方说它是可以接收存储数据的,并且能够加工处理,而且速度非常快,并且还可以把它输出出来,这些都属于计算机的一些重要的特征;

其中计算机实际上目前来讲并不是简单的我们家用电脑、笔记本电脑这些计算机,事实上计算机的形态现在已经是非常广泛了,除了我们平常看到的计算机以外,还可以有智能设备也算计算机,比方说手机、平板电脑等智能设备;

其中一个完整的计算机它实际上是由硬件和软件组成的,硬件我们叫hardware,软件叫software,实际上对于一个计算机来讲硬件就像人的身体一样必须有,没有身体那就没有根基了,身体是革命的本钱,当然除了身体以外还有思想,还有灵魂,那么对于计算机来讲灵魂和思想就是它的软件,分成两大类硬件和软件,硬件里面包括的内容非常多,稍后会分别介绍,比方说有CPU、内存、硬盘等等,软件也分成很多类,比方说有各种系统软件,也有应用程序软件,甚至还有一些我们家用的或者生产中用的一些企业级软件,总的来说分成两类软件和硬件。

1.1 计算机硬件

计算机发展历史:

  • 第一代计算机(1946-1957) 电子管时代
  • 第二代计算机(1958-1964) 晶体管时代
  • 第三代计算机(1965-1970) 集成电路时代
  • 第四代计算机(1971以后) 大规模集成电路时代

我们先来说计算机的硬件,计算机发展到今天实际上历史也是比较悠久了,在1946年诞生了第一台计算机,这是正式的,如果你要是广义的说,那这个历史就多了,如果你这样广义的说我们中国的算盘算不算计算机呢,它也能做一些计算,不能说电子计算机,至少做个计算是可以的,我们正式的认为计算机比较严格的称呼应该是1946年诞生的,中间也是发生了很多代,最早的电子管、晶体管、集成电路等逐渐发展过来的。

1.1.1 世界上第一台电子计算机

在这里插入图片描述
图1-2 世界上第一台计算机ENIAC

1946年,世界上第一台计算机ENIAC(electronic numerical integrator and calculator 电子数字积分计算机)在美国宾州大学诞生,是美国奥伯丁武器试验场为了满足计算弹道需要而研制成的。使用了17468只电子管,占地170平方米,重达30吨,耗电174千瓦,耗资40多万美元。每秒可进行5000次加法或减法运算。

图1-2就是世界上的第一台计算机,这个计算机相当的庞大,这是1946年美国为了研究蛋刀的导弹计算,为了军事需要来开发出来的一个计算机系统,这个计算机系统非常庞大,大家可以看一下这一面墙都是计算机,占用了一个大房间,占地170平米,重量也非常重,30多吨,耗电也非常高,耗资是40万美金,那当然在1946年耗资40万美金那是相对贵了,但是它的计算速度每秒钟可以做5000次,这5000次对于我们人来讲速度还是很快的,人你觉得1秒钟你能做5000次计算吗,但是这个计算机它1秒钟可以做5000次计算,但是和目前咱们现有的计算机来比那它的性能就差多了,这是最早的世界上的第一台电脑,这台电脑开始了我们计算机真正的开天辟地的这样的一个新的现象就出现了,那后期的计算机都是在它的基础上不断的演进的,这里就是告诉大家实际上最早的一台计算机集成了人类最先进的思想,做出来的电脑就这么笨重,这么难看,但是为什么现在的计算机做的这么小巧,你看我们手机这么小,精巧,而且又漂亮,价格还不贵,那这就是我们人在不断的去把这个技术去修正,去迭代,然后完善做的今天的,所以这也是个普遍规律,我们做什么事上来不可能做的很好,一定是先把它完成,然后慢慢的去把它做一些优化,变得更好。

1.1.2 冯·诺依曼体系结构

在这里插入图片描述
图1-3 冯·诺依曼体系

1946年美籍匈牙利数学家John von Neumann(约翰·冯·诺依曼)于提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系结构冯·诺依曼理论的要点是:

  • 数字计算机的数制采用二进制,bit 位, byte 字节 1 byte =8 bit
  • 计算机应该按照程序顺序执行
  • 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成

接下来我们说一个非常关键的东西叫冯·诺依曼体系,这个冯·诺依曼体系是计算机领域里面非常重要的一个体系架构,这个架构是在1946年美籍匈牙利数学家叫冯·诺依曼先生提出的,它把我们现代计算机的体系做了一个限定,这个限定同时影响了我们这么多年,可以说到目前计算机仍然遵守冯·诺依曼体系,虽然是1946年定义的,但是仍然现在是遵守的,这个冯·诺依曼体系里面规定了一些特性,比如说第一在计算机内部处理数据是居于二进制处理,二进制大家如果在上学的时候接触过,我们平时生活中一般都用十进制,什么叫几进制,二进制什么意思,十进制什么意思,这个应该是上学的时候老师应该讲过的,二进制说的什么呢,就是逢二进一,就是到2了就要升位了,十进制就是逢十进一,同理比方说我们有八进制,就是逢八进一,如果是十六进制就是逢十六进一,所谓进一那就是升位了,原来是个位现在就变成了两位,比方说我们生活中十位,那0、1、2、3、4、5、6、7、8、9,到10的时候我们就升位,升位就要加上一个个位数往上升个位,变成10,同样的二进制,二进制就是逢二升位,第一个是0,第二个是1,然后当我们到2的时候要升位了,升位就变成了10,再往下就是11,但是11这个1再升位就变成2 ,2要升位,2升位就变成了100,这就是所谓的二进制逻辑,在我们计算机中内部它是基于二进制处理的,为什么用二进制处理呢,因为二进制它从个位数来讲它只有2中可能,要么是0,要么是1,从电路设计的角度来讲相对比较简单,所以早期的时候计算机基于电路设计方便把它设计成二进制,所以在计算机内部都是二进制的,但是对于我们人来讲我们看二进制,那如果是0101这门看的话,看起来就比较痛苦,计算机它处理0101是比较简单的,但是人要是看这个0101是不是看起来就很难看了,在计算机内部它运行的虽然是二进制,但是给人看的话它不是二进制,比方说给人看的话可以显示文字,还可以显示图形,还可以显示声音、视频等等,也就是给人看到的是丰富多彩的多媒体,但是在计算机内部它实际上本质上都是0和1,只不过在给人看的时候把这些0101的东西转化成了我们人类比较容易看得懂的东西,比方说把它转换成文字,转换成声音,变成视频,这都是计算机内部做了一个转换的,在真正内部处理的时候都是0101的,当然这里面还提到一个概念叫位,一位指的我们就是说这个0和1,一个位只能放0,要么放1,这是这一位,因为你再发那就升位了,变成两位了,所以这就是位,位叫bit,那么我们在计算机中经常会用到另外一个概念就是字节,我们叫byte,byte就是8个位,8个位什么意思呢,就是说我们有8个块,分开8个块,每个块里面只放一位,那这就是8位,8位我们称为一个字节,这是它的一个常见的称呼,对我们计算机内部虽然是二进制0101处理的,但是我们为了统一管理起来更加方便,往往的有时候说字节,因为位太小了,我们说字节可能稍微方便一定,这是它的一个基本概念,比方说我们在硬盘上看文件,看文件大小,指的就是字节,而不是位,位因为太小了,所以以位展示的话,将来就会显示的数字特别大,看起来不方便,目前我们在计算机内部看文件大小都是以字节为单位的,而不是以位为单位,但是有的时候会用位,比方说我们网络传输速度,它就是以位为单位的,比方说现在我这个网卡,我这个网卡实际上看到的这个地方有一个单位,它这显示的网卡是什么网卡,显示的是Gbps,这个Gbps说的是每秒钟传递多少位,一般看到小b就应该指的是位,一般大B表示字节,但是我们去看一个磁盘文件,当我们去观察一个文件的大小,这个大小就是以字节为单位,所以这个是不太一样的,就是看场景,这是第一个问题;

第二个问题就是计算机内部是按照程序的一定的逻辑次序来执行的,那计算机运行的时候它需要在里面安装软件的,这个软件最终表现一个一个的程序运行,你像咱们手机上大家装了很多APP,比方说装了微信,装了支付宝,这些实际上都是应用程序,那么它们在运行的时候是通过这个软件内部的逻辑来一步一步在执行的;

另外还有一个关键点就是计算机它的组成是由5个核心部件组合而成的,这5个核心部件分别叫什么呢,叫运算器、控制器、存储器、输入设备和输出设备,这5个组件实际上大家并不是很陌生,运算器是干嘛的呢,运算器最简单了,你像计算机最基本的功能是什么,早期计算机设计的时候它目标是什么,第一台计算机它实际上是干嘛的,做弹道导弹计算的,所以这个运算器最核功能就是做加减乘除的数据运算,当然还可以做一些别的运算,比方说逻辑上的处理,逻辑上的与或非什么的都可以的,运算器就是做计算的,第二个叫存储器,存储器就是我们要把处理的数据放到存储器上,将来利用计算器把这些存储区里的数据拿出来进行计算,你这个数据要存到一个地方,存这个存储器的时候把数据拿出来做运算,这个存储器又分成主存储器和辅助存储器,主存储器指的什么意思,主存储器通俗的就是我们说的内存,而辅助存储器通常指的就是硬盘,比如说外部存储一般来讲主要是硬盘,当然你要说还有没有别的,比方说还有移动硬盘,还有U盘、光盘这也都算,不过主要是硬盘,硬盘就是典型的辅助存储器,而内存就是主存储器,这些都可以存放数据,将来我们存数据存到里面,将来可以利用运算器对它们进行加工处理,当然这些数据放到存储器里面它是怎么来的呢,是不是需要有输入设备把外界的信息输入到存储器里面去,输入设备比较典型的就是键盘、鼠标,包括一些扫描仪,麦克风也是一个输入设备,把说的话传到计算机里面,然后再传给大家,这不就是一个输入设备吗,当然有输入是不是就有输出设备,大家想想什么算输出设备,计算机把这个数据做完处理完了以后,最终是不是应该要把一个结果交给用户,那这个交给用户靠什么交,那最典型的输出设备是什么,就是电脑显示器,把这个屏幕展示出来,你看我刚才画图这个写了一些东西,那这个不是在屏幕上显示的吗,大家上课看视频不都是靠屏幕的吗,这个屏幕显示器就是一个典型的输出设备,还有打印机、喇叭等这些都算输出设备,现在我们讲了4个设备了,比方说运算器、存储器、输入和输出设备,这些设备互相连起来彼此之间得通讯,我到底这次我要动用输出设备还是输入设备,还是把信息存到存储器里面,还是做一下运算,去做运算的话第一步做什么,第二步做什么,到底先执行谁后执行谁,那这得由谁指挥,由另外一个叫控制器的指挥,控制器负责控制我们这几个组件的互相的一个协调,你可以认为控制器就相当于一个指挥,这是大领导负责指挥的,指挥运算器、存储器、输入设备、输出设备干活,协调它们的工作,这就叫控制器,控制器和运算器这两个东西实际上我们平常在计算机中它们是由一个硬件来完成的,我们虽然逻辑上把它分成了五个组件,但是在计算机内部对应的这些硬件设备实际上它并不是一一对应关系的,运算器和控制器是由CPU来提供的,存储区又分成了主存储器和辅助存储器,主存储器就是内存,辅助存储器就是硬盘,所以它实际上是有分工的,这就是我们所谓的一个冯·诺依曼体系的概念,这里面有一个非常重要的一个知识点就是二进制和十进制的转换问题。

在这里插入图片描述
​图1-4 John von Neumann(约翰·冯·诺依曼)

图1-4就是大名鼎鼎的冯·诺依曼先生。

图1-4就是大名鼎鼎的冯·诺依曼先生。约翰·冯·诺伊曼 - 维基百科:https://zh.wikipedia.org/wiki/约翰·冯·诺伊曼,前面是维基百科对冯·诺依曼的详细介绍。

在这里插入图片描述
图1-5 早期计算机系统的输入设备:穿孔纸带

早期的时候我们在计算机里面录入信息,比方说我们要把信息输给计算机进行处理,以前是没有键盘的,键盘是后来才有的,以前都是靠纸带,这个纸带里面有好多小孔,小孔这什么意思呢,实际上这就表示0和1,比方说有孔的就是1,没孔的就是0,所以大家可以想一想当年那个写程序的人,是不是很厉害,当年写代码的时候就打孔,大家想想你作为一个现代的人类来讲,你看这个打孔这些密密麻麻的东西,你能知道是啥意思吗,是不是看不明白,这根本就看不懂是什么东西,这跟天书似的,事实上就跟我们现在一样,我们现在看这个东西是天书一样,但是你要精通了一些它的这个规律,比方说0101代表什么,1010代表什么,你实际上是可以看懂的,实际上就是术业有专攻,你只要懂了你就不觉得看不懂了,等你真的学会了,你也就不觉得什么了。

1.1.2.1 二进制和其它进制介绍

基于电路设计的复杂性和成本考虑,对于当前计算机来讲,是基于二进制来处理数据的(未来或许不是这样,如量子计算机)。比如可以用高低电平,磁极的正反,光照的有无等分别表示1和0,相对其它进制更容易实现,成本也更低。

进制数值表示英文简写特性
二进制0、1BinaryBIN或B逢二进一
八进制0、1、2、3、 4、5、6、7OctalOCT或O逢八进一
十进制0、1、2、3、4、5、6、7、8、9DecimalDEC或D逢十进一
十六进制0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、FHexadecimalHEX或H逢十六进一

表1-1 常见进制数值表示和特性

那么什么是二进制呢?二进制英文称为binary,但平时生活中我们更多的习惯使用十进制,比如我们表示0、1、2,直到9,共十个数字,表示个位数。当想表示十时,就是向前(高位)进一位,变成10,即升了一位。所以所谓十进制即逢十进位。

同理二进制即个位数只有两种值:0和1,当表示二这个数值时,二进制就需要进位,变成10,即逢二就要进位。所以尤其在计算机技术资料中,我们看到10时,要提前说明是几进制,才能确定表达的最终结果。当然有时也会使用其它进制,如八进制(Octal,缩写OCT或O),十六进制(Hexadecimal,缩写HEX或H)。

八进制即逢八进位,个位数有0、1、2、3、4、5、6、7,八个数字,当想表示十进制的八时,就需要进位,变成10了。

同样的十六进制,个位数有0-9,分别表示零到九,但十以后的数值如何表示呢?答案是字母A、B、C、D、E、F来表示十到十五。当然要表示十六,逢十六进一,即升位了,变成10,即十六进制的十六。

1.1.2.2 常用进制转换

在计算机中,二进制是比较常用的,但生活中十进制用的更为普遍。所以经常需要我们做二进制和十进制如何相互转换,那如何实现呢?

因为二进制表示值时,会显示的位比较多,所以我们一般只需要了解最多八个二进制和十进制的相互转换即可。

为了方便转换,可以记住表1-2 常见二进制和十进制对应关系表中对于的数字,可以加快转换效率。

公式十进制二进制
2^011
2^1210
2^24100
2^381000
2^41610000
2^532100000
2^6641000000
2^712810000000
2^8256100000000
2^95121000000000
2^10102410000000000
2^112048100000000000
2^1240961000000000000

表1-2 常见二进制和十进制对应关系表

  1. 十进制转换成二进制,有两种方法。

    方法1,是除法实现,也是最传统的方法。

    范例1:将十进制的7转换成二进制
    在这里插入图片描述
    图1-6 用除法将十进制的7转换成二进制

我们转换的时候有一个大学里面老师也教过的最简单的写法就是除法,把十进制转换成二进制最简单的写法就是除法,比方说我们说一个简单的数字,比方说7,7是个十进制,我现在要把它转换成二进制,大学里面老师教就是除法,7除2商是3,但是它除不尽有余数1,然后再除2商是1,余数还是1,当然1再除2没法除了,所以这就除到底了,那么最终结果倒着念是111。

范例2:将十进制的172转换成二进制
在这里插入图片描述
图1-7 用除法将十进制的172转换成二进制

我们换一个稍微复杂的172,172除2是86,没有余数,就是0,86除2是43余数为0,43除2是21余数1,21除2是10余数1,10除2是5余数0,5除2是2余数1,2除2是1余数0,最终结果从下往上就是10101100,但这个除法我们平时在计算机里面不太常用,因为算起来太麻烦,容易算错了。

方法2,用减法实现,也是推荐的方法,不过需要记忆一些常见的数字的对应关系,如表1-2常见二进制和十进制对应关系表。

范例3:将十进制的172转换成二进制
在这里插入图片描述
图1-8 用减法将十进制的172转换成二进制

计算机二进制它其实就是计算机2的几次方,我们把这几个数字记下来就行,2的0次方就是1,2的2次方就是2,2的3次方是8,一直到2的12次方是4096,现在我们要把172转换成二进制怎么转,你可以用减法,172哪个是比它近又稍微偏小的数字,就是128,而128这个数字是2的7次方,而2的7次方它对应的二进制就是10000000,172减128就是44,44离的最近的就是32,32的二进制是100000,44减32就是12,12里的最近的是8,8的二进制是1000,12减8就是4,4的二进制是100,把得到的二进制全加起来,得到的就是10101100。

  1. 二进制转换成十进制,可以用以下方式:

    范例4:将二进制10101111转换成十进制
    在这里插入图片描述
    图1-9 将二进制10101111转换成十进制

    把二进制10101111转换成十进制,从前往后是127+0*26+125+0*24+123+1*22+121+1*20,然后转成十进制相加就是128+0+32 +0+8+4+2+1,这些相加结果就是十进制的175。

范例5:使用linux命令bc进行十进制和二进制的转换

[root@rocky9 ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
#默认是十进制,要转换成二进制输入obase=2,o就是output输出的意思,output base=2就是输出的时候是基于二进制的,简写obase=2就是输出的时候是基于二进制的,obase=2输完回车,意思是等你输入十进制,输出的结果是二进制。
obase=2
# 输入十进制168。
168
# 得出结果如下。
10101000
# quit退出bc命令。
quit

[root@rocky9 ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
# ibase=2是输入二进制得出十进制。
ibase=2
# 输入二进制1010。
1010
# 得出十进制的10。
10
quit

十六进制数就是逢十六进一,这时候不到十六之前都是个位数,0、1、2、3、4、5、6、7、8、9能表达十个数字,但是十咋办,a表示十,b表示十一,c表示十二,d表示十三,e表示十四,f表示十五,在往上升位就变成10,十六进制我们在工作中也会经常用;八进制在因为比较简单,八进制偶尔会用到,尤其我们涉及到权限那块会用,这个知道就行了。

1.1.2.3 常见单位
  • 10的36次方 X
  • 10的33次方 C
  • 10的30次方 D
  • 10的27次方 N
  • 10的24次方 B
  • 10的21次方 Y
  • 10的18次方 E
  • 10的15次方 P
  • 10的12次方 T 二进制 2^40
  • 10的 9次方 G 二进制 2^30
  • 10的 6次方 M 二进制 2^20
  • 10的 3次方 K 二进制 2^10=1024
  • 10的 2次方 百
  • 10的 1次方 十
  • 10的-1次方 分 d
  • 10的-2次方 厘 c
  • 10的-3次方 m 毫秒
  • 10的-6次方 μ 微秒
  • 10的-9次方 n 纳秒
  • 10的-12次方 p
  • 10的-15次方 f
  • 10的-18次方 a

在计算机中经常用来表示数据的大小和数量,而使用bit(位)和byte(字节)太小了。就像生活中只有个位数是无法很好的表达更多的数据一样。于是对应的需要有更大的计量单位。

另外在相同的场景下,相同的单位所使用的进制是不同的。硬盘制造商在标注硬盘容量时采用十进制,比如1TB,即1012个字节,而操作系统中在识别容量时,却是以二进制为单位,比如同样1TB的文件,即240个字节,所以如果购买厂商标称为1T的硬盘,而在操作系统查看时只能看到1012/230≈931G大小。

具体单位如表1-3 常见单位所示。

单位简写二进制二进制转换十进制十进制转换
KiloK2^10102410^31000
MegaM2^201024K10^61000K
GigaG2^301024M10^91000M
TeraT2^401024G10^121000G
PetaP2^501024T10^151000T
ExaE2^601024P10^181000P
ZettaZ2^701024E10^211000E
YottaY2^801024Z10^241000Z
BrontoB2^901024Y10^271000Y
NonaN2^1001024B10^301000B
DoggaD2^1101024N10^331000N
CorydonC2^1201024D10^361000D
XeroX2^1301024C10^391000C

表1-3 常见单位

范例6:确定当前系统是32位或64位

我们的操作系统是32位还是64位,现在基本上已经淘汰了32位了,32位什么意思,32位就是最多一次性的支持32位的数据处理,内存也只能支持32位,2的32次方是多少,实际上就是4G,如果你的的操作系统是32位的,也就是最多支持4G的内存,超过4G的内存用的都是64位的操作系统。

# getconf LONG_BIT查看当前的linux系统是多少位的
[root@rocky9 ~]# getconf LONG_BIT
64

[root@rhel5 ~]# getconf LONG_BIT
32

1.1.3 摩尔定律

由英特尔(Intel)创始人之一Gordon Moore(戈登·摩尔)于1965年提出,当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。

戈登·摩尔_百度百科:https://baike.baidu.com/item/戈登·摩尔/1085446,前面是百度百科对戈登·摩尔的详细介绍。

在这里插入图片描述
图1-10 摩尔定律

摩尔定律是和硬件的发展规律有关,它是在1965年英特尔公司的创始人叫戈登·摩尔提出的,他说在价格不变的情况下,在集成电路上可容纳的元器件的数量,大概在每18个月到24个月,就是将近2年的时间会增加一倍,并且性能也会提升一倍,这个规则从1965年提出之后,到现在这个规则一直是相对比较准确的,他的性能确实是每个2年就会变一倍,所以我们的计算机速度是非常快的,那快到什么程度呢,快到计算机的性能有点过剩了,家里的电脑也好,还是单位的服务器也好,我们发展好多时候它资源有点太浪费,CPU利用率特别低,你像好多企业里面买了一个价格比较昂贵的服务器,结果长期统计下来CPU利用率只有10%多,20%多都算是好的了,很多情况下百分之几的利用率,这时候大家想过没有,你买了这么好的服务器,这么好的硬件,结果长期利用率这么低下,是不是很大的一个资源浪费,因此目前我们为什么要大力发展云的技术,这就是为什么要实现虚拟化云的技术,实现虚拟化云的技术可以实现资源的动态分配,将来我们需要的时候可以把这些计算机开起来,不需要可以动态的把它关掉,从而可以大大的节约成本。

1.1.4 计算机分类

1.1.4.1 按规模划分
  1. 超级计算机:Super Computer,又称巨型计算机,应用于国防尖端技术和现代科学计算中。巨型机的运算速度可达每秒百万亿次以上, “天河一号”为我国首台千万亿次超级计算机
  2. 大型计算机:具有较高的运算速度,每秒可以执行几千万条指令,而且有较大的存储空间。往往用于科学计算、数据处理或作为网络服务器使用,如:IBM z13 mainframe
  3. 小型计算机:指采用精简指令集处理器,性能和价格介于PC服务器和大型主机之间的一种高性能64 位计算机。在中国,小型机习惯上用来指UNIX服务器
  4. 微型计算机:指采用 X86 CPU 架构的PC服务器,中央处理器(CPU)采用微处理器芯片,体积小巧轻便,广泛用于商业、服务业、工厂的自动控制、办公自动化以及大众化的信息处理,互联网公司发起去IOE运动,代替小型机

计算机按规模划分又分为超级计算机,超级计算机离我们太远,这些都是国家级的项目,比方说天河一号、曙光等等,这些都是国家级的一些特定场合用的,比方说做天气预报的计算,或者做病毒分析,这个是用在特定场景下的,而我们一般的公司用不到;还有就是大型计算机,这个也是价格非常贵的,这个属于商业产品,这个商业产品需要花比较高的成本才能买到,世界上目前大型计算机生产厂商就只有IBM了,别的公司生产不了,或者说竞争力不行,IBM公司的这个大型计算机它有一个z13的叫主机这种设备,这个价格也是比较贵的,当然这个设备相对来讲也是比较庞大的占地的,相当于两扇门那么大,就是一个大柜子,一个柜子里面放了大型计算机,这个价格都是上亿的,一年的服务费恨不得都上千万,它的应用圈子比较小,它主要用在特定的比如像银行那种机构,比较少见,这种我们平常见不到,并不通用;早期的时候有小型机,小型机它的性能也不错,可以满足一般的商业机构的使用,比方说电信,传统的银行,早期的互联网公司也用过,但是由于这个价格也非常贵,动不动就是几十万上百万,尤其是互联网的大潮来临之后,有大量的用户都要访问,那就需要购置大量的小型计算机,每个机器都特别贵,而且相对来讲它的很多硬件包括它的软件都是商业软件,你都要统一的去买,比方说你买了IBM的小型机,你上面跑的系统可能都是IBM的这个系统,包括它的软件也都是IBM的系统软件,这个的话整个商业系统下来是非常贵的,不利于大规模的采购,你像互联网公司它的业务都非常庞大,来自的用户都是全球用户,用户量这么大,这个就需要买大量的服务器,这个成本对于一个企业来讲负担是非常重的,所以目前来讲咱们已经抛弃了这种小型机,而采用了微型计算机,也就是PC服务器,PC服务器目前来讲是比较主流的,而且它因为摩尔定律的原因,早期的时候性能跟小型机比性能差了一些,但是随着这么多年的摩尔定律每两年就会翻一番,所以到现在来讲PC服务器的性能也非常好了,而且价格也便宜,甚至几千块钱就可以买一个服务器,微型服务器是目前的主流,也就是我们说的PC服务器,在互联网公司同样还遇到了一些其它问题,除了硬件上,还有一些软件上的问题,比方说早期的时候互联网公司会采用一些商业软件,比方说数据库Oracle,这个价格非常贵,所以现在互联网公司大部分都开始采用一些开源的解决方案,去IOE,什么叫去IOE,I就是IBM的小型机,O是Orecle的数据库,E是EMC的存储,这都是商业产品,价格比较贵,互联网公司为了节约成本,就不用这些商业解决方案了,而采用了所谓的一些开源解决方案,比方说用一些开源的数据库Mysql,用开源的一些存储的解决方案,比方说CEPH,比方说用PC服务器,甚至定制PC服务器的架构,你像大公司有些东西它的硬件都是定制的,谷歌公司它那个服务器都不是像我们普通的那种服务器,它都是放在集装箱里面,各种各样的这种定制出来的这种服务器,所以这个都是不一样的架构了,颠覆了以前早期的这种商业的各种产品,这样的话可以大幅的减轻互联网公司的一些负担,它的成本。
在这里插入图片描述
图1-11 服务架构图

服务器它可以提供不同软件的服务,比方有的是做Web服务,这个Web服务比较产假的就是我们的网站,比方说我们现在去访问一个博客,博客实际上背后跑路一个Linux系统,上面装了一个Nginx的这样一个软件,这个Nginx软件实际上就是一个Web服务,当然背后还有数据库之类的,还有很多其它的服务器,比如数据库服务器,文件服务器等,图1-11 服务架构图实际上就是我们各种服务器,有调度服务器,有数据库服务器,有DNS服务器,有NTP服务器,有Harbor服务器,有k8s服务器,有管理节点服务器,有各种缓存服务器。

1.1.4.3 服务器按外形分类

PC 服务器常见的三种外型:

  • 塔式服务器
  • 刀片式服务器
  • 机架式服务器

塔式Tower服务器
在这里插入图片描述
图1-12 塔式服务器

早期的服务器形式,目前较少使用。

外形以及结构和平时使用的立式PC差不多。

机箱空间大,主板扩展性较强,插槽较多。

预留了足够的内部空间,以便日后进行硬盘和电源的冗余扩展,设计一般都考虑降噪。

在生产中我们接触到的各种服务器目前来讲都是PC服务器,这个PC服务器它的常见的形状可以分成3种,第一种是塔式,塔式的这个形状就跟我们家用电脑很像,只不过它的大小更大一些,这种因为它的大小,横宽高,包括它的一些尺寸并不标准,并不规范,或者说每个机器买回来大小都不一样,这样它不太适合大规模的安装部署,你要大规模的安装部署在机房里摆放的话,如果尺寸不一样,那没有很好的合理利用空间,所以我们一般来讲都用下面的其它的有标准尺寸的这种服务器。

刀片式Blade服务器
在这里插入图片描述
​图1-13 刀片式服务器

在标准高度的机架式机箱内可插装多个卡式的服务器单元,实现高可用和高密度。

更高的密度,集中管理,高性能,灵活扩展,按需配置。

可以使用系统软件将这些母板集合成一个服务器集群。在集群模式下,所有的母板可以连接起来提供高速的网络环境,并同时共享资源,为相同的用户群服务。

图1-13是刀片式的,刀片式的服务器就是把这个服务器一个铁壳子,这个铁壳子里面可以塞很多的刀片,这一个刀片就内置了CPU、内存、硬盘,大家看图1-13虽然看的不是很清楚,但是大家可以看到这一条实际上就是一个服务器,这里面塞了很多条,那也就是说在一个很狭窄的空间中放了很多个不同的计算机,那这个计算机塞到这里面当然密度非常大,当然也比较沉,它的这个所有的计算机都是用刀片的那种非常狭窄的,非常紧密的方式放在一起,那这种方式就是在一个比较节约空间的地方我们同时放了这么多机器,这个可以带来的好处就是我可以把很多计算机做成一个集合里面,我们叫集群,把多个计算机组合在一起形成一个集群,共同对外提供一些高性能的计算服务,这个用的场景也相对少一些。

机架式Rack服务器
在这里插入图片描述
图1-14 机架式服务器

在这里插入图片描述
​图1-15 42U容量机柜

  • 按照统一标准设计,配合机柜统一使用,便于统计管理,高密度,节省空间,常用U为单位,1U=1.75英寸=44.45毫米,机箱尺寸比较小巧,在机柜中可以同时放置多台服务器。
  • 机架式服务器的宽度为19英寸(48.26cm),厚度通常有1U,2U,3U,4U,5U,7U几种标准的服务器。
  • 机柜的尺寸也是采用通用的工业标准,如:宽度600mm,深度1000mm,高2000mm(42U)。
  • 现阶段是最主流的的服务器。

我们目前来讲服务器更多的企业里面用的是机架式服务器,机架式的服务器它的尺寸是标准的,这里面有一个概念叫U的概念,1U是多大呢,U是有标准的尺寸,是44.45毫米,大概也就是不到5厘米,U指的是服务器的厚度,2U大概就是10毫米,还有4U,一般来讲企业里面通常用2U、4U的居多,当然越厚里面装的东西就越多,装的东西越多硬件配置它要更加昂贵一些,当然这个U不仅是厚度问题,它实际上这个宽度也是有标准尺寸的,因为它的宽度和长度都有尺寸,所以我们将来可以按照一定的标准尺寸把它们定制出一个机架来,图1-14右面的就是机架,这个机架大概的高度是2米左右,宽度比机架服务器宽一些,将来把机架服务器安装导轨就像抽屉一样给它塞进去,这样的话我们一个服务器放进去,也可以把别的服务器以同样的方法放进去,就像一层层的抽屉一样放进去,这样的话一个机架上就可以放很多个服务器,通常来讲一个机架上放的服务器和你是几U的服务器有关,如果是1U的当然放的更多一些,4U的就放的少一些,一般来讲2U的,2U的我们放10来个服务器,这是比较常见的,因为我们也不可能把它塞满,如果塞满的话包括电力供给,以及一些通风都会有问题,所以我们中间会预留一定的空间,一般我们这个上面存放的服务器的数量也不是塞满的,图1-15就是机架,这个机架式42U的,42U宽度600毫米,高度深度一米,高度2米,它是有标准尺寸的,这个标准尺寸适用于放我们的网络设备、服务器这些都可以按照这个尺寸都可以往里放,这是我们目前用的一个比较主流的形式,一个机架比如说上面放15个服务器,这个机架下面还有小滚轮,这个滚轮就意味着你还可以把这个机架推来推去的,比方说放在一个机房里面,我将来还可以把整个机架推走,我们将来在一个机房里面可以摆很多排的这种机柜,这样的话一个机房里面就可以密密麻麻的放很多个服务器,当然一些公司可能没有钱去建设这种机房,通常来讲更多的公司都是租用机房,比方说北京有一些专门的IDC机房,比方说世纪互联这样的公司,人家的机房都已经建设好了,然后所有的网络设备、线路都给你部好了,你作为一个公司来讲你想使用一些服务器的存储,包括一些计算,还有像网络,你不用去单独建设了,你可以把服务器买回来,买回来以后租用人家机房的机柜,包括它的网络设备你都可以租用,带宽你去花钱买就行了,这样的话我们就不需要从头到尾去盖楼,事实上你要真的想去盖楼、盖机房,那中间的成本是非常高昂的,而且你还需要有一定的资质,所以这个并不是说有钱你说盖就能盖的了的,一些中小型公司一般都是租用IDC机房,除非特别大的公司它有自己的专有机房,你像阿里、腾讯这些级别的公司,它在全国的比较能够充分利用能源的地方,你像张家口它的风力非常大,它可以利用风来进行散热,可以节能,这些是有些公司它有一些雄厚的实力,可以来自建机房,大部分公司租用空间就好了,当然小公司来讲,再小的公司可能租用机房,买服务器的成本也比较高,比如是初创公司,它买一些服务器堆在这,成本也比较高,而且我们这个项目希望快速上马,你把这个项目要拿下,你需要在短期时间上马,你要买服务器,中间要拉网线,还要去部署,装系统等,这中间花的时间是非常漫长的,就会影响业务的发展,所以好多初创的企业,为了提高效率,当然也可以在短期之内在服务器不多的情况下节约成本,它们一般都是用云的环境,比方说用阿里云、腾讯云、电信云等等,这些更加方便,比如阿里云,你可以直接在网站选择配置就好,它给你系统都装好了,你只需要在上面部署程序就可以,这就是未来的一个主流的发展趋势,未来大家对硬件的东西可以不像以前那么关注了。

1.1.5 服务器硬件组成

在这里插入图片描述
​图1-16 服务器组成

对于服务器来讲本身它也是一个计算机,只不过它的配置和我们家用电脑有些地方是不太一样的,但是那些硬件配置的组成都是类似的,比方说有CPU、内存、硬盘、电源、风扇、网卡等都是一样的,图1-16就是一个服务器的配置图,这个服务器的配置图大家可以看这个样子,这个就是机架式服务器,机架式的服务器它上面可以塞很多的硬盘,硬盘直接裸露在机箱外边,这个便利我们将来更新硬盘,因为服务器运行都是24小时的,所以硬盘的损坏比家用电脑要高。

服务器配置示例(参考价格47588元)
在这里插入图片描述
图1-17 服务器配置

图1-17是一个服务器的配置,主板的芯片组是C622,CPU是2-4颗,支持DDR4 RED ECC内存,内存插槽32个,这个是华为的一个服务器配置,大概价格是5万左右。

1.1.5.1 服务器硬件—CPU

在这里插入图片描述
图1-18 CPU品牌

服务器上面的CPU一般来讲主流的都是Intel,虽然也有别的CPU,比方说AMD的CPU,甚至有一些ARM的CPU。

CPU:Central Processing Unit,即中央处理器。由控制器和运算器构成,是整个计算机系统中最重要的部分。

CPU 架构:

  • CISC:Complex Instruction Set Computer,复杂指令集
  • RISC:Reduced Instruction Set Computer,精减指令集

精减指令集和复杂指令集:

早期计算机一直沿用CISC指令集方式。它的设计目的是要用最少的机器语言指令来完成所需的计算任务。在CISC处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。CISC的指令系统庞大,功能复杂,指令格式、寻址方式多;执行速度慢;难以优化编译,编译程序复杂; 无法并行;无法
兼容。大约20%的指令占据了80%的处理器时间。其余80%指令使用频度只占20%的处理机运行时间。由此CISC生产厂商长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器,同时.复杂的指令系统必然带来结构的复杂性.这不但增加了设计的时间与成本还容易造成设计失误。目前个人计算机x86体系 CPU 厂商一直在走CISC的发展道路,包括Intel、AMD、VIA(威盛)等。之所以称为X86,是因为最早Intel的CPU型号是8086,后来出现了80286,80386,80486,80586等,所以之后的Intel和其兼容的厂商的生产CPU都称为X86 CPU。而后CPU从最初的8位,16位,32位,发展到目前主流的64位。为了区别非64位的CPU,一般将64位的CPU称为X86-64。由于最早在1999由AMD设计公开 64 位技术,称为 x86-64,后来改名为 AMD64,不同厂商称呼有所不同,所以AMD 64,x86-64,x64都指的是64位的基于X86的CPU。

因为CISC存在上面的问题,于是有了RISC,它是图灵奖得主John L. Hennessy和David A. Patterson对行业的重大贡献,由加州大学伯克利分校于1980年发布,其基本思想是尽量简化计算机指令功能,只保留那些功能简单、能在一个节拍内执行完成的指令,使其实现更容易,指令并行执行程度更好,此称为精简指令集RISC(Reduced Instruction Set Computing)。精减指令集其风格是强调计算机结构的简单性和高效性,其特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,支持并行,并且采用流水线技术。当需要完成复杂任务时,就由多个指令组合来实现。常用的精简指令集微处理器包括:ARM、RISC-V、MIPS、PA-RISC、PowerArchitecture(包括PowerPC)、DECAlpha和SPARC等。重点提一下ARM,全世界超过95%的智能手机和平板电脑都采用ARM架构,当前最先进的华为的海思麒麟990CPU,高通的骁龙865 CPU,苹果的A13 CPU也都属于ARM架构。ARM可以说是目前世界上使用最广泛的CPU架构了。

CPU类型

  • X86:CISC
  • ARM:Acorn RISC Machine 高通,华为麒麟
  • RISC-V 阿里玄铁910
  • MIPS 龙芯
  • Power:IBM
  • Powerpc:apple,ibm,moto
  • Ultrasparc :Sun
  • Alpha:HP
  • 安腾:compaq

CPU目前可以分成两种指令集,一种是CISC,一种是RISC,CISC叫复杂指令集,而RISC是精减指令集,Intel就属于复杂指令集,它是把各种功能都用指令,每个指令都实现了不同的功能,它的指令特别多,精减指令集它只提供了一些常见的功能,每个指令只完成了常见的功能,那些不常用的它不提供指令,不提供指令那怎么办,要像实现复杂任务,它就把多个精减的常用的指令给它组合起来,来实现复杂功能,相对来讲精减指令集它设计上更加简单,它的指令大小都是相似的、相同的,这样的话它的设计相对比较简单一些,复杂指令集更为复杂,它的稳定性各方面可能不如精减指令集,目前来讲Intel CPU用的就是复杂指令集,除此之外的基本上都是精减指令集,你像ARM CPU,手机上的芯片主要用的都是ARM芯片,ARM芯片目前比较主流的你像高通的CPU,华为的麒麟,包括还有苹果的芯片,实际上都是基于ARM这种架构的,现在还有一个叫RISC-V的架构,这是一个比较特殊的CPU的流派,它是开源的,不像ARM是一个商业公司的一个型号,华为用ARM架构是要给它付费的,阿里有一个芯片叫玄铁910就用的就是RISC-V这种架构,当然还有一些其它CPU相对就少见,有些以及慢慢的淘汰了,你像早期的Sun公司用过Ultrasparc这种CPU架构,包括HP的Alpha,这些CPU现在都已经看不到了。

按照CPU体系架构来区分,服务器主要分为两类:

  • x86服务器:采用CISC(复杂指令集)架构服务器,即通常所讲的PC服务器,它是基于PC机体系结构,使用Intel或其它兼容x86指令集的处理器芯片的服务器。目前主要为intel的Xeon E3,E5,E7系列,价格相对便宜、兼容性好、稳定性较差、安全性不算太高。
  • 非x86服务器:采用RISC(精简指令集)或EPIC(并行指令代码) 处理器,主要采用UNIX和其它专用操作系统的服务器,CPU主要有IBM的Power PC、MIPS的MIPS、SUN的Sparc、Compaq的Alpha、HP的PA-RISC、Intel研发的EPIC安腾处理器等。这种服务器价格昂贵,体系封闭,但是稳定性好,性能强,主要用在金融、电信等大型企业的核心系统。

微处理器

1971年11月15日,Intel公司的工程师特德·霍夫发明了世界上第一个微处理器—4004,这款4位微处理器虽然只有45条指令,而且每秒只能执行5万条指令。性能很低,但它的集成度却要高很多,一块4004的重量还不到一盅司。

Intel从8086开始,就进入了我们常说的x86时代。而80386的诞生则标志着Intel正是进入了32位微处理器的时代。从80386到Pentium 4这个年代的CPU,就是传说中的IA-32时代。

x86-64( 又称x64,即英文词64-bit extended,64位拓展 的简写)是x86架构的64位拓展,向后兼容于16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩展给x86,称为“AMD64”。其后也为英特尔所采用,现时英特尔称之为“Intel 64”,在之前曾使用过“ClackamasTechnology” (CT)、“IA-32e”及“EM64T”。

CPU:Central Processing Unit,即中央处理器。由控制器和运算器构成,是整个计算机系统中最重要的部分

CPU 架构:

  • CISC:Complex Instruction Set Computer,复杂指令集
  • RISC:Reduced Instruction Set Computer,精减指令集

精减指令集和复杂指令集:

早期计算机一直沿用CISC指令集方式。它的设计目的是要用最少的机器语言指令来完成所需的计算任务。在CISC处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。CISC的指令系统庞大,功能复杂,指令格式、寻址方式多;执行速度慢;难以优化编译,编译程序复杂; 无法并行;无法
兼容。大约20%的指令占据了80%的处理器时间。其余80%指令使用频度只占20%的处理机运行时间。由此CISC生产厂商长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器,同时.复杂的指令系统必然带来结构的复杂性.这不但增加了设计的时间与成本还容易造成设计失误。目前个人计算机x86体系 CPU 厂商一直在走CISC的发展道路,包括Intel、AMD、VIA(威盛)等。之所以称为X86,是因为最早Intel的CPU型号是8086,后来出现了80286,80386,80486,80586等,所以之后的Intel和其兼容的厂商的生产CPU都称为X86 CPU。而后CPU从最初的8位,16位,32位,发展到目前主流的64位。为了区别非64位的CPU,一般将64位的CPU称为X86-64。由于最早在1999由AMD设计公开 64 位技术,称为 x86-64,后来改名为 AMD64,不同厂商称呼有所不同,所以AMD 64,x86-64,x64都指的是64位的基于X86的CPU。

因为CISC存在上面的问题,于是有了RISC,它是图灵奖得主John L. Hennessy和David A. Patterson对行业的重大贡献,由加州大学伯克利分校于1980年发布,其基本思想是尽量简化计算机指令功能,只保留那些功能简单、能在一个节拍内执行完成的指令,使其实现更容易,指令并行执行程度更好,此称为精简指令集RISC(Reduced Instruction Set Computing)。精减指令集其风格是强调计算机结构的简单性和高效性,其特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,支持并行,并且采用流水线技术。当需要完成复杂任务时,就由多个指令组合来实现。常用的精简指令集微处理器包括:ARM、RISC-V、MIPS、PA-RISC、PowerArchitecture(包括PowerPC)、DECAlpha和SPARC等。重点提一下ARM,全世界超过95%的智能手机和平板电脑都采用ARM架构,当前最先进的华为的海思麒麟990CPU,高通的骁龙865 CPU,苹果的A13 CPU也都属于ARM架构。ARM可以说是目前世界上使用最广泛的CPU架构了。

CPU类型

  • X86:CISC
  • ARM:Acorn RISC Machine 高通,华为麒麟
  • RISC-V 阿里玄铁910
  • MIPS 龙芯
  • Power:IBM
  • Powerpc:apple,ibm,moto
  • Ultrasparc :Sun
  • Alpha:HP
  • 安腾:compaq

按照CPU体系架构来区分,服务器主要分为两类:

  • x86服务器:采用CISC(复杂指令集)架构服务器,即通常所讲的PC服务器,它是基于PC机体系结构,使用Intel或其它兼容x86指令集的处理器芯片的服务器。目前主要为intel的Xeon E3,E5,E7系列,价格相对便宜、兼容性好、稳定性较差、安全性不算太高
  • 非x86服务器:采用RISC(精简指令集)或EPIC(并行指令代码) 处理器,主要采用UNIX和其它专用操作系统的服务器,CPU主要有IBM的Power PC、MIPS的MIPS、SUN的Sparc、Compaq的Alpha、HP的PA-RISC、Intel研发的EPIC安腾处理器等。这种服务器价格昂贵,体系封闭,但是稳定性好,性能强,主要用在金融、电信等大型企业的核心系统

微处理器

1971年11月15日,Intel公司的工程师特德·霍夫发明了世界上第一个微处理器—4004,这款4位微处理器虽然只有45条指令,而且每秒只能执行5万条指令。性能很低,但它的集成度却要高很多,一块4004的重量还不到一盅司

Intel从8086开始,就进入了我们常说的x86时代。而80386的诞生则标志着Intel正是进入了32位微处理器的时代。从80386到Pentium 4这个年代的CPU,就是传说中的IA-32时代

x86-64( 又称x64,即英文词64-bit extended,64位拓展 的简写)是x86架构的64位拓展,向后兼容于16位及32位的x86架构。x64于1999年由AMD设计,AMD首次公开64位集以扩展给x86,称为“AMD64”。其后也为英特尔所采用,现时英特尔称之为“Intel 64”,在之前曾使用过“ClackamasTechnology” (CT)、“IA-32e”及“EM64T”

在这里插入图片描述
图1-19 Intel公司的CPU发展历程

CPU主频:主频是CPU的时钟频率(CPU Clock Speed),是CPU运算时的工作的频率(1秒内发生的同步脉冲数)的简称。单位是Hz。一般说来,主频越高,CPU的速度越快,由于内部结构不同,并非所有的时钟频率相同的CPU的性能都一样。

外频:系统总线的工作频率, CPU与外部(主板芯片组)交换数据、指令的工作时钟频率。

倍频:倍频则是指CPU外频与主频相差的倍数。

三者关系是:主频=外频x倍频。

高速缓存(cache):高速交换的存储器。CPU缓存分为一级,二级,三级缓存,即L1,L2,L3。

内存总线速度(Memory-Bus Speed):一般等同于CPU的外频,指CPU与二级(L2)高速缓存和内存之间的通信速度。

地址总线宽度:决定了CPU可以访问的物理地址空间。

目前主流的都是intel CPU,它的性能里面有主频、外频和倍频,主频是我们平常比较关注的,CPU的频率越高计算速度越快,外频指的是系统总线的工作频率,它主要指的是内存的工作频率,内存的工作频率和CPU的工作频率之间是有巨大的差别的,中间有倍数的差,所以有一个倍频,倍频就是差的倍数,所以3者之间有个计算公式就是外频乘以倍频等于主频,硬件的东西了解一下就行。

范例6:用linux命令查看CPU详细信息

[root@rocky9 ~]# lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         45 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  2
  On-line CPU(s) list:   0,1
Vendor ID:               AuthenticAMD
  BIOS Vendor ID:        AuthenticAMD
  Model name:            AMD Ryzen 5 4600H with Radeon Graphics
    BIOS Model name:     AMD Ryzen 5 4600H with Radeon Graphics         
    CPU family:          23
    Model:               96
    Thread(s) per core:  1
    Core(s) per socket:  1
    Socket(s):           2
    Stepping:            1
    BogoMIPS:            5988.54
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse ss
                         e2 syscall nx mmxext pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpui
                         d extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes
                          xsave avx f16c rdrand hypervisor lahf_lm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw t
                         opoext ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xs
                         aveopt xsavec xgetbv1 xsaves clzero arat umip rdpid overflow_recov succor
Virtualization features: 
  Hypervisor vendor:     VMware
  Virtualization type:   full
Caches (sum of all):     
  L1d:                   64 KiB (2 instances) #一级缓存,d 数据缓存
  L1i:                   64 KiB (2 instances) #一级缓存,i 指令缓存
  L2:                    1 MiB (2 instances) #二级缓存
  L3:                    8 MiB (2 instances) #三级缓存
NUMA:                    
  NUMA node(s):          1
  NUMA node0 CPU(s):     0,1
Vulnerabilities:         
  Itlb multihit:         Not affected
  L1tf:                  Not affected
  Mds:                   Not affected
  Meltdown:              Not affected
  Mmio stale data:       Not affected
  Retbleed:              Mitigation; untrained return thunk; SMT disabled
  Spec store bypass:     Mitigation; Speculative Store Bypass disabled via prctl
  Spectre v1:            Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:            Mitigation; Retpolines, IBPB conditional, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected
  Srbds:                 Not affected
  Tsx async abort:       Not affected
1.1.5.2 服务器硬件—主板!

在这里插入图片描述
图1-20 服务器主板

主板mainboard,安装在机箱内,是计算机最基本的也是最重要的部件之一。

主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。

服务器主板跟我们家用电脑的主板是不太一样的,家用电脑的主板内存条通常只支持几条内存,台式机一般支持2-4根内存,笔记本电脑一般支持2根内存,你看图1-20 右边服务器主板支持16条内存。

1.1.5.3 服务器硬件—内存

在这里插入图片描述
​图1-21 内存

内存: 介于CPU 和外部存储之间,是CPU 对外部存储中程序与数据进行高速运算时存放程序指令、数据和中间结果的临时场所,它的物理实质就是一组具备数据输入输出和数据存储功能的高速集成电路内存是CPU能直接寻址的存储空间,由半导体器件制成。内存的特点是存取速度快计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

外存:硬盘,U盘,软盘,光盘。

内存和外存的区别:

  • 内存断电后数据丢失。
  • 外存断电后数据可以保存。

容量:即该内存的存储容量,单位一般为GB。

内存带宽:
内存带宽是指内存与北桥芯片之间的数据传输率,B byte 字节 b bit位。

单通道内存控制器一般都是64-bit的,8个二进制位相当于1个字节,换算成字节是64/8=8,再乘以内存的运行频率,如果是双通道内存就要再乘以2。

计算公式:

内存带宽=内存总线频率×数据总线位数/8

内存带宽它的计算公式是内存总线的频频乘以数据总线位数除8。

范例7:单通道和双通道内存带宽计算

#单通道DDR(Double Data Rate双倍速率)内存带宽计算
DDR5-7200:7200MHz*64bit/8=57600MB/S
#比方说我们有一个DDR-7200的一个内存条,7200指的是4000兆赫兹,现在都是64位,7200MHz乘以64bit,除8就把它变成字节,这样的话就可以算出内存的一个通讯速度,这个通讯速度可以达到57.6G。

DDR4-4000:4000MHz*64bit/8=32000MB/S
DDR4-3600:3600MHz*64bit/8=28800MB/S

#双通道:
DDR5-7200:7200MHz*64bit*2/8=115200MB/S
DDR4-4000:4000MHz*64bit*2/8=64000MB/S
1.1.5.4 服务器硬件—硬盘

在这里插入图片描述
图1-22 硬盘

图1-22左边是早期的硬盘,1956年的时候只有5MB,在2013年的时候都是多少TB了,硬盘的容量和速度比以前要大幅提升了。

常见的磁盘接口种类:

  • IDE:Integrated Drive Electronics,电子集成[驱动器,早期家用电脑常用接口。
  • SCSI:Small Computer System Interface,小型计算机系统接口,早期的服务器常用接口。
  • SATA:Serial ATA (Advanced Technology Attachment 高技术配置),家用电脑常用的接口。
  • SAS:Serial Attached SCSI,是目前服务器上主流的接口。
  • 光纤通道:Fiber Channel,高性能服务器上采用的接口。
  • M.2 :固态硬盘接口,性能更强。

硬盘接口早期都有IDE、SCSI现在已经不用了,现在笔记本上是SATA或M.2接口,服务器用的SAS接口,光纤通道的现在很少用了。

结构分类:

  • 机械硬盘HDD(Hard Disk Drive)
  • 固态硬盘SSD(Solid State Drives )

机械硬盘:
在这里插入图片描述
图1-23 机械硬盘

  • 存储介质(Media)——盘片
    • 盘片的基板是金属或玻璃材质制成,为达到高密度高稳定的质量,基板要求表面光滑平整,不可有任何暇疵。
  • 读写磁头(Read Write Head)——磁头
    • 磁头是硬盘读取数据的关键部件,它的主要作用就是将存储在硬盘盘片上的磁信息转化为电信号向外传输。
  • 马达( Spindle Motor & Voice Coil Motor )
    • 马达上装有一至多片盘片,以7200,10000,15000 RPM等定速旋转,为保持其平衡不可抖动,所以其质量要求严谨,不产生高温躁音。

机械硬盘基本参数:

  • 容量:容量是硬盘最主要的参数。单位有MB、GB、TB,常见容量:500GB,1T,2T,3T,4T,6T。
  • 转速:转速是指硬盘盘片每分钟转动的圈数,单位为rpm。常见:7200rpm,10000rpm,15000rpm。
  • 传输速率:传输速率(Data Transfer Rate) 。硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s),常见:6Gb/s,12Gb/s。
  • 缓存:硬盘缓存的目的是为了解决系统前后级读写速度不匹配的问题,以提高硬盘的读写速度。
  • 磁盘尺寸:3.5”/2.5”/1.8”。
  • 是否支持热插拔。

SSD硬盘:
在这里插入图片描述
图1-24 SSD硬盘

SSD,即固态硬盘,泛指使用NAND Flash组成的固态硬盘。其特别之处在于没有机械结构,以区块写入和抹除的方式作读写的功能,因此在读写的效率上,非常依赖读写技术上的设计SSD读写存取速度快,性能稳定,防震性高,发热低,耐低温,电耗低,无噪音。因为没有机械部分,所以长时间使用也出现故障几率也较小。缺点:价格高,容量小,相对普通机械硬盘性价比低。

硬盘现在分为机械硬盘和固态硬盘,机械硬盘它里面都是机械设备,固态硬盘里面都是芯片,芯片它的速度比机械硬盘通常要快一些,但是机械硬盘有一个好处就是如果这个硬盘坏了的话,它修复的可能性是比较大的,硬盘如果采用的是固态硬盘它里面是芯片坏了就很难修复了。

1.1.5.5 服务器硬件—网卡

在这里插入图片描述
图1-25 服务器网卡

服务器都在主板上集成了网卡,传输速率为1Gbps,即千兆网卡。

特殊应用需要高端网卡,如光纤网卡,Infiniband网卡等,传输速率能达到10Gbps、20Gbps、40Gbps甚至100Gbps,即万兆网卡。

1.1.5.6 服务器硬件—相关其它硬件

服务器硬件—阵列卡
在这里插入图片描述
​图1-26 阵列卡

Raid卡用来实现RAID的建立和重建,检测和修复多位错误,错误磁盘自动检测等功能。RAID芯片使CPU的资源得以释放,阵列卡把若干硬盘驱动器按照一定要求组成一个整体、由阵列控制器管理的系统。

阵列卡可以用来提高磁盘子系统的性能及可靠性。

支持的多种RAID级别,RAID0,1,5,6等。

阵列卡提供缓存及电池保护。

服务器硬件—电源
在这里插入图片描述
​图1-27 电源

支持服务器的电力负载,支持冗余,防止电源故障 ,故障预警和防止 ,故障之前的预防性维护,保证服务器持续运行,电源子系统包括:冗余电源和风扇。

服务器硬件—显卡

服务器都在主板上集成了显卡,但是显存容量不高,一般为16M或32M,GPU: Graphic Processing Unit,即“图形处理器”。

服务器硬件—热插拔技术
热插拔技术,称为热交换技术(Hot Swap),允许在不关机的状态下更换故障热插拔设备,常见的热插拔设备:硬盘,电源,PCI设备,风扇等。热插拔硬盘技术与RAID技术配合起来,可以使服务器在不关机的状态下恢复故障硬盘上的数据,同时并不影响网络用户对数据的使用。

服务器硬件—机柜
在这里插入图片描述
图1-28 机柜

机架式服务器-服务器放置在机柜中。

通常使用的机柜是42U(约2米高)机柜( 1U=44.45mm)。

外观尺寸一般为:宽600深1000高2000(mm)。

在一个机架上,累计设备U数一般不超过26U,全1U设备部署数量一般不超过16台,全2U设备一般不超过12台,全4U设备一般4到7台。

机架式服务器-机架及其配件
在这里插入图片描述
图1-29 机架及其配件

在服务器的机架上可能还有其它一些硬件设备,比方电源管理的叫PDU,它负责机架的电源管理,还有就是KVM,KVM是键盘、显示和鼠标,在刚开始安装服务器的时候可能需要配置一个显示器看它的界面,这时候就可以接上一个KVM,KVM就相当于一个共享的一个键盘、显示器和鼠标,让一组服务器共用这一个键盘、鼠标和显示器,用不着每个服务器都配一个。

1.1.5.7 各种硬件处理速度和性能优化

服务器的性能短板:如果CPU有每秒处理1000个服务请求的能力,各种总线的负载能力能达到500个,但网卡只能接受200个请求,而硬盘只能负担150个的话,那这台服务器得处理能力只能是150个请求/秒,有85%的处理器计算能力浪费了,在计算机系统当中,硬盘的读写速率已经成为影响系统性能进一步提高的瓶颈。
在这里插入图片描述
​图1-30 硬件处理速度

电脑的各个设备部件之间的延时从高到底的排列,依次是机械硬盘、固态硬盘、内存、CPU。

服务器的速度差别非常大,CPU的速度最高,基本上它的速度是在纳秒级,而缓存在CPU里面是有缓存的,它的速度是10ns级,内存的速度是在100ns级,基本上它们都是差一个数量级的,硬盘的速度和内存比又差了不少,如果是普通的机械硬盘那可能就差了巨大的倍数,硬盘的速度在10ms(毫秒)级,大家知道1秒钟等于1000毫秒,这个大家就发现了硬盘和内存的速度差别太大了,由于硬盘和内存的速度由于差别巨大,我们都知道数据通常都是放在硬盘上的,因为放在内存上的数据是不能永久保存的,硬盘和内存除了速度上的区别,还有一个就是硬盘上的数据是可以断电不丢失的,我们所谓的持久保存指的就是硬盘存放数据,而内存它断电数据就丢了,它不能永久保存,它只能临时保存,我们要想访问磁盘上的数据,这时候我们要想把这个数据快速的访问,那么是不是我们每次跑到硬盘上去访问这个文件的话是速度很慢的,因此如果我们能够把要访问的硬盘上的文件提前给它放到内存里面,提前把它放到内存里面,下次再访问硬盘的时候就不需要跑到硬盘上去看了,直接从内存中把已经放到内存中的文件进行访问,这样的话是不是大大的提高了访问速度,这就是缓存技术,缓存技术就是提前把一些慢速设备的数据给它放到高速存储上,这样的话就可以减少这种慢速设备的访问,提供效率,这就是缓存技术,缓存技术是我们生产中使用的比较主流的技术,你像硬盘速度太慢我把内存中的一块空间拿出来当硬盘存放数据临时空间使用,下次在用的时候就从内存中读取数据就可以了,事实上CPU也有缓存,CPU的缓存它可以把内存中要访问的数据放到CPU的缓存中,进而像CPU去访问数据的时候不需要跑到内存中去访问了,直接从CPU的缓冲区中访问就可以了。

在这里插入图片描述
图1-31 硬件处理速度

上图可以看到,CPU最快,一个时钟周期是0.3纳秒,内存访问需要120纳秒,固态硬盘访问需要50-150微秒,传统硬盘访问需要1-10毫秒, 网络访问最慢,都是几十毫秒。

上图最有趣的地方在于它把计算机世界的时间和人类世界的时间做了对比,常常把CPU比喻成跑得很快,但是记不住事情的“阿甘”, 他的一个时钟周期如果按1秒算:

内存访问就是6分钟。

一次 CPU 上下文切换(系统调用)需要大约需要1小时。

在 1Gbps 的网络上传输 2K 的数据需要10多个小时。

从 SSD 读取 1MB 的顺序数据,大约需要 1ms,换算成人类时间是 1个月。

从磁盘读取 1MB 连续数据需要 20ms,换算成人类时间是 20个月。

如果说打开一个网页可以秒开的话,那也相当于100年。

对于CPU来说,这个世界真是太慢了!

存储器的层次结构
在这里插入图片描述
图1-32 存储器的层次结构

上图以层次化的方式,增加了价格信息,它展示了一个真理:世界上没有免费的午餐。存储器越往上速度越快,但是价格越来越贵, 越往下速度越慢,但是价格越来越便宜。正是由于计算机各个部件的速度不同,容量不同,价格不同,导致了计算机系统/编程中的各种问题以及相应的解决方案。

1.2 操作系统和 Linux

1.2.1 操作系统功能

OS: Operating System 操作系统,通用目的的软件程序。

操作系统本身就是一个软件,操作系统英文叫Operating System,操作系统并不是从刚开始就有的,它并不是天生就有,是后来才慢慢有的,刚开始没有操作系统的概念,刚开始的时候有一个硬件,你像刚才给大家说的世界上的第一台计算机,它发明完了以后它的硬件就是为了运行它的那个弹道导弹的运算程序的,换句话说我这个硬件开发出来目标就是为了运行这一个软件。
在这里插入图片描述
图1-33 操作系统结构

正常情况下一个硬件上面如果想运行软件,以前最早的时候上面就直接跑软件就好了,比方说上面就直接运行一个软件,最早的计算机是运行弹道导弹计算的软件,但是这个软件运行在硬件上,由于这个软件直接和硬件打交道,那么它就需要关注硬件的各种资源,比方说它的各种指令,它的各种存储,包括输入输出都要去关心,但实际上我们都知道,这个电脑上运行这个弹道导弹软件难不成以后就只运行这一个软件了,我们是不是系统将来可能还会运行别的软件,比方说软件2我也想在上面运行,我们现在要做另外的一些功能的软件在上面运行,这些软件的运行如果也是这么直接和硬件打交道的话你会发现一个很大的问题,就是每个软件都要关注硬件的特性,要关心CPU的各种指令,并且还要关心存储,可能还要关心硬盘的磁盘IO等,包括各种资源的访问,比方说安全,包括还有一些文件系统等,这些东西我们都要去关注,都要去关注的话,每个软件都要去操心这些事的话是很麻烦的,事实上这些功能我们每个软件都需要关注,都需要关注那怎么办呢,干脆就别这么做了,我们把这些通用的功能给它拿出来,比方说和文件相关的功能,包括和网络打交道的功能,包括还有安全控制的功能,全给它提出来,用一个通用软件来实现,这个通用软件就是我们说的操作系统,这个通用软件把这些每个软件都需要用到的功能给它抽取出来,我来做你们每个软件不用完成了,把这些网络功能,包括文件系统管理功能,包括内存分配的功能,全都由我来完成,我来完成你们每个软件不需要和硬件打交道,把它隔开,你们要想使用你就向通用软件操作系统来进行申请就行了,利用这个操作系统把我们的软件和硬件隔离开,通用功能由操作系统来完成,这个就是操作系统的功能。

在这里插入图片描述
图1-34 操作系统工作架构

主要功能:

  • 硬件驱动
  • 进程管理
  • 内存管理
  • 网络管理
  • 安全管理
  • 文件管理

图1-34就是操作系统工作的一个大概的架构,硬件上面运行操作系统,操作系统上面再运行你的多个不同的应用程序,然后用户使用应用程序,对于一个操作系统来讲他上面有很多通用功能,每个软件基本上都要用到,比方说硬件驱动,包括上面应用程序进程管理,内存分配,网络管理,安全管理,文件管理等功能。

OS分类:

  • 服务器OS:Rocky,Ubuntu,Windows Server,AIX
  • 桌面OS:Windows 11,Mac OS,Fedora
  • 移动设备OS:Andriod,IOS,AliOS,HarmonyOS

目录来讲操作系统版本发展到今天有各种版本,比方说有服务器上面运行的各种操作系统版本,例如Rocky、Ubuntu,包括还有微软的windows,包括还有桌面级的操作系统,桌面你像Windows 11、Mac OS、Fedora,包括还有移动OS,比方说手机上的Andriod、IOS、AliOS、HarmonyOS,这些都是一些著名的操作系统,我们重点的是掌握服务器操作系统。

1.2.2 操作系统相关概念

接口:

interface,来源于电气工程学科,指的是插座与插头的连接口,起到将电与电器连接起为的功能。后来延伸到软件工程里指软件包向外提供的功能模块的函数接口。所以接口是用来连接两个东西、信号转换和屏蔽细节。

操作系统通过接口的方式,建立了用户与计算机硬件的沟通方式。用户通过调用操作系统的接口来使用计算机的各种计算服务。

为操作系统一般会提供两个重要的接口,来满足用户的一些一般性的使用需求:

命令行:实际是一个叫shell的终端程序提供的功能,该程序底层的实质还是调用一些操作系统提供的函数。

窗口界面:通过编写的窗口程序接收来自操作系统消息队列,比如:鼠标、键盘动作,进而做出一些响应。

接口实际上并不是计算机上的一个专业术语,它实际上是来源于电气工程学科,指的就是插座和插头之间的连接口,比方说我们家里的电源,电源我们要把电源插头插到电源的插座上这个就是一个接口的功能,接口它可以用来连接两个不同的东西,比方说我把家里的电器要插到插座上给它供电,包括手机和电脑的相连可以连一个数据线也是一个接口这种方式,在计算机中我们需要控制计算机要管理计算机,也需要有一个对应的接口,让我们能够使用计算机,这个使用接口有两种,一种是命令行,命令行就是传统的早期的命令方式,就是在一个终端窗口敲命令,这个方式是一个字符界面,相对来讲看起来比较酷一些,但是相对难度好像比较大,我们需要记一些命令,目前来讲我们大部分的普通用户更喜欢用的是图形界面,就是另外一种方式图形窗口,windows就是图形窗口,鼠标点菜单就可以使用,使用起来相对比较简单,这是两种不同的风格,在生产中专业环境下使用命令行,生产环境如果用的是一些视频处理会用图形界面,但是我们作为运维来讲更多的会用命令行,但是有的时候我们开发了一个自动化运维平台,它也是一个Web界面,你也可以通过点鼠标的方式来进行控制。

ABI

Application Binary Interface,应用程序二进制接口,ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。

运行程序格式:

  • Windows: PE(portable executable)格式, .dll(dynamic link library),.lib
  • Linux: ELF(Executable and Linking Format)格式, .so(shared object), .a

接下来我们来说一个概念叫ABI,ABI是什么意思呢,叫应用程序的二进制接口,这个应用程序的二进制接口是这个意思,我们每一个不同的系统,它实际上对外需要提供一些应用程序的运行,比如说我们在windows里面经常大家可能会运行一些软件,比如记事本就实际上属于windows里的一个软件,这个记事本这个程序它实际上是一个.exe后缀的文件,这个文件就在windows里,在windows系统的C盘windows文件夹下有一个notepad.exe文件就是记事本程序,这个程序在windows里可以运行,notepad.exe是个二进制文件,它不能用文本打开,打开以后是一个乱码,它里面都是二进制格式的数据,这个二进制文件它的格式是有要求的,比方说前面多少个字节放什么,中间多少个字节放什么,这都是有规范的,这个规范是由操作系统决定的,比方说notepad.exe是个Windows的程序,那么windows对文件的格式是有严格的规定的,在linux里面也同样有这种特点,比方说/bin下面有很多二进制的可以运行程序,比方说我们常用的vi,它是在/usr/bin下面有一个vim程序,这个程序是linux里面用的一个程序,这个也是个二进制文件,这个二进制文件在windows里面它是不支持的,因为它遵守的是Linux里的二进制格式,这种不同的系统对程序的要求各不相同,操作系统它对每个操作系统上运行的程序它有一个所谓的应用程序运行环境,这个环境我们叫ABI,叫应用程序的二进制接口,也就是说我这个应用程序要在你的操作系统上运行,要遵守操作系统的ABI标准;
在这里插入图片描述
图1-35 ABI接口

图1-35说的就是我们Windows上面要想运行一些软件,那么就必须遵守Windows的ABI接口标准,你要不遵守就运行不起来,如果是Linux它也有一个应用程序运行的ABI接口,每一个操作系统它都有对外提供服务的一个标准接口,操作系统不同接口就不同,接口不同那就意味着你的应用程序遵守的规范是不一样的,因此我们刚才说vim是可以运行在linux上的,但是把vim拷到windows上是不能运行的,同样的把windows上的notepad.exe拷到linux上也是不能运行的。

范例8:验证windwos的记事本文件notepad.exe能不能在linux上运行

[root@rocky9 ~]# rz -E
rz waiting to receive.
# 安装lrzsz把windows里的notepad.exe文件传到Linux上

[root@rocky9 ~]# chmod +x notepad.exe 
[root@rocky9 ~]# ./notepad.exe 
-bash: ./notepad.exe: cannot execute binary file: Exec format error
# 提示可以执行文件格式错误,因为它不遵守Linux的ABI标准,它的格式错误,运行不起来

[root@rocky9 ~]# file notepad.exe 
notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
# 用file命令可以查看文件格式,可以看到notepad.exe是一个Windows的格式叫PE32+ executable

[root@rocky9 ~]# file /usr/bin/vim
/usr/bin/vim: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0a9f31c21c3e2839483246b797e12023e62007a0, for GNU/Linux 3.2.0, stripped
# 而linux运行的文件的格式是ELF,也即是我windows和linux的ABI标准不同,它的格式不同,造成了各种只能在自己的系统上运行,互相不兼容,如果就想运行在Windows上也想运行在Linux上,那怎么办,除非你各自开发各自的一套软件,什么意思呢,比方说我在Windows上也想运行vim,那运行vim那就重新针对Windows开发一个Windows版的vim。

API
Application Programming Interface,应用程序开发接口,API定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。

POSIX: Portable Operating System Interface 可移植的操作系统接口。

  • IEEE在操作系统上定义的一系列API标准
  • POSIX兼容的程序可在其它POSIX操作系统编译执行

还有一个概念叫API,API叫应用程序的开发接口,说到开发大家可以会说我也不懂开发,我们知道IT有一个专门的岗位叫开发工程师,谁白了就是程序员,这些程序员写程序它写什么呢,实际上就是写一些文档,不过这个文档是有格式的,按照某种语法来写,写完以后它需要把这种文档的东西转化成计算机能够真正执行的程序,前面讲冯·诺依曼体系提到了在计算机内部都是基于二进制处理的,计算机CPU它只能知道啥叫0101,它不知道你什么a、b、c、d字母,包括声音图片它都不支持,它只认得0101,所以我们在写程序的时候写的是这些英文的单词、字母、各种符号组合起来的一个文档,这个文档交给计算机要运行它是不能直接运行的,我们需要把它转化成机器的0101,转换成机器的0101才能运行,但是你这个程序写完以后难道你写的功能都是自己开发出来的吗,比方说我们有一个软件想实现一个很简单的电商网站功能,这个网站的功能难道说全都是你自己写的吗,事实上不一定,因为我们每个程序员它完成的通常来讲都是其中的某一个核心功能,比方说电商网站的核心功能,至于有些非主要的功能,一些通用功能,很多软件都会帮你提供好一些的库,这些库就相当于我们现成模块一样,你拿过来用就行了,就跟我们生活中一样,比方说生活中你去做一个饭,你去做饭的时候是不是所有的原材料都是你自己种出来的,比方说你要想吃肉,难道你养猪吗,你想吃菜难道你去种菜吗,是不是不是,你是不是都是买一些半成品过来,菜市场买菜、买肉,买回来以后你把它组合起来就可以做起来了,也就是说我们每个人实际上做的事并不是从零开始的,都是借助于别人做好的其中一部分、半成品,或者是在别人的基础之上做了下一步工作,逐渐形成了一个完整的产品的,那么软件程序员他们也是这样,软件程序员他们做开发,虽然这个软件是它们做出来的,但是里面的很多通用功能并不是他们自己都需要亲自做的,比方说有个软件需要加密功能,加密实际上是非常复杂的,要想实现非常安全的加密,这中间要求非常高,往往会涉及到各种加密算法,但是我们都知道并不是每个程序员都精通算法,应该说绝大多数程序员并不精通算法,并不了解加密,但是就想用那怎么办,我们有专门的程序员他们已经把这些功能已经实现了,已经实现以后放在一个所谓的库里边,将来我们这些用户调用这个库就可以直接启用这个功能了。
在这里插入图片描述
​ 图1-36 API接口

比方说图1-36 lib就是库的意思,这个库它里面实现了很多功能,比方说它里面有各种模块各种库,有加密库,还有图形处理库,网络通信库等各种库,这些库都是有高手开发出来了,如果你的软件想需要用到那你直接调用这个库就好了,比方说你在家里现在想做一个小家具,这时候你就买一些现成工具,比方说斧子、锯等,把这些东西买回来用这些工具就行了,你不用自己去从头到尾做,这个就是一个道理,做软件开发的人他们也都是这样的,我们自己做软件并不是所有东西都做,把一些通用功能做成库,然后调用就行了,你用我也可以用,那么程序员它可以把更多的注意力集中在软件本身,这些通用功能已经有人做好了,你拿过来用就行了,但是大家想过没有别人做好的东西,相当于一个软件的功能一样,那么你要用的话你是不是要遵守人家的规范,就像我们家里比方说有一个电器,这个电器我想使用一下,比方说我现在要做饭,要做饭我买了一个高压锅,我要用那怎么用,我是不是得看说明书看上面得按哪个扭,做多长时间也得遵守它的规范,这个规范你要使用库的你要遵守一种规范,这个规范就是API,叫应用程序的开发接口,开发程序员他们就调这个库的,API是程序和库之间的接口,而我们刚才说的ABI指的是应用程序和操作系统之间的接口,它们的差别在于我们的应用程序到底和谁在打交道,如果和库打交道就是API,如果是和操作系统进行连接就是ABI,ABI谁来负责完成,它是编译器负责,API是程序员在开发程序的时候要调用库的时候他去关心的。

用户态和内核态
在这里插入图片描述
​图1-37 内存空间

我们的系统从它的空间中,从它的系统工作逻辑上可以分成用户态和内核态,用户态和内核态是什么意思呢,我们的应用程序在运行的过程中,数据和应用程序都要放在内存中的,放到内存中的话内存的空间可以分成两块空间,图1-37是内存空间,内存空间可以分成两块,一部分是运行操作系统我们叫内核,还有一部分是运行我们的应用程序,空间分成两部分,假设就一颗CPU,CPU如果想执行的是内核里的指令,那么就把内核里的指令给它调用到CPU里面去运行,这时候CPU是处理内核里的指令的,这时候CPU处于内核态,而如果我们处理的是应用程序的指令,把它加入到CPU中,这时候CPU运行的是应用程序的指令,我们就叫用户态,用户态它主要实现的就是用户空间中的一些数据的处理,比方说它不涉及到一些特权的操作,而内核态它的权利要更大,为什么说内核权利要更大?
在这里插入图片描述
图1-38 操作系统结构2

应用程序都是通过操作系统来和硬件打交道的,比方说软件想在硬盘上写一个文件,你想写一个文件,你是直接不能连接硬件的,因为硬盘它不由软件直接进行通讯,它是通过操作系统的,换句话说我们的应用程序想要在你的硬盘上写个文件的话,它必须要通过操作系统来完成,因此它会发一个请求给操作系统说操作系统帮忙我要从硬盘上写个文件,然后操作系统再来完成这样的事,这时候操作系统完成的时候,这个对硬件操作它用的就是内核里的功能,它需要调用的是内核里的特权指令才能完成,而软件它自己没有这个功能,没有这个权限,这样的话我们相当于把软件利用操作系统和硬件给它隔离开,隔离开带来的好处就是我们将来软件由于不能直接去控制硬件,因此它更加安全,相当于软件不会直接操作硬件,如果你直接去连接硬件是不有可能会造成硬件操作的一些故障,或者bug,终究来讲我们每个程序员开发的软件你的好坏是很难确保的,而操作系统都是集成了全世界最牛的工程师开发出来的软件,相对来讲非常优秀的软件,它出现问题的几率要小很多,比你普通的工程师开发一个软件要bug少很多,所以我们由操作系统来负责软件和硬件打交道,就避免了一些不可预知的故障,减少出错的几率。

在这里插入图片描述

​ 图1-39 用户态和内核态

计算机硬件资源都是操作系统内核进行管理的,目前操作系统都是基于多任务、多用户的。如果每个用户进程都可以随便访问操作系统内核的模块,改变状态,那整个操作系统的稳定性、安全性都大大降低为了将内核程序与用户程序隔离开,在硬件层面上提供了一次机制,将程序执行的状态分为了不同的级别,从0到3,数字越小,访问级别越高。0代表内核态,在该特权级别下,所有内存上的数据都是可见的,可访问的。3代表用户态,在这个特权级下,程序只能访问一部分的内存区域,只能执行一些限定的指令

用户应用程序上的指令CPU上运行就是用户态,它这个指令的运行它实际上中间还可以分成环,分成0层、1层、2层、3层,这个后面学虚拟化的时候再讲,暂时先不用来看它。

系统调用system call和函数库Library function
在这里插入图片描述
图1-40 系统调用和函数库

对于非一般性使用需求,操作系统提供了一系列的函数调用给软件开发者,由软件开发者来实现一些用户需要的功能。这些函数调用由于是操作系统内核提供的,为了有别于一般的函数调用,被称为系统调用。比如使用C语言进行软件开发时,经常用的printf函数,它的内部实际就是通过write这个系统调用,让操作系统内核把字符打印在屏幕上的。

应用程序要想去访问硬件那么你需要把请求发送给内核,那么怎么发呢,就是通过调用所谓的系统调用,这个系统调用你可以认为就是相当于就是应用程序想调用操作系统的一些核心功能的时候它调用的一个函数库,你也可以认为就是系统调用,就是我们刚才说的库调用的一个API,这个API实际上有两种API,一种API是我们的应用程序去调用第三方的库,还有一种是操作系统自身也提供了一些库,操作系统自身就有一些库,然后应用程序可以调操作系统的一些库,这就是系统调用,这都是有API调用的,不过调用、系统调用我们基本很少用,通常我们不会直接调用操作系统,因为太底层了,大部分情况下,一般我们的API都是指的是库的调用,就是应用程序调我们的函数库,而不会调用操作系统,实际上操作系统上也有,只不过我们一般很少去这么做而已。

在这里插入图片描述
图1-41 系统调用和函数库2

实际上操作系统对外也提供了一个接口,这个接口是系统调用库,这个系统调用你也可以认为就相当于我们这library这个库,只不过它是操作系统提供的,我们可以调用操作系统的库,但是通常我们很少这么调用,因为你这样调用会带来一个比较大的问题,就是应用程序直接依赖于操作系统,直接依赖操作系统那就意味着这个应用程序将来如果我想换一个操作系统去开发,因为你调的是操作系统,所以我们是不是换个操作系统可能就没有这个库,没有这个库是不是运行起来就会有问题,开发就要重新写代码了,这个依赖性就更多一些,所以我们更多的情况下一般应用程序调用函数库,实际上函数库干的啥事,函数库就是又干了另一件事,就是函数库调用系统调用,我们自己做软件我们去掉函数库,然后函数库再去掉系统调用,而不要由我们的程序直接调用系统调用,大家想想为什么我们推荐程序调用函数库,函数库再去调用系统调用的方式,而不用程序直接调用系统调用的这种方式,主要是为了更加通用,因为将来即使是不同的系统,我们可以做到库一致,比如说现在是Linux,将来可能还有windows,windows也有自己的系统调用,如果我们的应用程序直接依赖于操作系统的库的话,显而易见将来这个程序要运行在Windows上那就得重新改了,因为每个操作系统的系统调用是不一样的,现在如果我们不这么做,都是调用的时library,而library它是不是在每个操作系统上可以用一样的库,人家函数库自己帮你解决了,比方说在Linux上的库它自动去掉Linux上的系统调用,Windows就调Windows的系统调用,这样的话我们作为程序员来讲由于我们不直接和操作系统打交道,是不是既而开发代码就更加方便,而具有了通用性,这样的话我们不直接和操作系统打交道,那这个跨平台是不是就非常方便了。

用户和内核空间
在这里插入图片描述
图1-42 用户和内核空间

用户空间:User space

用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响。

只能执行简单的运算,不能直接调用系统资源,必须通过系统接口( system call),才能向内核发出指令。

内核空间:Kernel space

是 Linux 内核的运行空间。

可以执行任意命令,调用系统的一切资源。

我们的应用程序在运行的时候它可以直接调用函数库,函数库再去调用系统调用,当然它也可以直接调用系统调用,不过这种方式我们基本很少见,我们都是通过间接的方式来实现的,这个是用户空间,内核空间是操作系统完成了自己的特定功能,比方说除了对外提供系统调用,还有文件系统,包括硬件的管理、内存的管理、进程的管理、内存分配调度、驱动管理、网络通讯,这些都是内核里的功能,这些功能都相当于通用功能,都是由操作系统来完成的,我们可以理解成相当于一个国家,一个国家就相当于一个计算机,这个国家有很多不同的组织,或者有不同的公司,一个应用程序你可以理解成相当于一个公司一样,我们在电脑上可以运行很多应用程序,就相当于一个国家有很多公司,有很多组织,这些公司、组织也好都需要通用功能,比方说它们都需要水、电、公路,需要统一的政策支持,这些需要一些公共的资源,这个公共资源就是操作系统,我们可以理解为这相当于政府一样,政府来提供统一的管理,然后这些公司都是运作在政府基础之上提供的公共服务上。

**范例9:**用户空间和内核空间

str = "www.baidu.com" 	// 用户空间
x = x + 100 			// 用户空间
file.write(str) 		// 切换到内核空间
y = x + 200 			// 切换回用户空间

说明:第一行和第二行都是简单的赋值运算,在 User space 执行。第三行需要写入文件,就要切换到Kernel space,因为用户不能直接写文件,必须通过内核安排。第四行又是赋值运算,就切换回 User space。

str是一个字符串,给它赋一个值叫www.baidu.com,str是一个变量,有点想初中学的变量赋值,x等于1,y等于2,只不过它赋了一个字符串,赋值是在应用程序里面完成的,所以它在用户空间就可以完成,接着x加100赋给x,这个也是在用户空间就可以完成的,现在出来一个“file.write(str)”这样的一个东西,这个东西虽然大家可能不知道这什么意思,但是你看这个英语单词也猜到什么意思了,就是把str这个字符串写到文件里去了,大家想文件在哪放着,文件是不是在硬盘上放着,而硬盘是不是硬件,用户空间的软件能直接访问硬件吗,刚才说了用户的应用程序它是没有权限直接去访问硬件的,软件想写文件写不了,它必须通过操作系统间接的才能完成,所以这时候CPU将把这个要执行硬盘写的操作去通过内核空间才能完成,因为它要执行的是内核里的特权指令,写硬盘这个操作不是在用户空间能完成的,它需要通过内核里的指令调入到CPU里面去运行,这时候CPU运行的是内核里的指令,所以它叫特权指令,它是用户运行在内核的指令,就是内核空间,叫内核态,然后“file.write(str)”这个指令就要切换到内核态,当然运行完了以后y等于x加200,这是不是就是用户空间里面的信息的加减而已,所以这时候它要回到用户空间,所以你会发现CPU一会是在用户空间,一会可能要回到内核空间,它是来回这么切换的,当然这个切换过程中它肯定会保留我们当前的状态,比方说我们的应用程序执行到哪了,一会回来的时候我们可能还要接着去执行,我们要保持它的状态,这个东西都要消耗资源,所以如果我们想办法能够减少这种状态切换,是不是就可以提供效率,用户态和内核态你可以认为是你的两种状态,一种是生活态,一种是工作态,生活态就有点像用户空间,工作态就相当于内核空间,你可以这么去理解,下班了从工作态切换到生活态,上班从生活态切换到工作态,工作态优先级高,来回切换有没有一个损耗,有损耗。

编程语言

  • 低级语言:计算机能理解的语言,二进制

    • 机器语言:0和1

    • 汇编语言:和机器语言一一对应,与硬件相关的特有代码、驱动程序开发

  • 高级语言:

    • java,python,go,php,Objective-C,C#,易语言(中文),应用级程序开发,人类语言实现
  • C 语言,系统级应用、驱动程序

范例10:各种语言示例

C语言:

#include <stdio.h>

int main(void)
{
  printf("Hello,World\n");
}

Go语言:

package main

import "fmt"

func main () {
    fmt.Println("Hello,World")
}

Java语言:

class Hello{
    public static void main(String[] args)
	{
	    System.out.println("Hello,World");
	}
}

Python语言:

#!/usr/bin/python
# Filename : hello.python
print 'Hello,World'

1.2.3 各种操作系统

服务器三大操作系统

  • Windows:

  • Linux:GNU/Linux

  • Unix:1969年 Ken Thompson

    • System: Bell Lab
      • AIX (IBM)
      • Solaris (SUN)
      • HP-UX (HP)
    • BSD: (BSRG)Berkeley System Distribution
      • NetBSD
      • OpenBSD
      • FreeBSD

目前操作系统的版本有很多,服务器上的版本可以分成window、Linux,还有Unix。

服务器操作系统市场
在这里插入图片描述
图1-43 服务器操作系统市场

在服务器领域Linux已经成了大势所趋,在2013年和2017年分别作了统计,2017年包括服务Linux和免费Linux占58%的份额,windows只占了41%,Unix只占了1%。

1.2.4 UNIX

在这里插入图片描述
图1-44 Unix发展史

Unix是整个现在操作系统的鼻祖,Unix诞生在1969年左右,后来在它的基础上衍生出了各种版本,我们目前看到的各种主流版本基本都是从Unix演化过来的,Windows、MacOS、Linux都是从Unix演化过来的。

兼容分时系统 Multics
在这里插入图片描述
图1-45 兼容分时系统 Multics

为了进一步强化大型主机的功能,让主机的资源可以提供更多的使用者来利用,所以在1964年, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE美国通用电气公司)共同发起了Multics(多路信息计算系统)的计划, Multics计划的目的是让大型主机可以同时支持300个以上的终端机连线使用。不过,到了1969年前后,由于计划进度缓慢,资金也短缺,所以该计划虽然继续在研究,但最终贝尔实验室还是选择了退出。

Unix 诞生

1966年从加州大学伯克利分校毕业的Kenneth Thompson(肯尼斯·汤普森)加入了贝尔实验室。参与了Multics系统的研发。他基于Multics开发了“star travel”游戏。不幸的是,1969年由于贝尔实验室退出Multics项目,这同时意味着Ken将没有机器可以再玩这个游戏了。面对此情此景,Ken作为一个创造者的本性立即体现了出来,于是他决定自己写一个操作系统来满足他玩游戏的需要,Ken找到了一台废弃已久的老式计算机PDP-7,并在这台只有16K内存的机器上重写了他的游戏。在这个过程中,Ken有了一个主意,要开发一个全新的操作系统。利用PDP-7上的汇编语言,Ken只花了一个月就编写完了操作系统的内核,在这不到一个月时间中,他一周一个内核,一个文件系统,一个编辑器和一个编译程序的完成。

在这里插入图片描述
图1-46 Ken Thompson(肯·汤普逊)和Dennis Ritchie(丹尼斯·里奇)

肯·汤普逊 - 维基百科:https://zh.wikipedia.org/wiki/肯·汤普逊,前面是维基百科对肯·汤普逊的详细介绍。

丹尼斯·里奇 - 维基百科:https://zh.wikipedia.org/wiki/丹尼斯·里奇),前面是维基百科对丹尼斯·里奇的详细介绍。

UNIX - 维基百科:https://zh.wikipedia.org/wiki/UNIX,前面是维基百科对Unix的详细介绍。

Unix自身是怎么来的,Unix最早的时候是在1969年之前有一个大型项目,这个项目是在1965年的时候由贝尔实验室、麻省理工和奇艺公司共同协作想开发的一个项目,这个项目当时是由硬件厂商通用公司,还有软件厂商就是贝尔实验室,它们想做一个非常大型的主机,这个大型主机它可以支持更多的终端,比方说我们在一个物理服务器上可以接好几百个键盘、显示器,这样的话好多人可以共用这一台计算机,就是一个计算机可以支撑好多用户的访问,它的规模在当时来讲是最为复杂的,可以说这是个非常巨大的项目,这个项目从1964年立项之后,到了1969年的时候经过了长达5年的努力,最终因为这个项目越来越庞大,开发进度越来越缓慢,造成项目停止不前,基本上这个项目快黄了,贝尔实验室一看这个项目没啥希望了,就退出了,退出了以后这个项目后面也没有真的结束,经过后来不断的努力,最终这个项目还真的是做完了,做完以后在198几年、199几年仍然在一些特定的场合下有人还在用Multics,只不过贝尔实验室提前退出了,贝尔实验室退出了不担心;

问题是有一个大牛人,这个人是在1966年从加州大学伯克利分校毕业的叫肯·汤普森这个人,它在1966年加入了贝尔实验室,也参与了Multics项目的研发,也就是说他就属于Multics这个项目的成员,结果贝尔实验室退出那它就不能在参与Multics的开发,那他就接触不到Multics,问题是这个人当时为了消遣,曾经在Multics上开发了一个小游戏“star travel”,就是星际旅行,结果它们退出来Multics这个项目,所以Multics接触不到了,接触不到了这个星际旅行这个软件就没地运行了,所以这个人很郁闷,想玩游戏没电脑玩了,这个时候很生气,那怎么办呢,为了它的软件,为了运行它的游戏,它一怒之下就自己决定写一个操作系统,由于他参与过Multics这个项目,他对操作系统的理解比一般人要深入很多,它把Multics做了大量的精减,把一些核心功能拿出来,比方说开发出来了一些它的基本的文件系统、内核、编辑器等等,只花了3周时间就写完了,写完以后形成了一个特别精减的小操作系统,这个精减版操作系统相对Multics要简单很多,因为他的目标不是为了支撑这么多用户,就是为了实现一个小游戏的运行,所以要求很低的情况下轻松就实现了,当时他开发这个软件的时候需要一台计算机,但是由于他们退出了这个项目了,手上没有特别强大的性能好的计算机,它就找了一个单位里面废弃的老电脑,这个电脑叫PDP-7,这个电脑已经从发布到他用的时候已经5年了,也就相当于一个旧电脑了,比较老掉牙了,性能不太好,但是旧电脑上他为了跑这个小的系统,也是下费苦心,为了节约一点点资源,他可以说是做了大量的努力的,能省则省,能用一位绝对不用2位,就是连位都要精确到,当时你不知道它的内存有多少,内存只有16K,大家想想16K能运行什么东西吗,我们现在说操作系统了,随便一个小软件都不只16K吧。

  • 1969 Unix 雏形 UNICS
    • Kenneth Lane Thompson(肯尼斯·蓝·汤普森) 汇编语言 B语言
  • 1973 正式命名为 Unix
    • Dennis MacAlistair Ritchie(丹尼斯·麦卡利斯泰尔·里奇) C语言重写了UNIX,从此Unix和C语言成为CP
  • 1977 BSD
    • Berkeley Software Distribution 伯克利大学
  • 1979 System V架构 版权声明
    • HP-UNIX IBM AIX “不对学生提供源码” 收回版权
  • 1984年 Minix操作系统
    • Andrew Stuart “Andy” Tanenbaum(安德鲁·斯图尔特·塔能鲍姆) 荷兰阿姆斯特丹自由大学计算机科学系

1969年开发的操作系统叫UNICS,丹尼斯·里奇(Dennis Ritchie)就是C语言的发明人,它后来也参与到Unix的开发,不断的去改进它,后来把这个操作系统用C语言重新开发,以前早期的时候用汇编和B语言写的,汇编语言写的有一个缺点就是不支持跨平台,1973年丹尼斯·里奇这个人用C语言重新写了Unix,为什么在1973年才写,为什么早期不发明呢,是因为计算机的摩尔定律起作用了,摩尔定律是不是每隔2年在计算机的性能上就会提升一倍,所以1969年发布到1973年这已经是翻了4倍了,那当时电脑已经比以前强多了,存储也便宜了很多,包括内存也不像以前那么小了,这样的话它就可以有更多的资源可以使用,所以这时候用C语言就可以更好的运行了,早期用C语言还跑不起来,因为它对硬件还是有一定要求的,在当时来看以前的硬件是达不到要求的,在1973年之后硬件已经越来越好,所以它就用C语言重新把这个Unix进行书写,从而实现了跨平台,从此Unix就开始流行,因为它可以支持各种硬件,因此Unix和C语言成为了一个绝对的搭档,CP你也可以理解为黄金搭档,当然操作系统出来的时候你也知道我们并不是想实现一个多么强大的操作系统,就是未来打游戏的,后来因为这个代码也是比较自由的,初期没想把它盈利,就在各个学校或一些研究领域就开始传这个代码,大家每个人都拷一份,拷来拷去这个代码大家都有了,有了以后对这个东西挺感兴趣,然后不断的去在里面添加新的功能,当时有一个事件就是这个肯·汤普森(Ken Thompson)在大概1975年左右他回到了他的学校伯克利大学当兼职老师,给学生讲讲操作系统原理,来给学生将一些计算机的专业知识,当时就培养了一些计算机的高手,其中有一个人就是当时特别热心参与Unix的学习和开发,后来这个人在它的基础之上做出了当了的修改,发布了一个新的流派叫BSD,就是基于早期的贝尔实验室的Unix版本研发出来的一个新的分支叫BSD,就是伯克利大学的一个分支,当然这个人后来成立了一家自己的公司,这家公司就是大名鼎鼎的SUN公司,SUN公司生产自己的硬件,也有自己的Unix操作系统,它开发出SUN的Solaris,当然SUN公司现在已经没了,它已经被Oracle公司收购了,SUN公司在IT领域相当的有名,我们平常用的JAVA程序就是SUN公司开发出来的,SUN公司在业界也是留下来光辉的一页的,贝尔实验室也有自己的一套分支,因为当初贝尔实验室的版本,刚开始没想收费,后来发现这个东西有商业价值,因为它已经做的越来越好了,经过10年的不断开发这个软件已经非常强大了,很多人贡献了自己的代码,已经能够满足商业需要了,所以它就开始收费了,你要用就要交版权费,学生也不能用了,这样就会涉及到很多问题,好多学生想学还得花钱买,哪能有那么多学生买的起,所以有一个大学老师叫Andrew S. Tanenbaum(安德鲁.斯图尔特 .塔嫩鲍姆),他为了教学让大家知道怎么去写操作系统,他就开发了一个叫Minix的操作系统,在1984年开发出来的,这个只供于教学目的,教学目的也就是它不能真正的在商业环境中使用,只是告诉学生怎么去写操作系统,这个事件确实还是有影响力的,后期Linux的诞生就是和这个密切相关,但是中间有很多分歧,因为伯克利大学当时把这个代码拿过来以后做了开源,然后在它的基础上做了二次开发,而贝尔实验室也有一个版本,这两个版本就是两大流派,这两大流派都是Unix开发出来的两个分支而已,当然会涉及到版权纠纷,贝尔实验室就告它了说是你这个用我的代码你去让别人无偿使用这是不行的,你要掏钱,中间打了很多年的官司,所以也是变相的影响了Unix的发展,好多人为了避免官司产生它不敢用Unix,用的话会涉及到版权,你免费用又不行,花钱又买不起,所以这个东西就很尴尬,就造成Unix在当时那个年代确实还是产生了负面影响,造成它的发展不那么快,但是Unix确实是现代操作系统的鼻祖,这个商业化是在70年代、80年代一个非常大的流行的趋势,所以我们以前有些人是崇拜自由的。

1.2.5 GNU

在这里插入图片描述
图1-47 Richard Stallman(理查德·斯托曼)

理查德·斯托曼 - 维基百科:https://zh.wikipedia.org/wiki/理查德·斯托曼,前面是维基百科对理查德·斯托曼的详细介绍。

GNU - 维基百科:https://zh.wikipedia.org/wiki/GNU,前面是维基百科对GNU的详细介绍。

GNU:GNU is Not Unix

1984年由Richard Matthew Stallman(理查德·马修·斯托曼)发起并创建

目标是编写大量兼容于Unix系统的自由软件

官方网站:http://www.gnu.org

GPL:GNU General Public License

自由软件基金会:Free Software Foundation

允许用户任意复制、传递、修改及再发布

基于自由软件修改再次发布的软件,仍需遵守GPL

LGPL:Lesser General Public License,LGPL相对于GPL较为宽松,允许不公开全部源代码。

GNU操作系统:

Hurd:Hird(Hurd of Interfaces Representing Depth) of Unix-Replacing Daemons

官网:http://www.gnu.org/software/hurd/hurd.html

richard Stallman 为了无止境寻找完美内核,而忘记了HURD的原本目的:能用的操作系统。

西方有些人搞学术的人就崇拜自由的,你让我花钱买这些软件我当然不乐意,有个人就站出来,发现商业化越来越严重,他就决定倡导免费,倡导开源,这个人就成立了一个专门的项目,这个项目叫GUN项目,GUN项目是在1984年由Richard Matthew Stallman, RMS(理查德·马修·斯托曼)发起的,创建的目标是为了让大家不用花钱去使用软件,他的项目名称就是GUN,GUN就是GUN is not Unix,就是GUN不是Unix,就是我是不花钱的,你可以随便用,他为了让大家不花钱买这个软件,他就作了大量的软件开发,这个软件开发开发出来的软件希望免费,那要免费用你得有一些许可的约定,他就发布了一个许可叫GPL,这个许可你可以理解成一个相当于一个合同一样,上面标注了说你要遵守这个GPL的许可,你就是免费的,这个软件随便用,也是开源的,同时为了支撑这个项目他就成立了一个基金会叫自由软件基金会,这个基金会有很多大公司愿意往里捐钱,他一年也有不少收入来支撑这个免费项目的继续开发,当然GPL后期还有一些衍生版本,比方说有LGPL,这个项目确实做的很好,让大家免费,不过这个项目虽然开发了很多软件是不花钱的,是开源的,但是它唯独有点可悲的地方就是,它开发的软件它支持应用程序而已,那么这些软件需要找一个操作系统来运行,因为应用程序是要运行在操作系统上的,运行在哪个操作系统上,可惜的是它要运行的是Unix操作系统,而Unix是不是要收费,所以这个是挺可惜的一件事,GUN这个项目开发了大量的开源软件,可惜仍然要依赖于收费的Unix,有人说为什么不自己做一个操作系统,你要知道操作系统做出来哪那么容易,刚开始做Unix也不是说一下就那么好的,它中间花了大量的时间慢慢的不断完善,将近10年的时候才做成一个相对比较完整的操作系统,所以要自己基于GUN项目做一个操作系统也是非常困难的,当然这个项目确实也有叫Hurd,Hurd就是GUN项目的一个操作系统,当然这个项目确实是已经成立了,而立成立的也非常早,大概在1990年左右就有了,有是有了但是这个人太追求完美了,他希望要么不做,要做就做的最好,这个项目经过了若干年的努力,仍然没有推出,到现在已经过去30多年了,这个项目仍然处于0.9版本,也就是还没有正式版,看来永远也不会推出了,这个人就犯了一个重大的错误,就是太追求完美了。

1.2.6 Linux

在这里插入图片描述
图1-48 Linus Torvalds(林纳斯·托瓦兹)

1991年的10月5日Linus Torvalds(林纳斯·托瓦兹)在comp.os.minix 新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sources for 386-AT) — FREAX,含义是怪诞的、怪物、异想天开类Unix的内核,在GPL下发布。

官网:www.kernel.org

Linux操作系统:

  • 完整的类UNIX操作系统
  • Linux内核+ GNU工具=Linux/GNU
  • 如:Rocky,Ubuntu,Android

林纳斯·托瓦兹 - 维基百科:https://zh.wikipedia.org/wiki/林纳斯·托瓦兹,前面是维基百科对林纳斯·托瓦兹的详细介绍。

Linux - 维基百科:https://zh.wikipedia.org/wiki/Linux,前面是维基百科对Linux的详细介绍。

正因为历史的机遇Unix涉及到各种版权,就造成Unix发展确实遇到了问题,但是又没有一个免费的操作系统可用,那怎么办呢?因此1991年的时候林纳斯·本纳第克特·托瓦兹这个人开发出来一个免费的开源的一个Linux内核,图1-48就是Linus Torvalds本人,这个系统一旦网上发布引起了大量的人去关注,参与到这个项目当中形成了目前我们最为主流的操作系统就是Linux,他就正好利用了市场的机遇,Hurd就没有机会了,因为没人用了,Unix商业要掏钱,Linux是开源免费的,很多软件都可以把一些基于GUN项目的各种开源软件都可以迁移到Linux上进行运行,我们目前用的Rocky和Ubuntu你可以暂时认为是Linux内核,加各种免费的GUN项目形成的完整的操作系统。

在这里插入图片描述
图1-49 Linux内核

目前Linux内核最新版本是6.6。

Linux的内核版本组成

  • 主版本号
  • 次版本号
  • 末版本号
  • 打包版本号
  • 厂商版本

以前的版本有奇数、偶数一说,现在就没这个说法了,以前奇数版本表示测试版本,偶数版是稳定版,图1-50就是一个linux内核各个数字所代表的含义。

Linux团队
在这里插入图片描述
图1-51 Linux团队

Linux 发行版

  • slackware:SUSE Linux Enterprise Server (SLES) , OpenSuse桌面
  • debian: ubuntu,deepin(深度),mint
  • redhat:
    • RHEL: RedHat Enterprise Linux, 每18个月发行一个新版本
    • CentOS: Community Enterprise Operating System 兼容RHEL的格式
    • 中标麒麟:中标软件
    • Fedora:每6个月发行一个新版本
  • Alpine: 一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,只有5M左右大小。
  • ArchLinux:轻量简洁,遵循K.I.S.S.原则( keep it simple and stupid ),Manjaro。
  • Gentoo:极致性能,不提供传统意义的安装程序,下载源代码在本机上编译安装软件。
  • LFS:Linux From scratch 自制Linux,只是一个说明书。
  • Android:kernel+busybox(工具集)+java虚拟机。

Linux 分支参考网站:http://futurist.se/gldt/

Linux发行版排名: https://distrowatch.com/dwres.php?resource=popularity

RedHat 红帽公司
在这里插入图片描述
图1-52 Marc Ewing(马克·尤因)

Marc Ewing早在卡内基梅隆大学读书的时候就戴着他祖父的红色曲球帽. Marc在Marc Ewing大学常把自己的软件命名为Red Hat — Red hat 1, Red Hat 2 用来区别他人的软件. 所以当他开始自己的Linux项目, 自然就会命名为Red Hat Linux。Ewing非常乐于帮助同学解决计算机问题 “你的朋友可能会说, 去跟我的朋友Marc交流. 谁是Marc? 他是红帽男孩. ” 所以, 至少在他们最亲密的朋友当中, 红帽子成为了技术专家的同义词。

1993年,Bob Young 建立ACC公司,营销Linux和UNIX的支持软件和书籍杂志。

1995年,Bob Young 收购了Marc Ewing的业务,合并后的ACC公司成为新的Red Hat软件公司,发布了Red Hat Linux 2.0。

2018年10月29日,IBM宣布将以约340亿美元收购开源软件和技术主要供应商红帽公司。

红帽发行版本

Red Hat Linux 1.0 (Mother’s Day) 1994年11月03日

Red Hat Linux 2.0 1995年09月20日

Red Hat Linux 3.0 (Picasso) 1996年05月01日

Red Hat Linux 4.0 (Colgate) 1996年10月08日

Red Hat Linux 5.0 (Hurricane) 1997年12月01日

Red Hat Linux 6.0 (Hedwig) 1999年04月26日

Red Hat Linux 6.2 (Zoot) Red Hat Linux 6.2E 2000年04月03日

Red Hat Linux 7.0 (Guinness) 2000年03月27日

Red Hat Linux 7.2 (Enigma) Red Hat Enterprise Linux 2 2001年10月22日

Red Hat Linux 8.0 (Psyche) 2002年09月30日

Red Hat Linux 9.0 (Shrike) 2003年03月31日

Red Hat Enterprise Linux 3.0(Taroon) Fedora 1 (Yarrow) 2003年10月22日

Red Hat Enterprise Linux 4.0 2005年02月15日

Red Hat Enterprise Linux 5.0(Tikanga) 2007年03月14日

Red Hat Enterprise Linux 6.0(Santiago) 2010年11月10日

Red Hat Enterprise Linux 7.0(Maipo) 2014年06月10日

Red Hat Enterprise Linux 8.0 2019年05月07日

Red Hat Enterprise Linux 9.0 2022年5月18日

范例9:查看当前操作系统的内核版本

[root@rocky9 ~]# uname -r
5.14.0-284.11.1.el9_2.x86_64

1.2.7 开源 Open Source

1998 年的 2 月 5 日,一场小型聚会在美国加州的 VA 研究中心举行,与会的人包括了 一众信息技术领域的知名学者和工程师。正是在这场会上,大家同意了 Christine Peterson 女士提出的用“开放源代码”(Open Source)一词来替代容易在英语人士中引起歧义的“自由软件”(Free Software)一词,表达的是同样的软件和意思,但更方便理解更容易获取更多支持。从那一天开始,“开源”正式诞生。

在这里插入图片描述
图1-53 开源软件

开源 Open Source

软件和源代码提供给所有人,自由分发软件和源代码,free 自由,不是免费的意思。

能够修改和创建衍生作品。

开放源代码 - 维基百科:https://zh.wikipedia.org/wiki/开放源代码,前面是维基百科对开放源代码的详细介绍。

软件分类:

商业:收费,源码也不公开

共享:免费使用,但源码不公开

自由:源代码公开

开源项目是早期GUN提出的,不过真正这个名字是1998年把它正式命名成Open Source,开源是源代码放开的,而且是可以随便流传,随便拷贝的,但是开源并不代表着免费,开源和免费不一定是一样的,开源和免费是两码事,开源并不代表着不收费,比方说红帽的Linux版本,红帽的RHEL版本是开源的,但是你要用,你要去希望它提供技术支持是要收钱的,所以开源和免费不是同一回事,开源不等于免费。

开源协议

世界上的开源许可证,大概有上百种。
在这里插入图片描述
​图1-54 开源协议

  • GPLv2, GPLv3, LGPL(lesser) :通用公共许可 copyleft
  • Apache: apache
  • BSD: bsd
  • Mozilla
  • MIT

为了保证开源它有各种开源协议,有LGPL、Mozilla、BSD、MIT、Apache等,图1-54开源协议中哪个开源协议是最宽容的,首先第一个问题他人修改源代码是否可以闭源,No是不可以闭源,Yes是可以闭源说明它很宽容,所以Yes这边就相对宽容,No这边的就相对严格,每一个修改过的文件是否都必须放置版权说明,Yes是必须放的那就是有要求了,No可以不放就很宽容,接着衍生软件的广告是否可以用你的名字促销,NO是不可以,Yes是可以,当然MIT是最宽容的,最不宽容的是谁,从图1-54左边看,新增代码是否采用同样的许可证,Yes是必须是的,所以GPL是最严格的。

范例10:查看内核的详细信息

[root@rocky9 ~]# dnf info kernel
Last metadata expiration check: 0:03:52 ago on Sat 11 Nov 2023 03:37:59 PM CST.
Installed Packages
Name         : kernel
Version      : 5.14.0
Release      : 284.11.1.el9_2
Architecture : x86_64
Size         : 0.0  
Source       : kernel-5.14.0-284.11.1.el9_2.src.rpm
Repository   : @System
From repo    : anaconda
Summary      : The Linux kernel
URL          : https://www.kernel.org/
License      : GPLv2 and Redistributable, no modification permitted # 可以看到linux内核使用了GPLv2和可重新发布,不允许修改的协议
Description  : The kernel meta package

Available Packages
Name         : kernel
Version      : 5.14.0
Release      : 284.30.1.el9_2
Architecture : x86_64
Size         : 3.4 M
Source       : kernel-5.14.0-284.30.1.el9_2.src.rpm
Repository   : baseos
Summary      : The Linux kernel
URL          : https://www.kernel.org/
License      : GPLv2 and Redistributable, no modification permitted
Description  : The kernel meta package
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raymond运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值