1.操作系统
1.1 OS: Operating System,是一种通用目的的软件程序,有如下功能:
- 硬件驱动 , 进程管理
- 内存管理 , 网络管理
- 安全管理 , 文件管理
\
2.OS分类
- 服务器OS:RHEL(Red Hat Enterprise Linux),CentOS,Windows Server,AIX
- 桌面OS:Windows 10,Mac OS,Fedora
- 移动设备OS:Andriod,IOS,AliOS(阿里云OS),HarmonyOS(华为基于物联网的操作系统,据余承东说几乎能运行在所有硬件平台)
3.操作系统的演变
- 单用户系统
- 批处理系统:提高系统运行效率
- 多道程序系统:程序控制CPU处理顺序
- 分时系统:提高系统利用率,操作系统控制CPU处理顺序
- 个人计算机:每人用户对应一个系统,廉价,方便,易用
- 分布式计算:每个用户对应多个系统,云计算,大数据处理
4.interface 接口
接口:interface,来源于电气工程学科,指的是插座与插头的连接口,起到将电与电器连接起为的功能。后来延伸到软件工程里指软件包向外提供的功能模块的函数接口。所以接口是用来连接两个系统、起到进行信号转换和一些屏蔽细节的作用。
操作系统通过接口的方式,建立了用户与计算机硬件的沟通方式。用户通过调用操作系统的接口来使用计算机的各种计算服务。
操作系统一般会提供两个重要的接口来满足用户的一些一般性的使用需求:
命令行:实际是一个叫shell的终端程序提供的功能,该程序底层的实质还是调用一些操作系统提供的函数
窗口界面:窗口界面通过编写的窗口程序接收来自操作系统消息队列的一些鼠标、键盘动作,进而做出一些响应
5.开发接口标准
-
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 可移植的操作系统接口
- EEE在操作系统上定义的一系列API标准
POSIX兼容的程序可在其它POSIX操作系统编译执行
- EEE在操作系统上定义的一系列API标准
6.用户态和内核态
- 计算机硬件资源都是操作系统内核进行管理的,目前操作系统都是基于多任务、多用户的。如果每个用户进程都可以随便访问操作系统内核的模块,改变状态,那整个操作系统的稳定性、安全性都大大降低;所以有用户态和内核态之分。
\
- 为了将内核程序与用户程序隔离开,在硬件层面上提供了一次机制,将程序执行的状态分为了不同的级别,从0到3,数字越小,访问级别越高。0代表内核态,在该特权级别下,所有内存上的数据都是可见的,可访问的。3代表用户态,在这个特权级下,程序只能访问一部分的内存区域,只能执行一些限定的指令。
7.系统调用system call
- 对于非一般性使用需求,操作系统提供了一系列的函数调用给软件开发者,由软件开发者来实现一些用户需要的功能。这些函数调用由于是操作系统内核提供的,为了有别于一般的函数调用,被称为系统调用。比如使用C语言进行软件开发时,经常用的printf函数,它的内部实际就是通过write这个系统调用,让操作系统内核把字符打印在屏幕上的。
\
\
8.用户空间和内核空间
-
用户空间:User space
- 为用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响;在用户空间只能执行简单的运算,不能直接调用系统资源,必须通过系统接口( system call),才能向内核发出指令。
-
内核空间:Kernel space
- 是 Linux 内核的运行空间;可以执行任意命令,调用系统的一切硬件资源。
-
示例:
str = “www.magedu.com" // 用户空间
x = x + 100 // 用户空间
file.write(str) // 切换到内核空间,与磁盘交互
y = x + 200 // 切换回用户空间
#说明:
第一行和第二行都是简单的赋值运算,在 User space 执行。
第三行需要写入文件,就要切换到 Kernel space,因为用户不能直接写文件,
必须通过内核安排。第四行又是赋值运算,就切换回 User space
9.用户空间和内核空间交互示意图
\
10.UNIX历史示意
\
- 1965前后 Multics
- 贝尔实验室,麻省理工和通用电气联合开发Multics系统
- 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操作系统
- ndrew S. Tanenbaum荷兰阿姆斯特丹自由大学计算机科学系
11.Linux起源
- 991年的10月5日,Torvalds在comp.os.minix新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sources for 386-AT) — FREAX(含义是怪诞的、怪物、异想天开)
- 类Unix的内核,在GPL下发布
- 官网:www.kernel.org
- Linux操作系统:完整的类UNIX操作系统 Linux内核+ GNU工具 如:CentOS,Ubuntu,Android
12.Linux团队,中间躺下的为Linus Tovards
\
13.Linux发行版
slackware:SUSE Linux Enterprise Server (SLES) , OpenSuse桌面
debian:ubuntu,deepin(深度),mint
redhat:RHEL: RedHat Enterprise Linux, 每18个月发行一个新版本
CentOS:兼容RHEL的格式
中标麒麟:中标软件
Fedora:每6个月发行一个新版本
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
14.Linux内核版本号
\
15.Linux 发行版及维护者
-
Linux发行版的名称和版本号是由发行版的维护者决定的
- RedHat Enterprise Linux 7.5 由Red Hat公司发布
- SUSE Linux Enterprise Server 12 SP2 由Novell公司发布
- Debian Linux 9 由Debian维护社区发布
- Android 8.0 由Google公司发布
\
16.开源协议及协议条件示意
世界上的开源许可证,大概有上百种
GPLv2, GPLv3, LGPL(lesser) :通用公共许可 copyleft
Apache: apache
BSD: bsd
Mozilla
MIT
\
17.Linux哲学思想
- 一切都是一个文件(包括硬件)
- 小型,单一用途的程序
- 链接程序,共同完成复杂的任务
- 避免令人困惑的用户界面
- 配置数据存储在文本中
18.获取发行版的途径
- CentOS
- Ubuntu