资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第九章 UNIX 操作系统,第九章 UNIX 操作系统,1,9.1 UNIX 系统概述,9.1.1 UNIX 系统的发展,发展历史,1965年 由AT&T,MIT和GE联合开发,Multics,( Multiplexed Information and Computing Service),1969年 Ken Thompson 和 Dennis Ritchie在PDP7上用汇编语言开发出,UNIX,9.1 UNIX 系统概述,2,1970年 在PDP-11系列机上(11/20,11/40,11/45),用汇编开发出,UNIX,v.1。在此过程中,,机器的硬件逐渐复杂,UNIX所支持的特,征也不断丰富,增加了文字处理程序。,1975年 发表UNIX v.6 并广泛扩散到大学和科研,单位, 为后期发展奠定了良好的基础,1978年 优化后发布UNIX v.7 - UNIX的第一个,商业版本 - 我国开始研究应用的最早版本,1970年 在PDP-11系列机上(11/20,11,3,1981年 AT&T发布UNIX System III, 完全转向为,社会提供的商品软件,1983年 AT&T发布,UNIX System V, 系统功能已,趋于稳定和完善. 此后System V又有一系,列的公布号: 1.0/2.0/2.3/3.5/4.0/4.2 等, 现在最后版本为 System V Release 4(,SVRV,),九章节UNIX操作系统课件,4,9.1.2 有代表性的其它版本,加州大学伯克利分校的,BSD,(Berkeley,Software Distribution)版本, 主要用于工,程设计和科学计算,Microsoft和,SCO,公司开发的SCO XENIX,SCO UNIX 和 OpenServer等, 主要应用,在基于Inter x86体系结构的系统上,开放源代码的,Linux, UNIX的体系结构加,MS Windows形式的图形用户界面,主要,应用在基于Inter x86体系结构的系统上,9.1.2 有代表性的其它版本加州大学伯克利分校的BSD (,5,9.1.3 UNIX系统特征,可移植性强,. UNIX操作系统大量代码为C语言编写,. C语言具有跨平台特性,2. 多用户、多任务的分时系统,. 人机间实时交互数据,. 多个用户可同时使用一台主机,. 每个用户可同时执行多个任务,3. 软件复用,. 每个程序模块完成单一的功能,. 程序模块可按需任意组合,. 较高的系统和应用开发效率,9.1.3 UNIX系统特征可移植性强,6,与设备独立的输入/输出操作,. 打印机、终端视为文件,. 输入/输出操作与设备独立,界面方便高效,. 内部: 系统调用丰富高效,. 外部: shell命令灵活方便可编程,. 应用: GUI 清晰直观功能强大,安全机制完善,. 口令、权限、加密等措施完善,. 抗病毒结构,. 误操作的局限和自动恢复功能,与设备独立的输入/输出操作,7,多国语言支持,. 支持全世界现有的几十种主要语言,网络和资源共享,. 内部: 多进程结构易于资源共享,. 外部: 支持多种网络协议,系统工具和系统服务,.100多个系统工具(即命令),完成,各种功能,.系统服务用于系统管理和维护,多国语言支持,8,9.1.4,UNIX系统,组成,计算机系统有四大资源-处理机、存储器、文件、设备,9.1.4 UNIX系统组成 计算机系统有四大资源-,9,一、,UNIX系统核心的结构,库函数,系统调用接口,文件子系统,进程控制,子系统,进程间,通信,调度,存储管理,高速缓存,字符设备 块设备,设备驱动程序,硬件控制,硬件,核心级,硬件级,用户级,核心级,用户程序,捕俘,UNIX核心的框图,SHELL,一、 UNIX系统核心的结构 库函数系统调用接口文件子系统进,10,二、Unix系统的组成,UNIX可分为四个层次。最低层是硬件,它是整个系统的基础;次低层是OS核心;其次是OS与用户的接口SHELL、编译程序等;最高层是用户程序。,内核:,是Unix系统的核心部分,能与硬件直接交互,常驻内存。,二、Unix系统的组成UNIX可分为四个层次。最低层是硬件,,11,驻留(基本)模块,:完成输入/输出、文件、设备、内存和处理器时钟的管理,常驻内存。,系统工具:通常称为shell。是Unix操作系统的一部分,是用户与Unix交互的一种接口。常驻磁盘,在用户登录时即调入内存。,驻留(基本)模块:完成输入/输出、文件、设备、内存和处理器,12,三、进程控制子系统,进程控制子系统负责管理处理机、存储器。它的功能有:,1、进程控制-应用程序利用系统调用fork创建一个新进程;利用系统调用exec执行一个满足条件的进程;利用系统调用exit结束一个程序的执行。,三、进程控制子系统进程控制子系统负责管理处理机、存储器。它的,13,2、进程通信,3、存储器管理,4、进程调度-将满足运行条件的程序(进程)调入内存,安排一个时间片。,2、进程通信,14,四、文件子系统,文件子系统负责文件、设备资源的管理。它的功能有:,1、文件管理,2、高速缓冲机制-设置多个缓冲区以匹配I/O的速度。,3、设备驱动程序,四、文件子系统文件子系统负责文件、设备资源的管理。它的功能有,15,9.1.5 Uinx操作系统的启动流程,主机,Unix,内核,init,getty,Login:,getty,getty,Login:,Login:,9.1.5 Uinx操作系统的启动流程 主机Unixinit,16,装入OS内核,硬件检查,安装rootfs,形成0号进程,产生子进程,对换进程swap,产生1号进程init,执行inittab,初始化各端口,getty,getty,登录,执行命令,退出,boot,父,子,装入OS内核硬件检查安装rootfs形成0号进程产生子,17,9.1.6 用户分类和用户职责,一、用户分类,1、超级用户,2、普通用户,二、职责,9.1.6 用户分类和用户职责一、用户分类,18,9.1.8 用户登录与退出,超级用户:通过“root”登录,退出命令:,1、shutdown or,2、haltsys,普通用户:通过自己的UID登录,退出命令:,exit or Ctrl+d,9.1.8 用户登录与退出超级用户:通过“root”登录,19,9.2 文件管理,UNIX的文件系统的功能很强,又很灵活。,UNIX文件系统的概述,1、特点:,文件的组织是分树形结构-是倒树形结构。每个用户可以建立自己的文件系统。,文件的物理结构为混合索引式文件结构-文件的物理结构可能包括多种索引文件结构形式(单级索引、两级索引和多级索引文件结构形式。这种物理结构查询速度快、节省存放文件地址所需的空间。,9.2 文件管理UNIX的文件系统的功能很强,又很灵活,20,采用了成组链接法管理空闲盘块-是空闲表法和空闲链法的产物,提高了查找空闲盘块的速度,节省了存放盘块号的存储空间。,引入了索引结点的概念-在UNIX系统中,把文件名和文件的说明分开,即分别作为目录文件和索引结点表中的一个表项,这样既可提高文件的检索速度,又能减轻通道的I/O压力。,采用了成组链接法管理空闲盘块-是空闲表法和空闲链法,21,2、文件系统的特点,由于文件名和文件属性(说明)分开存放,文件属性构成文件的索引结点,这使UNIX的目录项与一般文件系统的目录项不,同,故UNIX文件系统的结构与一般的文件有所差异。应该是按文件的用途和类别存放。,下面的图中,根目录中的bin是二进制系统文件的子目录;usr是用户文件的根目录;dev是特殊文件的根目录。,2、文件系统的特点,22,bin,usr,dev,i,i,i,wang,i,i,root目录表,bin的目录表,usr的目录表,dev的目录表,binusrdeviiiwangiiroot目录表,23,3、文件系统的资源管理,为了在系统中保存一份文件,就需花费资源,当文件处于“未打开”状态时,文件需占用三种资源:,一个目录项-用以记录文件的名称和对应索引结点的编号;,一个磁盘索引结点项-用以记录文件的属性和说明信息(在磁盘上);,若干个盘块-用于保存文件本身。,当文件处于“打开”状态时,须增加三种资源:,3、文件系统的资源管理,24,一个磁盘索引结点项-用以记录文件的属性和说明信息(在磁盘上);,若干个盘块-用于保存文件本身。,当文件处于“打开”状态时,须增加三种资源:,一个磁盘索引结点项-用以记录文件的属性和说明信息(在磁,25,一个内存索引结点项(驻留内存);,文件表中的一个登记项;,用户文件扫描符表中的一个登记项。,由于对文件的读写管理,必须涉及上述资源,所以对文件的管理就包括:,对索引点的管理,对空闲盘块的管理,对文件目录的管理,对文件表和描述符表的管理,对文件的使用。,一个内存索引结点项(驻留内存);,26,9.3 进程的描述,在UNIX系统中,采用段页式存储管理方式(段称为区-Region).一个进程实体由若干个区组成(程序区、数据区、栈区、共享存储区),每个区可分若干页。UNIX中为每个进程配置一个进程控制块(PCB)用于控制和管理进程。PCB由四部分组成。,9.3 进程的描述 在UNIX系统中,采用,27,1、进程表项(核心数据),2、U区(扩充信息),3、进程区表(存放段的起地址始、指向系统区表中对应区表项的指针),4、系统区表项(存放各个段在物理存储器中的位置),1、进程表项(核心数据),28,9.2.1 进程的数据结构(PCB),一、进程表项(Process Table Entry):包含如下的内容:,1、进程标识符(PID) 是唯一标识进程的某一整数;,2、用户标识符(UID) 是标识拥有该进程的用户;,9.2.1 进程的数据结构(PCB)一、进程表项(Proce,29,3、进程状态 表示该进程的当前状态;,4、事件描述符 记录使进程进入睡眠状态的事件;,5、进程和U区在内存或外存的地址,核心可利用这些信息做上、下文切换;,3、进程状态 表示该进程的当前状态;,30,6、软中断信号 记录其它进程发来的软中断信号;,7、计时域 给出进程的执行时间和对资源的利用情况;,8、进程的大小 核心根据进程的大小来为其分配存储空间;,6、软中断信号 记录其它进程发来的软中断信号;,31,9、偏置值nice(加权系数) 供计算该进程的优先数时用,用户可自定;,10、PLink 指向就绪队列中下一个PCB的指针;,11、指向U区进程正文、数据及栈在内存区域的指针。,9、偏置值nice(加权系数) 供计算该进程的优先数时,32,二、U区(U Area),每个进程都有一个私用的U区,其中包含内容:,1、进程表项指针 指向当前(正在执行)进程的进程表项;,2、真正用户标识符u-ruid(real user ID)它是超级用户分配给普通用户的标识符,以后每次用户登录进入系统时,均必须输入此标识符;,二、U区(U Area)每个进程都有一个私用的U区,其中包含,33,3、有效用户标识符u-euid(effective user ID)可用系统调用setuid改变为其它用户,以获得对该用户的文件访问权;,4、用户文件描述符表 记录该进程已打开的所有文件;,5、当前目录和当前根 给进程的文件系统环境,3、有效用户标识符u-euid(effective us,34,6、计时器 记录进程在核心态和用户态的运行时间;,7、内部I/O参数 给出要传输的数据量,源(或目标)数据的地址,文件的输入/输出偏移量;,8、限制字段 指对进程的大小及其“写”的文件大小的限制。,6、计时器 记录进程在核心态和用户态的运行时间;,35,三、系统区表(System Region Table),系统V把一个进程的虚地址空间划分为若干个连接的逻辑区:正文区、数据区、栈区等。这些区是可被共享和保护的独立体。多个进程可共享一个区。例如:多个进程共享一个正文区,即几个进程将执行同一个程序;同样,多个进程也可共享一个数据区。为了对区进行管理,在核心中设置了一个系统区表,以记录区的有关信息:,1、区的类型和大小;,2、区的状态 (一个区有:锁住、在请求、在装入过程中、有效-区已装入内存);,3、区在物理存储器中的位置;,4、引用指针 共享该区的进程数;,5、指向文件索引结点的指针,三、系统区表(System Region Table)系统V,36,四、本进程区表(Per Process Region Table),为了记录进程的每个区在进程中的虚地址,并通过它找到该区在物理存储器中的实地址,系统为每个进程配置了一张进程区表。表中每一项记录一个区的起始虚地址及指向系统区表中对应的区表项。这样,核心通过查找进程区表项和系统区表,便可将该区的逻辑地址转换为物理地址。这里使用两张表实现是便于区的共享。,下图说明了其过程:,A、B两个进程的进程区表和系统区表。在A进程区表中的正文区、数据区和栈区的指针,分别指向相应于a、b、c区的系统区表项。B进程区表中的正文区、数据区和栈区,分别指向相应于a、d、e三个系统区表项,由于A 和B进程共享正文区,所以它们都指向同一个正文区a。,四、本进程区表(Per Process Region Tab,37,正文,数据,栈,正文,数据,栈,a,b,c,d,e,a,b,c,d,e,A进程区表,B进程区表,系统区表,进程区表项、系统区表项和区的关系,A、B,共享正文区,正文正文aabcdeA进程区表B进程区表系统区表进程区表,38,进程的数据结构:,U区,a,b,c,a,b,c,进程表,本进程区表,系统区表,进程的数据结构:U区aabc进程表本进程区表系统区表,39,9.2.2 进程状态及其转换,一、进程状态,UNIX中,把进程执行状态分为两种(用户态执行、系统态执行),前者是进程正处于用户状态中执行,运行可被中断;后者是核心状态执行(系统调用中断后便进入核心状态)运行不能中断。为进程设置了九种状态:,1、核心态执行,2、用户态执行,3、内存中就绪,9.2.2 进程状态及其转换一、进程状态,40,4、被剥夺状态,5、就绪/换出,6、内存中睡眠,7、睡眠/换出,8、创建状态-在父进程执行fork系统调用创建子进程期间,新被创建的子进程便处于“僵死”状态;,9、僵死状态-在执行exit系统调用后的状态。,4、被剥夺状态,41,4,2,1,3,8,5,9,6,7,进程状态的转换,用户态,执行,返回到用户态,被剥夺,内存中就绪,内存足,创建fork,内存不足,就绪/换出,换入,换出,唤醒,睡眠/,换出,内存中,睡眠,睡眠,唤醒,换出,核心态,执行,调度,剥夺,返回,系统调用,中断,中断,中断返回,僵死,421385967进程状态的转换用户态返回到用户态被剥夺,42,二、 进程映像,在UNIX系统中,进程是进程映像(Process Image)的执行过程。进程映像也就是正在执行的进程实体。它由三部分组成:用户级上、下文,寄存器上、下文和系统级上、下文。,一、用户级上、下文:主要是用户程序,它在系统中分为正文区和数据区。正文区是只读的,主要是一些程序。在进程执行时,可利用用户栈区保存中间结果。,二、 进程映像在UNIX系统中,进程是进程映像(Proces,43,二、寄存器上、下文,由CPU中的如下寄存器构成:,1、程序寄存器 存放CPU要执行的下条指令的虚地址;,2、处理机状态寄存器(PSR) 其中包括运行方式(用户态、系统态)、处理机当前的运行级等相关信息;,3、栈指针,4、通用寄存器,二、寄存器上、下文由CPU中的如下寄存器构成:,44,三、系统级上、下文,其中包括OS为进程管理该进程所用的信息:,1、静态部分-在进程的整个生命期中,系统级上、下文大小保持不变,它由三部分组成:,进程表项 每个进程占一个表项(记录进程的状态等相关信息),U区,进程区表项、系统区表项、页表,用于实现进程的虚地址到物理地址的映射。,2、动态部分-是可变的,它包括:,核心栈;,若干层寄存器上、下文。,三、系统级上、下文其中包括OS为进程管理该进程所用的信息:,45,用户级上、下文,进程正文,数据,栈,共享数据,系统级上、下文静态部分,进程表项,U区,本进程区表,核心栈第3层,第2层的保护的,寄存器上、下文,核心栈第3层,第2层的保护的,寄存器上、下文,核心栈第3层,第2层的保护的,寄存器上、下文,核心上、下文0层,上、下文静态部分,上、下文动态部分,进程上、下文的组成,用户级上、下文进程表项核心栈第3层上、下文静态部分上、下,46,9.2.3,进程的控制,在UNIX系统中,只设置了进程,它是一个独立拥有资源、独立调度的基本单位。,UNIX系统中的系统调用有:,1、fork-创建一个新进程,2、exec-改变进程的原有代码,3、exit-实现进程的自我终止,4、wait-将调用进程挂起,等待子进程终止,5、getpid-获取进程标识符,6、nice-改变进程的优先级。,9.2.3 进程的控制在UNIX系统中,只设置了进程,它是,47,一、fork系统调用:,在UNIX系统中,只有0进程是在系统引导时被创建的,在系统初启时由0进程创建1进程,以后0进程变为对换进程,1进程成为系统中的始祖进程。UNIX利用fork为每个终端创建一子进程为用户服务(如:等待用户登录、执行shell命令解释程序等)。每个终端又可用fork来创建其子进程,从而形成一棵进程树。系统中除进程外的所有进程都是用fork创建的。fork的系统调用格式:,int fork();,fork系统调用设有参数,如果执行成功,则创建一个子进程。,一、fork系统调用:,48,核心为fork完成如下操作:,1、为新进程分配一进程表项和进程标识符;,2、检查同时运行的进程数目;,3、拷贝进程表项中的数据;,4、子进程继承父进程的所有文件;,5、为子进程创建进程上、下文;,6、子进程执行。,核心为fork完成如下操作:,49,二、exec系统调用:,fork系统调用只是将父进程的用户级上、下文拷贝到新进程中,而exec系统调用将可执行的二进制文件覆盖在新进程的用户级上、下文的存储空间。exec系统完成的操作:,1、对可执行文件进行检查;,2、回收内存空间;,3、分配存储空间;,4、拷贝参数。,二、exec系统调用:,50,三、exit系统调用:,Unix系统;利用exit来实现进程的自我终止。核心需为exit完成:,1、关闭软中断;,2、回收资源;,3、写相关信息;,4、置进程为“僵死”状态。,三、exit系统调用:,51,四、wait系统调用:,用于进程挂起。核心为wait完成的操作:,1、首先查找调用进程是否有子进程,若无,则返回出错信息;,2、若找到一个“僵死状态”的子进程,则将子进程的执行时间加到父进程的执行时间上,并释放子进程表项;,3、若未找到处于“僵死状态”的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。,四、wait系统调用:,52,9.2.4 进程调度,UNIX系统是分时系统,系统未设置作业调度。对进程的调度采用,多级反馈队列轮转调度方式。,1、优先级分类:核心优先级;,2、优先级的计算:系统V中的用户优先级是可变的。它随占用CPU的时间越长而降低。核心每隔1秒钟便按如下公式计算各进程的用户优先级:,优先数= +基本用户优先数,最近使用CPU的时间,2,9.2.4 进程调度UNIX系统是分时系统,系统未设置作业,53,9.3 进程切换,9.3.1 进程的同步与通信,9.3 进程切换,54,9.3.2 管道,UNIX系统的“管道”是OS的首创。这也是UNIX系统的一大特色。所谓“管道”,是指能够连接一个写进程和一个读进程的,并允许它们以生产者-消费者方式进行通信的一个共享文件(pipe文件)。由写进程从管道的入端将数据写入管道,而读进程则从管道的出端读出数据。,一、管道类型:,1、无名管道(Unnamed Pipes)-是一个临时文件,是利用系统调用pipe()建立的无名文件。,2、有名管道(Named Pipes)-可在文件系统中长期存放、具有路径名的文件。,9.3.2 管道UNIX系统的“管道”是OS的首创。这也是,55,二、pipe文件的建立,进程利用pipe系统调用来建立一无名管道。其语法格式:,int pipe(filedes);,int filedes2;,核心创建一条管道须完成的工作:,1、分配磁盘和内存索引结点;,2、为读进程分配文件表项;,3、为写进程分配文件表项;,4、分配用户文件描述符。,二、pipe文件的建立进程利用pipe系统调用来建立一无名管,56,fp,fp,foffset,finode,FWRITEFPIPE,foffset,finode,FREADFPIPE,第i个索,引结点,Pipe,文件,用户文件,描述符,文件表,内存索,引结点,外存,pipe系统调用工作时所涉及的数据结构,fpfpfoffset第i个索Pipe用户文件文件表内,57,三、对无名管道的读写,1、对pipe文件大小的限制:,为提高运行效率,pipe文件只使用索引结点中的直接地址项iaddr(0)iaddr(9)。核心将索引结点中的直接地址项作为一个循环队列来管理,为它设置一个读指针和一个写指针,按先进先出顺序读、写。,2、进程互斥:,依靠上锁/解锁来控制读、写进程访问pipe 文件。,3、进程写管道,4、进程读管道,三、对无名管道的读写1、对pipe文件大小的限制:,58,9.3.3 消息,消息(message)是一个格式化的可变长的信息单元。消息机制允许一个进程给其它任意的进程发送一个消息。当一进程收到多个消息时,可将它们排成一个消息队列。UNIX系统中,消息机制向用户提供了四个系统调用,分别用于建立、发送和接收消息。,一、消息机制的数据结构:,系统将消息分为首部、数据区。,9.3.3 消息消息(message)是一个格式化的可变长的,59,1、消息首部记录消息的类型、大小、这指向消息数据区的指针、消息队列的链接指针等。,2、消息队列头表-在每一个消息队列的消息头中,包含了指向消息队列第一个消息的指针和指向最后的一个消息的指针、队列中消息的数目、队列中消息数据的总字节数、队列所允许的消息数据的最大字节总数、最近一次执行发送操作的进程标识符和时间、最近一次执行接收操作的进程标识符和时间。,1、消息首部记录消息的类型、大小、这指向消息数据区的指针,60,二、消息队列的建立和消息队列描述符的获取,每个消息队列有一个由用户指定的关键字(key)。消息队列还有一个消息队列描述符。进程可利用系统调用msgget来建立一个消息队列或获取一消息队列描述符。其格式:,int msgget(key,msgflg);,key_t key;,int msgflg;,其中,key是用户指定的消息队列名;msgflg是用户设置的标志和访问方式。,二、消息队列的建立和消息队列描述符的获取每个消息队列有一个,61,如ipc_CREAT表示系统若无以key命名的消息队列,则建立消息队列;若该队列已存在,则返回该消息队列的描述符msgid。,如ipc_CREAT表示系统若无以key命名的消息队列,则,62,队列 i,队列 n,消息首部,msgh 0,消息首部,msgh 2,消息首部,msgh 3,消息,缓冲区,消息,缓冲区,消息,缓冲区,消息首部,消息,缓冲区,0,3,2,m,消息队列头表,消息机制中的数据结构,队列 i队列 n消息首部消息首部消息首部消息消息,63,三、消息的发送,进程用msgsnd()系统调用向指定的消息队列发送一个消息,并将该消息链接到该消息队列的尾部。其格式:,int msgsnd(msgid,msgp,msgsz,msgflg);,int msgid;,struct msgbuf * msgp;,int msgsz, msgflg;,三、消息的发送,64,其中:msgid是由msgget返回的消息队列描述符;msgp是指向用户消息缓冲区的指针。缓冲区包括消息类型、消息正文,即:,long mtype; /* 消息类型 */,char mtext ; /*消息的文本 */,msgsz是mtext长度的字节数;msgflg是规定了当无内存空间存储消息时,进程等待还是立即返回。,对于msgsnd系统调用,核心须完成的工作:,1、对消息队列的描述符、许可权、消息长度进行检查,若合格才继续执行,否则返回。,其中:msgid是由msgget返回的消息队列描述符;ms,65,2、分配消息数据区,将用户消息缓冲区中的消息正文拷贝到消息数据区。,3、分配消息首部,并将它链入消息队列的尾部。在消息首部应填写消息类型、大小、指向消息数据区的指针等数据。,4、修改消息队列头中的数据。如队列中的消息数、字节总数,最后唤醒等待消息的进程。,四、消息的接收,进程利用msgrcv( )系统调用,从指定的消息队列中接收指定类型的消息,其语法格式:,2、分配消息数据区,将用户消息缓冲区中的消息正文拷贝到消息,66,int msgrcv( msgid, msgp, msgsz, msgtpy, msgflg);,int msgid, msgsz, msgflg;,struct msgbuf * msgp;,long msgtpy,msgtpy是规定选读的消息类型。,对于msgrcv系统调用,核心所完成的工作:,1、,对消息队列的描述符、许可权、消息长度进行检查,若合格才继续执行,否则返回。,2、根据msgtpy的不同进行处理:,msgtpy=0 ,核心寻找消息队列中的第一个消息,并将它返回给调用者;,int msgrcv( msgid, msgp, ms,67,msgtpy为正整数,核心返回给定消息类型的第一个消息;,msgtpy为负整数,核心应在其类型值小于或等于msgtpy绝对值的所有消息中,选出其类型值最低的一个消息返回。,3、当所返回消息的大小等于或小于用户的请求时,核心便将消息正文拷贝到用户区,并从消息队列中删除此消息,然后唤醒睡眠的发送进程。如果消息长度大于用户要求的,则做出错返回。用户可不规定消息的大小,而将消息一律拷贝到用户区。,msgtpy为正整数,核心返回给定消息类型的第一个消息;,68,五、消息队列的操纵,用户在建立消息队列后,可利用msgctl系统调用来读取它的状态信息并进行修改,如查询消息队列描述符、修改消息队列的许可权,或取消该队列。Msgctl语法格式:,int msgctl(msgid, cmd, buf);,int msgid, cmd;,struct msgid_ds * buf;,其中:buf 是用户缓冲区地址,供用户存放控制参数和查询结果;cmd是规定的命令。,(命令有:查询、设置和改变消息属性、消除消息队列的标识符等命令),五、消息队列的操纵用户在建立消息队列后,可利用msgctl系,69,9.3.4 共享存储区,共享存储区(Shared Memory)是UNIX系统中通信速度最高的一种通信机制。该机制可使若干进程共享存主存中的某一区域,可使该区域出现在多个进程的虚地址空间中。一个进程的虚地址空间中又可连接多个共享存储区,每个共享存储区有自己的名字。如图:进程A将建立的共享存储区接到自己的AA区域,进程B将建立的共享存储区接到自己的BB区域。,9.3.4 共享存储区共享存储区(Shared Memory,70,正文,数据,栈,共享,存储区,正文,数据,栈,A,A,B,B,进程A的虚空间,内存空间,进程B的虚空间,利用,共享存储区进行通信,正文数据栈共享正文数据栈AABB进程A的虚空间内存空,71,一、共享存储区的建立,当进程要利用共享存储区进行通信时,应先利用系统调用shmget建立一个共享存储区。如果共享存储区已由其它进程建立,则返回其描述符shmid。Shmget的语法格式:,int shmget (key, size, shmflg);,key_t key;,int size, shmflg;,Key是共享存储区的名字,size是其大小,shmflg是用户设置的标志,如IPC_CREAT。IPC_CREAT用来表示若系统中尚无指名的共享存储区,则由核心建立一个共享存储区,若系统中已有共享存储区,则忽略IPC_CREAT。,一、共享存储区的建立当进程要利用共享存储区进行通信时,应先利,72,核心所完成的工作:,1、检查共享存储区表,该表是系统范围的数据结构,每个共享存储区在该表中占有一表项。其中:包括共享存储区的名字(key)、共享存储区大小、共享存储区的页表始地址、指向系统区表项的指针等。若在该表中已查到指定的key表项,表明该共享存储区已建立,此时便返回该表项的描述符shmid。,2、若在该表中未查到指定的key表项,而flag标志又为IPC_CREAT,参数size又在系统限制值内,则分配一系统空闲区作为共享存储区,分配相应的内存块,再将这些块号填入页表中。,3、在共享存储区和系统区表中,为新建立的共享存储区分配一空表项,并在共享存储区表中填上存储区关键字及大小、共享存储区页表的始地址、指向系统区表项的指针,最后返回共享存储区的描述符 shmid。,核心所完成的工作:,73,二、共享存储区的附接与断开,建立共享存储区后,还需用系统调用shmat( )将共享存储区附接到进程的虚地址空间上。这样,共享存储区便成为进程虚地址空间的一部分。进程可对其进行读写操作。该系统调用的语法格式:,char * shmat (shmid, shmaddr, shmflg);,int shmid, shmflg;,char * shmaddr;,其中:shmaddr是用户给的将共享存储区附接到进程的虚地址空间,shmflg是共享存储区的读写标志。,二、共享存储区的附接与断开,74,当进程不需要共享存储区时,应利用系统调用shmdt( ),把共享存储区与进程断开,其语法格式:,int shmdt (shmaddr);,char shmaddr;,其中:shmaddr是要断开连接的虚地址。,当进程不需要共享存储区时,应利用系统调用shmdt( ),,75,三、共享存储区的操纵,可用shmct( )系统调用对共享存储区的状态消息进行读取和修改,可以断开进程与共享存储区的连接。当所有进程都断开了与共享存储区的连接,便可取消该共享存储区。Shmct1系统调用语法格式:,int shmct1 (shmid, cmd, buf);,int shmid,cmd;,struct shmid_ds, *buf;,Buf是用户缓冲区地址,cmd是操作命令。(命令有:用于查询共享存储区的长度、当前建立的进程数、共享存储区的创建者标识符,设置或修改共享存储区的属性(许可权等),对共享存储区的加锁/解锁和删除共享存储区标识符等命令),三、共享存储区的操纵,76, 信号量,在UNIX系统V中,规定每个信号量有一个可用来表示某资源数目的信号量值和一个操作值。也就是说:信号量可以用来控制系统的操作。,(参阅P414), 信号量在UNIX系统V中,规定每个信号量有一个可用来表,77,9.4 存储器管理,在UNIX系统中,内存空间分配和回收以页为单位(512B4KB/页)一个进程只需将其一部分(段或页)调入内存便可运行。,涉及到请求调页的数据结构有:,一、页表(所包含的内容有:页框号、年龄、访问位、修改位、有效位、写时拷贝、保护位),二、磁盘块描述表(Disk Block Descriptor),三、页框数据表(Pape Frame Data Table),四、对换使用表(SwapUse Table),9.4 存储器管理在UNIX系统中,内存空间分配和回收以页为,78,页框号,年龄,写时,拷贝,修改位,访问位,有,效位,保护,对换设备号,设备块号,存储器类型,页状态,内存,引用计数,逻辑,设备,块# 号,指向下一个页框,数据表指针,页表项,盘块说明,页框数据表项,UNIX系统V存储器管理中的数据结构,页框号年龄写时修改位访问位有保护对换设备号设备块号存储器,79,9.4.1 换页进程,UNIX系统的核心中,专门设置了一个换页进程(Pape stealer),其主要任务:,1、每隔一定时间由换页进程对内存中的所有有效页的年龄加1;,2、当有效页的年龄达到规定值后便把它换出。,9.4.1 换页进程UNIX系统的核心中,专门设置了一个换页,80,如果有时间着重讲”,重定向输入/输出,”和”,管道,”命令.,81,9.5 文件管理,UNIX的文件系统的功能很强,又很灵活。,9.5.1 UNIX文件系统的概述,1、特点:,文件的组织是分树形结构-是倒树形结构。每个用户可以建立自己的文件系统。,文件的物理结构为混合索引式文件结构-文件的物理结构可能包括多种索引文件结构形式(单级索引、两级索引和多级索引文件结构形式。这种物理结构查询速度快、节省存放文件地址所需的空间。,9.5 文件管理UNIX的文件系统的功能很强,又很灵活。,82,采用了成组链接法管理空闲盘块-是空闲表法和空闲链法的产物,提高了查找空闲盘块的速度,节省了存放盘块号的存储空间。,引入了索引结点的概念-在UNIX系统中,把文件名和文件的说明分开,即分别作为目录文件和索引结点表中的一个表项,这样既可提高文件的检索速度,又能减轻通道的I/O压力。,2、文件系统的特点,由于文件名和文件属性(说明)分开存放,文件属性构成文件的索引结点,这使UNIX的目录项与一般文件系统的目录项不,采用了成组链接法管理空闲盘块-是空闲表法和空闲链法的产,83,同,故UNIX文件系统的结构与一般的文件有所差异。应该是按文件的用途和类别存放。,下面的图中,根目录中的bin是二进制系统文件的子目录;usr是用户文件的根目录;dev是特殊文件的根目录。,同,故UNIX文件系统的结构与一般的文件有所差异。应该是按,84,bin,usr,dev,i,i,i,wang,i,i,root目录表,bin的目录表,usr的目录表,dev的目录表,binusrdeviiiwangiiroot目录表 bi,85,3、文件系统的资源管理,为了在系统中保存一份文件,就需花费资源,当文件处于“未打开”状态时,文件需占用三种资源:,一个目录项-用以记录文件的名称和对应索引结点的编号;,一个磁盘索引结点项-用以记录文件的属性和说明信息(在磁盘上);,若干个盘块-用于保存文件本身。,当文件处于“打开”状态时,须增加三种资源:,3、文件系统的资源管理,86,一个内存索引结点项(驻留内存);,文件表中的一个登记项;,用户文件扫描符表中的一个登记项。,由于对文件的读写管理,必须涉及上述资源,所以对文件的管理就包括:,对索引点的管理,对空闲盘块的管理,对文件目录的管理,对文件表和描述符表的管理,对文件的使用。,(,教材后面的内容请同学自己看,),一个内存索引结点项(驻留内存);,87,UNIX使用入门,.,预备知识,分时操作系统:,支持多个用户同时使用一台计,算机。,组成:,一台主机和多台终端构成。,分时操作系统将CPU时间划分为多个时间片,每,个用户一次只能运行一个时间片,时间片一到,就让出处理机供其他用户程序使用。由于CPU,速度很快,而时间片相对较短(为毫级),所,以,每个用户在自己的终端上操作时感觉不到,其他用户的存在,就象他在独占整个计算机系,统一样。,UNIX使用入门.预备知识分时操作系,88,Unix 是多用户/多任务分时系统,网络操作系统:,多台独立工作的计算机用通信线路连接起来,构成一个能共享资源的更大的信息系统。,组成:,多台独立的计算机。,Client-Server结构,Unix 是多用户/多任务分时系统网络操作系统:多台独立工作,89,一. UNIX的外部运行环境,UNIX 运行示意图,主 机,终端1 终端2 终端n,网 络 TCP/IP,网络终端服务器,终 端,主机m 主机n,RS2322,RS2322,RS2322,RS2322,RS2322,RS2322,一. UNIX的外部运行环境UNIX 运行示意图主 机终端,90,二. 用户登录和退出,1.登录,:,用户登录时,SHELL调入内存;,UNIX启动完成,在终端显示login:,输入用户名后,启动login程序来完成登录,Login检查下一步要执行的程序名(即shell),出现系统提示符$,. 登录的三个基本条件:,主机启动完毕,通讯端口打开,终端开电,二. 用户登录和退出1.登录:,91,登录的过程,UNIX是多用户操作系统。系统识别用户身份并允许用户使用的过程称为,登录,过程,当UNIX系统完成,登录,准备时给出login:提示。,Login:,用户名,password:,登录的过程UNIX是多用户操作系统。系统识别用户身份并允许用,92,2. 修改口令,$ passwd,Changing password for student2,Old password:,New password:,Re-enter new password:,说明:, 根据系统的安全级别用户口令一直,有效或定期修改, UNIX系统不会回显用户输入的口令,即从屏幕上看不到任何字符。,2. 修改口令,93,3.,退出系统,$,$ exit,Red Hat Linux Release 8.0,login: _,可用logout退出,可用Ctrl-d退出,表明: 1. 当前用户已成功退出, 善,后工作已完成,2. 本用户或其他用户可重,新登录进入系统,3. 退出系统可用logout退出表明: 1. 当前用户已,94,用户基本信息文件 /etc/passwd,root:x:0:3:super user:/:/sbin/sh,bin:x:2:2:Admin:/usr/bin:,admin:x:101:1:admin:/home/admin:/usr/bin/csh,oracle:x:102:101:dbms:/data/oracle:/usr/bin/ksh,test:x:103:1:/home/test:/usr/bin/csh,teacher:x:104:200:/home/teacher:/usr/bin/vsh,student1:x:105:300:/home/student1:/usr/bin/ksh,student2:x:105:300:/home/student2:/usr/bin/ksh,student3:x:107:300:/home/student3:/usr/bin/ksh,student4:x:108:300:/home/student4:/usr/bin/ksh,用户基本信息文件 /etc/passwd,95,UNIX,内核,INIT,getty,getty,getty,Login:,Login:,Login:,三. UNIX 的启动过程,UNIXINITgettygettygettyLogin:L,96,UNIX,内核,INIT,Login,Login,Login,Login:david password:,Login:,Login:,UNIXINITLoginLoginLoginLogin:d,97,UNIX,内核,INIT,shell,getty,getty,Login:david password:,$,Login:,Login:,UNIXINITshellgettygettyLogin:d,98,UNIX 的启动过程流程图,装入OS内核,硬件检查,安装rootfs,形成0号进程,产生子进程,对换进程swap,产生1号进程init,执行inittab,初始化各端口,getty,getty,登录,执行命令,退出,boot,父,子,UNIX 的启动过程流程图装入OS内核硬件检查安装root,99,基本命令的使用,简单命令,基本规则:,在命令提示符后发出命令;,命令行输入完并开始执行的标志是回车换,行键;,命令执行完成的标志是出现新的命令,提示符$。,例如:,$,date,(显示当前系统的日期和时间),Fri Sep 5 18:19:01 EDT 2003,$ _,基本命令的使用,100,Who 命令,(查看系统中,所有,已登录用户状况),Who命令可列出当前登录到系统的所有用户的登录名,终端号和登录时间。,可用who命令检查系统状态,或某个用户是否正在使用系统,Who 命令(查看系统中所有已登录用户状况)Who命令可列,101,说明:,.同一个登录名可以被同一个人或多人同时使,用多次,.终端号通常可以表明使用者的位置,但并不,肯定(对虚终端而言),说明:,102,$,who am i,(我是谁),teacher tty02 Sep 05 08:25,$,who H,(显示各列信息标题),NAME LINE TIME,teacher tty02 Sep 05 08:25,student1 tty26 Sep 05 10:27,student1 tty15 Sep 05 10:38,student5 ttyp09 Sep 05 10:10,$,who q,(显示简要用户列表和用户总数),teacher student1 student1 student5,# users=4,$_,$ who am i (我是谁),103,2. 通用命令格式,$ 命令名 -命令选项 命令参数,命令选项: 可以选择, 也可以不选. 如果选择, 则必,须是由减号开始的一个或多个字母组成.,任选项通常起功能开关的作用.,命令参数: 可以有, 也可以没有; 可以有一个, 也可,以有多个. 参数主要用于指明命令的操,作对象, 通常为文件名(广义).,方括号: 表明其中的内容可以缺省.,2. 通用命令格式,104,举例:,$mail -f newmail $mail -,f newmail,$who -u $who-u,$mail f newmail$mail newmail -f,$mail team01$team01 mail,$who -u $-u who,$who m u $who m-u,$who mu $who m u,$mail team01 team02 $mail team01team02,举例: $mail -f newmail,105,命令行更正和程序终止,. 当命令行输入错误时, 在还未键入换行符时, 可用,BS(BackSpace)键或h键删除前面字符, 再键入正确的,字符。推荐使用h键, 因该键的兼容性更好. 当要删除一,整行时, 按u,. 要强行终止当前正在运行的程序时, 可按C、Del,或Break键来完成。出现命令提示符$, 表明程序,已终止运行.,注意,:,一个普通用户在一台终端上无论是进行登录系统、退,出系统、发出命令还是终止程序等操作,都不会影响,其他用户的正常操作,。,命令行更正和程序终止注意: 一个普通用户在一台终端上无论是,106,常用命令:,date,和,cal,命令,查看当前时间,:,$date,查看某一个月的月历,:,$,cal,月年,查看某一年的各个月的月历:,$cal 年,常用命令:date 和 cal命令,107,Date 命令,Date命令显示星期,月,日,时间(美国东部时间)和年。,Unix,使用24进制时间,Date 命令Date命令显示星期,月,日,时间(美国东部时,108,Cal 命令,Cal命令显示指定年份的日历表。,若同时指定年和月,只显示一个月的日历表。,年和月都是命令参数。,Cal,命令的默认参数为当前月。,Cal 命令Cal命令显示指定年份的日历表。,109,Cal 命令 说明,1. 年份参数必须写全。如:输入,cal 1998,而不能输入 cal 98。,2.,可使用数字表示月份(0112),而不能使用月份的名字。,3. 不带参数的,cal命令显示当前月份的日历。,4. 只有年份参数的cal显示指定年份的日历表,Cal 命令 说明1. 年份参数必须写全。如:输入ca,110,Cal 命令,Cal 命令,111,Finger 命令,显示一个用户的详细信息。,Finger命令。,Finger 命令显示一个用户的详细信息。Finger命令。,112,clear, echo, banner,命令,clear,命令执行清屏动作:,$clear,echo命令将命令名后跟随的参数显示在屏幕 :,$echo hello world,banner命令将命令名后跟的ASCII字符串以大字的方式显示在屏幕上:,$banner hello,clear, echo, banner命令,113,wc,命令,wc,命令用于计算一个指定的文件中的行数,单词数及字符数,命令的格式为:,$wc -c-l-w filename,命令选项:,-c,计算字符的数目,-l,计算行的数目,-w,计算单词的数目,举例:wc myfile,wc命令,114,wc,命令,wc,命令用于计算一个指定的文件中的行数,单词数及字符数,命令的格式为:,$wc -c-l-w filename,命令选项:,-c,计算字符的数目,-l,计算行的数目,-w,计算单词的数目,举例:wc myfile,wc命令,115,Wc命令,计算mvfile,文件的行数,单词数,字符数,并给予报告。,Wc命令计算mvfile文件的行数,单词数,字符数,并给予报,116,一些特殊键的用法,一些特殊键的用法,117,联机手册,联机手册命令man可向用户提供系
展开阅读全文