📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: BlueOcean (Blue), 信区: Unix <BR>标 题: 好书共赏-《Unix Internels》(二) <BR>发信站: BBS 水木清华站 (Mon Apr 27 13:09:14 1998) m2mWWW-POST0m0m <BR> <BR> <BR>Chapter 4 Signals and Session Management <BR> <BR>本节对UNIX的signal和session( &controlling terminals...) 作了详细的描述, <BR>不只是详细而已,而且把各版本的一同都写清楚了,一般的书没有这麽清楚的. <BR> <BR>Mach对signal的策略也是焦点之一,更可以看出mach不全是Unix. <BR>在Unix下我们安装一个signal handler来处理signal.而Mach则是使用 <BR>IPC来处理signal (正式的名字叫exception). Mach的每个thread都有对应的 <BR>exception port.如果要处理exception,就是再用另外一个thread去listen这个 <BR>exception port.这是per-thread exception port.另外还有一个per-task <BR>exception port. 如果thread的exception port没人听,就会转到task <BR>exception port,在没有人听当然就让他死啦! task exception port给 <BR>谁用的呢? debugger是也! <BR> <BR>Unix的debugger有个缺点,就是没办法debug fork出去的child.而透过IPC, <BR>mach debugger就没有这个问题,只要mach debugger可以listen他的exception <BR>port就行了. 使用IPC也让remote debugging变成一件容易的事.(mach有个 <BR>proxy server,可以把local port的message route到remote去,seeminglessly!) <BR> <BR>Unix的debugger从前只能debug自己fork出去的child,如果是一个已经执行的 <BR>程式就没法度了. Mach则是如前面所说的,只要能够listen人家的exception <BR>port即可. UNIX这方面也改进了,使用/proc file system也可以达到相同的作用. <BR> <BR>你学过UNIX一定了解什麽是process group,可是你不一定清楚session是什麽. <BR>session的概念是在SVR4和4.4BSD内成型的,因为以往只用process group的概念 <BR>没办法分清楚一个login session和一个session的某个job的不同. session的观念 <BR>算是蛮新的..在SVR3和4.3BSD以前都和process group混在一起. <BR> <BR> <BR>Chapter 5 Process Scheduling <BR> <BR>process scheduling的核心是clock interrupt,算是多工系统的心脏吧! <BR>Kernel以callout的形式来使用之. <BR> int id = timeout(void (*callout)(), caddr_t arg, long delta); <BR>向注册一个callout function,於delta tick後启动. <BR>许多kernel的机制都是这样子向timer注册达成的,包括scheduler. <BR> <BR>一个系统的ap可分为三类: <BR> <BR> * interactive - io intensive, 如shell, editor, GUI <BR> * batch - cpu intensive,如software buil;ds, scientific compuutations. <BR> * real-time - time critical,如放映影片, ap的需求是固定的放映速率, <BR> 如每秒20 frames. 一个系统如果只能提供一个不确定的速率,在 <BR> 15-40间变化,而平均值为30,那是难以接受的. <BR> <BR>Unix对前两项(i.e., time-sharing)都很在行,本章也对各种Unix的 <BR>run queue的处理做了深入的讨论.当然比较值得注意的还是Unix <BR>对real time的支援. <BR> <BR>以前, Unix Kernel不能支援realtime的原因是non-preemptive的缘故, <BR>有时候kernel会作某件事太久,让process饿死. SVR4解决的方法是 <BR>把耗时的演算法切成几节,中间放入几个preemption point.在这些点 <BR>kernel就可以preempt,使得支援real-time成为可能. <BR> <BR>Solaris kernel则更进一步,把大部分的data-structure都用适当的方法 <BR>保护起来(synchronize,如mutex lock, samaphore),让kernel变成真正的 <BR>preemptive.可见Solaris真的还不错. <BR> <BR>传统的Unix则是利用non-preemptive kernel的特性省去了这些lock. <BR> <BR>mach的scheduling policy有一点有趣的地方,在一个thread msg_send() <BR>後,一般可能会把他block住,把message enqueue起来, 到run queue内找 <BR>一个thread来跑. 但是如果已经有人在等这个message, <BR>mach则是直接scheduling receiver出来跑, message也不enqueue了,直接 <BR>copy到user-level address space.这样子增加IPC的效能, <BR>因为省却了搜寻run queue的时间, 以及IPC enqueue/dequeue的时间. <BR> <BR>Mach特别的地方是processor set的概念.一个task可以要求kernel配给他 <BR>n颗(a set,一组) CPU来跑. <BR> <BR>Digital UNIX源自於mach,但是却没有使用mach的scheduler. <BR> <BR>本章末也介绍了一些被提出来的演算法,比较有趣的是three-level scheduler. <BR>要同时满足任意的time-sharing和real-time的需求是不太可能, 因为资 <BR>源有限.three-level scheduler引进了节制的观念, real-time process要先注册, <BR>kernel能够reserve足够的resource才允许执行.而kernel也会reserve适当的资源, <BR>确保time-sharing processes不会动弹不得. <BR> <BR>在网路负荷过重的时候,kernel只要处理network activity就来不及了, <BR>会导致receive livelock情形发生. 3-level scheduler可以把network <BR>的处理当成real-time task,给予适当的配额就好了.不够用就drop掉嘛. <BR>这样子保证大家有饭吃,不会活当机! [ real-time task有固定的priority, <BR>和固定的resource配额 -- kernel保证他会有这些东西,就像有人保证每天 <BR>都会给你一颗面包一样,不会说放一堆面包给大家抢(time-sharing),一天 <BR>有时候可以抢好几颗,有时一颗也抢不到,要是有一个人很会抢,那其他的 <BR>人就要饿死了!] <BR> <BR> <BR>Chapter 6 Interprocess Communications <BR> <BR>本章对IPC programming做了一些复习. <BR>传统的Unix IPC机制只有pipe. System V引进了SYSV IPC,包含semaphore, <BR>shared memory和message queue. System V的STREAMS架构也是Unix <BR>重要的IPC机制之一. 本书没有提到BSD socket介面,假设这个也是 <BR>IPC的话. Mach是一message passing为中心的kernel(message-passing <BR>kernel),大部分的系统服务都是靠交换讯息达成的,所以本章也花了 <BR>不少篇幅介绍之. <BR> <BR>特别的有: <BR>SVR4使用STREAMS来实作pipe,所以SVR4 pipe是bi-directional.一个 <BR>pipe两端都可读又可写.其他的UNIX则要用一对pipe才可达到相同目的.□ <BR> <BR>System V semaphore有一个缺点: allocation和initialization不是单一步骤, <BR>可以导致race condition发生. <BR> <BR>在System V STREAMS下, IPC的message queue几乎可以淘汰了. STREAMS <BR>功能强大(see最後一章) ,可以取代掉所有message queue的功能. <BR> <BR>本章最深奥的就是介绍Mach IPC了. 相信大家也最感兴趣. <BR>message := 一些有型别的data.型别分为两类, simple data,即一般的 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -