×

Linux内核源代码情景分析上下册合集免费下载

消耗积分:1 | 格式:rar | 大小:5.12 MB | 2019-08-28

彭仲宇

分享资料个

  在计算机技术的发展史上。 Unix操作系统的出现是一个重要的里程碑。早期的Unix曾免费供美国及一些西方国家的大学和科研机构使用,并且提供源代码,这一方面为高校和科研机构普及使用计算机提供了条件:另一方面,也是更重要的,为计算机软件的核心技术“操作系统”的教学和实验提供了条件,特别是Unix内核第6版的源代码,在相当长的一段时明内是大学计算机系高年级学生和研究生使用的教材,甚至可以说,美国当时整整一代的计算机专业人 员都是读着Unix的源代码成长的。反过来,这也促进了Unix的普及和发展,并且在当时形成了一个Unix产业。事实上,回既硅谷的形成和发展,也可以看到Unix起着重要的作用。Unix 两大主流之:的BSD就是在加州大学白克利分校开发的,后来,Unix 成了商品,其源代码也受到了版权的保护,再说也日益复亲和庞大了,面第6版则又慢慢显得陈旧了,便逐断不再用Unix内核的源代码作为教材了(但是直到现在还有在用的)。

  在这种情况下,出于教学的需婴,荷兰的著8教授Andrew s. Tanenbaum 编写了一个小型的“类Unix“操作系统Minix,在PC机上运行,其源代码在20世纪80年代后期和90年代前期普被广泛采用但是,Minix 虽说是“类Unis”。其实离Unix相当远。首先,Minix 是个所谓“微内核”。与Unmix内核属于不同的设计,功能上更是不可同日而语。再说Unix也不仅仅是内核。还包括了其“外壳Shell和许多工具性的“实用程序”,如果内核提供的支持不完整,就不能与这些成分结合起来形成Unix环境。这样,Minix虽然不失为一一个 不错的教学工具,却缺乏实用价值。看到Minix的这个缺点,当时的一个5兰学生Linus Torvaks 就萌生了一一个念头, 即组织一些人,以Minix为起点,基本上按照Unix的设计,并且博采各种版本之长,在PC机上实现,开发由一个真正可以实用的Unix内核。这样,公众就既有免费的(现代) Unix系统,又有系统的源代码,且不存在版权问题。可是,Tanenbaum 教授的目光却完全盯在教学E.因此并不认为这是一个好主意,没有采纳这个建议。

 

  毕竟是“初生牛犊不怕虎”,加上自身的天赋和動奋,还有公益心,Linus Tovalds就自己动手干了起来。由于所实现的基本是Lnix, Linus Tovalds就把它称为Limux.那时候互联网虽然还不像现在这么普及,但是在大学和公司中已经用得很多了。Linus Torvalds 在基本完成了Linux 内核的第一个版本以后就把它放在了互联网E,一米是把自己写的代码公诸于众,二米是邀请有兴趣的人也来参与,他的这种做法很快便引起了热烈的反应,并且与美国“自由软件基金会“FSF的主张正好不谋而合。当时FSF已经有计划要开发一个类Unix (但又不是Unix,所以称为GNU,这是“Gnu is Not Unix”的缩写)的操作系统和应用环境,而Linux的出现正是适得其时,适得其所。于是,由Linus Torvalds主持的Linux内核的开发,改进与维护,就成了FSF的主要项目之-。同时,FSF 的其它项目,如GNU的C编译gce.程序调试工具gadb.还有各种Shell和实用程序。乃至Web服务器Apache,河览器Moilla(实际上就是Netscape) 等等,则正好与之配套成龙。人们普前认为自由软件的开发是软件领城中的一个奇迹, 这么多志愿者参与,只是通过5联网维持松救的组织,居然能有条不紊地互相配合,开发出高质量的而且又是准度较大的系统软件。实在令人赞叹。

  那么,Limux与它的前身Minix的区别有在呢?简单地说,Minix 是个“微内核”,而Linax是个“宏内核”: Minix 是个类Unmix的教学用模型,面Linux甚本上就是Unix.而且是Unix的延续和发展,甚至是各种Unix版本与变种的集大成者。

  大家知道,传统意义F的操作系统。其内核应具备多个方面的功能或成分。既包含用于管理属于应用层的“进程”的成分,如进程管理,也包含为这些进程提供各种服务的成分,如进程间通信、设备驱动和文件系统等等。内核中提供各种服务的成分与使用这些服务的进程之间实际上就形成一种典型的“ClientServer“的关系,其实,这些服务提供者并不一定非得都留在内核中不可,他们本身也可以被设计并实现某些“服务进程”,其中必须婴留在内核中的成分其实只有进程间通信。如果把这些服务提供者从内核转移到进程的层次t,那么内核本身的结构就可以大大减小和简化。而各个服务进程,既然已从内核中游离出来,便可以”独地设计,实现以及调试,更重要的是可以按实际的需要来配置和启动,基于这样的想法,各种“微内核”(Micro Kemel)便应运而生。特别是对于一些专用的系统,主要是实时系统和“嵌入式”系统(Enmbedded System), 微内核的思想就很有吸引力。究其原因。主要是因为通常这些系统都不带磁盘,整↑系统部必须放在EPROM中,常常受到存储空间的限制,而所需要的服务又比较单一和简单。 所以,几乎所有的嵌入式系统和实时系统都采用微内核,如PSOS.VxWorks等。当然,微内核也有缺点。将这些服务的提供都放在进程层次t.再通过进程间通信(通常是报文传递》提供服务,势必增加系线的运行开销。降低了效率。

  与微内核相对应,传统的内核结构就称为“宏内核”(Macro-Kermel),或称为“一本化内核”(Monolithic Kernel)。 通用式的系统由f所需的服务面广而量大,- 体化内核就更为合适,作为一种通用式系统,Linux 采用-体化内核是很自然的事。

  传统的Unix内核是“全封闭”的。如果要往内核中加一个设备(增加一种服务),早期一般的做法是编写这个设备的驱动程序,并变动内核源程序中的某些数据结构《设备表),再重新编译整个内核,并重新引导整个系统。这样做当然也有好处,如系统的安全性更能得到保证,但其缺点也是很明显的。那就是太做化了。在这样的情况下,当某一个公司开发出一种新的外部设备时(比方说,一台彩色扫描仪),它就不可能的同这新的设备提供-片软盘或光盘给用户,使得用户只要运行一F**setup“就可以把这设备安装上了《像对DOS/Windows那样),有能力修改Linux内核的设备表,并重新编译内核的用户毕竟不多。

  在Linux里,这个问题就解决得比较好。Linux 既允许把设备驱动程序在编译时静态地连接在内核中,如传统的驱动程序那样:也允许动态地在运行时安装,称为“模块”:还允许在运行状态F当需要用到某一模块时由系统自动安装。这样的模块仍然在内核中运行,面不是像在微内核中那样作为单独的进程运行,所以其运行效率还是得到保证。模块,也就是动态安装的设备驱动程序的实现(详见设备驱动程序一), 是很大的改进。它使Linux设备驱动程序的设计,实现、调试以及发布都大大地简化,甚至可以说是发生了根本性地变化,

  Linux 最初是在Intel 80386 “平台”上实现的,但是已经被移植到各种主要的CPU系列上,包括Alpla. M68K. MIPS. SPARC. Power PC等等(Pentium. Pentium I等等均属于386系列)》可以说Linux 内核是现今覆盖面最广的-体化内核。同时,在同一个系列的CPU E. Linux内核还支持不同的系统结构,它既支持常现的单CPU结构,也支持多CPU结构,不过,本书将专注于1386 CPU,并且以单CPU结构为主,但是最后有一。究专们讨论多CPU结构。,

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'Linux内核源代码情景分析上下册合集免费下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);