计算机系统

计算机(Computer):俗称电脑,是一种能接收和存储信息,并按照存储在其内部的程序对海量数据 进行自动、高速地处理,然后把处理结果输出的现代化智能电子设备。

计算机有很多形式,比如:生活中常见的家用电脑,笔记本,智能手机,平板电脑等,还有生产环境中 提供重要业务支撑的各种服务器(Server),都算是计算机。

其中一个完整的计算机系统由硬件(Hardware)系统和软件(Software)系统两大部分组成。

JfJFi9

计算机硬件

计算机发展历史:

  1. 第一代计算机(1946-1957) 电子管时代

  2. 第二代计算机(1958-1964) 晶体管时代

  3. 第三代计算机(1965-1970) 集成电路时代

  4. 第四代计算机(1971以后) 大规模集成电路时代

世界上第一台计算机

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

冯·诺依曼体系结构

JftQgI.png

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

  1. 数字计算机的数制采用二进制,bit 位, byte 字节 1 byte =8 bit

  2. 计算机应该按照程序顺序执行

  3. 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成

计算机分类

按规模划分

  1. 超级计算机:Super Computer,又称巨型计算机,应用于国防尖端技术和现代科学计算中。巨型机的运算速度可达每秒百万亿次以上, “天河一号”为我国首台千万亿次超级计算机。

  2. 大型计算机:具有较高的运算速度,每秒可以执行几千万条指令,而且有较大的存储空间。往往用 于科学计算、数据处理或作为网络服务器使用,如:IBM z13 mainframe

  3. 小型计算机:指采用精简指令集处理器,性能和价格介于PC服务器和大型主机之间的一种高性能64 位计算机。在中国,小型机习惯上用来指UNIX服务器

  4. 微型计算机:指采用 X86 CPU 架构的PC服务器,中央处理器(CPU)采用微处理器芯片,体积小巧轻便,广泛用于商业、服务业、工厂的自动控制、办公自动化以及大众化的信息处理,互联网公 司发起去IOE运动,代替小型机

按功能和角色划分

  • 服务器和客户机

    • 服务器:即 Server,计算机的一种,通常是网络中为客户端计算机提供各种服务的高性能的计算机,服务器在网络操作系统的控制下,将与其相连的硬盘、磁带、打印机及昂贵的专用通讯设备提供给网络上 的客户站点共享,也能为网络用户提供集中计算、信息发布及数据管理等服务。

    • 客户机:即 Client,向服务器提出请求,需要服务器为之提供相应的服务和支持的计算机。

  • 服务器按应用功能可分为:

    Web服务器、数据库服务器、文件服务器、中间件应用服务器、日志服务器、监控服务器、程序版本控 制服务器、虚拟机服务器、邮件服务器、打印服务器、域控制服务器、多媒体服务器、通讯服务器、 ERP服务器等

服务器按外形分类

  • PC器常见的三种外型:

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

    JfUwn0.png

早期的服务器形式,目前较少使用
外形以及结构和平时使用的立式PC差不多机箱空间大,主板扩展性较强,插槽较多
预留了足够的内部空间,以便日后进行硬盘和电源的冗余扩展,设计一般都考虑降噪

  • 刀片式Blade服务器

    JfaAuq.png

在标准高度的机架式机箱内可插装多个卡式的服务器单元,实现高可用和高密度 更高的密度,集中管理,高性能,灵活扩展,按需配置
可以使用系统软件将这些母板集合成一个服务器集群。在集群模式下,所有的母板可以连接起来提供高 速的网络环境,并同时共享资源,为相同的用户群服务

  • 机架式Rack服务器

    JfaWGQ.png

    Jfaoq0.png
  • 按照统一标准设计,配合机柜统一使用,便于统计管理,高密度,节省空间,常用U为单位,1U=1.75英寸=44.45毫米,机箱尺寸比较小巧,在机柜中可以同时放置多台服务器

  • 机架式服务器的宽度为19英寸(48.26cm),厚度通常有1U,2U,3U,4U,5U,7U几种标准的 服务器

  • 机柜的尺寸也是采用通用的工业标准,如:宽度600mm,深度1000mm,高2000mm(42U)

  • 现阶段是最主流的的服务器

服务器硬件组成

JfdlFS.png

服务器配置示例(参考价格47588元)

JfdL0P.png

服务器硬件–CPU

JfwT4U.png

  • 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架构,当前最先进的华为的海 思麒麟990 CPU,高通的骁龙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公司

    • Intel:

      • Xeon 至强
      • Itanium 安腾
    • AMD: Althlon MP

    • IBM: Power

按照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”,在之前曾使用过“Clackamas Technology” (CT)、“IA-32e”及“EM64T”

Intel公司的CPU发展历程

JfB1JO.png

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可以访问的物理地址空间

服务器硬件—主板

JfBWT0.png

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

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

服务器硬件—内存

