(1.计算机基础和Linux安装)

内存概述

  • 计算机系统
  • 计算机硬件组成
  • 操作系统
  • Linux相关介绍
  • Linux哲学思想
  • 获取Linux
  • 虚拟机
  • Linux安装

1 计算机系统

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

1.1 计算机硬件

计算机发展历史:

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

1.1.1 冯诺依曼体系结构

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

  • 数字计算机的数制采用二进制,bit位,byte 字节 1 byte = 8 bit
  • 计算机应该按照程序顺序执行
  • 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成 计算机的硬件五大组件
  • 控制器:指挥系统
  • 运算器:数据和逻辑运算
  • 存储器:存储系统
  • 输入设备:接收外部信息
  • 输出设备:输出计算机内部信息到外部设备
1.1.2.1 二进制和十进制转换
  • 2^0=1=1b
  • 2^1=2=10b
  • 2^3=8=1000b
  • 2^4=16=10000b
  • 2^5=32=100000b
  • 2^6=64=1000000b
  • 2^7=128=10000000b
  • 2^8=256=100000000b
  • 2^9=512=1000000000b
  • 2^10=1024=10000000000b
  • 2^11=2048=100000000000b
  • 2^12=4096=1000000000000b
1.1.2.2 常见单位
  • 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 1024G
  • 10的9次方 G 二进制2^30 1024M
  • 10的6次方 M 二进制 2^20 1024K
  • 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
  • 10d的-18次方 a 范式:十进制和二进制互转换


范式:不同进制转换

#十进制转二进制:echo "obase=2;255" | bc
#八进制转十进制:echo "obase=10;ibase=8;377" | bc
#二进制转十进制:echo "obase=10;ibase=2;11111111" | bc
#二进制转16进制:echo "obase=16;ibase=2;11111111" | bc

摩尔定律

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

1.1.4 计算机分类

1.1.4.1 按规模划分
  1. 超级计算机 (Super computer)是指能够执行一般个人电脑无法处理的大量资料与高速运算的电脑。就超级计算机和普通计算机的组成而言,构成组件基本相同,但在性能和规模方面却有差异。超级计算机主要特点包含两个方面:极大的数据存储容量和极快速的数据处理速度,因此它可以在多种领域进行一些人们或者普通计算机无法进行的工作。
  2. 大型计算机 或者称大型主机,英文名mainframe。大型机使用专用的处理器指令集、操作系统和应用软件。大型机一词,最初是指装在非常大的带框铁盒子里的大型计算机系统,以用来同小一些的迷你机和微型机有所区别。大多数时候它却是指system/360 开始的一系列的IBM计算机。这个词也可以用来指由其他厂商,如Amdahl, Hitachi Data Systems (HDS) 制造的兼容的系统。有些人用这个词来指IBM的AS/400 或者iSeries 系统,这种用法是不恰当的;因为IBM自己也只把这些系列的机器看作中等型号的服务器,而不是大型机。
  3. 小型计算机 小型机是指采用精简指令集处理器,性能和价格介于PC服务器和大型主机之间的一种高性能 64 位计算机。国外小型机对应英文名是minicomputer和midrange computer。midrange computer是相对于大型主机和微型机而言,该词汇被国内一些教材误译为中型机,minicomputer一词是由DEC公司于1965年创造。在中国,小型机习惯上用来指UNIX服务器。1971年贝尔实验室发布多任务多用户操作系统UNIX,随后被一些商业公司采用,成为后来服务器的主流操作系统。该服务器类型主要用于金融证券和交通等对业务的单点运行具有高可靠性的行业应用。
  4. 微型计算机
1.1.4.2 按功能和客户机分类

服务器server和客户机client

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

1.1.4.3 服务器按外形分类

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

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

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

机架式Rack服务器 机架式Rack服务器.jpeg

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

1.1.5 服务器硬件组成

image.png 器配置示例(参考价格47588元) image.png

1.1.5.1 服务器硬件---CPU

image.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发展历程 image.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可以访问的物理地址空间

