当前位置: 首页 > news >正文

UNIX简史

        从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的研发成果,要了解Linux的历史就要先了解UNIX的历史。笔者搜集整理了一些史料分享给大家,本篇先介绍UNIX的历史,有不当之处欢迎批评指正。
        UNIX由AT&T的贝尔实验室(BTL, Bell Telephone Labs)于1969年开发。UNIX源于一个叫MULTICS的项目,该项目于1964年发起,旨在开发一个可同时支持大量用户使用的计算机操作系统。除了BTL,通用电气(Generic Electrics)、麻省理工(MIT)也参与其中,但该项目并未成功(据说是因为进展过度缓慢被最终裁撤,也有人说是因为需求过于超前)。
        在项目进行期间,1969年,BTL的两名工程师Ken Thompson和Dennis Bitchie利用业余时间在一台闲置的DEC PDP7计算机上开发了一个最基本的操作系统内核,同年,Thompson经过两个多月的论证和开发,为该系统内核设计了文件系统,使文件能够在层次结构中有序地存放。
        后来,更多的人投入到了这项工作,这个项目也该有个名字了。因为MULTICS项目是“Multiplexed Information and Computer Services(多路信息和计算机服务)”的缩写,开发团队决定将他们的系统命名为“Unics”,表示“Unixplexed Information and Computer Service(综合信息和计算机服务)”,后来研究员Brian Kernighan干脆就将新系统叫做“Unix”。
         随着系统开发的推进,他们使用的PDP 7显得有些小了,他们需要一台更强的计算机。他们决定以开发新的文本处理程序为由向公司申请购买新的计算机。在当时,文本处理程序是非常受市场欢迎的——公司同意他们购买一台PDP 11。
        PDP 11到货后,他们发现只有CPU和内存,没有磁盘和操作系统,Thompson为它开发了一个驻留内存的RAM盘,一半用作磁盘,另一半用来运行操作系统。磁盘到货后,他们继续开发操作系统以及向公司许诺的文本处理程序。这个文本处理程序就是Troff,后来被用来制作UNIX的man手册。
    1971年11月,Thompson和Ritchie完成了程序员手册。1972年6月,UNIX的第二版V2诞生,此时UNIX的装机数量已经超过10台。
    1973年底,开发团队决定开一次发布会对外公开他们的成果。众多的IT机构和大学向他们申请UNIX的许可。因AT&T作为电信业垄断巨头(尤其是其垄断了长途电话业务),早就被美国司法部盯上,美国司法部在1958年与AT&T签订了一个和解协议,双方约定AT&T不进入计算机领域,不销售计算机相关产品,司法部不以《反托拉斯法》对其发起诉讼。由于这个原因,AT&T是免费向各机构和大学提供UNIX源代码的。但AT&T不向这些用户提供技术支持,也不为他们纠正系统中的错误,这些用户不得不联合起来形成社区来进行技术交流。他们创建了USENIX社区,意为“UNIX用户”,用来共享技术,他们曾在1974年5月举行了第一次交流会,虽然当时只有十多人参加,但对UNIX社区的发展起到了重要的推动作用。
    加州大学伯克利分校也获得了UNIX使用许可,它是Ken Thompson的母校。1975年Thompson回到母校任教,同时带去了最新版本的UNIX。两个刚毕业的学生Chuck Haley和Bill Joy也加入了对UNIX的进一步开发中(Bill Joy后来成为了SUN Microsystems的副总裁之一)。Joy完善了EX编辑器,使其最终演变成了著名的全屏幕编辑器VI。VI不依赖于特定类型的终端,通过Joy创建的TERMCAP通用终端系统与特定终端所对应的控制器结合使VI在各种类型的终端上都可以正确工作。Haley和Joy还开发了一个Pascal编译器,并将其加入了UNIX。Joy将伯克利分校的UNIX版本叫做BSD(Berkely Software Distribution)。
    Bill Joy在伯克利分校完成BSD4.1的开发后,离开伯克利加入了SUN Microsystems公司,在那里他完成了BSD 4.2的开发,在1983年他在此基础上创建了SUN版本的Unix——SunOS。

    再回到AT&T。从1977年开始AT&T开始将UNIX向Interdata和IBM计算机移植,在此之前,UNIX只能在PDP计算机运行。到1979年6月发布的UNIX Version 7是第一个可移植的UNIX版本,该版本还提供了更多的先进功能,如awk, lint, make, uucp等。此时系统手册已达到400页,另有两个各400页的附录。该版本还包含了Kernighan和Ritchie开发的C编译器,用来对UNIX的大部分代码进行重写;以及增强的shell(Bourne shell)、find、cpio、expr等命令。
    此时UNIX已作为计算机工业的一个重要领域开始被各大厂商重视,比如微软和SCO合作开发了Xenix,用于运行在Intel 8086平台的计算机上。AT&T意识到了UNIX是一个非常有商业价值的系统,它在Version 7的使用许可中以防止泄露商业机密为由阻止大学将其作为学术研究的范例,至此各大学只能将操作系统课程的传授限制在理论层面了。
    1983年AT&T发布了UNIX System V(SV),这是一个收费的商业化版本,不允许传播源代码。
    由于在1974年美国司法部再次起诉AT&T违反《反托拉斯法》,1982年哥伦比亚地区法庭判决AT&T败诉,1984年AT&T被拆成了8个小公司(一个新的AT&T和七个本地电话公司,分别是大西洋贝尔、西南贝尔、西部贝尔、太平洋贝尔、南方贝尔、亚美达科以及纽新公司,他们也被称为“贝尔七兄弟”)。这个判决实际上同时表示1958年的和解协议已经无效了,AT&T可以进军计算机领域了。所以拆分后AT&T依然继续开发System V。SV经过了多次修订,1989年发布的System V Release 4(SVR4)是最重要的一个版本,它首次结合了多个UNIX版本的特性,引入了其他厂商的技术,比如SUN Microsystems,实际上SVR4是AT&T和SUN Microsystems共同发布的,它标志着UNIX系统的进一步标准化和商业化。

    再看伯克利分校这边。AT&T对UNIX版权的控制使得伯克利分校仅能将其BSD分发给持有AT&T源码许可的公司,同时伯克利也开始着手在BSD中清除AT&T的代码。80年代后期,几个伯克利的学生成立了一个叫“Berkely Software Design Inc."的公司用来出售BSD的一个商业版本,1990年被AT&T指控其侵权并告上法庭,伯克利分校也成为被告。一直到1994年双方才达成和解,BSD得以继续发展。BSD分裂成不同的版本,FreeBSD,netBSD,OpenBSD(被认为最安全的UNIX)和TrustedBSD。实际上,在1994年和解之前,AT&T就已经将UNIX卖给了Novell,次年Novell又将UNIX卖给了SCO。

        这些年的时间里,各大厂商纷纷有了自己的UNIX产品,比如IBM的AIX,DEC的Ultrix,HP的HPUX,Microsoft与SCO合作开发的 Xenix,SUN的Solaries(SunOS的升级版本)。UNIX系统形成两大主要分支,即SVR4和BSD。所有现代的UNIX系统或多或少地都是基于这两个主流分支开发的。

    由于AT&T对UNIX版权的控制使大学在教授操作系统时没有了范例可用,1987年,荷兰阿姆斯特丹自由大学的美籍教授Andrew Tanenbaum(加州大学伯克利分校物理博士,《操作系统:设计与实现》的作者)决定自己写一个不含AT&T代码的UNIX兼容操作系统用于教学,他将他的系统叫做Minix。Minix就是Linux的前身,1991年芬兰学生Linus Torvalds在Minix的基础上创建了Linux。由于Linux作为开源软件,获得了众多厂商和技术社区的支持,在1995-1999年间,Linux得到很大的发展,支持多种硬件平台,成为商业UNIX的有力竞争对手。

    回望历史,对于UNIX版权的控制深深地影响了UNIX的发展历程。由于IBM在支持Linux时使用了部分AT&T原始代码,掌握版权地SCO在2001年对IBM进行了长达18年的诉讼案,期间SCO的言行表现使得SCO被UNIX世界边缘化了,从现在来看,从SCO拿到UNIX版权的时候,UNIX原始版本的开发就已经结束了。在UNIX的发展过程中形成了一系列的工业标准,比如IEEE POSIX,UNIX97,FHS等,Linux的开发也会参考或升级这些标准。

        下面是笔者从某教材中截取的UNIX发展历史简图,供大家参考。


 

