1.linuxãUnixãUbuntuä¸è
çä¸ååç¸åä¹å¤
2.莱昂氏UNIX源代码分析目 录
3.莱昂氏UNIX源代码分析书本简介
4.LIUNX的第版第历史
5.UNIX、BSD(FreeBSD)操作系统简介
6.世界上第一个操作系统是源码用什语如何编写的?
linuxãUnixãUbuntuä¸è çä¸ååç¸åä¹å¤
unixï¼èµ·æºææ©ï¼ä¸ºäºåé Unixæ以åé äºcè¯è¨ï¼
linuxï¼åæ¥Unixä¸è®©å¦çå¦ä¹ æºä»£ç äºï¼ä¸ä½ç人èªå·±æ ¹æ®Unixçç¹æ§ä»0å¼å§åäºèªå·±çç±»Unixç³»ç»minixï¼ç´å°åæ¥è¬å °çæ纳æ¯åå¦åç°äºminixï¼åæ ¹æ®minixåäºèªå·±çå æ ¸å«linuxï¼
ubuntuï¼åæ¥linuxåå±æäºå¾å¤çåæ¯çæ¬ï¼å ¶ä¸çä¸¤æ ¹ä¸»èæ¯çº¢å¸½åç³»ådebianç³»ï¼èubuntuå±äºdebianç³»ï¼å±äºlinuxçåèµ·åæ¯ï¼ä¹å«åè¡çã
莱昂氏UNIX源代码分析目 录
莱昂氏UNIX源代码分析目录
1. 献辞 2. 致谢 3. 序(一) 4. 序(二) 5. 历史注记上篇: UNIX操作系统版本6源代码
5.1 Unix操作系统过程分类索引
5.2 Unix操作系统文件及过程
5.3 定义的符号列表
5.4 源代码交叉引用列表
第一部分: 初始化与进程初始化
6.1 初始化
6.2 进程初始化
第二部分: 陷入、中断、版本系统调用和进程管理
7.1 硬件中断和陷入
7.2 汇编语言陷阱例程
7.3 时钟中断
7.4 陷入与系统调用
7.5 进程管理
第三部分: 程序交换、第版第基本输入/输出、源码用什语块设备
8.1 程序交换
8.2 基本I/O介绍
8.3 rk磁盘驱动器
8.4 缓存处理
第四部分: 文件和目录、版本如何把源码传到数据库文件系统、第版第管道
9.1 文件存取与控制
9.2 文件目录和目录文件
9.3 文件系统
9.4 管道
第五部分: 面向字符的源码用什语特殊文件
.1 面向字符的设备
.2 字符处理
.3 交互式终端
.4 终端设备处理程序
莱昂氏UNIX源代码分析书本简介
在年,一本名为《莱昂氏UNIX源代码分析》的版本书籍首次在澳大利亚新南威尔士大学内部流传,但因其内容涉及UNIX内核的第版第商业机密,一直未能正式出版。源码用什语尽管如此,版本它深受UNIX社区的第版第黑客们喜爱,私下里广为流传,源码用什语成为了计算机操作系统领域的版本不朽经典之作。经过多年的努力,直到年,这本书才得以公开发行。
这本书由两部分构成,上篇详尽解析UNIX版本6的源代码,而下篇则是作者莱昂先生对这一版本的深入分析。其文字简洁明了,对于自学UNIX的读者来说,它不仅是教材,更是长达二十多年的鼓舞和启发源泉,对计算机专业人员和学生产生了深远影响。无论是对操作系统编程人员,还是大专院校的学生和教师,这本书都是一份宝贵的学习参考资料。
LIUNX的历史
到/user1//archives//.shtml看看吧,很详细的。
UNIX这个名字早已被众多用户所熟知。作为一个操作系统,它以其独特的魅力----即开放性、可移植性、和多用户多任务等特点,不仅赢得了广大用户的喜爱,同时也受到许多计算机厂商的青睐。
Unix操作系统的历史漫长而曲折,它的第一个版本是年由KeThompson在AT&T贝尔实验室实现的,运行在一台 DECPDP-7计算机上。这个版本实现了一个文件系统、一个命令解释器(shell)和一些简单的文件工具。Ken和他的伙伴们使用GE系统来为 PDP -7进行交叉编译,很快写好了汇编器,使系统有了自支持的能力。这个系统已基本成型,其文件系统与现在的文件系统相似,它使用i结点,有特殊文件类型支持目录和设备,而且可以同时支持两个用户。
与当时的一个名为MULTICS(MULTiplexed Information and Computing System)的操作系统相比,UNIX显得异常短小精悍,紫色征途源码它曾被玩笑地称作"UNICS",代表 UNiplexed Information and Computing System. 有人称 MULTICS 代表 "Many Unneccessarily Large Tables In Core Simulataneously",而UNIX则是裁减了的 MULTICS,不久,UNICS变成了UNIX而且被流传下来。
年,UNIX被移植到PDP-/上,这需要很大的工作量,因为整个系统全是用汇编语言编写的。
C语言的诞生给系统设计带来了新的契机, Ken Thompson和Dennis Ritchie使用C语言对整个系统进行了再加工和编写,使得Unix能够很容易的移植到其他硬件的计算机上。从那以后,Unix系统开始了令人瞩目的发展。由于此时AT&T还没有把Unix作为它的正式商品,因此研究人员只是在实验室内部使用并完善它。正是由于Unix是被作为研究项目,其他科研机构和大学的计算机研究人员也希望能得到这个系统,以便进行自己的研究。AT&T以分发许可证的方法,对Unix仅仅收取很少的费用,大学和研究机构就能获得Unix的源代码以进行研究。Unix的源代码被散发到各个大学,一方面使得科研人员能够根据需要改进系统,或者将其移植到其他的硬件环境中去,另一方面培养了懂得Unix使用和编程的大量的学生,这使得Unix的普及更为广泛。
由于操作系统的开发相当困难,只有少数的计算机厂商,如IBM、Digital等大型公司,才拥有自己的操作系统,而其他众多生产计算机的硬件厂商则采用别人开发的操作系统。因为Unix不需要太多的花费,因此很多厂商就选择了Unix作为他们生产的计算机使用的操作系统。他们把Unix移植到自己的硬件环境下,而不必从头开发一个操作系统。
到了年代中后期,在Unix发展到了版本6之后,AT&T认识到了Unix的价值,成立了Unix系统实验室(Unix System Lab,USL)来继续发展Unix。因此AT&T一方面继续发展内部使用的Unix版本7,一方面由USL开发对外正式发行的Unix版本,同时AT&T也宣布对Unix产品拥有所有权。几乎在同时,加州大学伯克利分校计算机系统研究小组(CSRG)使用 Unix对操作系统进行研究,因此他们的研究成果就反映在他们使用的Unix中。他们对Unix的改进相当多,增加了很多当时非常先进的特性,包括更好的内存管理,快速且健壮的文件系统等,大部分原有的源代码都被重新写过,以支持这些新特性。很多其他Unix使用者,包括其他大学和商业机构,跳转html源码都希望能得到 CSRG改进的Unix系统。因此CSRG中的研究人员把他们的Unix组成一个完整的Unix系统——BSD Unix (Berkeley Software Distribution),向外发行。
到此,UNIX就有了一个大的分支,分为AT&T UNIX 和 BSD Unix,现代的Unix版本大部分都是这两个版本的衍生产品。
Linux是一种操作系统
年8月,芬兰的一个学生在comp.os.minix新闻组贴上了以下这段话:
你好,所有使用minix的人-我正在为()AT做一个免费的操作系统(只是为了爱好,不会象gnu那样很大很专业).
这名学生就是LinusTorvalds,而他所说的'爱好'就变成我们今天知道的Linux.
Linux引起黑客们(hacker)的注意,通过计算机网络加入了Linux的内核开发,Linux倾向于成为一个黑客的系统----直到今天,在Linux社区里内核的开发被认为是真正的编程.由于一批高水平黑客的加入,使Linux发展迅猛.
作为一个具备所有特性的类似POSIX的操作系统,Linux并非仅由Linus一人开发,而是由全世界几百个程序员共同开发的.有趣的是这个巨大的全世界的开发活动不是很协调.当然,Linus为内核定了调子,但Linux并不只是内核.没有一个管理组织;一个俄罗斯学生得到一块新的主板,就写了驱动程序支持这块主板.马里兰的一个系统管理员需要备份软件,就写一个,并把它传给任何需要的人.好象总是在正确的时间发生正确的事.
到年底年初,Linux1.0终于诞生了!Linux1.0已经是一个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的机器上也表现得非常好,至今人们还在津津乐道于此,不过自从2.1.xx系列的内核Linux开始走高端的路子----硬件的发展太快了,但是Linux不会失去它的本色.Linux具有良好的兼容性和可移植性,大约在1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU---DigitalAlpha(至少目前主频是最高的).所以不要总把Linux与低档硬件平台联系到一块,Linux发展到今天,这是一个误区,它只是将硬件的性能充分发挥出来而已,Linux必将从低端应用横扫到高端应用!
在Linux的发展历程上还有一件重要的事:Linux加入GNU并遵循公共版权许可证(GPL).此举大大加强了GNU和Linux,几乎所有应用的GNU库/软件都移植到Linux,完善并提高了Linux的实用性,而GNU有了一个根基,我现在也搞不清楚到底是GNULinux呢还是基于Linux的GNU.:-)更重要的是遵循公共版权许可证,在继承自由软件的精神的前提下,不再排斥对自由软件的商业行为(如把自由软件打包以光盘形式出售),不排斥商家对自由软件进一步开发,不排斥在Linux上开发商业软件.
另一个有趣的事是你可不花钱就得到Linux.你只要有时间并愿意下载,你就可以免费得到大多数软件.
为了使Linux变的容易使用,Linux也有了许多发布版本,发布版实际上就是一整套完整的程序组合。现在已经有许多不同的Linux发行版和各自的版本号,为了不产生混淆,我们先解释一些常提到的术语。
当我们提到的Linux时,一般是指"RealLinux",即内核,是所有UNIX操作系统的“心脏”。但光有linux并不能成为一个可用的操作系统。还需要许多软件包,编译器,程序库文件,Xwindow系统等等。因为组合方式不同,面向用户对象不同,所以这就是为什么有许多不同的Linux发行版的原因。
各地出现了很多的Linux发行版,如Slackware,Redhat,Suse,TurboLinux,OpenLinux等十多种,而且还在增加,注意,严格来说,你不能说"RedhatLinux""SuseLinux""SlackwareLinux"等等,Linux主要指操作系统内核,对所有发行版内核原代码都是一样的(但集成的内核版本可能因发行时间不同而有所不同).
越来越多的公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来,如今很多IT业界的大腕IBM,Intel,Oracle,Infomix,Sysbase,Corel,Netscape,CA,Novell等都宣布支持Linux!商家的加盟弥补了纯自由软件的不足和发展障碍,Linux迅速普及到广大计算机爱好者,并且进入商业应用,正是打破某些公司垄断文化圈的希望所在!!
Linux是爱好者们通过Internet协同开发出来的,当然它的网络功能十分强大,比如你可以通过ftp,nfs等来安装Linux,用它来做网关等等.随着Linux的发展衍生出来的应用恐怕出乎Linus本人最初的预料,如有人用它来做路由器,有人来做嵌入式系统,有人来做实时性系统......常有新手问Linux能做什么,其实它不象那些中看不中用的操作系统,不在于你用它能干什么,而在于你想干什么!
UNIX、BSD(FreeBSD)操作系统简介
UNIX操作系统,由Ken Thompson在年于AT&T电话公司开发,是使用Digital PDP-7小型机的汇编语言实现的。其名称源于同事对MULTICS(多信息及计算服务)的一句玩笑,灵感源于MULTICS项目,其中包括树形结构的文件系统、单独的程序用于解释命令(shell)以及将文件作为无结构字节流看待的概念(一切皆为文件)。C语言是Dennis Ritchie设计并实现的,该语言于年步入成熟期,用于几乎整个UNIX内核的重写,使UNIX成为最早以高级语言开发的操作系统之一。
从年到年,UNIX发布了多个版本。其中,第一版于年发布,运行在PDP-上,附带了FORTRAN编译器和许多雏形程序。第二版于年发布,安装在AT&T的台计算机上。第三版于年发布,包括了C编译器和管道的首个实现。第四版于年发布,几乎完全以C语言重写。第五版于年发布,当时UNIX的亚视源码资源装机数已超过台。第六版于年发布,这是在AT&T之外广泛使用的首个版本。
BSD操作系统是在/学年期间,由Thompson在加州大学伯克利分校担任客座教授时开发的,他与研究生们一起为UNIX开发了许多新特性。许多UNIX的新工具和新特性在伯克利问世,包括C shell、vi编辑器、改进型的文件系统(伯克利快速文件系统)、sendmail、Pascal语言编译器,以及用于新型Digital VAX架构的虚拟内存管理机制。年月,首个完整的UNIX发布版3BSD诞生。年,加州大学伯克利分校的计算机系统研究组发布了4.2BSD,该版本包含了完整的TCP/IP实现和套接字应用编程接口,以及各种网络工具。
GNU项目由Richard Stallman于年开始创建,旨在开发一个“自由的”UNIX实现,包含内核以及所有相关软件包。Stallman的“自由”概念在法律意义上意味着软件可以免费或以低价获得。GNU项目在年成立了自由软件基金会,以支持项目和广义上的自由软件开发。年的4.3BSD版本和年的4.4BSD版本对BSD系统产生了深远影响。
在世纪年代初,Bill和Lynne Jolitz将BSD系统移植到位的x cpu上,命名为/bsd。这项移植工作基于4.3BSD源码的版本之一,该版本中残存的所有AT&T专有源码被替换或删除。FreeBSD和NetBSD分别基于/BSD创建了自己的版本,NetBSD侧重于大量硬件平台的可移植性,而FreeBSD则主要关注性能,并成为应用最为广泛的BSD。
在年,Berkeley Software Design, Incorporated(BSDi)发行了受商业支持的BSD UNIX——BSD/OS,包含二进制和源代码,售价美元。然而,BSDi被USL(UNIX System Laboratories)起诉,声称含有USL专有源码及商业机密。在和解后,加州大学继续发布BSD,并且BSDi、FreeBSD以及NetBSD纷纷以经过修改的4.4BSD-Lite源码替换了各自的Net/2基础源码。
现今,大多数UNIX发行版如Solaris、HP-UX和AIX已变成小众产品,而BSD的开源衍生版仍受到操作系统专家、自由软件布道师和注重安全的管理员的狂热追捧。mac OS也有BSD的血统,FreeBSD是rxjava 源码 解析应用非常广泛的BSD衍生版之一,市场份额超过%,用户包括WhatsApp、Google、百度和Netflix等大型互联网公司。
世界上第一个操作系统是如何编写的?
人家就问第一个操作系统是怎么做出来的,楼下一堆人都没说到点子上。
这个问题就像是没有生产机器,那第一台机器是怎么生产出来的。
第一台计算机,或者称之为打孔计算机,破译机。它的作用就是读0和1的不同排列组合,通过这些组合来解译不同的意思。比如 代表什么意思,代表什么意思。这些是一开始就设定好了的,就像是中国古代的算盘一样,上面的算子代表5,下面的算子代表1是一个道理。
好了,开始就设定好这个解码功能后,这台破译机就可以读信息了,它通过什么读呢?那时候没有数据,没有数字信号,只有模拟信号,它们就读打孔纸。就是在纸上写,然后打出一个一个孔,像卡纸一样。设备就读这个孔的排列,根据不同的排列去找这个排列代表了什么,然后给出答案。这就是最初的计算机原理,非常简单,它就是一个密码解释器,或者说是简单的编译器。
那时候就是用来算加减法等一些计算,它就是一个大型的计算器。
后来发展的复杂一些了,也就是增加了更多的0和1的组合来丰富机器的解释库,来计算更复杂的公式。
这时候你要问了,这些0和1的解释库是存在哪里的?这就是为什么以前的计算机房间那么大个。它们是通过电子管的开和关来代表了0和1,通过电路给电子管通电,比如说那张纸打的孔,有一个像探头一样的东西,探测到那里有一个孔,或者没有孔,就给出电信号来控制不同的电子管组合的通路和断路,最后给出结果。
比如我用纸戳一个1+1=?,我就戳一个( )代表1( ....)代表+ ( )代表1,然后给机器读,机器读出来后,就会根据电子管的通断组合,最后将结果反馈回来。一开始是用亮了多少盏灯来表示计算结果,有了显示器后,才把它变成了显示画面。
显示画面其实也是有一个库的,比如,你就给我显示1,,你就给我显示2,它会找对应的库,这个库一开始就用不同的电路
搭建做好,无非就是不同的电路通断,电压,电流等各种奇怪的组合来完成 。它自身有一套神奇的检测机制,这个就不说了,我也说不清楚。
那么回到最开始的问题,世界上第一个操作系统是怎么出现的?就是用手在纸上写出来的。
一开始不能算是系统,比如我要算一个公式,a /b +1+a+5*b,举个例子,这个公式我要经常用,我不可能每次都要去戳很多纸,所以我只需要先做一个模板,然后留出一个空白,需要的时候,把a和b戳出来就可以了,这样就很方便了。
后来这些公式越来越复杂,甚至是出现了不同的计算,比如说, 如果a<,那么就执行xxxx,如果a>,就执行xxxx。然后这个模板就越做越大,需要戳的纸也越来越长。
好家伙,后来实在戳不过来了,十个手指都戳破了,甚至计算机也运行不过来了,更复杂的运算根本做不了。不行,不能这样下去了。
后来就开始有人研究了,电子技术的发展越来越高科技,电子管也做得越来越小,最后用集成电路来控制开关,但是其实原理都是一样的。可以运算的公式和能力也越来越强。其实还是不同的电子管组合成不同的开关,你以为这个组合就是几个电子组的组合吗?不,已经达到上亿,上千亿个电子管的组合了,这也是集成电路的优势。
一开始是用纸来保存信息,但是前面说了,纸已经不够用了,就开始出现了软盘,光盘。光盘上的凹凸点,代表了0和1,其实就是存储的介质发生了变化,后面发明了磁盘,发明了光盘,甚至是软盘、机械硬盘,SSD等不同的储存介质,这些其实就是保存的方式不同而已,其实它们保存的数据还是和打孔纸一样,就是0和1的数据,只是相比纸而言,保存得更多,更方便,也更容易被机器读取。
这时候保存的介质发生了变化 ,那么读取这些数据的那个探头也发生了变化,变成了像软盘的磁头,光盘的激光头等。
当这种保存的介质从纸变成了硬盘后,就会出现一个问题,一开始写这些孔的时候,是用笔和给纸戳一个窟窿来让机器识别,现在要怎么把0和1这种数据写到磁盘里呢?这里就发明了键盘了,最初的键盘当然和现在不一样,但是原理是一样的。还是按一个键,给一个电信号,磁头收到了电信号,会判断是0还是1,如果是0,就是反磁,如果是1就是正磁。一开始的键盘,就是只有几个键,1键和0键。
后来有人觉得整天打0和1太麻烦了,如果我要打a这个符号,我就要按(),按这么多下,我的手都要变成一指禅了,于是就发明更复杂的键盘,比如我要打a,b,c,d,我就一开始就设定好,我打a,就直接发送一串机器码(),我要打b就发送一串机器码(),类似这样的。其实也是给键盘做好一个约定,我一开始就把一些特定的,经常使用到的符号或其他有代表性的字母、数字,把它们对应的0和1组合的机器码先做成一个表格,存到键盘的识别库里,我按哪一个字符,你就给我发送哪一个字符对应的机器码就可以了,这样我就不用从早到晚按0和1这两个键,按个没完。这么一设定,我就不用记太多的机器码组合了,一开始就把这些组合给分门别类。
这样发展到这里,键盘的雏形就出来了,也为汇编的发展埋下了伏笔。汇编其实就是最接近或者它就是机器码的一种组合语言,机器是可以直接识别出来。
前面说了,为了执行不同的公式和复杂的计算,就出现了这同的模板,只需要修改模板上的参数,就可以重复执行这些模板。
现在这些板从纸上存到了软盘上,现在就更方便了。以前用纸的时候,用过一次,纸就没用了,现在软盘上的数据一直在,我只需要用磁头把原来填的数据擦掉,重新写个新的参数就可以了。你可以理解成当时在纸上我用铅笔写参数,用过一次,用橡皮擦给擦掉重复写。但是纸是需要打孔的,打了孔,橡破擦也没用,已经是一个孔了,你也补不上,所以那纸就废掉了。
但是软盘不一样,软盘是可以重复写的。可以把磁消掉重新在那个位置写一个新的参数,这样就可以重复利用了。
后来这些模板越做越复杂,最后慢慢的发展成了一个小型的,有自己一些独立功能的计算系统,这可以理解为,它有了系统的一些特性,但是还不算系统。
后来这些模板更强大了,有人觉得,因为需要更加强大的功能,一般的模板已经没办法满足了,而且通过这种最原始的abcd来拼凑这些公式、模板,太累了。于是就有人开始写中间解释器。
怎么理解呢?前面说了,一开始大家都是写1和0组合,觉得太累了,于是把1和0的不同组合做成了一个库,我只需要输入1+1,abcd这种键盘上约定好的字母,键盘就发送对应的1和0组合给机器,机器就可以直接识别了。
现在需求越来越复杂,发现光打这些abcd,需要打越来越多的代码,发现和之前打1和0一样累了,怎么办呢?于是就有人打算再创一个中间库,把这些abcd,1,2,3等组合做成一个库,不同的组合代码不同的意思,这就是从机器向交互语言的发展了初期了。
这个库一开始还是用abcd等最初的那个键盘库打上去的,当然做的也很累,但是只要这个库完善好了,后面要继续发展更高级的交互语言就简单多了,以后所有交互语言写出来的东西,都通过这个库翻译成机器语言库,机器语言库就可以识别了。
于是有了交互语言库,大家就不用打太多的字符来拼凑成不同的模板了,因为交互语言库有了不同的单词组合成更加有意义符号,人一看就懂,不需要那些零零散散的字母,没有任何意义在里面,还需要死记硬背。
这就有点像是古代的文言文,你一听不知道他在说什么,然后去查一下文言文字典,这样你才能知道他在说什么。
现在你可以用白话言语来交流了,这样就更轻松了,你可以直接和他对话。
至于机器听不听的懂你说的意思,这个不要紧,有解释库,你把解释库做好了,你说的每一句话会自动翻译成机器语言,就可以了。
随着语言的越来越强大,现在就可以写出更加复杂的模板了,后来显示器的发展越来越强大,让这些模板出现了更丰富的画面,其实它显示什么东西,也还是会有一个库的,只要约定好,我返回的这串代码代表了什么东西,你就显示什么东西就可以了。甚至后来有了。
其实的显示也有自己的一个约定,就是我返回什么代码,你就解析成什么颜色点,然后不同的代码组合,就会现出一大串的颜色点组合在一起,就变成了有颜色的和画面。其实文字也是的一种,就是一种图信号。
回到模板上来,后来慢慢的,这些模板越来越强大,甚至有人开始动起心思,开始给这些模板加皮肤,加各种好看或者神奇的功能,让它更加好用,于是最初始的系统就这么慢慢的发展起来了。
其实系统它不是突然就有的,是在整个机器的发展的过程中,慢慢的累积到一定程度后,顺应发展而来的。
这些模板也是从最简单的公式模板慢慢发展成了现在有了自己的界面,有了自己的独立运算功能和各种娱乐功能等强大的系统。
最初的系统,也就是这些模板的诞生,其实是很辛苦的,它们需要有一定的积累,一些基础的识别库的完善,这些都是需要最初的那代人,一开始就约定好,然后慢慢地完善起来,然后高级的语言和系统才能通过这些库来和机器交流。