# 相关概念
# 操作系统
- 世界上流行的操作系统举例:
- Linux :开源
- Windows :闭源,收费
- Darwin :闭源,收费
- Android :开源
- 一般的程序只能在一种操作系统上运行,而某些编程语言开发的程序可以兼容多种操作系统。
# Multics
- 1964 年,贝尔实验室、麻省理工学院、通用电气公司开始合作研发一个分时操作系统 Multics 。
- 它提出了许多新概念,比如动态链接代码库、分层文件系统、命令行解释器。
- 它计划安装在通用电力公司的大型机上,支持 300 个用户同时使用。
- 1966 年,Ken Thompson 从加州大学伯克利分校毕业,加入贝尔实验室,参与研发 Multics 。
- 在此过程中,他发明了 B 语言,并在 Multics 系统中编写了一个名为 "Space Travel" 的小游戏。
- 1967 年,剑桥大学的 Matin Richards 将 CPL 语言改进成 BCPL 语言(Basic Combined Programming Language ,基本组合编程语言)。
- 它是第一种在语法中使用花括号 { } 的语言。
- 1969 年,由于 Multics 的研发进度缓慢,贝尔实验室决定退出该项目。因此,Ken Thompson 不得不将他的小游戏移植到另一台老机器上。移植过程如下:
- 借鉴 Multics 系统的设计思路,用汇编语言开发一个新操作系统,取名为 Unix 。
- 在 BCPL 语言的基础上设计出 B 语言,用 B 语言搭配汇编语言在 Unix 系统中开发应用程序。
# Unix
- 1972 年,因为使用 B 语言移植程序仍然比较麻烦,Ken Thompson 和 Dennis Ritchie 决定改进解释型的 B 语言,发明了编译型的 C 语言,用它重写了 Unix 系统。
- Dennis Ritchie 吸取了 Multics 项目的教训,在设计 Unix 系统时采用 "Keep it simple and stupid" 的原则:将复杂的程序拆分成多个小模块分别实现,然后再灵活地组合。
- 1978 年,Brian Kernighan 和 Dennis Ritchie 出版《The C Programming Language》,将 C 语言介绍给全世界。
- 这是第一本介绍 C 语言编程的书籍,书中的第一个示例程序是显示 "hello world" ,成为了众多编程语言教程的传统。
- 这本书中描述的 C 语言,此时还没有正式的语法标准,称为 "K&R C" 。
- 随着 C 语言的推广使用,Unix 系统也被传播开来。
- 80 年代,贝尔实验室所属的 AT&T 公司将 Unix 作为闭源的商业软件发售。当时用户对 Unix 进行研究、改动,衍生了多种闭源的操作系统,但这些操作系统之间越来越不兼容,使得人们不得不制定了 UNIX 规范和 POSIX 规范。
- 90 年代,一些人借鉴 Unix 的功能,开发了一些新的操作系统,称为类 Unix 系统。它们与 Unix 相似,但不符合 Unix 规范,源代码也不同。
- Unix 因为闭源,一直用户少。反而某些类 Unix 系统更流行。
- 目前,Unix 系统主要有两个分支:
- System V :由贝尔实验室所属的 AT&T 公司开发,属于闭源的商业软件。
- BSD :由加州大学伯克利分校开发,基于贝尔实验室的 Unix 源码,属于自由软件。其中最流行的发行版是 OpenBSD 。
# Linux
- 1991 年,芬兰的大学生 Linus Torvalds 开发了一个类 Unix 系统,取名为 Linux 。
- Linux 最初只有一个内核。Linus 将它按 GPL 协议授权为自由软件,吸引了其他人参与开发,形成了一个积极的社区。
- 后来,Linux 内核与诸多 GNU 软件组合在一起,构成了一个功能完善的操作系统,称为 GNU/Linux 。严格来说,Linux 并不是一个操作系统,只是操作系统的内核。
- 2007 年,开源发展实验室(Open Source Development Labs ,OSDL)与自由标准组织(Free Standards Group ,FSG)合并,成立 Linux 基金会,负责管理 Linux 社区。
# Darwin
- 一个开源的类 Unix 系统,其内核称为 XNU (X is Not Unix),混合了 Mach 内核、FreeBSD 组件。
- 由 Apple 公司开发,用作 MacOS、IOS 系统的底层。
- MacOS 系统(原名为 Mac OS X ,缩写为 OS X )
- 用作 Apple 公司生产的 Macintosh (简称为 Mac )品牌电脑的专用系统。
- IOS 系统
- 用作 Apple 公司生产的 iPhone 手机、iPad 平板的专用系统。
- MacOS 系统(原名为 Mac OS X ,缩写为 OS X )
- 关于应用程序:
- 安装包的扩展名:
- .dmg :一种压缩文件格式,类似于 .iso ,
- .pkg :一种安装包格式。
- 包管理工具:
- Mac App Store
- Homebrew :提供了命令行工具 brew 。
- 开发语言:
- Objective-C
- 一种编译型语言,在 ANSI C 的基础上增加了 Smalltalk 语言的特性,支持面向对象编程。
- 于 1983 年由美国人 Brad Cox 发明。
- C++
- 可以基于 Qt 开发程序。
- Swift
- 于 2014 年由 Apple 公司发布,目标为取代 Objective-C 。
- Objective-C
- 安装包的扩展名:
# Android
- 于 2007 年由 Google 公司发布,主要用于智能手机、平板电脑等小型移动设备。
- 采用 Linux 内核,操作系统的底层用 C 和汇编语言开发,上层用 Java 开发。
- 与 Linux 系统的差异较大,比如用 Bionic 库取代了 GNU C 库。
- 在 Android Open Source Project(AOSP)项目中开源,采用 Apache License 开源协议。
- 虽然 Android 系统开源,但安装了该系统的设备,一般还会安装一些专有软件,比如 Google 移动服务(GMS)、Google Play 。
- 关于应用程序:
- 安装包的扩展名:
- .apk
- 包管理工具:
- 各种平台提供的 Appstore ,比如 Google Play 。
- 开发语言:
- Java
- 运行在专为 Android 设计的 JVM 上,称为 dalvik 。
- C++
- 可采用 Qt 或 Android Native Development Kit(NDK)开发程序,但是开发过程比平台原生语言麻烦。
- Kotlin
- 一种编译型语言,可以编译成 Java 字节码或 JavaScript 。
- 于 2011 年由 JetBrains 公司发布。
- 2019 年,Google 公司宣布 Kotlin 取代 Java 成为了 Android 的首选开发语言。
- Java
- 安装包的扩展名:
# POSIX
:可移植的操作系统接口(Portable Operating System Interface of UNIX),是一种操作系统为应用程序提供接口的标准,符合该标准的操作系统称为 POSIX 系统。
- 90 年代初,IEEE 协会为了提高应用程序在 Unix 系统上的可移植性,定义了 POSIX 标准。如果两个操作系统都遵循 POSIX 标准,则可以将应用程序移植运行。
- Unix 系统采用 POSIX 标准。
- Linux 系统也采用 POSIX 标准,因此 Linux 上运行的程序能与大部分 UNIX 系统兼容。
- Windows 系统一直沿用 1993 年推出的 Windows NT 系统的接口标准。
# RTOS
:实时操作系统(Real Time Operating System),一类追求实时性的操作系统。
- 特点:
- 实时性:安排一个任务时,能在一定时间内(通常为毫秒级)被执行完成。分为两种:
- 硬实时:如果超过时间,则任务失败。
- 软实时:允许不实时,只是服务降级。
- 抢占式调度:CPU 根据优先级大小来切换任务,一直执行当前优先级最高的任务,适合事件驱动。
- 而分时操作系统是 CPU 轮流执行多个任务,根据时钟中断来切换任务,因此每个任务分配到一定的 CPU 时间。
- RTOS 的 CPU 切换任务的频率通常比分时操作系统低很多。
- 精简:常用于嵌入式设备,可以精简到几 MB 。
- 有的嵌入式设备也使用 Linux 系统,提供更丰富的功能。
- 实时性:安排一个任务时,能在一定时间内(通常为毫秒级)被执行完成。分为两种:
- RTOS 系统举例:
- FreeRTOS
- RT-Thread
- VxWorks
- RTLinux
# GNU
:自由软件计划(GNU is Not Unix),1983 年由美国人 Richard Stallman 发起。
- GNU 旨在推广自由软件(free software)的理念。
- 他认为电子软件的一大优点就是容易拷贝,这是用户的基本自由,不能被非自由软件剥夺。
- 他希望软件开发者不是靠昂贵的版权费获利,而是靠技术支持等服务获取报酬。简单来说就是 "资源免费,服务收费" 。
- 自由软件强调自由,而不是单纯的免费。
- 计算机软件的功能、设计原理、编程语言本身没有版权,因此一款软件可以被别人反向编程。比如 Java 语言没有版权,但甲骨文公司拥有 JVM 和一些类库的版权。
- 1985 年他创建了自由软件基金会(Free Software Foundation ,FSF),作为 GNU 计划的主要赞助组织。
- GNU 计划的目标是创建一个完全自由的操作系统,从里到外使用的软件都是自由软件。
- GNU 计划已经开发了很多流行的自由软件,比如 gcc、make、bash 。
- GNU 计划本来打算为这个操作系统开发一个内核,称为 hurd ,但一直没有完成。后来采用 Linux 内核。
# GPL
:GNU 通用公共许可证(GNU General Public License),是 GNU 运动推广的一种开放授权的版权协议。
- 1989 年发布 v1 版本,允许 GNU 软件可以被所有人自由地使用、复制、修改和再发布,任何人都不能限制该权利。
- 1991 年发布 v2 版本,对程序库的许可宽松一些。
- 2007 年发布 v3 版本,修补了一些法律漏洞。
# 开源
1998 年,自由软件阵营中的部分成员分裂出来,以 "开源" 的名义开展活动。
- 开源是指对外公布软件的源代码,但不一定允许其他人使用、修改源代码,因此开源软件不一定是自由软件。
- 很多公司利用开源的方式,吸引社区开发者免费贡献,提高软件质量。
# ASF
:Apache 软件基金会(Apache Software Foundation)
- 于 1999 年由 Apache HTTP 服务器的开发者们创立 ,目前已成为世界上最大的开源基金会,管理的开源软件越来越多。
- 其他个人或团体可以将项目捐赠给 ASF 管理、维护,这需要放弃自己对该项目及其商标的所有权。
- 捐赠的项目需要先进入 Apache 孵化器(Incubator),通过一些质量审核、投票之后才可以毕业,正式成为 Apache 顶级项目,或者其它项目的子项目。
- ASF 项目列表 (opens new window)
# X Window
:一种图形界面系统,又称为 X11 。
- Linux 常见的图形桌面系统 GNOME、KDE 都是基于 X Window 实现的。