1.1.5.2 服务器硬件---主板

image.png

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

1.1.5.3 服务器硬件---内存

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

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

内存和外存的区别:

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

服务器内存常用技术: 1、 在线备用内存技术

  • 当主内存或者是扩展内存中的内存出现多位错误时或者出现物理内存故障时,服务器仍继续运行
  • 由备用内存接替出现故障内存的工作
  • 备用的内存区域必须比其它区域的内存容量要大或相同
  • 2 、内存镜像
  • 镜像为系统在出现多位错或内存物理故障时提供数据保护功能,以保证系统仍能正常的运行
  • 数据同时写入两个镜像的内存区域
  • 从一个区域进行数据的读取

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

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

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

范例: 单通道DDR(Double Data Rate双倍速率)内存带宽计算 DDR4-4000:4000MHz64bit/8=32000MB/S DDR4-3600:3600MHz64bit/8=28800MB/S 双通道: DDR4-4000:4000MHz64bit2/8=64000MB/S

1.1.5.4 服务器硬件---硬盘

image.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 ) 机械硬盘: image.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硬盘: image.png

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

1.1.5.5 服务器硬件---网卡

image.png

服务器都在主板上集成了网卡,传输速率为1Gbps,即千兆网卡 特殊应用需要高端网卡,如光纤网卡,Infiniband网卡等,传输速率能达到10Gbps、20Gbps,即万兆网卡

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

服务器硬件---阵列卡 image.png

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

服务器硬件---电源 image.png

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

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

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

服务器硬件---机柜 image.png

机架式服务器-服务器放置在机柜中 通常使用的机柜是42U(约2米高)机柜( 1U=44.45mm) 外观尺寸一般为:宽600深1000高2000(mm) 在一个机架上,累计设备U数一般不超过26U,全1U设备部署数量一般不超过16台,全2U设备一般不超过12台,全4U设备一般4到7台

机架式服务器-机架及其配件 image.png

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

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

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

image.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来说,这个世界真是太慢了! 存储器的层次结构 image.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等采用的都是类似的思想。

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

1.2 操作系统

1.2.1 操作系统功能

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

主要功能:

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

OS分类:

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

1.2.2 操作系统相关概念

**接口:**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操作系统编译执行

用户态和内核态 image.png

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

system call 和 Library function 函数库和系统调用system call image.png

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

用户和内核空间 image.png

用户空间:User space 用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响 只能执行简单的运算,不能直接调用系统资源,必须通过系统接口( system call),才能向内核发出指令

内核空间:Kernel space 是 Linux 内核的运行空间 可以执行任意命令,调用系统的一切资源

范例:

str = "www.baidu.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

服务器操作系统市场 image.png

UNIX历史 image.png

兼容分时系统 Multics image.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只花了一个月就编写完了操作系统的内核,在这个一个月中,他一周一个内核,一个文件系统,一个编辑器和一个编译程序的完成 image.png

1969 Unix 雏形 UNICS Ken Thompson 汇编语言 B语言 1973 正式命名为 Unix Dennis Ritchie C语言 1977 BSD Berkeley Software Distribution 伯克利大学 1979 System V架构 版权声明 HP-UNIX IBM AIX “不对学生提供源码” 收回版权 1984年 Minix操作系统 Andrew S. Tanenbaum 荷兰阿姆斯特丹自由大学计算机科学系

GNU image.png

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

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

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

1.2.5 Linux

image.png

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 image.png

Linux的内核版本组成

  • 主版本号
  • 次版本号
  • 末版本号
  • 打包版本号
  • 厂商版本 image.png

Linux团队 image.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 采用了 musllibc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,只有5M左右大小
  • ArchLinux:轻量简洁,遵循K.I.S.S.原则( keep it simple and stupid ),Manjaro
  • Gentoo:极致性能,不提供传统意义的安装程序,下载源代码在本机上编译安装软件
  • LFS:Linux From scratch 自制Linux,只是一个说明书
  • Android:kernel+busybox(工具集)+java虚拟机