JfrjzD.png

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

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

  • 内存和外存的区别:

    • 内存断电后数据丢失

    • 外存断电后数据可以保存

  • 服务器内存常用技术:

  1. 在线备用内存技术

    • 当主内存或者是扩展内存中的内存出现多位错误时或者出现物理内存故障时,服务器仍继续运行
    • 由备用内存接替出现故障内存的工作
    • 备用的内存区域必须比其它区域的内存容量要大或相同
  2. 内存镜像

    • 镜像为系统在出现多位错或内存物理故障时提供数据保护功能,以保证系统仍能正常的运行
    • 数据同时写入两个镜像的内存区域
    • 从一个区域进行数据的读取
  • 容量:即该内存的存储容量,单位一般为GB

  • 内存带宽:

    内存带宽是指内存与北桥芯片之间的数据传输率
    单通道内存控制器一般都是64-bit的,8个二进制位相当于1个字节,换算成字节是64/8=8,再乘以内存 的运行频率,如果是双通道内存就要再乘以2

  • 计算公式: 内存带宽=内存总线频率×数据总线位数/8

    范例:

    • 单通道DDR(Double Data Rate双倍速率)内存带宽计算

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

      • DDR4-4000:4000MHz64bit2/8=64000MB/S

服务器硬件—硬盘