相关文章:

UNIX简史

从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的…...

React和Vue中暴露子组件的属性和方法给父组件用,并且控制子组件暴露的颗粒度的做法

React 在 React 中,forwardRef 是一种高级技术,它允许你将 ref 从父组件传递到子组件,从而直接访问子组件的 DOM 节点或公开的方法。这对于需要操作子组件内部状态或 DOM 的场景非常有用。为了使子组件能够暴露其属性和方法给父组件&#xf…...

uniapp 常用的指令语句

uniapp 是一个使用 Vue.js 开发的跨平台应用框架,因此,它继承了 Vue.js 的大部分指令。以下是一些在 uniapp 中常用的 Vue 指令语句及其用途: v-if / v-else-if / v-else 条件渲染。v-if 有条件地渲染元素,v-else-if 和 v-else 用…...

python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分

【1】引言 前序已经对BGR图像和HSV图像的转换进行了基本讨论,相关文章链接为: python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客 python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入-C…...

C# 结构体和类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、类(Class)二、结构体(Struct)示例代码(定义类和结构体)类的继承代码示例&#xff08…...

D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。

概述: D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点: ● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电压(2.5V) ● 超过工作范围能进行自动校…...

题目 1738: 排序

题目 1738: 排序 时间限制: 2s 内存限制: 96MB 提交: 14351 解决: 3477 题目描述 对输入的n个数进行排序并输出。 输入格式 输入的第一行包括一个整数n(1<n<100)。 接下来的一行包括n个整数。 输出格式 可能有多组测试数据&#xff0c;对于每组数据&#xff0c;将排序后…...

