1 计算机系统

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

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

计算机基础及Linux简介_二进制数

1.1 冯·诺依曼体系结构

现代计算机发展所遵循的基本结构形式始终是冯·诺依曼结构。这种结构特点是 “程序存储,共享数据,顺序执行”,需要 CPU 从存储器取出指令和数据进行相应的计算。

  • 计算机处理的数据和指令一律用二进制数表示
  • 顺序执行程序的每一条指令
  • 计算机由运算器,控制器,存储器,输入设备和输出设备五大部份组成

计算机基础及Linux简介_CentOS_02

1.2 二进制与十进制间的转换

十进制  --->  二进制
1=2^0          1
2=2^1          10  
4=2^2          100
8=2^3          1000 
16=2^4         10000
32=2^5         100000
64=2^6         1000000
128=2^7        10000000
256=2^8        100000000

示例:二进制数10011转十进制

二进制数 10011
用数轴表示 可以写成这样
<------|------|------|------|------|------|------|------|------>
      2^7    2^6    2^5    2^4    2^3    2^2    2^1    2^0
                            1      0      0      1      1

换成10进制 可以这样算
二进制数 10011
等于
十进制数 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 16+0+0+2+1 = 19

或者这样算
10000  16
00010  2
00001  1

即二进制数 10011
等于
十进制数 10011 = 16+2+1 = 19

1.3 计算机分类

按规模划分

  • 超级计算机
  • 大型计算机
  • 小型计算机
  • 微型计算机

按功能和角色划分

  • 服务器Server
  • 客户机client

按外形分类

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


2 操作系统和Linux

2.1 操作系统功能

什么是操作系统:

