知 识 点 / 超 人
目录
- Unix
- Linux
- OS
- Mac OS X
- Mac OS X架构
- 扩展知识点
Unix
Unix:最早出现的操作系统之一
优点:有强大的可移植性,适合多种硬件平台 在安全性稳定性和性能高于Linux 但是需要专业的硬件平台;
缺点:门槛较高介绍:UNIX操作系统,是一个强大的
多用户、多任务操作系统,支持多种处理器架构,属于分时操作系统
,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX规范的UNIX系统才能使用UNIX这个名称,否则只能称为类UNIX(UNIX-like)。
UNIX诞生
1965年时,贝尔实验室(Bell Labs)加入一项由通用电气(General Electric)和麻省理工学院(MIT)合作的计划;该计划要建立一套多使用者、多任务、多层次(multi-user、multi-processor、multi-level)的MULTICS操作系统。MULTICS其实是"Multiplexed Information and Computing Service"的缩写。
在1970年时,那部PDP-7却只能支持两个使用者,当时Brian Kernighan就开玩笑地称他们的系统其实是"UNiplexed Information and Computing Service",缩写为"UNICS"。后来,大家取其谐音,就称其为"UNIX"了。1970年可称为"UNIX元年"
。
Brian Kernighan就开玩笑地称他们的系统其实是:"UNiplexed Information and Computing Service",缩写为"UNICS",大家取其谐音,就称其为"UNIX”,从此UNIX诞生。
1971年,第一版Unix在一台PDP-11/24的机器上完成。
这台电脑只有24KB的物理内存和500K磁盘空间。Unix占用了12KB的内存,剩下的一半内存可以支持两用户进行Space Travel的游戏。著名的fork系统调用也就是在这时出现的
。
1973年:创在C语言并成功地用C语言Unix的第三版内核
到了1973年的时候,Ken Thompson 与Dennis Ritchie感到用汇编语言做移植太过于头痛,他们想用高级语言来完成第三版,对于当时完全以汇编语言来开发程序的年代,他们的想法算是相当的疯狂。
用叫BCPL(Basic Combined Programming Language)的语言开发,并整合了BCPL形成B语言,后来Dennis Ritchie觉得B语言还是不能满足要求,于是就改良了B语言,这就是今天的大名鼎鼎的C语言
。于是,Ken Thompson 与Dennis Ritchie成功地用C语言Unix的第三版内核。Ken Thompson 与Dennis Ritchie成功地用C语言Unix的第三版内核至此,Unix这个操作系统修改、移植相当便利,为Unix日后的普及打下了坚实的基础,而Unix和C完美地结合成为一个统一体,C与Unix很快成为世界的主导,于是,Unix开始广泛流行。
1980年:Berkeley的BSD UNIX和AT&T的Unix两个最主要的Unix的版本
到了1980年,有两个最主要的Unix的版本线,一个是Berkeley的BSD UNIX,另一个是AT&T的Unix,在这个时候,很显然,竞争最终引发了Unix的战争。在这场战争中,好的是,软件开发人员还是能够得到Unix的源码并对其按照自己的需要和兴致进行裁剪。而不好的是,Unix开始一发不可收拾地开发不停地出现各种各样的变种
。
UNIX系统小结:
UNIX是最早出现的操作系统之一,最初的Linux就是想仿制的Unix系统编写的
,UNIX发展到现在已趋于成熟,需要大量专业知识才能操作,此外,UNIX系统具有强大的可移植性,适合多种硬件平台。此外,UNIX具有良好的用户界面;程序接口提供了C语言和相关库函数及系统调用,命令接口是shell
,系统的可操作性很强。你甚至可以不用显示器,取而代知的是非常简易的输出设备,在安全性稳定性和性能高于Linux 但是需要专业的硬件平台,门槛较高。
Linux
Linux:开源的免费操作系统
优点:开源,系统的漏洞
更容易被发现
,也更容易被修补
;
缺点:如果不熟知Linux命令,几乎完全无法使用这个系统。介绍:
Linux是一套免费使用和自由传播的 类Unix 操作系统
,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件,Android系统就是基于Linux而开发出来的。
1991年10月5日:第一次正式向外公布时间
1991年4月,林纳斯·托瓦兹开始酝酿并着手编制自己的操作系统。
1991年4月13日在comp.os.minix上发布说自己已经成功地将bash移植到了minix上,而且已经爱不释手、不能离开这个shell软件了。
1991年的10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生(Freeminix-like kernel sources for 386-AT)。
Linux存在着许多不同的Linux版本,但它们都使用了Linux内核,Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
1994年:Linux1.0发布
1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux 0.99的代码大约有十万行,用户大约有10万左右.
1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议
。
1995年1月,RedHat(小红帽)诞生
1995年1月,Bob Young创办了RedHat(小红帽),以GNU/Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即RedHat Linux,称为Linux“发行版”
,在市场上出售。
Linux系统小结:
Linux是开源的免费操作系统,因开源的特性,系统的漏洞更容易被发现,也更容易被修补。
此外,因为Linux原本的人机交互界面是命令行
,用户如果不熟知Linux命令,几乎完全无法使用这个系统,因为过于专业,Linux常被用作各种服务器操作系统。可以说,Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。
其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
OS
操作系统即
Operating System
,简称 OS,是让人使用机器的人机交互软件。如今的 Windows、Linux、Unix、Mac OS、iOS、iPad OS 、Android、Chrome OS,及华为公司的HarmonyOS,都是操作系统,它们有的用在桌面,有的用在服务器,有的适用上网本,有的是为移动手机而定制。
Mac OS
Mac OS X :界面美观 操作简便
优点:界面美观,操作简便,也不需要额外购买;
缺点:通常只能运行于苹果电脑,因为苹果电脑高昂售价,Mac的用户相对较少。介绍:
Mac系统是基于Unix内核的图形化操作系统
,继承Unix风格的内存管理和抢占式多任务处理 (pre-emptive multitasking),大大改进内存管理。一般情况下在普通PC上无法安装的操作系统,是苹果旗下PC专属系统,由苹果公司自行开发。如今苹果机的操作系统已经到了OS 10.15,该系统的许多特点和服务都体现了苹果简洁公司的理念。
System 1.0
苹果随同Macintosh 128K的最初电脑操作系统,1984年第一代Macintosh摆上了商铺的柜台,其所采用的操作系统System 1.0,尽管只能显示黑白两色,但是已经具有了桌面、窗口 、图标、光标、菜单和卷动栏等项目。在System 1.0的桌面上,著名的“Trash”已经出现了,该系统一直更新到System 7.1之后终结了System x.x的命名方式。该系统一直更新到System 7.1之后因为Mac OS而终结了System x.x的命名方式。
MAC OS
在1997年夏季,苹果发布了划时代的操作系统:MAC OS 8,在短短两周的时间内,MAC OS 8就卖出了125万套,MAC OS 8给用户带来了更加方便的因特网连接,功能更强的多媒体应用,更加绚丽的图标等等。在MAC OS 8发布的半年以后,MAC OS 8.1出现在销售柜台上,MAC OS 8.1最大的改进是增加了全新的HFC Plus(Mac OS扩展)资讯管理系统。MAC OS 9是2000年前,最后一次大升级版本的MAC操作系统
1999年10月,改进之MAC OS 8.6的MAC OS 9面世了,MAC OS 9被认为是2000年前,最后一次大升级版本的MAC操作系统,并将是以往我们所熟悉的MAC OS的最后一个版本,接下去的承担MAC操作系统重任的将会是MAC OS X。
Mac OS X
2000年1月,人们在San Francisco MacWorld的展览会上第一次看到了MAC OS X。MAC OS X采用了Darwin内核,Darwin内核是UNIX系统的一个变种,具有UNIX类操作系统所具有的高稳定性,并且MAC OS X还具有一套全新设计的,被称作Aqua的用户界面
。Aqua界面非常漂亮,拥有如水流般的平滑动感,设计精美的图标、菜单和停靠栏等等。MAC OS X一公开露面就获得了人们的一片惊叹声,从那时开始直到现在MAC OS X的Aqua用户界面一直是人们心目中的最佳。北京时间2019年6月4日凌晨1点,2019年WWDC全球开发者大会上苹果发布macOS Catalina 10.15,用户能将iPad用作Mac电脑的第二块显示屏,可以实现语音控制。
苹果OS X系统小结:
Mac系统是苹果公司基于UNIX操作系统进行深度再开发的操作系统,完全闭源,只能运行在苹果公司的电脑上。
Mac OS X架构
Mac OS X 分为两部分:
Darwin操作系统:大体由XNU内核
和Unix工具
组成,类Unix的开放原始码环境。可在macOS和iOS操作系统中使用。XNU是一个混合内核,它结合了卡内基梅隆大学开发的Mach内核,FreeBSD的组件以及用于编写称为IOKit的驱动程序的C ++ API。XNU在x86_64上单处理器和多处理器配置运行。
Aqua:由苹果电脑开发,命名为Aqua的有版权的GUI界面
。
XNU
虽然Mac OS已经通过Unix认证,然而XNU的全称和GNU格式一样,是XNU’s not Unix,顾名思义,XNU不是Unix。XNU是一款微内核
与宏内核
特性的混合内核
,它包括三个部分:Mach、BSD和I/O Kit
。
Mach
原来是一款微内核
,是硬件和固件之上最基础的操作系统核心,XNU中的Mach来自于OSFMK 7.3(Open Software Foundation Mach Kernel))它负责CPU调度、内存保护等功能
。它是macOS内核中最重要的部分,XNU中大部分代码来自于它,而且macOS中的可执行文件也是mach-o格式。
Mach 的故事开始于 1975 年,比苹果厂牌早一年出现,第一版叫做 RIG,因为缺少内存分页等明显缺点,RIG 失败了,1981 年 4 月,RIG 主要开发者 Richard Rashid 开发了 Accent 解决了 RIG 的缺点,他后加入了 Microsoft Research。熟悉历史的人会把 RIG 叫做 Mach 0.8,Accent 叫做 Mach 0.9。
1984 年,Mach 的主要开发目标是微内核和兼容 Unix
,于是 Mach 使用了 BSD 4.3 作为起点。几个基本概念被提出:任务
(Task)、线程
(Thread)、端口
(Port)、消息
(Message),以及内存对象
(Memory Object)用以实现物理到虚拟内存的分页映射,后续 FreeBSD 的内存体系结构即基于此。
最终,微内核真正意义上的实现是在 1996 年 7 月,也就是 OPENSTEP 4.0,这也是两年后 OPENSTEP 4.2 被苹果收购的原因之一。而 Mach 主要开发者 Avie 成为了苹果的首席软件技术官。
另一个需要解释的是基于 Linux 1.3 的 MkLinux 内核,MkLinux 内核作为单个 Mach 任务运行,和BSD 部分驻留在相同的地址空间中(应用程序空间)。
直至 Mach Ten,Mac OS X 整合了 Mach、BSD、Macintosh 技术,虽然现代 Macintosh 是协作式多任务,但在 Mach Ten 中,Mac OS 是本地一等公民,而 Unix 运行在 UVM 虚拟机中,保持抢占式多任务执行 C 语言库、POSIX 子系统、BSD 网络栈、文件系统、RPC、NFS、X Windows。
BSD
XNU中包含一个经过修改的BSD,它负责进程管理、Unix文件权限、网络堆栈、虚拟文件系统、POSIX兼容
。macOS之所以符合单一Unix规范,也正是因为如此。
I/O Kit
是XNU内核中的开源框架,为设备驱动提供了一个面向对象(C++)的一个框架
。可帮助开发人员为Apple的macOS和iOS操作系统编写设备驱动程序代码。I/O Kit框架由NeXTSTEP的DriverKit演变而来,与Mac OS 9的设备驱动程序框架或BSD的没有任何相似之处。
System utilities
除了内核以外,Darwin还包括一些Unix工具
,这些Unix工具有部分是Apple开发,比如Launchd,terminal,有部分来自于第三方,比如FreeBSD Project、GNU Project、Apache。
Core Foundation
是macOS和iOS中的C应用程序编程接口(API)
,是低级例程和包装函数的混合。
Quartz
Mac OS毕竟是类Unix操作系统,类Unix操作系统想要进行图形化操作,必须要有一个图形框架,在Linux上我们有X11,有Wayland,而在macOS中,我们有Quartz。它是一款基于PDF技术的图形框架
。作为一个类unix,不兼容X11是不可能的,如果你想在macOS中运行X11应用,也可以,有个开源项目叫XQuartz了解一下。
Cocoa
是苹果公司为Mac OS X所创建的原生面向对象的API
,是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)。苹果的面向对象开发框架,用来生成Mac OS X的应用程序。主要的开发语言为Objective-C
。Cocoa开始于1989年9月上市的NeXTSTEP 1.0,当时没有Foundation框架,只有动态运行库,称为Kit,最重要的是AppKit. 1993年NeXTSTEP 3.1被移植到了Intel, Sparc, HP的平台上,Foundation首次被加入,同时Sun和NeXT合作开发OpenStep也可以运行在Windows系统上VCV。Cocoa API里面有不少NS开头的API,何为NS?NS者,NeXTSTEP也
。
Aqua UI
Mac OS的桌面环境
,类似Linux中的GNOME。不过,不是所有Mac OS X都是Aqua UI,在Mac OS X早期测试版Rhapsody中,用的还是经典的Classic Mac OS界面。
扩展知识点:
POSIX
可移植操作系统接口
(Portable Operating System Interface),是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称
,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼(RMS)应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。POSIX标准详细内容
Launchd
由苹果开发的一款统一服务管理框架
,是 Mac 下用于初始化操作系统的关键进程,用于启动,停止和管理macOS中的守护进程,应用程序,进程和脚本。由于它支持多线程,所以它比传统的Unix初始化程序SysVinit要高,launchd同时正在被移植到FreeBSD平台,它的设计思想也被systemd所借鉴,后者成为目前Linux发行版中的主流系统初始化程序。
Mac OS X的启动原理:
1.固件激活,硬件初始化,加载BootX引导器。
2.BootX加载内核与内核扩展(kext)。
3.内核启动Launchd进程。
4.Launchd会根据 ,/System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents , ~/Library/LaunchAgents 里的plist配置,启动服务守护进程。
优化Mac OS X的启动的关键就在,/System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents。
Terminal
终端,终端就是连接内核与交互界面的桥梁
。操作系统分为内核和交互界面两个部分,内核部分,负责系统的全部逻辑操作,由海量命令组成,这一部分是系统运行的命脉,不与用户接触;交互界面部分,是开机之后所有我们所看到的东西,比如窗口,软件,应用程序等等。
Terminal、shell、bash、zsh的关系
Shell
是命令的解释器
,shell脚本语言则是shell解释器所能认识的语言,shell解释器运行Terminal中,它将交互界面的输入命令在终端中进行解释,将解释后的内容传递给内核,内核成功识别内容后去执行,将执行结果输出在Terminal或者交互界面。常见的 shell 解释器有 sh、bash这两种,其他有 ksh、csh 和 zsh。
bash
目前最通用、最常见的Shell解释器,定义了一套脚本语言
,是众多Linux发行版的标配。
zsh
因为zsh本身作为一种脚本语言
,是与bash不兼容的。符合bash规范的脚本无法保证被zsh解释器正确执行。但是,zsh实现中包含了一个仿真模式(emulation mode),支持对两种主流的Bourne衍生版shell(bash、ksh)和C shell的仿真(csh的支持并不完整)。在bash的仿真模式下,可以使用与bash相同的语法和命令集合,从而达到近乎完全兼容的目的
。zsh是不会根据.sh文件开头的shebang(如#!/bin/sh和#!/bin/bash)自动采取兼容模式来解释脚本的,因此,要让zsh解释执行一个其他Shell的脚本,必须手动输入emulate sh或者emulate ksh
,告诉zsh对何种Shell进行仿真。