RedHat 红帽公司 image.png

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日

1.2.5 开源 Open Source

image.png

开源 Open Source

  • 软件和源代码提供给所有人,自由分发软件和源代码,free 自由,不是免费的意思
  • 能够修改和创建衍生作品

软件分类:

  • 商业:收费,源码也不公开
  • 共享:免费使用,但源码不公开
  • 自由:源代码公开

开源协议 世界上的开源许可证,大概有上百种 image.png

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

2 Linux 安装

2.1 Linux哲学思想

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

2.2 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版

2.3 安装 Linux 系统

2.3.1 Linux安装前准备

虚拟机:用软件(如:vmware,virtualbox等)模拟硬件,方便实验的灵活配置 image.png

虚拟化软件,建议使用 Vmware Workstation image.png

虚拟硬件配置

  • CPU:2核或更多
  • 内存:1G以上,推荐2G
  • 硬盘:一块硬盘,200G
  • 网卡:NAT模式
  • 光盘:挂载对应版本的ISO文件

打开虚拟化功能 在很多家用台式机和笔记本电脑上,虚拟化功能默认是关闭的,再要打开后才能使用Vmware等虚拟化软件,否则会报类拟以下的错误

Intel CPU 报错提示 image.png

AMD CPU 报错提示 image.png

在电脑的BIOS里,打开虚拟化功能 范例:Intel CPU 虚拟化功能 image.png

范例:AMD CPU 虚拟化功能 image.png

2.3.2 安装 CentOS

2.3.2.1 针对CentOS 8 创建虚拟机环境

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2.3.2.2 安装CentOS 8

加电开机 image.png

开始安装 image.png

选择语言 image.png

设置磁盘空间分配策略 image.png

自定义分区 image.png

image.png

创建/boot分区 image.png

image.png

创建根分区 image.png

创建swap分区 image.png

image.png

image.png

创建自定义的/data 数据分区 image.png

image.png

安装指定包组 image.png

image.png

配置网络和主机名 image.png

image.png

设置时区和时间 image.png

image.png

image.png

设置root用户的密码 image.png

image.png

image.png

image.png

创建普通用户并设置密码 image.png

image.png

第一次启动 image.png

许可协议 image.png

image.png

image.png

用户登录界面 image.png

image.png

image.png

首次登录初始化桌面环境 image.png

image.png

image.png

image.png

image.png

image.png

CentOS 8.0 桌面 image.png

2.3.3 安装 Ubuntu

2.3.3.1 针对 Ubuntu 1804 创建虚拟机环境

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2.3.3.2 安装 Ubuntu 1804

开始安装,选择语言 image.png

选择安装Ubuntu Server image.png

选择安装过程的语言 image.png

选择所在国家或地区为Hong Kong image.png

选择No 不检测键盘布局 image.png

选择键盘布局 image.png

image.png

指定主机名 image.png

创建用户 image.png

设置用户密码 image.png

image.png

image.png

确定位置和时区 image.png

自定义分区规则 image.png

选中磁盘进行分区 image.png

创建空的分区表用于创建新分区 image.png

选中 FREE SPACE,进行分区 image.png

创建新分区 image.png

指定根分区占全部剩余空闲空间的99% image.png

选择默认主分区 image.png

默认从开始处划分新分区 image.png

image.png

选中剩余的FREE SPACE,继续创建分区 image.png

image.png

指定swap分区占所有剩余空闲的空间 image.png

image.png

选中文件系统项,修改文件系统 image.png

选择SWAP文件系统类型 image.png

确定上述设置 image.png

完成所有分区设置 image.png

确定写入磁盘 image.png

设置HTTP 代理为空 image.png

不自动更新软件 image.png

安装SSH 服务(一定要用空格键,不要用回车键,进行选中) image.png

安装GRUB启动程序 image.png

安装完成,reboot image.png

登录界面 image.png

输入用户名和密码进行登录 image.png

登录后界面 image.png