操作系统(operating system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面

在远古时期,硬件不够丰富,计算机设计也很简陋,那时候,应用程序直接跑在硬件上,一台电脑,只跑一个程序

计算机基础及Linux简介_Red_03

随着技术的发展,硬件越来越丰富,功能也越来越强大,性能也越来越好,这种情况下,如果还是一台机只跑一个程序,就太浪费了,而且底层硬件不断丰富,应用程序要对接的硬件也越来越多,这种情况下,操作系统就应顺势而生

计算机基础及Linux简介_二进制数_04

其主要功能包括:

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

OS分类:

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

2.2 操作系统相关概念

接口

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

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

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

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

API

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

API 应用程序接口是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节

POSIX

  • Portable Operating System Interface 可移植的操作系统接口
  • IEEE在操作系统上定义的一系列API标准
  • POSIX兼容的程序可在其它POSIX操作系统编译执行

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

系统调用:就是调用操作系统所提供的API来实现某些功能的行为,硬件资源都是由操作系统统一管理,当程序需要调用硬件某些功能的时候,只能通过调用操作系统提供的API来实现,这就是系统调用 (System Call)

库函数:将提供一些特定功能的代码进行封装,只暴露出一些函数,比如说JSON库(专门用来处理json格式的数据),网络库(专门处理网络相关的业务),提供给第三方调用,那这些函数,就称为库函数。库函数在Ring3 层工作,在某些情况下,调用库函数最终也会发展为系统调用

计算机基础及Linux简介_Red_05

用户和内核空间

用户空间:User space

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

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

内核空间:Kernel space

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

示例:

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

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

编程语言

  • 低级语言:计算机能理解的语言,二进制
  • 机器语言:0和1
  • 汇编语言:和机器语言一一对应,与硬件相关的特有代码、驱动程序开发
  • 高级语言:人类语言实现,比如,英文,中文,java,python,go,php,Objective-C,C#,易语言(中文),C 语言,系统级应用、驱动程序

2.3 服务器三大操作系统

  • Windows
  • Linux:GNU/Linux
  • Unix:1969年 Ken Thompson

2.4 开源 Open Source

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

软件分类

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

开源协议

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

计算机基础及Linux简介_CentOS_06

2.5 Linux的内核版本组成

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

计算机基础及Linux简介_二进制数_07

2.6 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虚拟机

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

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

Linux 发行版体验:https://distrotest.net/


CentOS 和 Rockey Linux

RHEL (Red Hat Enterprise Linux) 红帽企业版Linux

Red Hat 公司自身的产品中本身就包含了个人版(Red Hat Linux)和企业版 (RHEL)

基于GPL开源协议,不论是 Red Hat Linux 还是 Red Hat Enterprise Linux,用户都可以直接从网络上获取,但是从2003年开始,Red Hat Linux 被新项目(Fedora core)所取代,并且频繁更新,所以几 乎无法在企业环境中使用。

同样基于GPL开源协议,RHEL在发布的时候必须发布源代码,所以无论是二进制的发行版,还是源码,用户都可以直接免费获取,但是不能在商业化场景中使用,商用必须购买许可(licence),另外Red Hat 公司也提供技术支持、咨询、解决方案等。

CentOS (Community enterprise operating system) 社区企业操作系统

就是将 RHEL 发行的源代码从新编译一次,形成一个可使用的二进制版本,RHEL 是遵守GPL开源协议的,所以重新编译是合法。但是得去掉商标,版权信息等。CentOS 可以得到 RHEL 的所有功能,甚至是更好的软件,但 CentOS 并不向用户提供商业支持,当然也不负上任何商业责任。漏洞修复和软件包升级等,相对于 RHEL的有偿服务来说,也有一定的延时

2020年12月8日IBM宣布将惯例支持到2029年 CentOS8,提前在2年内就终结,唯一的升级途径是       CentOS Stream—AKA,RHEL 的Beta发布,并建议不再生产环境中使用。预示着 CentOS 可能会正式死亡。CentOS已死,但是 CentOS 精神将会永存

随后以 CentOS 创始人之一Gregory Kurtzer为首,8小时内250人啸聚网络,计划以创建 Rocky Linux(Rocky为已经逝世的另外一个CentOS创始人)取代CentOS。Rocky Linux 与 RHEL 兼容目前已经创建了 Github Rocky Linux项目组织 (github.com/rocky-linux/rocky) 和官网 (rockylinux.org)


Debian 和 Ubuntu

Debian 是从 1993 年由 Ian Murdock(伊恩·默多克) 发起的,受到当时 Linux 与 GNU 的鼓舞,目标是成为一个公开的发行版,经过二十几年的迭代更新Debian 从一个小型紧密的自由软件骇客(hacker)小组,逐渐成长成今日庞大且运作良好的开发者与用户社群,Debian 的名字是由 Debian 的创始人 Ian Murdock (伊恩·默多克) 和他的爱妻Debra(黛布拉) 两人的名字组合而成的

Debian 是由大约一千个分布在世界各地的开发者无偿地利用他们的业余时间开发的,而这些开发者实际 上大部分都没见过面,彼此之间的通讯大多是通过电子邮件(lists.debian.org 上的邮件列表)和 IRC (irc.debian.org 上的#debian 频道)来完成的,目前Debian 提供59000多个软件包的维护与更新

Debian官网 https://www.debian.org/
官方镜像地址 https://www.debian.org/mirror/list
清华大学下载地址 https://mirrors.tuna.tsinghua.edu.cn/debian-cd/

Ubuntu 早期是一个开源的 GNU/Linux 操作系统,Ubuntu 是基于 Debian GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队打造的,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,类似儒家“仁爱”的思想,意思是“人性”、 “我的存在是因为大家的存在”,是非洲传统的一种价值观。

Ubuntu 的版本号有个固定的特征,其使用一个形容词和一个动物名称组成,并且形容词和名词的首字母都是一致的,Ubuntu版本的命名规则是根据正式版发布的年月命名,Ubuntu16.04 也就意味着2016年4月发布的Ubuntu,研发人员与用户可从版本号码就知道正式发布的时间。 每两年的4月份,都会推出一个长期支持版本(LTS),其支持期长达五年,而非 LTS 版本的支持期通常只有半年。

中文官网 https://cn.ubuntu.com/
英文官网 https://ubuntu.com/