爬虫逆向学习(十四):分享一下某数通用破解服务开发经验

阅前须知 这篇博客不是教大家怎么实现的&#xff0c;而且告知大家有这个东西&#xff0c;或者说一种趋势&#xff0c;借此分享自己大致的实现经验。具体的实现我也不好整理&#xff0c;毕竟是在别人的基础上缝缝补补。 前言 使用补环境方式破解过某数的同学都知道&#xff0…...

《Vue进阶教程》第十一课:响应式系统介绍

1 什么是响应式 当数据改变时, 引用数据的函数会自动重新执行 2 手动完成响应过程 首先, 明确一个概念: 响应式是一个过程, 这个过程存在两个参与者: 一方触发, 另一方响应 比如说, 我们家小胖有时候不乖, 我会打他, 他会哭. 这里我就是触发者, 小胖就是响应者 同样, 所谓…...

rpc设计的再次思考20251215(以xdb为核心构建游戏框架)

1.服务提供者注册的方式 // 表明这是一个服务提供者&#xff0c;ServerType 和 ServerId从application.properties中读取 // 而且只有当当前服务是Game时&#xff0c;才生效。 或者 条件注解??? RpcProvider(typeServerType.Game) public class GameProvider{MsgReceiver…...

pydub AudioSegment增加音频文件音量并保存- python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…...

IT 新突破!远程控制电脑技术造就工作与学习新方向!

远程控制电脑技术的历史可追溯到计算机网络的早期时代。最初&#xff0c;通过电话线和调制解调器的组合&#xff0c;实现了远程访问&#xff0c;这是远程控制电脑技术的雏形。随着互联网技术的飞速发展&#xff0c;远程控制电脑技术也日趋完善&#xff0c;并在多个领域得到了广…...

LabVIEW起落架震台检测

在现代飞机制造与维护过程中&#xff0c;起落架的性能测试是保障飞机安全的重要环节。通过LabVIEW开发的起落架小落震台检测系统&#xff0c;通过模拟飞机着陆过程&#xff0c;准确捕捉起落架在着陆时承受的各种动力学特性和应力响应&#xff0c;有效提升起落架设计的精度与可靠…...

Day24 C++ 接口(抽象类)

C 接口&#xff08;抽象类&#xff09; 接口描述了类的行为和功能&#xff0c;而不需要完成类的特定实现。 C 接口是使用抽象类来实现的&#xff0c;抽象类与数据抽象互不混淆&#xff0c;数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个函数被声明…...

UE5 关于画质、机能与开发成本的思考

1、并不省时间 UE5等工具优点是可以通过一些工具与资源快速获得较好的画面&#xff0c;节约一些时间&#xff0c; 但缺点也很多&#xff0c; 一个是各种精度的素材之间的协调问题&#xff0c;参差不齐&#xff0c;统一升级到高精度会产生较大的成本&#xff0c; 一个是资源…...

IOS学习路线图

‌iOS是由苹果公司开发的移动操作系统。 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统&#xff0c;最初是设计给iPhone使用的&#xff0c;后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样&#xff0c;属于类Unix的商业操作系统。原本这个系统名为…...

HICE-day6

二层交换 交换基础 所谓的二层交换机指的是针对数据的二层头部&#xff08;以太网帧头&#xff09;中的MAC地址进行寻址并转发数据的交换设备。二层交换机不具备路由功能&#xff0c;它工作在OSI七层模型的第二层&#xff0c;因此被称为二层交换机。 上图中&#xff0c;PC1、…...

第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型

基于Python 3.9版本演示 一、写在前面 上一节&#xff0c;我们学了经验模态分解&#xff08;Empirical Mode Decomposition&#xff0c;EMD&#xff09;。 如同结尾所说&#xff0c;“那么&#xff0c;做这些分解有什么作用呢&#xff1f;有大佬基于这些分解出来的序列分别作…...

(C语言)双向链表

目录 链表的分类 双向链表的实现 1&#xff09;定义链表 2&#xff09;初始化双向链表 3&#xff09;申请节点 4&#xff09;尾插 5&#xff09;头插 6&#xff09;打印链表 7&#xff09;尾删 8&#xff09;头插 9&#xff09;查找 10&#xff09;指定位置删除 11…...

青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求

青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求 课题摘要:一、构建WEB服务器1. 安装Go语言2. 创建项目结构3. 编写代码4. 运行WEB服务器5. 访问WEB服务器 二、接收请求1. 定义处理函数&#xff08;Handler&#xff09;2. 将处理函数与路由关联3. 启动服务器4. …...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...