Jfs4tP.png

  • 常见的磁盘接口种类:

    • IDE:Integrated Drive Electronics,电子集成[驱动器,早期家用电脑常用接

    • SCSI:Small Computer System Interface,小型计算机系统接口,早期的服务器常用接口

    • SATA:Serial ATA (Advanced Technology Attachment 高技术配置),家用电脑常用的接口

    • SAS:Serial Attached SCSI,是目前服务器上主流的接口

    • 光纤通道:Fiber Channe,高性能服务器上采用的接口

    • M.2 :固态硬盘接口,性能更强

  • 结构分类:

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

    JfyucD.png

    • 存储介质(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硬盘:

    Jf6P8f.png

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

服务器硬件—网卡

Jf6YZ9.png

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

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

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

  • 服务器硬件—阵列卡

Jf6jzT.png

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

支持的多种RAID级别,RAID0,1,5,6等阵列卡提供缓存及电池保护

  • 服务器硬件—电源

    JfclFI.png

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

  • 服务器硬件—显卡

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

  • 服务器硬件—热插拔技术

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

  • 服务器硬件—机柜

    Jf2mad.png

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

通常使用的机柜是42U(约2米高)机柜( 1U=44.45mm) 外观尺寸一般为:宽600深1000\高2000(mm)

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

  • 机架式服务器-机架及其配件

    Jf2taj.png

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

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

Jf2ain.png

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

Jf2rsU.png

上图可以看到,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来说,这个世界真是太慢了!

  • 存储器的层次结构

Jf2zy8.png

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

  • 并发和多线程

    CPU的速度超级快,不能老是让它闲着,要充分地压榨它!这里有两个强劲的理由:

  1. 人类需要多个程序“同时”运行,我们要把CPU的时间进行分片,让各个程序在CPU上轮转,造成一 种多个程序同时在运行的假象,即并发

  2. 当CPU遇到IO操作(硬盘,网络)时,不能坐在那里干等“几个月”甚至“几年”,在等待的时候,一定要切换,去执行别的程序。

说起来简单,但是程序的切换需要保存程序执行的现场,以便以后恢复执行,于是需要一个数据结构来 表示,这就是进程了。如果一个进程只有一个“执行流”, 如果进程去等待硬盘的操作,那这个程序就会被阻塞,无法响应用户的输入了,所以必须得有多个“执行流”,即多线程

  • 缓存

需要持久化的数据一定要保存到硬盘中,但是硬盘超级慢,支持不了大量的并发访问,那怎么办呢?

可以把最常访问的热点数据放到CPU的缓存中嘛, 其实CPU也是这么做的,但是CPU的L1, L2, L3级缓存实在是太小, 根本满足不了需求。于是只好退而求其次,把热点数据放到速度稍慢的内存中,于是应用程序的缓存就出现了。缓存虽然是解决了问题,但是也带来了更多的问题,例如:缓存数据和数据库 数据怎么保持一致性?

缓存如果崩溃了该怎么处理?数据在一台机器的内存放不下了,要分布到多个机器上,怎么搞分布式 啊,用什么算法?…..

  • 异步

对于Tomcat这样的应用服务器,对于每个请求都要用一个线程来处理,如果现在有一万个请求进来, Tomcat会建立1万个线程来处理吗? 不会的,因为线程多了开销会很大 ,线程切换起来也很慢,所以它只好用个线程池来复用线程。现在假设线程池中有一千个可用线程(已经非常多了),它们都被派去 访问硬盘,数据库,或者发起网络调用,这是非常慢的操作,导致这一千个线程都在等待结果的返回

(阻塞了),那剩下的九千个请求就没法处理了,对吧?所以后来人们就发明了新的处理办法,仅使用 几个线程(例如和CPU核心数量一样),让他们疯狂运行,遇到I/O操作,程序就注册一个钩子函数放 在那里,然后线程就去处理别的请求,等到I/O操作完成了,系统会给这个线程发送一个事件, 线程就回过头来调用之前的钩子函数(也叫回调函数)来处理。

这就是异步,非阻塞的处理方式。nginx,Node.js,Vert.x等采用的都是类似的思想。

  • 单线程

Redis使用单线程的方式来处理请求的,为什么用单线程就可以呢? 它为什么不像Tomcat那样使用多线程和线程池呢?因为它面对的仅仅是内存,内存的速度在计算机的体系中仅次于CPU,比那些网络操作 不知道要快到哪里去了所以这个唯一的线程就可以快速地执行内存的读写操作,完成从许多网络过来的 缓存请求了。单线程还有个巨大的优势,没有竞争,不需要加锁!

操作系统

操作系统功能

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

JfT6e0.png

  • 主要功能:

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

    • 服务器OS:CentOS,Ubuntu,Windows Server,AIX

    • 桌面OS:Windows 10,Mac OS,Fedora

    • 移动设备OS:Andriod,IOS,AliOS,HarmonyOS

操作系统相关概念

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

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

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

  • 命令行:实际是一个叫shell的终端程序提供的功能,该程序底层的实质还是调用一些操作系统提 供的函数
  • 窗口界面:窗口界面通过编写的窗口程序接收来自操作系统消息队列的一些鼠标、键盘动作,进而做出一些响应

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

API

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

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

IEEE在操作系统上定义的一系列API标准

POSIX兼容的程序可在其它POSIX操作系统编译执行

用户态和内核态

JfHGUf.png

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

函数库和系统调用system call

JfHU2Q.png

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

用户和内核空间

JfHBbq.png

用户空间:User space

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

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

  • 内核空间:Kernel space

    • 是 Linux 内核的运行空间

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

  • 范例:

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

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

编程语言

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

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

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

各种操作系统

操作系统演变

  • 单用户系统:一次只能支持一个用户程序的运行。向用户提供联机交互式的工作环境,如:DOS

  • 批处理系统:用户将一批作业提交给操作系统后就不再交互,由操作系统控制自动运行,提高系统 运行效率

  • 多道程序系统:程序控制 CPU 处理顺序

  • 分时系统:提高系统利用率,操作系统控制 CPU 处理顺序

  • 个人计算机:每人用户对应一个系统,廉价,方便,易用

  • 分布式计算:每个用户对应多个系统,云计算,大数据处理

服务器三大操作系统

  • 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

    服务器操作系统市场

JfbRFf.png

UNIX历史

JfbIyj.png

兼容分时系统Multics

Jfb7mn.png

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

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

  • 1969 Unix 雏形 UNICS

    • Ken Thompson 汇编语言 B语言1973 正式命名为 Unix
  • 1973正式命名为Unix

    • Dennis Ritchie C语言
  • 1977 BSD

    • Berkeley Software Distribution 伯克利大学
  • 1979 System V架构 版权声明

    • HP-UNIX IBM AIX “不对学生提供源码” 收回版权
  • 1984年 Minix操作系统

    • Andrew S. Tanenbaum 荷兰阿姆斯特丹自由大学计算机科学系

GNU

GNU:GNU is Not Unix

1984年由Richard 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 richard Stallman 为了无止境寻找完美内核,而忘记了HURD的原本目的:能用的操作系统

Linux

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

官网:www.kernel.org

Linux操作系统:

完整的类UNIX操作系统

Linux内核+ GNU工具=Linux/GNU

如:CentOS,Ubuntu,Android

Linux的内核版本组成

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

JfLmCT.png

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 红帽公司

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日

开源 Open Source

JfONoq.png

开源Open Source

  • 软件和源代码提供给所有人,自由分发软件和源代码
  • 能够修改和创建衍生作品

软件分类

  • 商业
  • 共享
  • 自由

开源协议

世界上的开源许可证,大概有上百种

JfORFx.png

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

Linux 介绍

Linux哲学思想

  • 一切都是一个文件(包括硬件)
  • 小型,单一用途的程序
  • 链接程序,共同完成复杂的任务
  • 避免令人困惑的用户界面
  • 配置数据存储在文本中

Linux 生产主流版本

Linux 各种版本

Centos 各版本介绍

https://zh.wikipedia.org/wiki/CentOS

RHEL各版本介绍

https://zh.wikipedia.org/wiki/Red_Hat_Enterprise_Linux

Ubuntu 各版本介绍

https://zh.wikipedia.org/wiki/Ubuntu

https://blog.csdn.net/songfulu/article/details/85310273

获取发行版

CentOS

https://wiki.centos.org/Download

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

https://mirrors.tuna.tsinghua.edu.cn/centos/

Ubuntu

http://cdimage.ubuntu.com/releases/ server版

http://releases.ubuntu.com/ desktop版