




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分时系统是为了满足用户需求所形成的一种新型OS。它与多道批处理系统之间,有着截然不同的性能差别。用户的需求具体表现在以下几个方面:人一机交互共享主机便于用户上机分时系统的基本思想时间片:是把计算机的系统资源(尤其是CPU时间)进行时间上的分割,每个时间段称为一个时间片,每个用户依次轮流使用时间片。分时技术:把处理机的运行时间分为很短的时间片,按时间片轮流把处理机分给各联机作业使用。分时操作系统:是一种联机的多用户交互式的操作系统。一般采用时间片轮转的方式使一台计算机为多个终端服务。对每个用户能保证足够快的响应时间,并提供交互会话能力。设计目标:对用户的请求及时响应,并在可能条件下尽量提高系统资源的利用率。适合办公自动化、教学及事务处理等要求人机会话的场合。工作方式:一台主机连接了若干个终端每个终端有一个用户在使用交互式地向系统提出命令请求系统接受每个用户的命令采用时间片轮转方式处理服务请求并通过交互方式在终端上向用户显示结果用户根据上步结果发出下道命令分时系统实现中的关键问题及时接收。及时处理。特征:交互性:用户与系统进行人机对话。多路性:多用户同时在各自终端上使用同一CPU。独立性:用户可彼此独立操作,互不干扰,互不混淆。及时性:用户在短时间内可得到系统的及时回答。影响响应时间的因素:终端数目多少时间片的大小信息交换量信息交换速度分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。分时系统的产生{人机交互•共享主机・便于用户上机}分时系统实现中的关键问题•及时接收和及时处理。-分时系统的特征•多路性、独立性、及时性和交互性。实时系统是指系统能及时响应外部事件的请求,在规定时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。实时操作系统RTOS(realtimeoperationsystem):是指能支持实时控制系统工作的操作系统。嵌入式操作系统:支持嵌入式系统工作的操作系统。嵌入式系统一般具有实时特点,这里把嵌入式操作系统和实时操作系统不加区别对待。需要有一个能描述程序的执行过程且能用来共享资源的基本单位。这个基本单位被称为进程(或任务)进程的定义:一个具有独立功能的程序对某个数据集在处理机上的执行过程和分配资源的基本单位。分时操作系统(time-sharingsystem) 70年代中期至今“分时”的含义:分时是指多个用户分享使用同一台计算机。多个程序分时共享硬件和软件资源。分时(TimeSharing)操作系统的工作方式是:一台主机连接了若干个终端,每个终端有一个用户在使用。用户交互式地向系统提出命令请求,系统接受每个用户的命令,采用时间片轮转方式处理服务请求,并通过交互方式在终端上向用户显示结果。用户根据上步结果发出下道命。分时操作系统将CPU的时间划分成若干个片段,称为时间片。操作系统以时间片为单位,轮流为每个终端用户服务。每个用户轮流使用一个时间片而使每个用户并不感到有别的用户存在。分时系统具有多路性、交互性、“独占”性和及时性的特征。多路性指,伺时有多个用户使用一台计算机,宏观上看是多个人同时使用一个CPU,微观上是多个人在不同时刻轮流使用CPU。交互性是指,用户根据系统响应结果进一步提出新请求(用户直接干预每一步)。“独占”性是指,用户感觉不到计算机为其他人服务,就像整个系统为他所独占。及时性指,系统对用户提出的请求及时响应。分时操作系统的特点:多路性:即众多联机用户可以同时使用同一台计算机;独占性:各终端用户感觉到自己独占了计算机;交互性:用户与计算机之间可进行“会话”。及时性:用户的请求能在短时间内得到响应。常见的通用操作系统是分时系统与批处理系统的结合。其原则是:分时优先,批处理在后。“前台”响应需频繁交互的作业,如终端的要求;“后台”处理时间性要求不强的作业。进程和程序的区别和关系可简述如下:进程是一个动态概念,而程序则是一个静态概念。程序是指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡。进程具有并行特征,而程序没有。进程是竞争计算机系统资源的基本单位,从而其并行性受到系统自己的制约。O不同的进程可以包含同一程序,只要该程序所对应的数据集不同PCB集中反映一个进程的动态特征。在进程的生命期内,至少具有三种基本状态,它们是:执行状态、等待状态和就绪状态。所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的3.1文件相关命令3.1.1创建文件夹(目录文件) mkdir命令格式:mkdir目录文件名mkdirExFile在当前目录下创建名为ExFile的文件夹cd3.1.2改变工作目录cd命令格式:cd目录路径cdExFile进入ExFile目录cd..表示回到上一层目录(父目录)在每个文件目录下,有2个特殊的目录,当前目录可以用一个点.表示。用2个点..表示上一级目录。使用cd..可以进入上一级目录。3.1.3pwd:会显示工作目录的绝对路径命令格式:pwd3.1.4显示目录内的文件和子目录列表ls命令格式:ls[参数][目录或文件]ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。命令中各选项的含义如下:-a显示指定目录下所有子目录与文件,包括隐藏文件。-A显示指定目录下所有子目录与文件,包括隐藏文件。但不列出”:和“..”。-b对文件名中的不可显示字符用八进制字符显示。-c按文件的修改时间排序。-C分成多列显示各项。-d如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使用,以得到目录的详细信息。-f不排序。-F在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记T,socket文件后面标记“=”。-i在输出的第一列显示文件的i节点号。-l以长格式来显示文件的详细信息。这个选项最常用。每行列出的信息依次是:文件类型与权限链接数文件属主文件属组文件大小建立或最近修改的时间名字对于符号链接文件,显示的文件名之后有“一〉”和弓I用文件路径名。对于设备文件,其〃文件大小”字段显示主、次设备号,而不是文件大小。目录中的总块数显示在长格式列表的开头,其中包含间接块。-L若指定的名称为一个符号链接文件,则显示链接所指向的文件。-m输出按字符流格式,文件跨页显示,以逗号分开。-n输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和GID号来表示,而不是实际的名称。-o与l选项相同,只是不显示拥有者信息。-p在目录后面加一个“/”。-q将文件名中的不可显示字符用“?”代替。-r按字母逆序或最早优先的顺序显示输出结果。-R递归式地显示指定目录的各个子目录中的文件。-s给出每个目录项所用的块数,包括间接块。-t显示时按修改时间(最近优先)而不是按名字排序。若文件修改时间相同,则按字典顺序。修改时间取决于是否使用了c或u选顶。缺省的时间标记是最后一次修改时间。-u显示时按文件上次存取的时间(最近优先)而不是按名字排序。即将-t的时间标记修改为最后一次访问的时间。-X按行显示出各排序项的信息。用ls-l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:-普通文件d目录l符号链接b块设备文件c字符设备文件后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。各权限如下所示:r读w写x执行。对于目录,表示进入权限。s当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。t设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。3.1.5文件的创建与阅读 cat命令格式:cat文件名创建一个文件:cat>文件名,按下ctrl+c结束输入。在一个文件后追加:cat>>文件名显示文件内容:cat文件1[文件2][文件3]..合并文件:cat文件1文件2….>文件n3.1.6删除文件 rm命令格式:rm文件名rm文件1[文件2文件3..…]rm-i文件:删除文件前给与确认rm-r文件或目录:删除整个目录树。如果删除目录内没有文件,可以使用rmdir命令。3.1.7拷贝文件 cp命令格式:cp源文件[目录]目标文件[目录]cp-i源文件目标文件:如果目标文件存在,覆盖目标文件时给出提示cp-r源目录名目标目录:复制目录树3.1.8移动文件(目录)至新的目录、更该文件名(目录名)mv命令格式:mv源文件[目录]目的文件[目录]mv源文件目的文件如果目的文件不存在,源文件将改名为目的文件如果目的文件存在,源文件将改名为目的文件,同时目的文件原有内容将被源文件覆盖mv源文件目的目录如果目的目录中没有源文件,源文件将移动到目的目录如果目的目录中已有与源文件同名的文件,目的目录中的文件将被覆盖,源文件移动到目的目录3.1.9建立链接命令 lnln-s源文件目标文件创建一个符号链接文件,生成一个新的文件,该目标文件指向源文件,可以通过目标文件来使用源文件ln源目录目标文件为目录创建一个符号链接文件,可以通过符号链接文件访问源目录该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可以用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。这里带有白参数时创建了一个新的文件。在Linux中,文件的唯一标识是一个称为i节点的数。它就像我们的身份证号,唯一标识一个人,但我们可以有几个名字,比如我们乳名和大名。使用ls-命令可以查看文件的i节点。>示例1:用户/usr/include在当前目录下创建了一个符号链接lib,以便方便查看头文件。ln-s/usr/includelib3.1.10在磁盘中查找文件和目录的命令 find命令格式:find路径名搜索选项动作选项>搜索选项-name:通过文件名来查找文件-type:类型选项-size:通过文件大小来查找文件-atime:通过文件的最后访问日期来查找文件-mtime:通过文件的最后修改日期来查找文件-newer:查找比制定文件更新期更新的文件>动作选项-print:输出找到的每个文件路径名(默认)-execcommand{}\;:对找到的文件执行command-okcommand{}\;:执行command前确认>示例1:查找符合某种模式的文件假定要显示当前目录及其子目录下所有以da开头的文件,请输入:find.name‘da*’命令中的点(.)会使find搜索当前目录及其子目录。文件名后的-name选项或文件名模式(在这种情况下为da*)告知find搜索所有符合该模式的文件。在本示例中,find将搜索所有以da开头的文件名。注意,da*要用单引号括起来('da*')。如果在find命令中使用文件名模式,必须用单引号将其括起来,以便shell可以对其进行正确地解释。>示例2:查找晚于某个文件创建日期的文件假定您想显示所有在某个文件创建日期之后修改过的文件。要显示/home/weile目录及其子目录下所有晚于myfile创建日期的文件,请输入:find/home/weile-newermyfile本示例可以理解为:在目录/home/weile及其子目录下,查找所有在myfile创建日期之后修改过的文件。(要确定文件的上次修改日期,请使用ls-l命令。)>示例3:在文件中运行命令可以在使用find命令查找到的文件中执行命令。假定您想删除当前目录及其子目录下所有扩展名为.tmp的文件。请输入:find.-name‘*.tmp’ -execrm{} \;本示例查找当前目录及其子目录下所有扩展名为.tmp的文件,并将其显示在屏幕上,然后将其删除。-exec选项会导致以下命令(rm)的执行。花括号{}代表使用find命令找到的文件。结束exec字符串的分号之前应添加一个反斜线(\;)。注意反斜线(\;)与{}之间有空格。wc3.1.11统计一个文件中的行数、字数或字符数wc命令格式:wc[参数]文件名参数:-W:统计字数-1:统计行数-c:统计字符数>示例1:/etc/passwd是用户信息文件,每一行表示一个用户。使用wc命令可以统计出系统的用户总数。请键入:wc-l/etc/passwd3.1.12输出重定向符 >或>>命令格式:命令>文件名或命令>>文件名>示例1:1S>list,将1s命令的结果保存到文件list中。如果文件list不存在,则创建list;如果文件list已存在,原有内容将被覆盖。这里ls本应该输出到屏幕上,现在输出到了文件list中。>示例2:ls>>list,将ls命令的结果追加到到文件list后。如果文件list不存在,则创建list;如果文件list已存在,则追加到文件list后,原有内容保留.在命令模式下,键入yy:将当前行复制到临时缓冲区dd:删除当前行,并将其内容保存到临时缓冲区ndd:删除多行,并将其内容保存到临时缓冲区,如3ddp:将临时缓冲区内容复制到当前行的下一行P:将临时缓冲区内容复制到当前行的上一行u:取消上一次的修改.:重复上一次的操作3.1文本搜素在命令模式下,键入:,出现:提示符后,键入/或?用来在文件中向前或向后搜索如:/Unix,?linux(注意?与linux之间无空格)搜索完毕后,在命令模式下键入n,会依次移动到下一个找到的文本上3.2编辑多个文件命令格式:vifilelfilefile3・・・..首先编辑filel,在命令模式下,键入:n将编辑下一个文件,键入:ar将显示编辑文件列表,键入:N将编辑上一个文件。3.3读入一个文件内容命令格式:在命令模式下,键入:rfile作用:将文件file的内容读入到光标所在行的下一行3.4将文件的部分内容保存为另一个文件命令格式:nl,n2wfile示例:5,20wt2.txt,将文件的第5行到第20行的内容保存到文件t2.txt中。3.5使用缓冲区vi中除了保存文件副本的临时缓冲区外,还有两类缓冲区:数字编号缓冲区和字母编号缓冲区,这两类缓冲区用来保存先前删除和复制的内容3.15.1数字缓冲区数字编号缓冲区编号1-9,每次删除操作(dd,ndd)的文本都放入数字缓冲每次删除时,各个数字编号缓冲区内容依次下移,缓冲区1总是存放最新删除的文本>示例:2p:将第2个缓冲区的内容复制到下一行3.15.2字母缓冲区vi提供26个命名的缓冲区,用小写字母a-z表示,用来存放用户删除或复制的内容,用户需要指定缓冲区的名字去弓I用它们。示例(命令行状态下):wdd:删除当前行,将副本保存在缓冲区w中wp:将缓冲区w的内容复制到当前行下一行ayy:将当前行的内容复制到缓冲区a中3.6vi中运行shell命令命令格式:!command>示例:!ls,!date3.7将命令的执行结果加入vi中>示例:在命令模式下键入:r!ls,将ls命令执行结果加入到vi中3.8设■vi的环境变量命令:set[选项]相关文件:.exrc。该文件用来保存5中的设置选项,如用户主目录有.exrc,vi启动时根据此文件设置环境变量示例:显示行号 setnumber示例:不显示行号setnonumber♦ps命令使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等ps命令及其参数:ps[选项]常用的三个参数是选项u、a、xu选项来查看进程所有者及其他一些详细信息a显示终端上的所有进程,包括其他用户的进程。x显示没有控制终端的进程。使用root用户登录,键入下面命令看到[root@mmc~]#psauUSERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMANDroot22410.00.1 3340408tty2Ss+Sep040:00/sbin/mingettyttroot22420.00.1 3400404tty3Ss+Sep040:00/sbin/mingettyttroot22430.00.1 3452408tty4Ss+Sep040:00/sbin/mingettyttroot22440.00.1 1468408tty5Ss+Sep040:00/sbin/mingettyttroot22450.00.1 2160408tty6Ss+Sep040:00/sbin/mingettyttroot86550.00.12292356tty1Ss+Oct050:00/sbin/mingettyttroot262690.00.553521416pts/0Ss+19:46)0:00-bashroot263200.20.542721412pts/2Ss20:060:00-bashroot263540.00.23020764pts/2R+20:060:00psauUSER表示进程拥有者;PID表示进程标示符;%CPU表示占用的CPU使用率;%MEM占用的物理内存使用率;VSZ表示占用的虚拟内存大小;RSS为进程占用的物理内存值;TTY为终端的次要装置号码。STAT表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;L有内存分页分配并锁在内存体内(实时系统或I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是所执行的指令。top命令top命令和?,命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最敏感的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。该命令的语法格式:top[-][ddelay][q][c][s][S][i]d指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。S指定累计模式。s使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。i使top不显示任何闲置或者僵死进程。c显示整个命令行而不只是显示命令名top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。显示的各项目为:uptime该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。processes自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。CPUstates显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。Mem内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。Swap交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。PID每个进程的ID。PPID每个进程的父进程ID。UID每个进程所有者的UID。USER每个进程所有者的用户名。PRI每个进程的优先级别。NI该进程的优先级值。SIZE该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。TSIZE该进程的代码大小。对于内核进程这是一个很奇怪的值。DSIZE数据和堆栈的大小。TRS文本驻留大小。D被标记为不干净的页项目。LIB使用的库页的大小。对于ELF进程没有作用。RSS该进程占用的物理内存的总数量,单位是KB。SHARE该进程使用共享内存的数量。STAT该进程的状态。其中S代表休眠状态;。代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。TIME该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。%CPU该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。%MEM该进程占用的物理内存占总内存的百分比。COMMAND该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。Ctrl+L擦除并且重写屏幕。h或者?显示帮助画面,给出一些简短的命令总结说明。k终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。i忽略闲置和僵死进程。这是一个开关式命令。q退出程序。r重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及要设置的优先级的数值。第一次键入一个ID值,第二次键入要设置的优先级的数值。S切换到累计模式。s改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。f或者F从当前显示中添加或者删除项目。o或者O改变显示项目的顺序。l切换显示平均负载和启动时间信息。m切换显示内存信息。t切换显示进程和CPU状态信息。c切换显示命令名称和完整命令行。M根据驻留内存大小进行排序。P根据CPU使用百分比大小进行排序。T根据时间/累计时间进行排序。W将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。键入top命令查看系统状况$toptop-21:11:22up73days,8:00,2users,loadaverage:0.00,0.00,0.00Tasks:53total,1running,52sleeping,0stopped,0zombieCpu(s):0.0%us,50.0%sy,0.0%ni,0.0%id,0.0%wa,0.0%hi,50.0%siMem:256060ktotal,224292kused,31768kfree,22988kbuffersSwap:522104ktotal,3316kused,518788kfree,62392kcachedPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND26318root160795622241800S55.00.9 0:07.94sshd26373root1702752936760R27.50.4 0:07.68top1root1602516560480S0.00.20:04.22init2root3419000S0.00.00:03.04ksoftirq山03root5-10000S0.00.06:31.83events/0第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行为进程情况,依次为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。然后下面就是和ps相仿的各进程情况列表了。3.1进程和程序的区别与联系>程序是静态概念,本身可以作为一种软件资源保存;而进程是程序的一次执行过程,是动态概念,它有一定的生命期,是动态地产生和消亡的。>进程是一个能独立运行的单位,能与其他进程并发执行,进程是作为自愿申请和调度单位存在的;而通常的程序不能作为一个独立运行的单位。>程序与进程无一对应关系,一方面一个程序可由多个进程共用;另一方面一个进程只能对应一个程序。进程和程序的关系犹如演出和剧本的关系。3.2fork系统调用一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID,其他的都是一样。当一个程序中调用fork函数后,内核会完成如下工作:内核系统分配新的内存块和内核数据结构复制原来的进程到新的进程向运行进程集添加新的进程将进程返回给两个进程设原来的进程为父进程,调用fork生成的新进程为子进程,则子进程会执行父进程中fork函数后的代码。fork系统调用使用格式:头文件:#include<sys/types.h>/*提供类型pid_t的定义*/#include<unistd.h>函数原形:pid_t fork(void);返回值:pid_t对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。如果调用不成功,则返回-1。3.3exec族函数exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。exec系统调用有六种不同的使用格式,但在核心中只对应一个调用入口。它们有不同的调用格式和调用参数。这六种调用格式分别为:#include<unistd.h>intexecl(constchar*path,constchar*arg0,...,constchar*argn,(char*)0);intexecv(constchar*path,char*const*argv);intexecle(constchar*path,constchar*arg0,...,constchar*argn,(char*0),constchar*envp[]);intexecve(constchar*path,char*const*argv,char*const*envp);intexeclp(constchar*file,constchar*arg0,...,constchar*argn,(char*)0);intexecvp(constchar*file,char*const*argv);说明:参数path指出一个可执行目标文件的路径名;参数file指出可执行目标文件的文件名。arg0作为约定同path一样指出目标文件的路径名;参数arg1到argn分别是该目标文件执行时所带的命令行参数;参数argv是一个字符串指针数组,由它指出该目标程序使用的命令行参数表,按约定第一个字符指针指向与path或file相同的字符串;最后一个指针指向一个空字符串,其余的指向该程序执行时所带的命令行参数;参数envp同argv一样也是一个字符指针数组,由它指出该目标程序执行时的进程环境,它也以一个空指针结束。exec的六种格式在以下三点上有所不同:>path是一个目标文件的完整路径名,而file是目标文件名,它是可以通过环境变量PATH来搜索的;>由path或file指定的目标文件的命令行参数是完整的参数列表或是通过一指针数组argv来给出的;>环境变量是系统自动传递或者通过envp来给出的。
下图说明了exec系统调用的六种不同格式对以上三点的支持。系统调用参数形式环境传送路径搜索Execl全部列表自动否Execv指针数组自动否Execle全部列表不自动否Execve系统调用参数形式环境传送路径搜索Execl全部列表自动否Execv指针数组自动否Execle全部列表不自动否Execve指针数组不自动否Execlp全部列表自动是Execvp指针数组自动是数现在我们应该明白了,Linux下是如何执行新程序的,每当有进程认为自己不能为系统和用户做出任何贡献了,他就可以发挥最后一点余热,调用任何一个exec,让自己以新的面貌重生;或者,更普遍的情况是,如果一个进程想执行另一个程序,它就可以fork出一个新进程,然后调用任何一个exec,这样看起来就好像通过执行应用程序而产生了一个新进程一样。事实上第二种情况被应用得如此普遍,以至于Linux专门为其作了优化,我们已经知道,fork会将调用进程的所有内容原封不动的拷贝到新产生的子进程中去,这些拷贝的动作很消耗时间,而如果fork完之后我们马上就调用exec,这些辛辛苦苦拷贝来的东西又会被立刻抹掉,这看起来非常不划算,于是人们设计了一种"写时拷贝(copy-on-write广技术,使得fork结束后并不立刻复制父进程的内容,而是到了真正实用的时候才复制,这样如果下一条语句是exec,它就不会白白作无用功了,也就提高了效率。3.4wait系统调用wait系统调用可以完成戏程和子进程的同步。进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个?进程的信息,并把它彻底销毁后返回;如果没有找到这样一个?进程,wait就会一直阻塞在这里,直到有一个出现为止。wait系统调用使用格式:#include<sys/types.h>/*提供类型pid_t的定义*/#include<sys/wait.h>pid_twait(int*status)参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,(事实上绝大多数情况下,我们都会这样想),我们就可以设定这个参数为NULL,就象这样:pid=wait(NULL);3.1并行结构cobegincobegin块包括一组并发执行的进程列表。这样的块不允许嵌套,而且只能出现在主程序中。列表中的PCODE语句将被解释器以任意、随机的顺序执行,于是多次执行包括cobegin块的相同程序的结果将呈现不可预测性。主程序将挂起,直到cobegin块终结,此时主程序将恢复执行紧随块后的下一条语句。下面是一个例子:cobegin{proc1(...);proc2(...);...;procN(...);}semaphoresemaphore是一个BACI预定义类型。它是一个非负的整数变量,并且只能通过受限的方式访问。BACI也提供了一个它的子类型一一inarysem,这是一个二元信号量,它的值只能是0或1。信号量函数包括:initialsem(semaphores,integer_expression):能够初始化BACI中两种信号量s的唯一的函数。p(semaphores)swaFr(semaphores)盘口湖semaphoreV0、WKM1*ai回、wawlaa瞟®ffiBisqI、目湖semaphoreH0、WKMLpswlaas席醐。v(semaphores)ssanaKsemaphores)盘口湖semaphoreno*皿4nffl®4fcv}ss、、8semaphoreKfi1。<s^ano313monitorsBACI&泠4ffmssH0aremonFrorm^。monitor湖既ss口WH?SC;»。5{mmonitor沼邮丹昏园薛映以字曰&、ffimonFror^wmT£lwffl»0Hs£J、3»瞟毋monitor园薛济回。fflBACI-#、monFror»^ffl^aDM-#ffl}K、半皿-^瞟期*。亩孙i2i4KlimmonFror*»s回却。m3->£lwssMa®^®asmo2rorss-condHJOn^wm、w当c(飘弃®4f)w®.signan(堕莆血)。condition沼邮»瞟»01021:0「s®idE回。K善沼wmT瞟m^^sm、cvlwffi令P®奋aV®奋管都。VQdw当c(cond己oncond'mr-l-pro'二monFrorffiffiss®#}、*!R^ffiffl}s注^(Pro')ws-M驾短01。VQdwaKcondHJOncond二mwaFrcwlaSHKffi回、ffiK—p®奋恭»算或注影场一。。VQdsanan(conditioncond)=渔@!®4fconds注苗场»醐sffiM、目湖4nffls邱。VQdempty(condHJOncond二职济#®4fcondsffiM^is回一、河Nis回0314aromn'(^^s)*w+}-目湖*->®^sffl}K苛atomic、W®^»»T曰部=4>s。asmicsoVQdsuspend(vo.d二swlaffiMw苛席醐克辨。VQdre<.ve(mr-l-process」d二BM^ffl}idsffiMintwhich_proc(void):返回当前进程的线程数intrandom(intrange):返回0到range-1之间的,包括端点的伪随机数。3.2怎样使用BACIBACIC--编译器源文件的扩展名必须是.cm。在BACI中运行程序的步骤是:•编译-.顷文件以获得PCODE文件(.pco)命令格式:bacc[选项]源文件名选项:-h显示帮助信息-c产生.pob目标文件,以便进行后续的连接操作•使用解释器解释执行PCODE(.pco)文件命令格式:bainterp[选项]PCODE文件名选项:-d调试模式,单步执行,可以设置断点-e在每一进程项旁边显示活动记录(AR)-x每一进程退出时显示AR-t通知进程结束-h显示帮助信息-p执行时显示P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制作拍摄合同范本
- 债务变更合同范本
- 代销汽车合同范本
- 二手车合同范本商家自己写
- 分阶段付款合同范本
- 华帝橱柜合同范本
- 农村建房主体合同范本
- 单位门合同范本
- 医疗美容转让合同范例
- 产品设计开发合同范本
- CJJ2-2008城市桥梁工程施工与质量验收规范
- 病媒生物防治操作规程
- 2024年社会工作者《社会工作实务(中级)》考试真题必考题
- 德育教育研究课题申报书
- (高清版)JTG 3810-2017 公路工程建设项目造价文件管理导则
- 《煤矿重大事故隐患判定标准》试题及答案
- 《ISO31000:2024风险管理指南》指导手册(雷泽佳译2024-04)
- 学前儿童表演游戏的组织与指导(学前儿童游戏课件)
- 建筑用真空陶瓷微珠绝热系统应用技术规程
- (高清版)DZT 0214-2020 矿产地质勘查规范 铜、铅、锌、银、镍、钼
- 《拒绝校园欺凌 防霸凌主题班会》课件
评论
0/150
提交评论