1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第二章 作业管理和用户接口,2.1,作业组织和控制,2.2 UNIX,的作业管理,2.3,系统调用,2.4,图形用户接口,在这一章中,我们讨论,OS,向上提供的,用户接口,,即,系统命令接口,和,系统调用接口,。系统命令接口可完成用户作业的组织和控制。,1,2.1,作业组织和控制,2.1.1,作业和作业处理过程,2.1.2,作业调度,2.1.3,作业控制语言,返回,2,2.1.1,作业和作业处理过程,1.,作业的概念,2.,作业的组成,3.,作业的处理过程,4.,作业控制表,(JCB,Job Contr
2、ol Block),返回,3,1.,作业的概念,一个,作业,是指在一次,应用业务处理过程,中,从,输入,开始到,输出,结束,用户要求计算机所做的有关该次业务处理的,全部工作,。,作业由不同的顺序相连的,作业步,组成。,作业步,是在一个作业的处理过程中,计算机所做的,相对独立的工作,。,4,2.,作业的组成,作业说明书,包括作业基本情况、作业控制、作业资源要求的描述;它体现用户的控制意图。如:预计运行时间、要求的资源情况、执行优先级等。,作业基本情况:,用户名、作业名、编程语言、最大处理时间等;,作业控制描述:,作业控制方式、作业步的操作顺序、作业执行出错处理;,作业资源要求描述:,处理时间、优
3、先级、内存空间、外设类型和数量等;,作业由,程序,、,数据,和,作业说明书,三部分组成。,5,3.,作业的处理过程,6,作业状态,提交,:用户将程序和数据提交给系统,等待输入。,收容,:作业全部进入辅助存储设备后,操作系统对作业进行登记,为每个作业建立一个主要控制块。,执行,:作业被调度后进入主存,按照其作业步的步骤,为每个作业步建立的主进程,分配资源,执行。,先到,就绪,,经调度,运行,,有,I/O,请求,等待,,,I/O,完成到,就绪,完成,:从作业计算完成开始,到善后处理完毕并退出系统为止。,7,4.,作业控制表,(JCB,Job Control Block),作业名,估计执行时间,优先
4、数(用于调度),作业说明书文件名,程序类型(需调用的系统程序),资源要求,静态,或中间可以随作业步变化效率不高;,动态分配,作业状态,提交、后备、执行、就绪、等待、完成;,在,运行过程中,,系统对作业进行,管理,的必要信息。,8,2.1.2,作业调度,作业调度算法的评价因素,作业,吞吐量,:运行尽可能多的作业;,充分,利用资源,:,CPU,忙、,I/O,设备忙;,对各作业,公平,、,合理,,使用户,满意,:执行时间长短、等待时间等;,检查系统是否满足,作业的资源,要求,并按一定算法,选取作业,。作业调度也称为宏观调度。,返回,9,作业调度算法的量化评价因素,吞吐量,完成的作业数,/,完成时间,
5、CPU,利用率,CPU,有效工作时间,/CPU,总工作时间,周转时间,完成时间提交时间,or,等待时间,+,运行时间,平均周转时间周转时间之和,/,作业数,带权周转时间周转时间,/,运行时间,带权平均周转时间带权周转时间之和,/,作业,10,2.,作业调度算法,先来先服务,(,FCFS,First Come First Served,),:,按照作业进入系统的,先后次序,进行调度,先进入系统者先调度;即启动等待时间最长的作业。,优点:实现,简单,、,公平,缺点:没考虑资源利用率和作业的特殊性,短作业优先,(,SJF,Shortest Job First,),:,以要求,运行时间长短,进行调度,
6、即启动要求运行时间最短的作业。,优点,:易于实现,强调了资源的充分利用。,缺点,:不公平,会造成长作业长期等待。,结论:假设系统中所有作业,同时到达,,可以证明采用,SJF,能得到最短的作业平均周转时间。,实际的算法可能会是,多种算法的综合,。,11,高响应比优先,(,HRF,Highest Response ratio First,),:,响应比最高的作业优先启动。,响应比,=,(等待时间,+,估计运行时间),/,估计运行时间,该算法是,FCFS,和,SJF,的结合,克服了两种算法的缺点,优点,:,公平,吞吐率大,缺点,:,增加了计算,增加了开销,高优先级优先,:由用户指定作业优先级,优先级
7、高的作业先启动。,资源均衡型调度,:把作业分类,作业调度从不同类型作业中去调度作业,根据作业对资源要求分类:,I/O,型、,CPU,型和均衡型,12,2.1.3,作业控制语言,1.,命令行,2.,环境变量,脱机,作业控制:用户输入,作业说明书,,整个作业的运行由系统控制。,联机,作业控制:通过,人,-,机会话方式,控制作业运行。用户登录(控制台登录或远程登录),由系统自动执行一些命令脚本后,并进入,shell,(,字符或,GUI,界面),接受用户的命令和操作,最后退出系统。,返回,13,1.,命令行,命令行,:一行可有一个或多个命令,每次一行,包含一个或多个命令。,shell,给出提示符时可输
8、入,以回车键提交。如:,“,ls,-al”,列出当前目录文件列表;,gunzip,mp1.tar.gz;tar-,xvf,mp1.tar;,rm,-r-f mp1.tar,为解压缩后再展开。,命令格式,:一个命令可有命令,参数,,格式包括选项,/,开关,(option/switch),或参数,(argument),。,如,UNIX,系统:,cp-r doc/,tmp,argv0,argv1,.,(,含子目录的文件复制:,/,tmp,为目标地址),14,命令分类,:内部命令和外部命令,内部,命令:,直接由,shell,本身完成,,功能简单、使用频繁;如:,DOS,的,copy,命令。,外部,命令
9、运行相应的,可执行文件,,在使用时加载。如:,DOS,的,xcopy,命令。,命令简化,:利用,参数替换,可简化命令输入,通配符,(?,*),用于匹配一组文件名,如:,UNIX,的,cp,命令:当前目录上有两个,1.tar,和,2.tar,时,,cp*.tar/,tmp,等同于,cp 1.tar/,tmp,;cp 2.tar/,tmp,15,2.,环境变量,环境变量也可以作为,shell,参数,,如命令提示符的式样,外部命令的查找目录路径等。,如:,PATH=/bin:/,usr/bin:/usr/sbin,:.,HOME=/home/,thisuser,环境变量是传递,命令参数,的另一种途
10、径。如:,cd,$HOME;,环境变量可,按名字访问,,可以,新建,、,赋值,或,撤销,。,有效范围,:只对本进程里的环境变量能够,直接进行操作,。此外,在执行,新进程,时(,UNIX,中是,exec(),调用),可以给出环境变量的初始值,通常就是直接复制当前进程的所有环境变量,继承,。,环境变量,(environment variable),应用进程地址空间中的,特殊变量区,。,16,2.2.1.shell,命令处理程序,2.2.2.shell,批处理,2.2,UNIX,的作业管理,返回,Ref:,Microsoft Windows XP-Command-line reference A-Z
11、shell and command interpreter,17,2.2.1.shell,命令处理程序,1.shell,的类型,2.,初始化文件,3.,基本特征,4.,输入输出重定向,5.,管道,6.,后台执行,7.,环境变量和内部变量,8.,别名,9.,常用的外部命令,返回,18,1.shell,的类型,Bourne shell(/bin/,sh,),Bourne shell,的作者是,Steven Bourne,。,它是,UNIX,最初使用的,shell,并且在每种,UNIX,上都可以使用。,Bourne shell,在,shell,编程方面相当优秀,,但在处理与用户的交互方面作得不如其
12、他几种,shell,。,Bourne shell,最大的缺点在于它处理用户的输入方面。在,Bourne shell,里,键入命令会很麻烦,,尤其当你键入很多相似的命令时。,C shell(/bin/,csh,),C shell,由,Bill Joy,所写,它更多的考虑了,用户界面的友好性,。它支持象,命令补齐,(,command-line completion,),等一些,Bourne shell,所不支持的特性。普遍认为,C shell,的编程接口做的不如,Bourne shell,但,C shell,被很多,C,程序员使用因为,C shell,的语法和,C,语言的很相似,这也是,C she
13、ll,名称的由来。,UNIX,上有,许多种,shell,,,主要功能是相同的,在细节上有一些区别。几种,shell,都有它们的优点和缺点。,Shell,列表:,,(,ksh,),Korn,shell(,ksh,),由,Dave,Korn,所写。它集合了,C shell,和,Bourne shell,的优点并且和,Bourne shell,完全兼容。,Bourne Again shell(bash),Bourne Again shell(bash),是,Bourne shell,的扩展。,bash,与,Bourne shell,完全向后,兼容,,并且在,Bourne shell,的基础上增加和增
14、强了很多特性。,bash,也包含了很多,C,和,Korn,shell,里的优点。,bash,有很灵活和强大的编程接口,同时又有很友好的用户界面。,bash,有几种特性使命令的输入变得更容易。,其他,shell,除了这些,shell,以外,许多其他的,shell,程序吸收了这些原来的,shell,程序的优点而成为新的,shell,。,如:,tcsh,(,csh,的扩展,),Public Domain,Korn,shell(,pdksh,ksh,的扩展,),20,2.,初始化文件,B Shell,执行,.profile,C Shell,执行,.,cshrc,和,.login,两个文件,K Shel
15、l,执行,.profile,和,$ENV,两个文件,(,sh,).profile,与,(,csh,).login,对应,进行注册时的初始化;而在,csh,在非注册启动时都读入,.,cshrc,;,21,3.,基本特征,内部命令:,如,cd,exec,区分大小写,,exec,的功能是执行一个命令;,外部命令:,如,/bin/,ls,/bin/,mkdir,命令行选项,通常是:,-option,如:,ls,-a-l,中的,-a,表示列出所有文件,,-l,表示列出所有信息。,通配符:由,shell,处理,后再传递给外部命令。,如:,cat*.c,则,argv1=a.c,argv2=b.c,,,而,c
16、at*.c,则,argv1=*.c(cat,的功能是读入所有文件,并显示,),22,4.,输入输出重定向,和,为标准输出重定向;,2,和,2,为标准错误输出重定向(,2,表示标准错误输出的设备号,只对,sh,有意义);,&,是标准输出和标准错误输出重定向;,基于内核,的缓冲区,行输入重定向:用定界符间的内容作为标准输入。如:下面命令的标准输入为,cat,命令的输入。,cat WARNING,.,WARNING,23,5.,管道,如:,ls,-l|,wc,-l,可给出文件数目。,如:“,cat sample.text|,grep,High|,wc,-l,”,这个管道将把,cat,命令(列出一个文
17、件的内容)的输出送给,grep,命令。,grep,命令在输入里查找单词,High,,,grep,命令的输出则是所有包含单词,High,的行,这个输出又被送给,wc,命令。带,-l,选项的,wc,命令将统计输入里的行数。,管道可以把一系列命令连接起来。,第一个命令的输出会通过管道传给第二个命令而作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,以此类推。而管道行中,最后一个命令的输出才会显示在屏幕上,(如果命令行里使用了输出重定向的话,将会放进一个文件里)。通过管道,可以,将多个简单程序组合完成复杂的功能,。,24,6.,后台执行,如:,xterm,-display 166.111
18、68.56:0.0&,为在后台启动一个,xterm,窗口,并显示到主机,166.111.68.56,上。,后台执行:,cmd,&;,25,7.,环境变量和内部变量,set,可给出内部变量列表,,env,可给出环境变量列表。继承只对环境变量有效。,sh,:PATH=/,tmp:$PATH,;export PATH,注意:在,export,前为内部变量,之后为环境变量。,csh,:,在,csh,中环境变量的赋值,(,setenv,),没有等号,“,setenv,PATH/,tmp:$PATH,”,,,内部变量的赋值,(set),有等号,“,set PATH=/,tmp:$PATH,”,。,内部变
19、量不能被子进程继承(如同,C,里的局部变量);改环境变量就会自动改内部变量,反之不然。,26,8.,别名,alias,的格式,:,alias,aliasname,=string,.,把,aliasname,直接用来,取代,后面的,string,,,如有任何跟在后面的,argument,将会出现的其后。利用该功能,使用者可以,将常用却冗长的指令以其他的名字存起,。,如:,alias dir=,ls,-a-l,为,ls,-a-l,定义了一个别名,dir,;,给复杂命令定义别名:,alias/,unalias,27,9.,常用的外部命令,man,查看手册,echo,wc,grep,sed,awk,(
20、用于文本扫描和处理),sort,cut,(,对每行进行特定删除处理)字符串操作,;,pwd,ls,mkdir,rmdir,cp,rm,mv,ln,文件和目录操作,;,chmod,chown,chgrp,(,修改文件所在的用户组)文件权限和属主,;,cat,more,tail,(,显示文件的最后部分)查看文件,;,test,expr,检测和数值计算,;,vi,全屏幕编辑,;,28,2.2.2.,批处理,1.,变量替换,2.,条件转移,3.,循环,4.,分支,5.,函数,称为,脚本,shell script,:,注释用,#,,续行用,解释执行,效率较低;而且要加载外部命令;,指定脚本解释程序:,
21、/bin/,sh,或,#!/opt/bin/,perl,perl,Practical Extraction and Report Language,是一个文本文件分析工具。,执行脚本,(,sh,),:,cmd(cshsource,cmd,),exec,cmd,cmd(sh,cmd,sh,cmd,),source,命令是运行,tcl,脚本;,exec,是用指定命令新建,shell,,,以取代当前,shell,;,sh,命令是运行,sh,脚本。,返回,29,1.,变量替换,如:下面是一个变量定义和引用的例子:,temp=test message,echo$temp,echo AAA$tempB
22、BB,echo CCC$tempDDD,echo$temp,变量赋值格式:变量名,=,值,值串中包括空格、制表符或换行符时,值要放在,号内;,变量引用格式:,$,变量名,如引用前后紧接其它字符,引用方式为:,$,变量名,或,$,变量名,;,$variable,双引号:,“进行变量替换”,单引号:,不作任何替换,;,其运行”,./,variable,.csh,”,结果为:,test message,AAAtest,messageBBB,CCCtest,messageDDD,$temp,30,2.,条件转移,if command;then.;else.;fi,例,:,#,调用,test,命令,注意
23、方括号和判断条件之间必须有空格,!,#,下面脚本在有参数时显示,Have,arguement(s,),,,无参数时显示,No,arguement,;,#,其中,,a$1=a ,用于判断,$1,是否为空串;,if a$1=a ;then,echo No,arguement,;,else,echo“Have,arguement(s,);,fi,运行结果为:,xyongos,xyong$./,if.csh,No,arguement,xyongos,xyong$./,if.csh,aa,Have,argement(s,),31,例:,#,下面脚本在命令行参数个数不对(其中,,test$#=4,测试命
24、令行参数个数是否为,4,),提示出错信息;,if test$#=4;then,echo$4$3$2$1,else,echo$0 usage:arg1 arg2 arg3 arg4,fi,运行结果如下:,xyongos,xyong$./,Arguements.csh,./,Arguements.csh,usage:arg1 arg2 arg3 arg4,xyongos,xyong$./,Arguements.csh,a b c d,d c b a,32,3.,循环,while 1;do.;done,例:,#,下面脚本在文件,lockfile,可读时每暂停,5,秒重复测试一次(其中,,test-r
25、lockfile,判断文件,lockfile,是否存在);,while test-r,lockfile,;do,sleep 5,done,运行结果为:,有文件,lockfile,时,脚本一直不结束;直到该文件被删除后,脚本才结束。,33,4.,分支,基于,模式匹配,的多路分支结构,它依据,word,的不同,,执行不同的命令序列,;,case,word,in,pattern1)pat1-list;,pattern2)pat2-list;,esac,例:,#,下面脚本依据命令行参数的不同,显示不同内容;,case$1 in,*.c)echo C:$1;,*.a)echo A:$1;,*.f)ec
26、ho F:$1;,esac,运行结果如下:,xyongos,xyong$./,case.csh,c.a,A:c.a,xyongos,xyong$./,case.csh,c.c,C:c.c,xyongos,xyong$./,case.csh,c.f,F:c.f,34,5.,函数,例:,#,这里,$*,和,$1,是,new_func,的参数,而,$0,为脚本的参数),new_func,(),echo$*,echo$1,new_func,$0 arg2,运行结果为:,xyongos,xyong$./,function.csh,asb,./,function.csh,arg2,./,function.
27、csh,一个,Shell,教程:,An Introduction to the Unix Shell,35,2.3,系统调用,(SYSTEM CALL),2.3.1,系统调用及其功能,2.3.2,系统调用的实现过程,2.3.3,系统调用与普通过程调用的相同点和不同点,返回,系统调用是操作系统提供给软件开发人员的唯一接口,开发人员可利用它使用系统功能。,OS,核心中都有一组实现系统功能的过程(子程序),系统调用就是对上述过程的调用。,36,2.3.1,系统调用及其功能,每个操作系统都提供几百种系统调用,包括:外存,文件与目录,的读写,各种,I/O,设备,的使用,在程序中,启动另一个程序,,,查询
28、和统计系统资源使用情况等等。,1),设备管理,:,设备的读写和控制;,Ioctl,设备配置,Open,设备打开,Close,设备关闭,Read,读设备,Write,写设备,2),文件管理:,文件读写和文件控制;,Open,文件打开,Close,文件关闭,Read,读文件,Write,写文件,seek,读写指针定位,Creat,文件创建,Stat,读文件状态,Mount,安装文件系统,chmod,修改文件属性,返回,37,3),进程控制:,创建、中止、暂停等控制;,Fork,创建进程,Exit,进程自我终止,Wait,阻塞当前进程,Sleep,进程睡眠,Getpid,读父进程标识,4),进程通
29、信:,消息队列、共享存储区、,socket,等通信渠道的建立、使用和删除;,5),存储管理:,内存的申请和释放;,6),系统管理:,设置和读取时间、读取用户和主机标识等;,gtime,读取时间,Stime,设置时间,getuid,读取用户标识,38,系统调用的执行过程,系统调用接口,用户程序,系统调用库,内核总控,系统调用处理总控,Write,处理,磁盘控制器,盘中断处理,用户态,核心态,磁盘驱动程序,用户程序,39,2.3.2,系统调用的实现过程,实际上系统调用语句本身是硬件提供的(机器指令),但其所调用的功能是操作系统提供的。每种机器的机器指令集中都有一条系统调用指令。,返回,40,设置系
30、统调用号和参数,。,调用号作为指令的一部分(如早期,UNIX,),,或装入到特定寄存器里(如:,X86 Linux:EAX=,调用号),参数装入到特定寄存器里,或以寄存器指针指向参数表(内存区域)。,执行陷入,trap(int,),指令,:查入口跳转表,跳转到相应功能的过程。如:,X86 Linux:,int,80h,保护,CPU,现场,(,将,PC,与,PSW,入栈,),,改变,CPU,执行状态(处理机状态字,PSW,切换,地址空间表切换),将参数取到核心空间,执行操作系统,内部代码,;,执行返回,iret,指令,:,将执行结果装入适当位置(类似于参数带入),恢复,CPU,现场(以栈顶内容置
31、PSW,和,PC,)。,41,NtCreateFile,:,mov,eax,0 x0000001A,lea,edx,esp+04,int,0 x2E,ret 0 x2C,出处,:,而函数调用方式是静态调用;,系统调用是动态调用,,程序中不包含被调用代码,,好处:,(,1,)用户,程序长度,缩短,(,2,)当,OS,升级,时,调用方不必改变,44,2.,执行状态不同,状态切换:系统调用、中断、异常,trap,陷入,特权指令(访问关键寄存器、停机指令)和,I/O,敏感指令(中断屏蔽、端口读写),调用和返回经历了,不同的系统状态,。通常核心和应用程序的代码分别运行在,CPU,的不同的状态下(,核心
32、态,和,用户态,),所用,地址空间也不同,核心的代码可以直接访问应用进程的地址空间,反之不然。,45,3.,进入方式不同,函数调用指令,CALL,的内部实现过程:,返回地址压栈(即该,CALL,指令所在的地址);,将该,CALL,指令中所含的地址(即被调用代码所在地址)送入,PC,RET,指令的内部实现过程:,从栈顶弹出返回地址送入程序计数器,PC,利用,int,或,trap,指令进行系统调用;利用,call,或,jmp,指令进入普通的过程调用;,参考:,Graphic User Interface),返回,在命令行方式下,用户与操作系统的交互要求用户,记忆命令格式,。在图形用户接口方式下,用
33、户可利用鼠标对屏幕上的,图标进行操作,,完成与操作系统的交互,从而减少记忆内容,方便用户使用。它的技术基础是,高分辩显示器和鼠标,。,2.4.1,概述,2.4.2 X Window,2.4.3,网络虚拟图形用户接口系统,2.4.4,事件驱动模式,(event-driven),49,2.4.1,概述,1.,窗口系统,(window system),的特点,2.,窗口系统的图形元素及其状态,3.,窗口管理器,(window manager),返回,50,1.,窗口系统,(window system),的特点,利用图形元素表示功能,:将各种图形元素显示在屏幕上,用户可以通过操纵图形元素(如菜单、图标
34、来执行相应的功能,同屏多窗口与并发进程相对应,:屏幕上同时显示多个窗口;一个进程可以对应一个或多个窗口;窗口动态创建、改变、撤销,输入方式,:,鼠标,指针点击(或其他定位设备)和,键盘,输入;通常是,即时交互,一致的图形元素风格,可方便用户学习和使用:如按钮、滚动条,优点,:操作直观(不必记命令行参数),可与多个进程交互,便于进行多媒体处理简而言之:,交互,的,并发,性好、传递,信息量大,51,2.,窗口系统的图形元素及其状态,窗口,(window),:,屏幕上的,矩形区域,包括:,标题条,(title bar),、,边框,(border),、,窗口角,(corner),、,系统菜单框,(s
35、ystem menu box),、,最大化,/,最小化按钮,(maximize/minimize),、,滚动条,(scroll bar),等,状态:,当前,/,非当前,窗口,(active/inactive),接受输入,最大化,/,最小化,/,恢复原大小,(restore),,,窗口的,前后遮盖,Z,轴,,焦点,(focus),接受键盘输入(而非鼠标),桌面,(desktop),和墙纸,(wallpaper),图标,(icon),:,一个小图象,(,如,32x32,或,64x64 pixel),,,通常供鼠标指针点击。通过不同的图标可以,标识不同的对象,。如:可执行程序、最小化的窗口、文件动画
36、图标,52,鼠标指针,(mouse pointer),:,鼠标指针通常对应屏幕上的,光标,(cursor),。,光标在屏幕上只有一个,在不同屏幕位置(上下文)可以呈现,不同形状,,可以独立于鼠标来直接操纵光标。,鼠标点击,:左键,/,右键,/,中键,(left/right/middle button),,,单击,(click)/,双击,(double-click),,,拖曳,(drag)/,拖放,(drag-and-drop),;,按钮,(button),:,鼠标点击或按回车键,/,空格键时执行相应功能,如,menu button,;,提供单项或多项选择,如,radiobutton,和,che
37、ckbutton,;,当前按钮及其切换。,菜单,(menu),:,临时窗口,菜单条,(menu bar),、,弹出式菜单、下拉式菜单(上下文相关菜单),对话框,(dialog box),:,临时窗口,显示提示信息,(message),或填写用户设置。,53,3.,窗口管理器,(window manager),:,形成统一的使用风格,处理窗口的,普遍特性,,如:窗口的大小、位置(窗口的标题条、边框、控制菜单框)窗口中由应用程序管理的部分称为,客户区,(client area),协调各窗口间的,相互关系,,如:窗口之间的前后遮盖关系,桌面,54,2.4.2 X Window,1.,特点,2.X W
38、indow,的结构,3.,基本概念,4.X lib,和工具箱,(toolkit),5.X Window,的使用,55,Client-Server,结构,:,X client,和,server,都是应用程序,一个,server,可以为不同计算机上的多个,client,提供服务,,server,对有关,I/O,设备具有访问权,一个,client,也可以连接不同计算机上的,server,显示设备独立性和支持多种网络协议,:,(,在,TCP/IP,DECnet,之上的,X protocol),X,不是计算机操作系统的一部分:其他大部分窗口系统都是以,OS,核心为基础的,如:,MS Windows,Ma
39、cintosh,SunView,支持自由风格,(policy free),:,只提供机制不提供风格;包括窗口管理器、菜单、按钮、滚动条等的管理和操作,如:,Motif,Open Look,Tcl/Tk,等,1.,特点,56,2.X Window,的结构,X Window,的结构,57,各,client,、,窗口管理器和,X server,可以在一台或多台计算机上,用户对,server,所控制设备的操作都使,server,发送事件,(event),,,如:鼠标移动、点击,键盘输入;,事件,是一个数据块,内容包括:事件类型、相关的窗口等,client,对来自,server,的事件进行处理,,然后向
40、server,发送,请求,(request),,,如:窗口操作、显示图形或正文,X protocol,使用的传送信道:,异步字节流,。,server,不断发送事件而由,client,中的先进先出,FIFO,队列加以缓冲,,client,不断发送请求而由,server,中的,FIFO,队列加以缓冲。,58,X Window,的队列,59,3.,基本概念,屏幕,(screen),和,显示器,(display),:,屏幕指显示设备硬件,而,显示器指,X server,(,及其控制的键盘、鼠标和屏幕)。,X,允许一个显示器控制多个屏幕(即显示设备硬件)。,资源,(resource),:是,X win
41、dow,使用的窗口、位图,(bitmap),、,字体,(font),、,调色板,(color map),和其他数据结构的总称。,资源在,X server,中,创建和存储,,按照,client,的请求来加以管理,而,client,退出时撤销对应的资源。,通过,资源标识,(resource ID,,,整数类型,),来标识不同的资源(包括系统资源)资源的自身不体现风格,窗口树,:层次,子窗口只显示出被父窗口剪切,(clip),的区域,60,4.X lib,和工具箱,(toolkit),X lib,函数库,将接收到的,X protocol,转换为事件,并将请求转换为发送,X protocol,。,其代
42、码链接在,X client,中。如:,打开显示器:,XOpenDisplay(char,*display_name),与,X server,建立连接,取得,X connection,的文件描述符:,XConnectionNumber,(),61,X toolkit,:,提供各种构件的例程库,便于用户使用,体现不同的,风格,。如:,Motif,Open Look,Tcl/Tk,构件的数据结构存储在,X client,Xt,Intrinsics,:,对构件的管理和操作,如:建立和撤销,widget,、,管理资源(包括,widget,的初始值)、处理事件并调用相应的处理程序(回调过程,call-ba
43、ck,),widget set,:,构件集合构件类,(widget class),和构件实例,(widget instance),构件,(widget),:,由,多个资源,(最终是,resource ID,),复合而成,具有,特定外观和功能,的部件,如:按钮、菜单和滚动条如同建筑上的预制件。本质是:对某些事件给出了,默认响应,(通常是改变外观),并可以挂接回调过程来进行用户定义的处理,方便用户使用。如,Tcl/Tk,:,button.app.button2-image icon2-command,incr,x0,各个,widget,也构成,widget tree,,,最顶层是,top-leve
44、l widget,(在,toolkit,初始化时建立),editres,命令:查看,widget tree,,,并对,X,应用进程中的资源进行动态修改,62,5.X Window,的使用,1,)本地,起动,X server,2,),本地,允许访问,X server,:,xhost,+,hostC,3,),本地,发起远程登录:,telnet,hostC,并输入用户名和口令,4,)远地,运行,X,终端程序:,/,usr/openwin/bin/xterm,-display hostS:0.0&,或:,setenv,DISPLAY hostS:0.0;/,usr/openwin/bin/xterm,
45、5,),本地,在,xterm,窗口内输入命令行,可以起动其他,X client,程序,如:,xclock,远程登录,,X server,机为,hostS,(,本地用户),,client,机为,hostC,(,远地),63,2.4.3,网络虚拟图形用户接口系统,(VNC,Virtual Network Computing),VNC,是一个开放的跨平台的瘦客户端远程图形用户接口环境;,VNC,服务器提供应用程序、数据和整个桌面环境;,VNC,浏览器只保存少量状态信息,并且不保存任何不可恢复状态,网络状态不会影响,VNC,服务器的应用程序运行。,,Window,的问题,X Window,十分复杂
46、要求显示的机器有充足的资源。,X Window,的安全缺陷。,X,协议占用大量带宽,不能适用于低速链路。,65,VNC,的结构,VNC,服务器,:相对复杂一些,但可存于一张软盘上。目前有,X Window,和,Win32,两种平台的,VNC,服务器。,VNC,浏览器,:功能很少,对软件和硬件要求十分低。可工作于各种操作系统平台和支持,Java,的浏览器。,66,VNC,协议,在浏览器只一个基本的图形操作原语:在指定位置,显示一个矩形的点阵图象,。,这个作法允许浏览器依据带宽、显示性能和服务器端的处理能力来选择,编码方式,。,编码方式是可由浏览器和服务器,协商约定,的。如:矩形区域的点阵扫描(
47、简单)、矩形区域的复制编码(适用于窗口移动的传输,它实现简单且带宽占用低)。,VNC,协议是一个,远程访问图形用户接口,的简单协议。它的基本原理是,图象帧的缓存机制,,与操作系统、窗口系统和应用程序独立,可基于任何可靠的网络通信协议。,67,适应性修正,(Adaptive Update),:,通过,部分矩形区域的更新,(只更新变化区域)、,每个区域的编码方式可独立选择,(选择最有效的编码方式)、,更新由浏览器发起,(通过合并多个更新请求,修正操作可自动适应低性能浏览器和慢速网络)。,输入:基于键盘和鼠标事件。,连接的建立和拆除:,连接建立时要进行安全认证。,由于显示端的,无状态,特征,浏览器和
48、服务器可在任何时间拆除连接。,68,2.4.5,事件驱动模式,(event-driven),1.,面临的问题,2.,事件驱动模式,3.,分发驱动模式,4.,举例,69,1.,面临的问题,若,C1,C2,C3,在判断时是阻塞式,(blocking),,,则一个分支在阻塞等待时,使得其他两个即使条件具备也不被立即执行,若,C1,C2,C3,在判断时是非阻塞式,(non-blocking),,则,C1,C2,C3,不间歇地反复查询,,CPU,开销大,几个处理分支在各自条件下,间歇地、重复地执行,次序不确定。如:,While (!done),if (C1)P1;/*C1,:,管道,1,可读*,/,if
49、 (C2)P2;/*C2,:,管道,2,可写*,/,if (C3)P3;/*C3,:,定时器的时间到*,/,70,2.,事件驱动模式,将多路判断和等待汇集为一路,操作系统中都有相应的系统调用或库函数,特点:,节省运行,CPU,开销,无事件时等待而不是反复查询,有事件时才处理,当处理分支较多时,,switch,语句变得复杂和不易掌握,While (!done),NextEvent(Event,);,/*,获取下一个事件,若无事件则等待直到有事件*,/,switch (Event.Type),case C1:P1;,case C2:P2;,case C3:P3;,71,3.,分发驱动模式,特点:,
50、通过,对象管理机构,(如,X toolkit,),创建多个对象或构件,输入事件通过,对象各自的回调过程,(call-back procedure),来处理,通过对象管理机构,将输入事件分发给适当的元素,无须了解分发过程的实现,CreateObject(object1,P1);,CreateObject(object2,P2);,CreateObject(object3,P3);,While (!done),NextEvent(Event,);,/*,获取下一个事件,若无事件则等待直到有事件*,/,Dispatch(Event);/*,分发事件给相应的回调过程*,/,72,4.,举例,MS Wi






