# 操作系统的发展史(科普章节)
## 目标
- 了解操作系统的发展历史
- 知道 Linux 内核及发行版的区别
- 知道 Linux 的应用领域
## 01. 操作系统的发展历史
### 1.1 Unix
1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘、显示器),连接一台电脑
![](https://pic.downk.cc/item/5e7f1375504f4bcb0456343e.jpg)
**为了解决数量不够用的问题**
- 1965 年左后由 **贝尔实验室** 加入了 **麻省理工学院** 以及 **通用电气** 合作的计划 —— 该计划要建立一套 **多使用者(multi-user)**、**多任务(multi-processor)**、**多层次(multi-level)** 的 **MULTICS** 操作系统,想让大型主机支持 300 台终端
- 1969 年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究
- 1969 年从这个项目中退出的 **Ken Thompson** 当时在实验室无聊时,为了让一台空闲的电脑上能够运行 "星际旅行(Space Travel)" 游行,在 8 月份左右趁着其妻子探亲的时间,**用了 1 个月的时间**,使用汇编写出了 Unix 操作系统的原型
- 1970 年,美国贝尔实验室的 **Ken Thompson**,以 **BCPL** 语言为基础,设计出很简单且很接近硬件的 **B 语言**(取BCPL的首字母),并且他用 **B 语言** 写了第一个 UNIX 操作系统
- 1971 年,同样酷爱 "星际旅行(Space Travel)" 的 **Dennis M.Ritchie** 为了能早点儿玩上游戏,加入了 **Thompson** 的开发项目,合作开发 UNIX,他的主要工作是改造 **B 语言**,因为**B 语言** 的跨平台性较差
- 1972 年,**Dennis M.Ritchie** 在 **B 语言** 的基础上最终设计出了一种新的语言,他取了 **BCPL** 的第二个字母作为这种语言的名字,这就是 **C 语言**
- 1973 年初,**C 语言**的主体完成,**Thompson** 和 **Ritchie** 迫不及待地开始用它完全重写了现在大名鼎鼎的 **Unix 操作系统**
![002_unix之父](https://pic.downk.cc/item/5e7f138a504f4bcb0456429a.jpg)
肯·汤普逊(左)和丹尼斯·里奇(右)
#### C 语言
- 在把UNIX移植到其他类型的计算机上使用时,C 语言强大的移植性(Portability)在此显现
- 机器语言和汇编语言都不具有移植性,为 x86 开发的程序,不可能在 Alpha,SPARC 和 ARM 等机器上运行
- 而 **C 语言**程序则可以使用在任意架构的处理器上,只要那种架构的处理器**具有对应的 C 语言编译器和库**,然后将 C 源代码编译、连接成目标二进制文件之后即可运行
#### Unix 家谱
![003_unix家谱](https://pic.downk.cc/item/5e7f13a2504f4bcb045654de.jpg)
### 1.2 Minix
- 因为 **AT&T(通用电气)** 的政策改变,在 Version 7 Unix 推出之后,发布新的使用条款,将 UNIX 源代码私有化,在大学中不再能使用 UNIX 源代码
- **Andrew S. Tanenbaum(塔能鲍姆)** 教授为了能 **在课堂上教授学生操作系统运作的细节**,决定在不使用任何 AT&T 的源代码前提下,自行开发与 UNIX 兼容的操作系统,以避免版权上的争议
- 以 **小型 UNIX(mini-UNIX)**之意,将它称为 **MINIX**
### 1.3 Linux
- 1991 年 **林纳斯(Linus)** 就读于赫尔辛基大学期间,对 Unix 产生浓厚兴趣,尝试着在Minix 上做一些开发工作
- 因为 **Minix** 只是教学使用,因此功能并不强,**林纳斯** 经常要用他的终端 **仿真器(Terminal Emulator)** 去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这些在后来成为了 Linux 第一个内核的雏形,当时,他年仅 21 岁!
- 林纳斯
利用 GNU 的 bash 当做开发环境,gcc 当做编译工具,编写了 Linux 内核,一开始 Linux 并不能兼容 Unix
- 即 Unix 上跑的应用程序不能在 Linux 上跑,即应用程序与内核之间的接口不一致
- 一开始 Linux 只适用于 386,后来经过全世界的网友的帮助,最终能够兼容多种硬件
![004_林纳斯](https://pic.downk.cc/item/5e7f13c0504f4bcb04566b8b.jpg)
## 02. Linux 内核及发行版
### 2.1 Linux 内核版本
- **内核(kernel)**是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层
- Linux 内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环
- **稳定版**:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
- **开发版**:由于要试验各种解决方案,所以变化很快
- 内核源码网址:http://www.kernel.org
> 所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中
### 2.2 Linux 发行版本
- **Linux 发行版(也被叫做 GNU/Linux 发行版)**通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件
- 常见的发行版本如下:
- Ubuntu
- Redhat
- Fedora
- openSUSE
- Linux Mint
- Debian
- Manjaro
- Mageia
- CentOS
- Arch
- 十大 Linux 服务器发行版排行榜:http://os.51cto.com/art/201612/526126.htm
> 在几乎每一份与 Linux 有关的榜单上,基于 Debian 的 Ubuntu 都占有一席之位。Canonical 的Ubuntu 胜过其他所有的 Linux 服务器发行版 ―― 从简单安装、出色的硬件发现,到世界级的商业支持,Ubuntu确立了难以企及的严格标准
## 03. Linux 的应用领域
### 3.1 服务器领域
- Linux 在服务器领域的应用是其重要分支
- Linux 免费、稳定、高效等特点在这里得到了很好的体现
- 早期因为维护、运行等原因同样受到了很大的限制
- 近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛
### 3.2 嵌入式领域
- 近些年来 Linux 在嵌入式领域的应用得到了飞速的提高
- Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
> 主要应用:**机顶盒**、**数字电视**、**网络电话**、**程控交换机**、**手机**、**PDA**、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广
### 3.3 个人桌面领域
- 此领域是传统 Linux 应用最薄弱的环节
- 传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 Windows 所压制
- 近些年来随着 **Ubuntu**、**Fedora** 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率在逐渐的提高
> 在 Ubuntu 中玩 QQ
![005_ubuntu_qq](https://pic.downk.cc/item/5e7f13d8504f4bcb04567e9f.jpg)
- linux基础
- 01_Python基础课程安排
- 02_操作系统(科普章节)
- 03_操作系统的发展史(科普章节)
- 04_文件和目录(理解)
- 05_Ubuntu图形界面入门
- 06_常用Linux命令的基本使用
- 07_Linux终端命令格式
- 08_文件和目录常用命令
- 09_远程管理常用命令
- 10_用户权限相关命令
- 11_系统信息相关命令
- 12_其他命令
- python基础
- 01_认识 Python
- 02_第一个Python 程序
- 03_PyCharm的初始设置(知道)
- 04_多文件项目的演练
- 05_注释
- 06_算数运算符
- 07_程序执行原理(科普)
- 08_变量的基本使用
- 09_变量的命名
- 10_判断(if)语句
- 11_运算符
- 12_循环
- 13_函数基础
- 14_高级变量类型
- 15_综合应用——名片管理系统
- 16_变量进阶(理解)
- 17_函数进阶.md
- 面向对象
- 01_面向对象(OOP)基本概念
- 02_类和对象
- 03_面向对象基础语法
- 04_面向对象封装案例
- 05_面向对象封装案例 II