⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000001.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
商业化的UNIX也为UNIX争添不少特色,如SunOS的Network&nbsp;File&nbsp;System&nbsp;(NFS),&nbsp;<BR>vnode/vfs&nbsp;interface支援多重档案系统,一个新的VM架构(为SVR4所采用)&nbsp;<BR>AIX是第一个支援journaling&nbsp;file&nbsp;system的商业UNIX.&nbsp;ULTRIX&nbsp;(DEC的旧UNIX)&nbsp;<BR>是支援multiprocessor&nbsp;UNIX的先趋之一.&nbsp;<BR>&nbsp;<BR>Mach&nbsp;<BR>&nbsp;<BR>Mach是Carnegie-Mellon大学(CMU)的microkernel(微核心)作业系统.(1980年代)&nbsp;<BR>&nbsp;<BR>随著功能越来越多,UNIX也日渐庞大复杂而难以掌握,&nbsp;microkernel的概念就是&nbsp;<BR>把Kernel去芜存菁,仅留下重要的部分,其馀的功能都用user阶层的程式(称作&nbsp;<BR>server)来达成就好了,藉此减低kernel的复杂度.&nbsp;<BR>&nbsp;<BR>Mach设计目标有&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;与UNIX相容&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;在单处理器,多处理器上都能执行&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;适合分散式运算环境&nbsp;<BR>&nbsp;<BR>最普遍的版本是Mach2.5,是许多商业UNIX如DEC&nbsp;OSF/1,&nbsp;NextStep的基础.&nbsp;<BR>Mach3.0才是真正纯粹的完全Microkernel化版本.&nbsp;<BR>&nbsp;<BR>标准何在&nbsp;<BR>&nbsp;<BR>UNIX的标准就像他的版本一样多.本小节仔细的介绍了各个标准与其命运.&nbsp;<BR>讨论到最新的资讯为Novell将UNIX商标卖给了X/Open,以及Sun&nbsp;Solaris&nbsp;2.5版.&nbsp;<BR>&nbsp;<BR>1986年IEEE指定了一个委员会制定了一个一个开放作业系统的标准,称为&nbsp;<BR>POSIX&nbsp;(Portable&nbsp;Operating&nbsp;Systems&nbsp;Interface,最後加上个X,为了好听,也是因为&nbsp;<BR>本质上是UNIX的标准).&lt;-这是我听说的,不是书上写的.&nbsp;<BR>&nbsp;<BR>X/Open是一个由国际性电脑厂商组成的机构,成立於1984.其目的比较务实,&nbsp;<BR>不是为众多的UNIX标准再添加一个.而是把重心放在汇集现有的标准,&nbsp;<BR>整理出一个共通的环境.XPG&nbsp;(X/Open&nbsp;Portability&nbsp;Guide)就是他的大作.&nbsp;<BR>目前UNIX这个商标应该是由X/Open所拥有.&nbsp;<BR>&nbsp;<BR>除了标准以外,UNIX厂商也有合纵联盟.&nbsp;<BR>&nbsp;<BR>UI,&nbsp;Unix&nbsp;International,是AT&amp;T和Sun为主的联盟.主要的产物有SVR4和OpenLook.&nbsp;<BR>OSF,&nbsp;Open&nbsp;Software&nbsp;Foundation为以IBM,DEC,HP为首的公司投资的子公司.&nbsp;<BR>OSF对UNIX的贡献有Motif标准,DCE&nbsp;(Distributed&nbsp;Computing&nbsp;Environment).&nbsp;<BR>&nbsp;<BR>在NT出来搅局後,UI瓦解了,AT&amp;T不要UNIX了(专心於他的plan9作业系统?),&nbsp;<BR>SVR4的传人变成了Sun的Solaris,不过Sun也不再坚持OpenLook,同时支援CDE&nbsp;<BR>(Common&nbsp;Desktop&nbsp;Environment,讲白话一点就是Motif).&nbsp;<BR>&nbsp;<BR>Chapter&nbsp;2&nbsp;The&nbsp;Process&nbsp;and&nbsp;the&nbsp;Kernel&nbsp;<BR>&nbsp;<BR>介绍Prcoess的各种资料结构与执行态,没什麽特别的.等於是Unix&nbsp;Progarmming&nbsp;<BR>的小复习.&nbsp;<BR>&nbsp;<BR>比较特别的是vfork的描述.有些书会让我们有在现代的UNIX下,&nbsp;vfork&nbsp;=&nbsp;fork&nbsp;with&nbsp;<BR>copy&nbsp;on&nbsp;write的错觉.实际上vfork後,&nbsp;child是和parent共用一块定址空间(比较像&nbsp;<BR>multi-threading),&nbsp;child可以修改parent的资料.&nbsp;<BR>可能目前unix的语意和原始的vfork&nbsp;<BR>不一样了吧..&nbsp;<BR>&nbsp;<BR>Chapter&nbsp;3&nbsp;Threads&nbsp;and&nbsp;Lightweight&nbsp;Processes&nbsp;<BR>&nbsp;<BR>这里提到Modern&nbsp;UNIX的特性之一:&nbsp;threads.&nbsp;在Win95/NT,&nbsp;OS2的吹捧之下&nbsp;<BR>大家应该有点耳濡目染了吧.这边定义了Threads和Lightweight&nbsp;processes.&nbsp;<BR>有些系统,&nbsp;threads&nbsp;=&nbsp;LWP,不过为了讨论的需要,本书threads&nbsp;!=&nbsp;LWP.&nbsp;<BR>&nbsp;<BR>thread是一个最小的执行单元,&nbsp;代表一个process在系统里面的活动状态.传统的&nbsp;<BR>process就是仅有一个thread的程式.一个程式有5个thread就是说同一个程式里面&nbsp;<BR>有五个工作同时在进行,也就是五个小程式独立互不干扰的一起跑的意思.(这&nbsp;<BR>句话有语病,姑且当作对的好了)&nbsp;比较低阶一点的看法是一个process有5个&nbsp;<BR>instruction&nbsp;flow和五个stack.如果还是很模糊,看看Mach的定义九比较清楚了.&nbsp;<BR>&nbsp;<BR>Thread有三种:kernel&nbsp;threads,&nbsp;lightweight&nbsp;processes,&nbsp;user&nbsp;threads.&nbsp;<BR>&nbsp;<BR>kernel&nbsp;threads就是kernel有好几个分身,一个分身可以处理一件事的意思.&nbsp;<BR>这用来处理非同步事件很有用,&nbsp;kernel可以对每个非同步事件生个分身来处理.&nbsp;<BR>kernel&nbsp;threads的操作非常轻便,几乎没有负担,而且对Kernel的结构有帮助.&nbsp;<BR>支援kernel&nbsp;threads的kernel称作multithreaded&nbsp;kernel.&nbsp;<BR>&nbsp;<BR>Lightweight&nbsp;Process是有Kernel支援的user&nbsp;thread.也就是说,每个LWP,kernel&nbsp;<BR>皆使用一个thread来处理/支援.於是LWP可以看成是kernel&nbsp;thread的延伸.操&nbsp;<BR>作LWP的代价是很大的,因为他牵扯到Kernel的context&nbsp;switching.&nbsp;<BR>&nbsp;<BR>user&nbsp;threads是在使用者空间,透过library模拟的thread,不需要或仅需要极少的&nbsp;<BR>kernel支援,context&nbsp;switching比较快,因为不用更改page&nbsp;table等等东西,&nbsp;<BR>使用起来较为轻便快速.user&nbsp;threads提供操控视窗系统的绝佳解决方案.&nbsp;<BR>&nbsp;<BR>kernel基本上可以完全不知道user&nbsp;threads的存在,&nbsp;而一个系统可以&nbsp;<BR>提供数个不同的&nbsp;library来提供不同policy.&nbsp;user&nbsp;threads才是一般应用程式&nbsp;<BR>需要的multi-threading的形式,&nbsp;因为此方式没有kernel参与,&nbsp;所以最轻盈,&nbsp;<BR>最有效率.&nbsp;提到这里,你是否对广告上,&nbsp;OS2和Win95/NT争multithreading支援&nbsp;<BR>感到迷惑呢?他们真的不晓得在争哪个mulitthreading的功能耶...&nbsp;<BR>&nbsp;<BR>最有名的thread&nbsp;library有Mach's&nbsp;C&nbsp;threads,和POSIX&nbsp;pthreads.&nbsp;<BR>&nbsp;<BR>SunOS4.x所称的LWP指的是user&nbsp;threas,而不是本书的LWP.&nbsp;<BR>&nbsp;<BR>Solaris是由一组Kernel&nbsp;threads所构成,有一些用来执行LWP,有些负责一些系统的&nbsp;<BR>任务.&nbsp;<BR>&nbsp;<BR>kernel&nbsp;thread比较有创意的应用是取代interrupt&nbsp;<BR>handler.有interrupt产生时,kernel可以产&nbsp;<BR>生一个thread(分身)用来处理该interrupt.一口气解决掉re-entrant的问题&nbsp;<BR>&nbsp;<BR>thread的scheduling有些意思,不过不方便以三言两语描述,也不甚有趣,就算了.&nbsp;<BR>&nbsp;<BR>Mach的Threads&nbsp;<BR>&nbsp;<BR>Mach&nbsp;kernel有两个基本观念:&nbsp;task和thread.&nbsp;<BR>Task是静态的物件,由定址空间和系统资源(port&nbsp;rights)构成.&nbsp;<BR>task提供了一个thread的执行环境.&nbsp;<BR>thread是Mach的基本执行单元.&nbsp;<BR>Mach提供了cthread函式库用来操作threads.&nbsp;<BR>&nbsp;<BR>Mach&nbsp;3.0&nbsp;Continuation&nbsp;<BR>&nbsp;<BR>Mach3.0对threads的改进颇有意思,名为continuation,其出发点是为了&nbsp;<BR>节省stack的使用,在一个multi-threaded&nbsp;kernel下,&nbsp;thread越多(滥用:)&nbsp;<BR>则stack&nbsp;space也消耗越多,亟待解决.&nbsp;<BR>&nbsp;<BR>以下的程式片断很常见,也是一般kernel&nbsp;thread会block的原因(也就是&nbsp;<BR>需要stack的时候.&nbsp;<BR>&nbsp;&nbsp;syscall(args)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;/*&nbsp;比如说,安排DMA传输一块disk&nbsp;block....*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;thread_block();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;wait&nbsp;until&nbsp;completed&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;process(args1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;<BR>&nbsp;&nbsp;}&nbsp;<BR>如果&nbsp;syscall&nbsp;block住的话,就要保留一个stack下来.要是可以让process()不需要&nbsp;<BR>用到stack里面的资料的话,那就不用保留stack.当然事先要把tail所需的&nbsp;<BR>参数存在static&nbsp;variable里.&nbsp;<BR>所以原程式就变成这样:&nbsp;<BR>&nbsp;&nbsp;syscall()&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;thread_block(process);&nbsp;<BR>&nbsp;&nbsp;&nbsp;/*&nbsp;not&nbsp;reached&nbsp;*/&nbsp;<BR>&nbsp;}&nbsp;<BR>&nbsp;&nbsp;process()&nbsp;{&nbsp;/*&nbsp;最终处理*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;thread_syscall_return(status);&nbsp;<BR>&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>省下来的stack则要是下一个被wake&nbsp;up的thread刚好也是个continuation,&nbsp;<BR>可以直接给他用,省下一点cache/TLB&nbsp;misses.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>Digital&nbsp;UNIX&nbsp;<BR>&nbsp;<BR>讨论了OSF/1如何在Mach上利用tasks&amp;threads实做出合UNIX语意的Process出来.&nbsp;<BR>&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -