您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 苏州大学操作系统概念第三章资料
第3章进程3.2内容1.进程概念2.进程调度3.进程操作4.进程间通信1、进程概念3.4进程(Process)操作系统执行各种程序批处理系统-作业(Job)分时系统-用户程序或任务(Task)本书使用的名词作业和进程,基本可互换作业:被组装成一个整体运行的一组计算步骤任务:进程或线程进程-执行中的程序;进程的执行必须以顺序方式进行3.5进程例子:SuseLinux3.6进程例子:WindowsXP3.7内存中的进程进程包括代码(Text)当前活动程序计数器(PC)-指向当前要执行的指令(地址)堆栈(Stack):存放函数参数、临时变量等临时数据数据(Data):全局变量,处理的文件堆(Heap):动态内存分配3.8进程和程序进程是程序的一个实例,是程序的一次执行一个程序可对应1个或多个进程,同样一个进程可对应1个或多个程序程序是进程的代码部分进程是活动实体,程序静止(被动)实体进程在内存,程序在外存3.9进程状态进程执行时,改变状态新建:在创建进程运行:指令在执行等待:进程等待某些事件发生就绪:进程等待分配处理器终止:进程执行完毕3.10进程控制块(PCB)PCB包含同进程有关的信息,包括:进程状态程序计数器CPU寄存器CPU调度信息内存管理信息计账信息I/O状态信息3.11LinuxPCBC结构:task_structpidt_pid;/*processidentifier*/longstate;/*stateoftheprocess*/unsignedinttime_slice/*schedulinginformation*/structtask_struct*parent;/*thisprocess’sparent*/structlist_headchildren;/*thisprocess’schildren*/structfiles_struct*files;/*listofopenfiles*/structmm_struct*mm;/*addressspaceofthisprocess*/3.12WindowsPCB每个Win32进程都由一个执行体进程块(executiveprocessblock)EPROCESS:PID,PCB,AccessToken,BasePriority,句柄表,指向进程环境块PEB指针,默认和处理器集合等Windows的PCB称为内核进程对象KPROCESS:执行体进程对象EPOCESS和KPROCESS位于内核空间进程环境块PEB(ProcessEnvironmentBlock),PEB位于用户空间3.13EPROCESS/KPROCESS3.14EPROCESS/PEB3.15CPU在进程间切换进程的并发执行需要PCB保存和恢复现场2、进程调度3.17调度程序长程调度(或作业调度)-选择可以进入就绪队列的进程短程调度(或CPU调度)-选择可被下一个执行并分配CPU的进程3.18进程调度队列作业队列-在系统中的所有进程的集合就绪队列-在主内存中的,就绪并等待执行的所有进程的集合设备队列-等待某一I/O设备的进程队列在各种队列之间进程的迁移3.19就绪队列和各种I/O设备队列3.20进程调度的队列表示图3.21调度程序长程调度(或作业调度)-选择可以进入就绪队列的进程短程调度(或CPU调度)-选择可被下一个执行并分配CPU的进程3.22调度程序(Cont.)(milliseconds)(切换必须快).短程调度切换频率高(seconds,minutes)(切换可以慢).长程调度不快长程调度控制了多道程序的“道”进程可以用下列方式描述:I/O型进程-花费I/O时间多于计算,许多短CPU处理CPU型进程-花费更多时间于计算,许多长CPU处理3.23调度程序长程调度(或作业调度)-选择可以进入就绪队列的进程短程调度(或CPU调度)-选择可被下一个执行并分配CPU的进程3.24中程调度-交换3.25活动阻塞静止阻塞静止就绪执行活动就绪请求I/O终止创建带有中程调度的进程状态图3.26上下文切换当CPU切换至另一个进程时,系统必须保存旧进程状态并为新进程调入所保留的状态上下文切换的时间开销较重;在切换时,系统没有做有用的工作时间取决于硬件的支持3.27Android多任务源于Linux,真正多任务进程分(foreground)和后台(background)后台进程利用服务执行任务服务会保持运行即使后台进程被暂停服务没有运行界面,需要小内存3.28iOS多任务iOS4.0前不支持多任务没落的Palm“伪”多任务1、保持退出时状态一种看起来像多任务的单任务,当按下Home键时,程序会保持状态。待到下次呼出时便恢复保存时的状态2、有限多任务一些系统允许后退运行的进程,如音乐播放和下载等。按下Home键,程序会保存到内存中3、真正多任务Safari和Mail3、进程操作3.30进程创建父进程创建子进程,如此轮流创建进程下去,构成一棵进程树资源共享父进程子进程共享所有的资源子进程共享父进程资源的子集父进程和子进程无资源共享执行父进程和子进程并发执行父进程等待,直到子进程终止3.31进程创建地址空间子女复制双亲子女有一个程序被调入UNIX例子fork系统调用创建新进程在fork用一个新程序替代了进程的内存空间之后,采用exec系统调用原子操作3.32进程终止进程执行最后一项并退出(exit)从子进程向父进程输出数据(通过wait)操作系统收回进程的资源父进程可中止子进程的执行(abort)子进程超量分配资源赋予子进程的任务不再需要如果父进程结束若父进程终止,一些系统不允许子进程继续存在–所有子进程终止--级联终止父进程可以等子进程结束如调用wait()系统调用3.33Windows进程操作CreateProcess:进程创建新进程可以继承:打开文件的句柄、各种对象(如进程、线程、信号量、管道等)的句柄、环境变量、当前目录、原进程的控制终端、原进程的进程组(用于发送Ctrl+C或Ctrl+Break信号给多个进程)--每个句柄在创建或打开时能指定是否可继承新进程不能继承:优先权类、内存句柄、DLL模块句柄ExitProcess和TerminateProcess:进程退出WaitForSingleObject:等待子进程结束3.34创建子进程API函数CreateProcess函数:BOOLCreateProcess(LPCTSTRlpApplicationName,LPTSTRlpCommandLine,LPSECURITY_ATTRIBUTESlpProcessAttributes,LPSECURITY_ATTRIBUTESlpThreadAttributes,BOOLbInheritHandles,DWORDdwCreationFlags,LPVOIDlpEnvironment,LPCTSTRlpCurrentDirectory,LPSTARTURINFOlpStartupInfo,LPPROCESS_INFORMATIONlpProcessInformation);3.35结束进程如果某个process想自己停止执行,可调用ExitProcess()C程序库中的exit(),exit()在自动执行一些清除垃圾工作后,再调用ExitProcess()VOIDExitProcess(UNTuExitCode)如果processA想要processB停止执行,可在取得processB的handle后,调用TerminateProcess():BOOLTerminateProcess(HANDLEhProcess,UNITuExitCode)3.36例子-子进程ChildProcess:#includestdafx.h#includeconio.hint_tmain(intargc,_TCHAR*argv[]){wprintf(LParamTestOutput:\n);wprintf(LNumberofparameters:%d\n,argc);wprintf(LParameterInfo:\n);for(intc=0;cargc;c++){wprintf(LParam#%d:%s\n,c,argv[c]);}return0;}3.37例子-父进程#includestdafx.h#includewindows.h#includestrsafe.h#includedirect.h#includestring.hint_tmain(intargc,_TCHAR*argv[]){PROCESS_INFORMATIONprocessInformation;STARTUPINFOstartupInfo;memset(&processInformation,0,izeof(processInformation));memset(&startupInfo,0,sizeof(startupInfo));startupInfo.cb=sizeof(startupInfo);BOOLresult;result=::CreateProcess(AppName,CmdLine,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&startupInfo,&processInformation);3.38例子-父进程if(result==0){wprintf(LERROR:CreateProcessfailed!);}else{WaitForSingleObject(processInformation.hProcess,INFINITE);CloseHandle(processInformation.hProcess);CloseHandle(processInformation.hThread);}return0;}3.39fork函数:#includeunistd.hpid_tfork();当一个进程调用fork后会创建一个子进程这个子进程和父进程不同:进程IDLinux进程创建3.40区分父进程和子进程:跟踪fork返回值失败:-1否则–父进程fork返回子进程的ID–fork子进程返回0可根据这个返回值来区分父子进程父进程和子进程3.41exec族调用有着5个函数:#includeunistd.hintexecl(constchar*path,constchar*arg,...);intexeclp(constchar*file,constchar*arg,...);intexecle(constchar*path,constchar*arg,...);intexecv(constchar*path,char*constargv[]);intexecvp(constchar*file,char*constargv[]):执行其它程序3.42父进程阻塞直到子进程完成任务调用wait或者waitpid系统调用#includesys/types.h#includesys/wait.hpid_twait(int*stat_loc);pid_twaitpid(pid_tpid,int*stat_loc,intoptions);等待3.43#includeunistd.h#includesys/types.h#includesys/wait.h#includestdio.h#includeerrno.hintmain(){intrtn;/*子进程的返回数值*/if(fork()==0){/*子进程执行此命令*/execlp(/bin/ls,ls-al
本文标题:苏州大学操作系统概念第三章资料
链接地址:https://www.777doc.com/doc-3979984 .html