1990前后,BSD将System V中的代码基本全部清除,随后BSD与ATT的System V Unix官司基本到尾声,BSD与System V再无瓜葛,BSD推广Unix的使命基本完成
1991年左右,Jolitz, 把BSD移植到x86系统上(Intel公司生产的CPU平台,包含AMD生产的兼容PC架构,非专用的小型机),称为386-BSD分支,目前在某些领域仍在使用386-BSD
1991年8月,芬兰大学生,Linus Torvalds宣布成立Linux项目,最早研究Linux原因是因为SUN Unix太贵了,恰逢http协议诞生,互联网时代到来,同时Linux遵循GPL协定,众多程序员贡献代码使得Linux迅速发展壮大。
借助Larry Wall研发的diff, patch两款工具,源代码进行分发时不用整包进行,可以仅支持补丁制作,Linux系统版本快速迭代
操作系统基本结构
Unix是工作在底层硬件资源上的监控程序,负责把底层硬件驱动起来,把底层硬件提供的各种资源虚拟化,并将内存, CPU等计算资源切分给多个应用程序使用,把硬件的本来面目虚拟成软件面目,把CPU的计算能力切割成n片,第一片给第一个程序,第二片给第二个程序,第三片给第三个程序,依此类推(时序复用),同时把内存资源进行复用,以每一个程序角度上看,都认为独立占用了这个机器资源
每一个运行的程序被称为进程:Process,进程是活动单位,程序是非活动单位
Mutli tasks多任务系统,需要底层监控程序(即叫做通用程序,Kernel)
Kernel的作用:
1、 驱动底层硬件
2、 把底层硬件资源抽象为软件资源
3、 管理各程序的运行,把有限资源分配给各程序
Kernel指的是狭义上的操作系统(BSD,Unix, Linux),不包含运行在其上的各种应用程序,而完整的操作系统需要各项应用程序支持,GNU组织(gcc, vi,x-window等应用程序)提供众多的应用程序
完整的OS:Kernel + Application
狭义上的OS:Kernel
Linux提供内核,GNU提供应用程序,才能组成一个完整的OS
Linux 0.99版本/1.0版本诞生:1994
计算机软件研发模式:
1、 大教堂式:组织大量的工程师进行规模性研发
2、 集市式:源代码开发,更新迭代速度非常快,www.top500.org 每半年一次统计全球超级计算机运算速度,90%以上运行Linux系统,MAC OS/iOS是一个BSD系统,Andriod是一个Linux系统
操作系统核心组成部分:接口
OS的接口分为两大类
1、GUI图形用户界面:Graphic User Interface
Gnome图形界面:著名图形界面,使用C语言研发,采用gtk库开发环境
KDE图形界面:使用C++语言,采用qt库开发环境
2、 CLI命令行接:Command Line Interface
TUI:Text User Inertface
bash、zsh、sh、csh、tcsh、ksh
对于Linux而言,桌面系统仅仅是一个程序。在内核之外提供一个接口,通过进程运行程序,服务器一般3-5年都不会关机
操作通用化任务/操作系统功能:
1、 驱动程序
2、 进程管理
3、 安全
4、 网络协议栈
5、 内存管理
6、 文件系统
操作系统之上,需要运行相关软件(浏览器,word),这些程序通过用户接口启动,随后进行启动。
启动的概念:比如运行某一个程序功能,在Linux上面,通过命令键入即进行启动;在windows上面,双击图标;类似开启空调,找到空调的控制面板启动
计算机的底层硬件的接口,称为汇编接口,不易于调用,因此把汇编接口隐藏,通过操作系统来实现系统调用(系统调用又称为中间层,system call),类似瓶子的水倒出到杯子种,杯子口就类比为调用接口,无论底层是什么类型的硬件,比如无论是Intel或 AMD的芯片,windows均可以在其上运行,程序员在写程序的时候只需要调用不同类型的接口即可,而无需再直接面对硬件。
但是操作系统接口仍然原始,还不够接近用户。为了程序员更便于系统开发,人们将底层操作系统各种各样的接口再一次封装为离程序员更近一步界面,此层次不再称为操作系统调用,而称为库接口调用(libaries call)。类比:麦种(相当于硬件)、麦子(相当于操作系统接口),面粉(相当于库接口,libaries call),馒头(编写完成的应用程序)
库接口调用目前已成为标准接口,优势是开发速度快,有些功能是通用功能,比如让声卡发声,通过库封装后只有一个接口。把通用功能变为多人可使用的通用接口(API),相当于搭积木式的开发,非常便于系统开发。
API:Application Program Interface 程序员开发者视角,面对的编程接口(从开发视角看)
POSIX规范:Portable Operating System可移植操作系统(API兼容接口),比如Windows上的library库在Linux上也能运行
ABI:Application Binary Interface 程序应用者视角,面对的运行程序的接口(从应用视角看)
Linux上写的程序在Window上是否能够运行?
Linux上写的编程接口和Window上的编程接口并不一样,两者不兼容。把接口做成兼容,遵循POSIX 规范,即Linux上的libaries call与Windows上的libaries call兼容,使得编程接口在Linux上和Windows上可以同时兼容使用。任何遵循POSIX规范的程序,其源代码在A系统上可以进行编程,在B系统上面也可以进行编程。
编程接口兼容(API)并不意味着二进制接口兼容(ABI),任何程序只有在转码为二进制格式才能运行,比如在Windows上开发的程序进行二进制编译,转化为兼容Windows系统的ABI格式,可以在Windows上运行,但是无法在Linux上运行。同理,在Linux上开发后进行二进制编译,转化为兼容Linux系统的ABI格式,可在Linux上运行,但是无法在Windows上运行。
Linux的发行版介绍:
GNU组织的开源运动,源代码开发完后必须通过互联网进行公开,但是源码无法直接在计算机上运行,需要编译为二进制格式才能够运行。编译过程比较复杂,编译环境不支持还容易报错。而GNU组织提供的程序gcc, 标准库glibc, vi, 甚至于linux内核都是源码,源码需要进行编译才能运行,使用门槛较高。因此一些商业组织为了降低门槛,将gcc, glibc, vi, linux内核整合为一个Linux发行版,例如RedHat版本
Linux主流三大分支:
Debian—分支Ubuntu,knopix,mint
Slackware—SuSE(SLES),OpenSUSE(界面华丽)
RedHat –RedHat enterprise RHEL
CentOS,Community ENTerprise OS
Fedora Core:6个月
还需了解:
Gentoo版本
ArchLinux版本
软件程序版本号概念:
分为三部分组成:Major.minor.release 例如: Linux 0.99, 2.2, 2.4, 2.6, 3.0, 4.0
官方站点:www.kernel.org
GNU组织:
vi,gcc也有自己各自的发行版
将Linux,vi, gcc不同的发行版进行打包,比如将Linux2.2,vi3,gcc1进行打包
发行版也有自己的版本号,发行版与Linux内核版本无关,是发行者组织的版本:
RHEL:5.x系列,6.x, 7.x
Debian:8.x
OpenSuSE:13.x
相关拓展:
GPL, BSD,Apache,Android概念
GPL: GNU通用公共许可证简称为GPL,是由自由软件基金会发行的用于计算机软件的协议证书,使用该证书的软件被称为自由软件。大多数的GNU程序和超过半数的自由软件使用它。 下面的正文是自由软件基金会GNU通用公共许可证原始文档的副本。Linux操作系统以及与它有关的大量软件是在GPL的推动下开发和发布的。如果你打算为了发布的目的修改,更新或改进任何受通用公共许可证约束的软件,你所修改的软件同样必须受到GNU通用许可证条款的约束
BSD: BSD (Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,在1977至1995年间由加州大学伯克利分校开发和发布的。历史上,BSD曾经被认为是UNIX的一支——“BSD UNIX”, 因为它和AT&T UNIX操作系统共享基础代码和设计。在20世纪80年代,衍生出了许多变形的UNIX授权软件。比较著名的如DEC的Ultrix及Sun公司的SunOS。1990年代,BSD很大程度上被System V4.x版以及OSF/1系统所取代,晚期BSD版本为几个开源软件开发提供了平台并且一直沿用至今。今天,“BSD”并不特指任何一个BSD衍生版本,而是类UNIX操作系统中的一个分支的总称
Apache: Apache软件基金会(Apache Software Foundation),是专门为运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织,这个开源软件项目就是 Apache 项目。这个组织把自己作为有着相同目标的开发者与用户的团体,而不是简单的共享在一个服务器上的一组项目的组织团体。在它所支持的 Apache 项目与子项目中,所发行的软件产品都遵循 Apache许可证(Apache License)
Apache软件基金会(ASF)的前身起源于一个从事服务器开发与维护的“Apache 组织”。这个“Apache 组织”在1999年以前就已经存在很长时间了,这个组织的开发爱好者们聚集在一起,在美国伊利诺斯大学超级计算机应用程序国家中心(National Center for Supercomputing Applications,简称为NCSA)开发的 NCSA HTTPd 服务器的基础上开发与维护了一个叫 Apache 的 HTTP服务器。
Android:安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机、智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。