为什么需要操作系统:
计算机是一堆硬件组成的,核心CPU和存储设备,比如内存和CPU的沟通就是通过内存总线来实现的。鼠标键盘等外围设备是通过南桥连接实现的
程序是不能直接运行在硬件上的,因为如果所有程序都运行在硬件上,那么这个程序就可以控制整个硬件,那么一个恶意程序就有可能造成所有程序不能正常运行,因此就需要一个调度器来管理这些这些程序,也就是我们说的操作系统,更准确的说应该是内核(操作系统的核心)
内核的作用:
管理硬件资源,将硬件资源虚拟成其他样子,供上层其他应用程序使用
内核不会让程序直接访问硬件,而是将硬件提供的能力通过一个一个的系统调用来实现的
为什么不基于系统调用来编程:
系统调用是非常底层的,很多功能是重复的,比如word和excel的打印功能,这样势必会浪费很多系统资源
操作系统的另一个作用:
除了提供内核之外,还要将内核提供的系统调用输出出来,这种输出是通过较为高层的调用接口实现的,这种调用接口我们叫做库,库也是应用程序
库和普通的应用程序的区别:
库没有程序的执行入口,不能独立运行,只能被别的程序调用才能执行
库执行的环境就是被调用,所以,我们调用的资源除了内核提供的资源还有库提供的资源
我们在编程的时候不使用库,而是直接在内核上编程可不可以?
可以,但是直接在内核上编程(系统调用)比较麻烦,所以除了系统调用还要有库调用
库要怎么调用?
是通过应用程序接口来实现的,也就是API,只要API相同,这个库就可以被调用,API不同,库就不能调用
系统调用和库调用的对比:
库调用编程起来更简单
系统调用运行效率会更高,但是编程复杂,权限也更大,所以说×××们一般都是在内核上编程,或者直接操作硬件
一个程序运行起来的流程,以启动一个word程序为例
敲击键盘或者鼠标,指令到达CPU,而能和硬件进行交互的只有内核,所以CPU会通知内核来处理,而不是直接通知给word,所以这个时候,内核就必须在CPU上运行起来,内核会知道这个进程是哪个程序发起来的,然后再将这个指令发送给指定的应用程序
为什么内核会知道这个进程是哪个程序发起来的?
整个系统的资源和上层应用程序的运行都是通过内核来完成的
操作系统也是一个程序,是怎么运行起来的?要想运行起来肯定需要特定的指令和数据,这些指令又是放在哪里的?
放在内存中,存储器当中,那就意味着,在我们的存储器中,既要有内核,还要有其他的应用程序
如果一个应用程序直接访问内核,能够直接和内核交互,能够修改内核中的某些参数的话,意味着什么?
系统的稳定性得不到保证,所以我们必须要有一种机制,能将应用程序和内核隔离开来
保证系统的稳定性,inter是怎么做的:
有自己的保护机制,4个同心圆,最里层,0级别,也叫特权级别,只有内核才可以运行,第四环,普通应用程序可以运行,所以普通应用程序是不能访问内存当中处于0级别的的内存区域的,而CPU和内存是紧密相连的,所以CPU的0级别会映射到内存中0级别的相应一段
程序运行起来之后在我们的内存中是存在几段?
三段
第一段是BIOS的映射程序,也就是主机开机加电自检后BIOS就会映射到内存的开端部分,所以程序能够运行起来,能够完成电自检,加电自检后就是载入我们的操作系统
第二段就是内核空间(kernel space)
第三段是被各个应用程序应用的空间(程序1,程序2,程序3)
内存碎片:
比如我们给一个程序分配2M的空间,这样连续分配下去,当有程序退出后,这些空间就成了碎片
程序启动的两种方式:
后台启动(也就是开机自动启动),按需启动
我们启动一个程序,怎么让内核识别我们的指令,怎么让计算机识别?
必须给我们的操作系统提供一种特殊的应用程序,叫做shell
shell的作用:
是操作系统的外壳,能够接收指令,识别指令(将用户指令翻译成计算机-内核可以理解的指令),并传输给内核,由内核来指挥着我们应用程序启动的这么一个界面
shell的分类:
第一种是图形用户界面(GUI),第二种是命令行(CLI)接口
每一种GUI shell在不同的场景中有不同的表现形式:
linux中一般会有三种
windows只有一种,windows server 2008 之前是将图形界面直接做进内核的,所以必须用,2008 server以后的可以选择不用图形界面的
CLI shell 不同操作系统中的表现形式:
windows中的dos
linux中的bshell,zshell,一堆的程序可以使用
图形界面和处理界面那个操作起来是更快的:
cli效率是更高的,点十几次鼠标才能完成的,可能一个命令行就搞定了,但是需要掌握,是一个学习曲线比较陡峭的曲线,也就是有人说linux是一个尤物,window是一个好看的东西,linux是一个好用的东西,即使十年八年不重启也没事
window的应用场景:
个人桌面,较低端的IDC机房
shell是一种交互式接口,通过交互式接口启动的程序,在关闭shell的时候也会关闭,还是有依赖关系的
内核的功能:
进程管理
内存管理
网络功能
文件系统
硬件驱动
批处理系统
是我们现代操作系统的前身,在现代操作系统出现之前,所有的程序都是直接运行在硬件上的
在硬件上直接运行的处理过程是,一个进程处理完毕,再处理下一个进程,中间用分隔符隔开,单进程的
然后是施乐公司,贝尔实验室,麻省理工实验室,联合开发一个多任务系统,是用汇编语言来进行研发的,叫做multics,这个系统实现了多用户和多进程
实现了功能之后,GE和贝尔相继退出,这就使得贝尔实验室的这些工程师闲下来
贝尔的ken在Multics开发了一个打飞机游戏,但是贝尔退出了,就不能再使用multics操作系统,但是这个打飞机游戏只能运行在这个操作系统,所以他像领导申请主机
想要一个PDP-11计算机,需要几十万美元,领导不批
有一天在一个角落里发现了一台PDP-7的主机,比较落后,想在这台主机上运行自己的打飞机游戏space traver
但是应用程序需要运行在内核上,于是他就在PDP-7上开发了一个类似于multics的内核,模仿multics的内核
开发成功后,到处炫耀,大家更感兴趣的是这个操作系统,但是这个操作系统是用汇编语言编写的,是与硬件紧密结合的,当别人想让他把这个操作系统移植到别的主机上时,是有难度的,但是最终还是成功了,当时他的另一个同事就给这个系统起名为unics,后来才起名为unix,意思是与multics相反,,这个操作系统是十分简单的
这个操作系统是汇编语言编写的,性能不错,但是移植起来比较困难,为了扭转这种劣势,另一个同事看待ken在不同的平台上一直移植操作系统,就想用高级语言来重新开发Unix,然后在不同的平台上用不同的编译器来编译来完成Unix的移植,因为高级语言对底层硬件的依赖性是比较低的,就是C语言,说是高级语言,其实也是兼具低级语言的特性
具体就是在B语言的基础上增加了静态变量,指针等额外的东西,变成了C语言,这就诞生了C语言,B语言本身是一种脚本语言
然后ken和另一位同事就开始用C语言重新写了Unix操作系统,这在当时是十分大胆的做法,因为在当时,高级语言的运行效率比汇编语慢至少30%,因为计算机的硬件性能很差,但是,他们遇见未来计算机的性能会很快提高
在74年,发表论文,并参加一个论坛,以为在当时,美国的反垄断法规定,AT&T公司(是美国电信公司的巨无霸,叫做美国电话电报,贝尔实验室隶属于他)不能销售除了电话电报以外的其他产品,不得已,只能讲这个UNIX无偿的提供出来,给那些科研机构,比如加州伯克利分校
美国的工程师如果做出杰出贡献的话,会有年休,就是工资照常发,但是我们搞技术的不怎么会玩,所以都会到附近的高校里任教,然后ken就在去伯克利分校任教,当时学生bill joy就成立了Unix研究小组BSRG,ken的加入使得这个研究如火如荼
然后美国军方的网络就兴起了,他们想有一种协议在网络上传输数据报文,并且不希望是在一个封闭的系统中,所以bill的这个实验室就有用武之地了,所以后面出现的TCP协议的拥塞机制都是诞生在bill领导的这个小组BSRG,最后将这个糅合了这些功能的Unix系统起了一个新名字,叫做BSD(伯克利系统发行版),而贝尔实验室那个原生的操作系统就叫做system vX(X=1,2...)
后来贝尔实验室被卖。就不在受AT&T不能销售非电话电报业务的限制
BSD出来之后,BSRG就开始卖钱,牟利甚多,这就引起贝尔实验室的不满,然后他独立出来之后就迫不及待的开始卖钱,一个授权就要4万美元,很贵,并且和BSD打官司,打了十年的官司,在这十年中程序员来回倒戈,UNIX在这十年中开始停滞
这个时候到了8几年,出现了PC兼容机,IBM和康柏公司开始生产PC机,就需要操作系统,但是当时UNIX是只能应用于PDP系列上的,始终没有往PC机上移植,为什么呢,当时PC机使用的是inter的CPU,于PDP使用的M68K的CPU不同,当时inter生产的CPU是十分丑陋的,编程语言界面什么的都很丑陋,并且性能很差,所以当时的UNIX程序员是不屑于将UNIX运行与PC机上的,但是PC机也得跑呀,所以当时美国一个教授就研究了操作系统,CP/M,当时想买一个计算机需要3万美元,买一个操作系统也需要3万美元,不是一个普通家庭能够负担的起,但是IBM和康柏公司想让自己的PC机卖的好,就想不用那么多的钱来买操作系统。这个时候美国有一个叫做Microsoft的公司,公司有三个人,公司成立之初没事干,就在买basic的编辑器,和对UNIX包装再卖,他们自己的UNIX叫做xenix,但是卖UNIX的热情没有持续太久,当时比尔盖茨的另一位好友的一位同事在西雅图的另一个小公司仿照CP/M写了一个操作系统,花了四周时间,比尔盖茨就发现了这个商机,就利用自己母亲是IBM的董事的身份找到了IBM的董事长沃森,说自己卖操作系统的授权给IBM,一个license只要几美元。然后沃森就看在他母亲的面子上还有这个系统的前景上给他签了合同,但是这个时候他并没有拿到这个系统,然后就找自己的朋友去找这个程序员买这个操作系统,出价5万美元,这个程序员觉得对方是疯子,四个星期开发的程序5万买,然后当时就答应了,买来之后,转手就卖给了沃森,自己和自己的小伙伴两个人对这个系统敲敲打打重命名为DOS
后来的故事我们就知道了,随着技术的发展,PC机卖出了上百万台,DOS也获得了千万美元的利润
DOS全称,是磁盘操作系统,在当时是单用户,单任务的,很容易崩溃,但是在当时也是很好用的了,但是这种好在另外三个人换了另外一家公司后就破灭了,这三个人的领导者就是jobs(乔布斯)
乔布斯看到当时PC机大卖特卖,就想开发出一种超过IBMPC兼容机的PC机,乔布斯十分崇拜计算机之父图灵,图灵在当时是×××,在但是是不能接受的,并且被监禁起来,图灵羞愤之下就吃了一口抹了×××的苹果,享年41岁,不得不说在但是是一个悲剧,这就是乔布斯把自己公司起名是苹果的原因,并且是咬了一口的苹果
当时的苹果1性能并不是很好,苹果2的时候就很好了,乔布斯不是做技术的,但是他有一个朋友是做技术的,并且技术很牛,,最后说是在乔布斯的威逼之下离开苹果公司
但是他的苹果1比IBM的PC机好用,因为他用的是UNIX,当时UNIX的界面是比DOS好很多的,但是他的PC机的CPU用的不是inter的,用的是powerpc,性能很强大,但是比PC兼容家卖的贵,贵很多,这个时候乔布斯已经是百万富翁
这个时候他利用关系去参观施乐公司,施乐公司主要是生产打印机的
施乐公司的PARK实验室当时研究出来了鼠标,并且研究出来了但是第一个可以图形化操作的操作系统,但是施乐的领导却觉得这是一个不祥之物,觉得如果人们都去对着这个图形化界面去操作,就没人买他们的打印机了,这个产品被打入冷宫,当乔布斯悄悄溜进这个实验室的时候,敏锐的观察到,这个东西20年后必将大行于天下,于是就跟施乐的公司拟领导说这个能不能让我cp一份,当时施乐的领导就以很低的价格卖给了他们,然后乔布斯就组织自己的秘密团队开始研发这个东西,当apple2出现的时候就已经有图形界面了,这对比尔盖茨绝对是当头棒喝,于是就接近乔布斯,给他说你的团队那么忙,能不能让我也加进你的团队,然后就是靠着口含莲花,三村不烂之舌搞到了一份,并且重命名为windows,还撬走了自己的一个大客户,乔布斯大为恼怒,骂比尔盖茨是小偷,但是比尔盖茨说自己的系统上找不到一点apple系统的踪迹,因为windows是基于dos开发的,单用户,单进程,很拙劣,Windows在上面跑起来动不动就蓝屏,但是当时乔布斯的操作系统封闭的,就是和自己的硬件一起卖,但是比尔盖茨是只卖软件,卖许可证,所以卖给了好多生产电脑的公司,包括IBM和康柏等,比尔盖茨赚的也是盆满钵满,到windows3.0的时候已经是里程碑式的发展,95的时候更不用说,所以说伟大的企业家都是偷来的,没有人事创造的
在微软快速 发展的时候,UNIX是在内战,当两者意识到问题的时候,为时已晚,微软已经占据大量市场,后来比尔实验室和BSD握手言和,要BSD删除自己原有的代码,与此同时,BSD的任务完成,小组解散,但是还是有一批人不愿放弃的程序员继续研发,就包括后来的第一个能运行在PC机上的正统UNIX FreeBSD(专注于PC机),还有openBSD(专注于安全)
**NetBSD(专注于服务)**
BSRG的领导者当时收到了斯坦福大学的资助,成立了自己的公司SAN,san公司当时生产自己的工作站,性能不错,并且有自己的操作系统,叫做SANOS,说白了就是一个BSD,但是为了避免当时BSD和UNIX的口水仗,转而使用贝尔实验室的UNIX,起名叫做solaris,是一个正统的UNIX,只不过是商业版的,只能运行在自己的硬件上
SAN公司为我们提供了很多优秀的技术,比如java,硬件,但是技术再强,如果不会运作的话,也是会到哦比的,最后SAN公司倒闭的原因,有人总结了一条就是技术过剩,2010年被oracle收购,47亿美元,本来是一家可以和IBM抗衡的公司,所以说我们不能只埋头学习,还要多抬头思考
说到SAN公司是因为在当时bill, jony为我们的UNIX引进了一种很重要的工具,CSHELL,是一种,C语言的shell,最初BSD能够非常流行,cshell也是功不可没的
IBM的地位:
从生产第一台打字机到现在,地位一直都是无法撼动的
windows的地位:
到了windows95的时候,比尔盖茨一直有一个梦魇就是他的操作系统一直蓝屏,尤其是在公众场合演示的时候,但是windows95,98是基于DOS开发的,这个缺点是从根源上就有的,先天性缺陷
这个时候的DEC在VAX上开发VMS的操作系统的研发团队失业了,因为VAX最初的操作系统是VMS,不用UNIX,而人们是更乐意用unix,所以这个时候比尔盖茨就找到了vms的领导,让他在vms的基础上改进windows
虽然很不稳定,但是比95,98好很多,改名为windows NT。新一代windows,,新一代windows的内核已经不是DOS了,而是VMS,并且引进了server的概念,配置文件什么都十分像UNIX,因为VMS也是和UNIX 有很多相似之处的
在当时,windows的界面还是很难看的,即使再吹嘘自己的技术,也是苹果三年前弃之不用的技术,时至今日依然存在,苹果这阵绚烂的界面收拾依赖于自己强大的硬件来实现的
像现在很多的图形工作站,处理视频,图像都还是苹果牛逼一点
minix
UNIX商用之后,很多科研机构就不能再免费试用UNIX了,包括荷兰的一个安德鲁教授,一直使用UNIX教学,很不爽,然后就自己开发一个操作系统,minix,小型的unix,但是那些API什么的都和unix的相同,最开始的时候只有4000行代码,然后就拿着自己的操作系统在欧洲教学,这个minix是 在自己的主机上写的,很多地方是用汇编语言来写的,尤其是驱动程序,所以说他的学生硬件不同的话都得自己开发驱动程序,学生就想把自己开发的驱动程序加进教授的操作系统中,但是教授比较固执,不让外来代码污染自己的代码,这就让很多×××们不爽,其中就包括赫尔辛基大学的学生linus,他外公送她一台X836的主机,他装了UNIX,后来UNIX不让他用了,就装了minix,然后他就想自己也写一个,并且放到公告牌上说自己写了一个小操作系统,并且是所有人都可以改的,只要告诉我你在里面加了什么,以后linux就在全球流行起来
linux
linux的流行起来并不是他天生就有这种能力,而是一个契机,麻省理工的教授stallman说,程序应该是全人类共有的,不能被某些公司所特有,并举起自由的旗帜,这在当时也是引起了很多程序员的共鸣,因此世界上很多×××都纷纷支持stallman,因此,stallman就成立了一个组织,叫做GNU
GNU
是 GNU is not unix 的递归缩写,
GNU就像共产主义运动,是一种运动,共产主义有×××宣言,GNU也有自己的宣言,叫做GPL,全称通用公共许可证,任何人开发的软件只有遵循GPL协定,就可以说这个软件是自由软件,任何人都可以自由获取,自由修改,自由i学习,自由安装使用
GNU收到全世界的支持,大家都来贡献自己的代码,比如stallman贡献了自己的文本编辑器Emacs,还有GCC(GNU C complicer),但是当时的问题是,这些程序还是运行在UNIX平台上,stallman虽然答应大家开发自己的操作系统,但是5年过去了,还是没有做到,这个时候,不早不晚,linus公布了自己的linux操作系统,所以当linux一出现,就感觉两者是天作之合,两者一相遇就迸发出巨大火花,所以有了linux这个内核,EMACS,gcc这些程序在运行在linux,不用再用UNIX,并且linux宣布自己加入GNU,也就是说linux本身就是属于GNU组织的,所以GNU组织就有了自己完整意思上的内核,所以说linux是一个很好的契机使得他发展起来、
但是linus提供的只是一个内核,不是应用程序,甚至没有自己独立的库,库在linux上叫做glibc(我们叫做c库或者API),这个时候linux利用glibc和gcc也能一直过来很多很多应用程序,包括bash,也是GNU组织一个很重要的部分
linus将bash移植到自己内核上,并使自己的系统能够跑起来了,并宣布自己的操作系统linux诞生的时候,这给全世界的×××们注入了新生机,所以这些×××迅速的团结在Linus周围,为linus开发诸多的应用,这个时候是91年,内核版本0.1,94年的时候1.0版本就诞生了
linux基本能够跑在所有主机上,尤其是X86的PC机上,然后又通过世界各地成员的不懈努力,他们被移植到了不同的平台上,powerpc。power
所以说我们提起linux的时候,他只是一个内核,正常linux的叫法应该是GNU linux,时至今日,当所有人说linux的时候,stallman也会站起来给他们说,是GNUlinux,因为大家只知道linux,不知GNU
linux的内核和GNU的软件都是源代码
为什么会有第三方组织来编译linux内核和各种软件,并打包发行
linux这些包都是源码包,对于一个初学者来说,编译安装这些都是很有难度的,并且 要想编译吗,必须要编译器,这就需要一个已经安装好的系统,并且不能跨平台,在X86系统上编译就只能在X86系统上运行
要想在ACPU上编译在Bcpu上运行,叫做交叉编译
ABI:二进制接口,同样是在inter的CPU上编译,在奔腾上编译就不能在酷睿运行,但是酷睿编译可以在奔腾上运行,向老的兼容
于是就出现了例如1993年诞生的redhat,91年的SLS,92年的Debian,德国三个大学生打包SUSE
这些第三方本身不是linux的开发者,或者说不是拥有者, 的作用就是将linux源代码在通用计算机平台上编译成通用的计算机格式,是的其他人拿到之后可以在大多数计算机平台上安装并使用的,其他人不用再编译,这些人叫做linux的发行商,release
linux是Linus维护的,软件是GNU组织维护的
发行商的不同在于在发行的时候,在操作系统里加入了自己的理解,加入自己对一个操作系统某些参数的修改,以及自己的logo,使得linux看起来各不相同,其实内核一样,软件一样,可能配置文件不一样
软件包管理器:
软件包邮2W多个,比如我不想安装某些软件,或者安装了某些软件之后不想再使用了,该怎么办,最初的时候,这些发行商是吧所有软件都一并安装的
最初是debian提出的dpt,后来redhat就模仿开发自己的rpm包
软件包管理器的作用,可以对软件进行卸载,查询,升级,安装,校验
发行商遵循GPL吗:
是的,就是redhat将linux做成了软件包的格式,也需要将源码公布出来
所以redhat在向外发行版本的时候都是两个,一个是打包好的二进制格式,一个是源码包
这样不当紧,当紧的是好不容易打包好一个操作系统,却被拿去免费用,于是红帽就会收取服务费,就像windows买的是授权,redhat买的是授权,但是不是软件的钱,而是服务费,这也是开源不免费的体现,你叫的钱越多,响应的时间就越短,还有就是后期软件升级了,作了补丁,补丁不给你,或者给你了,给你源代码,很多人安装不上去
所以就出现了一些组织看不下去,就包括centos,就是社区版的linux,作用是redhat把源代码公布出来,不给二进制软件,centos就将这些源代码做成二进制格式,而且和redhat一样兼容, 实际国内很多组织都是使用centos
redhat的发展:
最初的时候不是运行在服务器上的也不是运行在多颗CPU的主机上的,那个时候是个人版,10,2.0-----到2001年的时候出现的9.0已经很稳定了,与此同时就发行了自己的企业版,03年的时候从3.0开始,比较著名的,这些都是企业版
个人版在03年停止更新和维护,并将自己的个人版捐献给另一个开源组织Fedora,Fedora在收到redhat个人版后再这个基础上添加新功能,新驱动,修复bug后发行,发行很快,大概半年更新一次,redhat企业级就更新比较慢,一般2-3年才更新一次
Fedora在引入新特性之后在测试稳定之后都会被应用于企业级中使用的,所以Fedora是为企业提供测试应用的
基于redhat发行的还有mandriva,很漂亮,主要用于个人桌面上,而redhat的界面是很丑陋的,因为他初衷就不是为了让你使用桌面的,并且桌面很容易崩溃
SUSE的发展:
现在已经被Novell收购,在网络刚刚诞生的时候,Novell有最初的网络操作系统Netware,在网络服务器界市场占有率曾经达到90%,后来windows NT出现了,简单易用,Netware很快被占去半壁江山。两年之后销声匿迹,可谓铩羽而归,残败,后来一直想东山再起,买unix,买贝尔实验室,不行,后来买SUSE,还是不行,后来就和windows同流合污,做linux和windows交互式的,所以Novell被开源届视为叛徒,把SUSE带入了歧途,但是不管怎么说SUSE也有自己的企业版和社区版,前身是SLS
Debian:
相对前两个,debian是没有商业公司支持的,都是来自与互联网上的开源着在维护,多以技术最先进的是debian,最难用的也是debian,适用于高级用户,redhat在中国和北美比较流行,SUSE在欧洲比较流行,debiian在高级用户中比较流行
debian运行时加入的限制也很少,运行的时候产生的垃圾文件也很少,但是入门比较高,获取的资源也没有redhat多,redhat入门比较好
ubuntu是基于debian二二次发行,界面做的很好,所以现在有些笔记本预装的都死Ubuntu
基于ubuntu发行的二次版本还有Mint,桌面更漂亮,主题颜色是绿色的,Ubuntu是灰色的
GPL真的能够保证自由吗:
双刃剑,只要用我的软件都要讲源代码公布出来,这就是的很多公司不敢碰GNU,和GPL,这反过来也大大阻碍了自由的发展
所以后来就出现了相对宽松的GPL,LGPL,GPLV2,GPLV3,在供职于某个商业公司的话,要认真看GPL协定
后来又有一些开源组织作了更加宽松的协定,比如BSD,Apache ,我的软件编译好了,你拿了一万行,加了一行,拿去卖了,也行,只要别说是我的,所以Apache和BSD也是很受欢迎的
什么是源代码:
使用C开发的程序
任何语言编辑的代码要想运行起来都得编译
经过编译的程序是不能跨平台的
编译器
将语言转换为计算机可以运行的程序的二进制的
PDP系列主机
在7几年的时候除了IBM之外,还有一个电脑生产厂家DEC,主要生产比较受欢迎的大型机,中型机,小型机
其中就有PDP系列和VAX系列
linux的版本
linux是有没内核的,内核是有版本的,91年是0.1,1.0,2.0,2.2,2.4,2.6,3.0,3.7
内核的官网:www.kernel.org
redhat的版本:
3.0,4.0--这些事发行版的版本,内核可能是linux的2.0,2.4的
安卓系统的构成:
核心也是linux,只不过安卓是一个Java程序,是一个在linux内核Java虚拟机上运行的Java程序而已
操作系统总结:
首先是硬件资源,在单颗CPU的情况下,硬件资源是独有的,为了让在同一个平台上运行多个程序,于是我们有了通用管理软件,叫做内核,内核只是一个平台,不提供具体特定的任务,只是将硬件可以提供的计算能力抽象出来并提供给上层其他应用软件,只不过它的提供方式叫做系统调用,系统调用过于底层,所以造成程序员在开发程序的时候是非常麻烦的,于是就有了库,库就是将一个或者多个系统调用的功能封装起来做成更高级的调用接口,但是我们说过,库是一个可执行程序,但是它却无法独立运行,必须被调用之后才能执行,当然我们这里说的库指的是共享库,或者动态共享库,回头我们会讲静态库和动态库的区别是什么,还有什么是独有库什么是共享库,在库的上层就是各种应用程序,这就根据自己的需要各种各样了,比如shell,即使独特的用户界面,当然我们也可以使用web服务器,也有可能是个KDE,或者IDE,IDE是指程序员开发程序时使用的集成开发环境,不同语言的开发环境不一样,也有人在这里将IDE划分为一层,在他上面才是那些应用程序,这就是一个操作系统,windows也好,linux也好,不过都是这些,只不过window中我们很少能看到它的内核,但是我们可以看到很多库文件,在安装完windows后,在安装目录下会有一堆的dll文件,这就是动态链接库,有时候我们安装完文件后会提示确实某个dll(dynamic link library)文件无法运行,因为一个程序的运行时要调用某个动态库的,如果这个库缺失了吗,那么这个程序很可能就无法运行了而在linux上这些库文件叫做.so,so的意思是share objict,共享对象,也叫dso,动态共享对象,
所以我们做一个操作系统也是很简单,提供一个内核,提供一个库或者一些软件,如果这个软件依赖于某些库,把这个库也给提供好
对于我们来说使用操作系统最关键的应用程序是什么?shell,因为我们操作这个系统的话就要有一个操作界面,所以我们就需要提供shell和shell提供的库,以及一个内核这样一个操作系统就可以跑起来了,只不过没有别的功能而已,当然我们需要什么功能,在里面加上相应的应用程序就好
一个shell1M,依赖的库1M,内核2M完全可以跑起来,所以一个最小的linux我们可以把它做到2-3M就可以,置于我们的操作系统装出来为什么那么大,是因为安装了很多应用程序,都是在这样一个主线上来的,比如我们安装一个web服务器,就是在现有操作系统的基础上填充一个web服务器,以及依赖的库。我们的windows安装完为什么那么大,是因为他给我们默认安装了一大堆乱七八糟的东西,但是这些东西未必是我们需要的,当然了为了超级炫的效果,里面可能装了很多图片,而这些图片是很占用空间的
总结linux发行版:
Fedora,redhat(centos),SUSE,debien(ubuntu,mint),gentoo,LFS(linux from scratch)
LFS是一个300多页的文档,严格意义上说不是一个发行版,是指导我们从哪里下载什么东西来拼凑这个操作系统,在一个宿主机上编译各种软件来拼凑在我们的操作系统
LFS第一次安装应该需要两天时间
这些发行版都是编译好的,为了在所有硬件平台上运行,一般是在古老的CPU上编译的,那么这样的缺点就是在新的CPU上,硬件资源无法得到最好的利用,所以最好的方式是我们自己编译操作系统,在编译的过程中加入相应的优化参数,gentoo就提供了这样一个机制,在安装过程中很多软件是需要根据自己的需要来编译的
转载于:https://blog.51cto.com/yaoxiaofeng/2122591