Unix的开发不受控于某一个厂商或者组织,是由诸多商业和非商业团体共同贡献进行演化的。这导致两个结果:一是Unix集多种特性于一身,二是由于参与者众多,随着时间推移,Unix实现方式逐渐趋于分裂。

由于第二个结果导致的发展就是:大家要求统一标准。类似秦王扫六合,统一文字和货币。

Unix出现之后很快出现了C语言,随后Unix被C语言重写,这也是第一个以高级语言开发的操作系统。由于使用了高级语言,使得Unix能够像其他硬件架构进行移植,因为不再使用依赖硬件的低级语言了。

C/C++语言是系统编程语言,相对应的Java、Python等语言则是非系统编程语言。

Unix系统在1979年的第七版之后正式分裂成了2种实现:BSD和System V。

BSD是Unix发明人Thompson在母校加州大学伯克利分校带领研究生们增加诸多新功能新特性实现的。

System V则是由发明人Thompson之前所在的公司AT&T的Unix部门实现。

两者都相互使用了对方的专有源码,因此打了2场官司,最终于1994年达成和解,双方继续能够发布各自的系统(专有源码需要重写或删除,或者标记有copyright)。

当时的年代,计算机行业的传统形式是:每个公司提供自己的硬件和操作系统,硬件和操作系统相互搭配,不可移植,硬件和操作系统均是收费的,类似于今天iPhone只能是iPhone手机和iOS系统搭配,而不能iPhone和Android系统搭配

所以从一种硬件和系统换到另一种硬件和系统,代价昂贵,不仅要移植应用,技术人员还要重新学习适应。使用高级语言重写并且经过广泛移植在各种硬件并测试可行的Unix系统开始占领服务器系统OS市场。

Linux是从Andrew Tanenbaum(现代操作系统/Modern Operating Systems的作者)Minix借鉴而来,而Minix则是借鉴于Unix。完全的Linux应该叫做GNU/Linux,最初的Linux只是一个内核,只提供了管理硬件的功能,除此之外几乎不能做任何事,仅仅能让计算机开机而已,随后Linux使用了大量的GNU工具(包括shell,Emacs,gcc,glibc等等),才组成了一个完整的Linux系统。(个人认为Linux的真正名称应该是GNU/Linux,而不是Linux,大量工具来自于GNU,内核也是源自于Minix,后期更是诸多大牛加入出力,功劳全成Linus Torvalds的了,还把他说的像神一样,真是呵呵)。

2003年之前,Linux版本有稳定版和开发版的奇偶数之分,2003年之后不再有这个区分。

由于Uni存在两个分支,许多公司基于这2个分支中的一个基于自己的硬件进行开发并增加自己的特色导致Unix种类繁多,某一个程序无法很好的适应于所有的Unix实现,由此而出现了“标准化”的呼声。在此呼声下,国际统一了C语言和Unix系统的标准。

标准的演化是:首先出现了POSIX标准 ---> 基于POSIX产生了XPG标准 ---> 基于XPG和额外增加的标准产生了SUS标准 ---> 规范及修订POSIX和SUS标准产生了新标准,新标准可以称作POSIX,也可以叫做SUS。

最后是总结本章:

1969年Ken Thompson在AT&T公司发明了Unix系统,而后Thompson在加州大学伯克利分校和AT&T公司的Unix部门各自维护了一个实现,分裂成了2种版本。

分裂的2种版本各自吸收使用了对方的一些特色和专有源码,并相互起诉,最终和解。

分裂的2种版本导致各种不同的演化,最终由此产生了统一标准。Linux符合此标准,在Unix的市场上普及开来。

Linux/Unix系统编程手册 第一章:历史和标准的更多相关文章

  1. Linux/Unix系统编程手册 第二章:基本概念

    本章预热与后续系统编程有关的概念. 术语“操作系统”通常包含2种含义:一是指完整的软件包,包括管理计算机资源的核心组件,已经附带的标准软件:二是独指管理硬件的内核. 内核具有诸多概功能,包括: 进程管 ...

  2. 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll

    关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...

  3. 《Linux/UNIX系统编程手册》第56章 SOCKET:介绍

    关键词: 1. socket基础 一个典型的客户端/服务器场景中,应用程序使用socket进行通信的方式如下: 各个应用程序创建一个socket.socket是一个允许通信的设备,两个应用程序都需要用 ...

  4. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  5. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  6. 《Linux/Unix系统编程手册》读书笔记1

    <Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...

  7. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  8. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  9. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

随机推荐

  1. 半夜思考之查漏补缺 , Spring 中 Bean 之间的依赖问题

    每次看书都会发现自己的不足 . 当一个 singten 的 Bean 依赖一个 prototype 的 Bean 时 , 如果不加注意 , 会发生一些奇怪的事情 , prototype 变为了 sin ...

  2. python自动化之时间

    cxz##############################现在时间######################### import time time.time() ############# ...

  3. 更新ffmpeg

    今天对公司线上的几台机器做了下ffmpeg的更新,没有什么技术含量,还是简单记录下,做个流水账~哈哈 软件包获取方式 官方网站:https://ffmpeg.org/download.htmlgith ...

  4. Graph And Its Complement CodeForces - 990D(思维构造)

    题意: 图中有n个点,开始有a个连通块,然后连着的边断开,不连的边连上,变为b个连通块,输出原图的邻接矩阵. 解析: 原图中连通块大于1的图,经过上述操作后,一定变成只有1个连通块的图. 若n != ...

  5. 解题:WC 2006 水管局长

    题面 初见LCT,动态最小生成树+链上查询max,具体做法是把边转换成点(LCT只能维护点) 时光倒流,先把最后剩的连起来.然后查询就看链上最大值,修改看看链上最大值是否大于当前边,如果是就断开原来的 ...

  6. eclipse安装activiti5.18.0工作流插件 以及安装过程中activiti插件出现的问题及解决

    转: eclipse安装activiti5.18.0工作流插件 以及安装过程中activiti插件出现的问题及解决 2017年05月04日 18:44:21 JJ_nan 阅读数:2773   版权声 ...

  7. git<git rebase 修改以前提交过的内容>

      git rebase 使用总结: 使用git rebase 修改以前已经提交的内容 比如要修改之前的commit的 hashcode为:187f869c9d54c9297d6b0b1b4ff47d ...

  8. 安装mysql-5.6版本步骤与卸载

    官网下载完解压后: 1.环境变量配置Path   D:\mysql-5.6.40-winx64\bin(你的mySql5.6的路径到bin)2.找到D:\mysql-5.6.40-winx64文件中的 ...

  9. GNU C ------ __attribute__

    attribute是GNU C特色之一,attribute可以设置函数属性(Function Attribute ).变量属性(Variable Attribute )和类型属性(Type Attri ...

  10. python 字符串切片知识巩固

    切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...