1.Unix/Linux 历史
1)对Unix定义包括两种:
①通过SUS规范的一致性测试,并且由open group授权,但无开源实现。
②第二种是类Unix系统,如bell实验室的Unix系统(以及其后来的分支system V和BSD)或者linux;
2)Unix历史:
1969 AT&T下贝尔实验室在Digital PDP-7上使用汇编语言完成了首个Unix实现。支持树形文件系统和shell以及将文件作为无字节流看待。1970年在PDP-11上进行了重写;
1971年正式发布第一版Unix;
1972年Dennis Ritchie设计了C语言,C语言传承自早期解释型B语言;
1973年Dennis Ritchie和Ken thompson用C重写了第三本Unix;年底发行了第四版;
1974年发行第五版,AT&T允许高校象征性支付一定费用后使用;
1975年发行第六版;
1979年发布第七版,Unix分裂为System V和BSD两大阵营;
①Thompson在加州大学任教期间和学生Bill joy(Sun公司创始人)为Unix增加了许多新
特性,所以命名为BSD(学术性质);在年末发布了3BSD;1983年发布4.2BSD包(包含了
TCP/IP完整实现),同时以4.1BSD和4.2BSD为基础形成了SunOS;1986发布4.3BSD;1993
发布4.4BSD;
②从70年代中期开始,美国反托拉斯法案强制对AT&T进行拆分,导致其在电话市场垄断
地位丧失,并因此获准销售unix,1981年发布system 3;1983发布system 4;1989发布
System 5(加入了许多BSD特性),并且AT&T将其授权给许多厂商;
80年代末期商业性质的Unix在各种硬件架构上得到广泛应用;包括:
Sun 的SunOS,以及后来的Solaris;
Digital的Ultrix和OSF/1(现在为HP Tru64 Unix);
IBM的 AIX;
HP的HP-UX;
NeXT的NeXTStep;
APPLE Macintosh的A/UX
微软和SCO的XENIX;
注意这些系统不具备可移植性,只针对特定厂商的芯片;
3)Linux历史:linux用于指代unix-like;
1984年 MIT的Richard Stallman开始着手自由的(free)unix实现;并发起了GNU(GNU‘s not unix’)
项目;
GNU制定了GPL(通用公共许可协议),linux软件和内核都以GPL或类型许可协议发布;
GNU最初并没有开发出能有效运行的unix内核,而是开发了许多著名软件如:emacs,gcc,
Bash shell ,glibc;
1985年Richard Stallman成立了非盈利性质的FSF自由软件基金会,以支持GNU项目的研发;
GNU 90年代早期开发出了几乎完整的操作系统,但是还缺乏有效的unix内核;
Linux内核历史:
1991年芬兰赫尔辛基大学学生唐纳德在80386上开发了一个操作系统,并于1991年10月发布了0.02版,这个系统被命名为linux,并且唐纳德将其归于GNU GPL阵营;
1994发布 linux 1.0;
1996发布 linux 2.0;
2003发布 linux 2.6;现在已经到4.7版本了。
Linux发行版本号为x.y.z形式,为主从版本后以及修订版本号。偶数表示稳定版本;
唐纳德开发的只是linux内核,实际上完整linux还需要包括一大堆工具和库,如此一来,linux的发行商们开启了市场,他们创建自己的软件包(发行版),时值今日比较出名的有Debian, red hat,Ubuntu等;
C语言:
80年代末,由于BSD和System的兼容性问题有力推动了C语言的发展;
1985年c++诞生;
1989年标准的C89诞生,历史上ANSI C也指C89;
1999年标准的C99诞生;
2011年标准的C11诞生;
POSIX:可移植操作系统;
1989年POSIX.1成为IEEE标准,并在1990年正式采纳为ISO标准;其基于unix系统和C语言,任何操作系统都可以实现该接口;
POSIX.2对shell和c编译器命令行接口在内的各种unix工具进行了标准化;
X/Open和The Open Group
X/Open是由多家著名计算机厂商组成的联盟,致力于采纳和改进现行标准,以制定出一套全面而又开放的标准;至1994年已经发布到XPG4;
X/Open在1995年与OSF合并;
X/Open将XPG4进行了重新包装为SUS(single unix specification)
SUSV3和POSIX.1-2001:1999年IEEE,ISO和open集团成立的小组正式批准POSIX 1003.1-2001,以取代早期的posix1.1和posix1.2以及susv2,我们也把这个叫做SUSv3;改文档定义了两级符合度,包括必须的POSIX和XSI(x/open系统接口)扩展;
2008年SUSv4和Posix.1-2008出台;
XTI是其传输接口,在2000年才形成标准,XOPEN的网络规范是XNS;至今几乎都被取代;
其他标准如BSD的SVR4等;
Linux规范:遵循unix,POSIX和sus规范;
LSB:linux standards base;
1)内核:一般在/boot/vmlinuz;主要功能包括进程调度,内存管理,文件系统, 设备管理,网络,API提供,虚拟计算机(多用户);编程时更好是站在内核基础上看待问题而不是进程基础上;
2)Shell:sh,csh,ksh,bash;
3)用户(组ID,主目录,登陆shell)和组(组名,组ID,用户列表);
4)目录,文件,链接等:普通链接是文件名+指针;符号链接是经过特殊标记的文件,内容包含了另一文件的名称。也就是说符号链接对应着目录内容为“文件名+指针”的一条记录,指针指向的文件内容为另一文件名的字符串;人们通常使用硬链接和软连接来指代普通链接和符号链接。
文件名:最多达255字符,只能使用数字字母下划线和-以及符号“.”。如果字符会引起歧义则需要进行转义;
5)文件IO模型:内核值提供一种文件类型:字节流序列;0 1 2代表输入输出和错误;
6)进程:在内核看来,进程是一个个实体,内核在他们之间必须共享计算机资源。
Fork进程创建,子进程会复制父进程内容,但不会影响父进程;在进程终止时返回0表示成功退出;
ID为0 的进程和特权进程;init进程ID为1,为所有进程之父,任何进程都不能杀死该进程;
守护进程为长生不死进程并在系统后台运行,如syslogd;
每个进程都有一份环境列表;在shell中使用export来创建;
每个进程都会消耗一定资源,使用函数setlimit进行进程资源使用限制;使用ulimit可以调整系统资源限制;
7)内存映射:包括文件映射和匿名映射;匿名映射映射页面会被初始化为0,文件映射则是将文件部分内容调入进程的虚拟内存区域;
8)进程间通信:信号,管道,套接字,文件锁定,消息队列,信号量,共享内存;
9)伪终端:相互连接的是虚拟设备;
10)/proc虚拟文件系统