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. 【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法

    [问题] 用C#模拟网页登陆,其中去请求几个页面,会发起对应的http的请求request,其中keepAlive设置为true,提交请求后,然后会有对应的response: resp = (Http ...

  2. python & dict & switch

    python & dict & switch python 中是没用switch语句的,这应该是体现python大道至简的思想,python中一般多用字典来代替switch来实现. # ...

  3. 读取Maven项目下resources目录下的配置文件(properties为例)

    配置文件:xxxxx.properties a.url=******************** b.url=---------------------------------- 读取配置文件: im ...

  4. 【BZOJ4242】水壶(克鲁斯卡尔重构树,BFS)

    [BZOJ4242]水壶(克鲁斯卡尔重构树,BFS) 题面 BZOJ然而是权限题. Description JOI君所居住的IOI市以一年四季都十分炎热著称. IOI市是一个被分成纵H*横W块区域的长 ...

  5. debian修改时区

    这里提供两种方法 一.使用dpkg-reconfigure修改 # dpkg-reconfigure tzdata Current default time zone: 'Asia/Shanghai' ...

  6. IntelliJ IDEA详细配置和使用教程-字体、编码和基本设置

    IDEA使用--字体.编码和基本设置 https://blog.csdn.net/frankcheng5143/article/details/50779149 IntelliJ IDEA详细配置和使 ...

  7. 解决Android SDK Manager更新时出现问题

    使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xm ...

  8. (转)教你完全理解IO流里的 read(),read(byte[]),read(byte[],int off,int len)以及write

    背景:对于IO部分,总是感觉很虚,不能很好的理解其中的要义,其实仔细分析,掌握其中的规律,一切都会看起来十分的自然. 1 理解 1.1 从头总结 长期以来,java中的InputStream Outp ...

  9. 解决“mongoengine.fields.ImproperlyConfigured: PIL library was not found”报错

    解决方案: pip install Pillow

  10. where EXISTS (子查询)多对多中通过中间表查对方列表

    用户表A,小组表B,小组和用户是多对多关系,中间有个中间表M 已知 小组 id 即teamId ,想知道这个小组中的用户列表信息,可以如下写sql: select * from A a where E ...