版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《UNIX内核分析》(2)幻灯片本课件PPT仅供大家学习使用学习完请自行删除,谢谢!本课件PPT仅供大家学习使用学习完请自行删除,谢谢!《UNIX内核分析》(2)幻灯片本课件PPT仅供大1前序UNIX系统1969年诞生,以其特有的简洁性和开放性获得赞同与青睐,已经被移植到数十种硬件平台上。
UNIX是通用的,交互式的分时系统。UNIX系统已远远超出一个OS软件所起的作用,它在方方面面潜移默化地影响着人们对软件的设计和开发,其蕴含的设计思想至今仍然是十分值得借鉴的。前序UNIX系统1969年诞生,以其特有的简2UNIX系统特点已有技术的精选、提炼和开展,简洁实用,短小精悍,功能强大具有分层、可装卸的文件卷系统任何一个程序可不加改变地在前台/后台异步运行将文件、目录和设备均统一看作文件提供I/O缓冲技术提供功能完备、使用灵活的命令语言丰富的核外系统程序采用高级语言编写,可移植性好UNIX系统特点已有技术的精选、提炼和开展,简洁实用,短小精3UNIX系统构造Hardware进程控制子系统进程通信调度存储管理文件子系统高速缓存字符设备块设备设备驱动程序系统调用接口硬件控制库函数用户程序核心级用户级UNIX系统构造Hardware进程控制子系统进程通信调4UNIX核心源程序构造以UNIXV6为例,其内核源程序约一万行,按编译方式大致分3类44个文件:.c文件:28个文件,190个可单独编译的子程序.h文件:全局变量,14个文件.s文件:汇编程序文件,约1000条,2个文件33个子程序UNIX核心源程序构造以UNIXV6为例,其内核源5进程描述
——程序状态字和通用存放器PDP-11程序状态字组成1514131211109876543210当前态以前态优先级/8级TNZVC进程分Kernel/User2种运行状态,区别进程处于不同地址空间:核心态/用户态空间可否执行特权指令使用不同的栈顶指针寄存器r6进程描述
——程序状态字和通用存放器PDP-11程序状6进程描述
——程序状态字和通用存放器通用存放器PDP-11/40有9个通用存放器,长度16位,编号r0-r7r0-r1:I/O参数传递r2-r4:存放过程执行时的局部变量r5:环境指针r6:堆栈指针,kernel/user态各1个r7:PC进程描述
——程序状态字和通用存放器通用存放器7进程描述
——进程与映像(Process&Image)进程是映像的执行映像是计算机的执行环境,一个映像包括存储映像通用存放器的值翻开文件的状态当前目录其他信息进程描述
——进程与映像(Process&Imag8进程描述
——进程的存储影响进程映像中最为关键的局部是存储映像。存储映像由5局部组成:进程控制块PCB共享正文段数据段共享内存段工作区进程描述
——进程的存储影响进程映像中最为关键的局部是9进程控制块PCBUnix为了节省PCB所占主存,PCB分为2局部常驻内存局部:Proc构造。包含进程调度必须的信息;非常驻内存局部:User构造。包含进程运行时才要用到的更多其他信息,它随用户程序和数据局部换进/换出主存。User区的字段只能由正在运行的进程存取。即只有占用CPU的进程才能访问属于当前进程的私有User区。整个系统有一个进程表,称为Proc数组。Unix系统最多有50个进程;每个进程有专用的User区,但核心根据进程页表,通过地址映射机构,可访问当前进程的User区。(好似系统中仅有一个User区)进程控制块PCBUnix为了节省PCB所占主存,PCB分为210共享正文段是指可由多个进程共享的区域,包括纯代码形式的程序参数一个进程的正文段也可以不存在共享正文段是指可由多个进程共享的区域,包括11数据段指进程执行时用到的数据,包括外部变量静态局部变量常数如果进程执行的程序为非共享的,也可以构成数据段的一局部,可被用户态进程读、写、执行数据段指进程执行时用到的数据,包括12工作区进程的用户栈和核心栈分别为进程用户态和核心态下运行的工作区用于函数调用时的常数传递,现场保存,返回地址保存,局部变量存储等工作区进程的用户栈和核心栈分别为进程用户态和核心态下运行的工13进程映像在存储器中的分布PDP-11/40最多配置248K内存,进程映像分为常驻/非常驻内存局部常驻局部:Proc,共享正文段的控制信息块非常驻局部:数据段,共享正文段,工作区。Unix将除了共享正文段以外的其他局部作为一个整体处理,(构造见下页)无论在主存还是在盘交换区,该局部占用连续存储区作为整体入/出主存Unix设置text数组(共40个元素)管理所有可共享正文段,表目内容主要有:共享正文段外存地址,段长度,共享该段的进程数等进程映像在存储器中的分布PDP-11/40最多配置248K内14非常驻局部的分布构造ppda区只有核心态进程可以访问User结构系统栈区↓用户程序/数据段用户栈区↓底部/02891024顶部进程数据区/ppdaPerProcessDataArea非常驻局部的分布构造ppda区只有核心态进程可以访问User15进程的数据构造
——进程的根本控制块/Proc构造Structproc(主要局部){intp-pid;/*唯一标识一个进程的整数:0~215-1intp-ppid;/*父进程标识数charp-uid;/*用户标识符UID,由高级用户分配charp-stat;/*进程当前状态charp-flag;/*表示进程映像是否在主存/盘交换区charp-pri;/*-100~+127。值越小,优先权越高charp-time;/*调度驻留时间:进程映像最近一次入/出主存后的时间charp-cpu/*CPU使用情况charp-nice;/*偏置值:计算进程优先权时使用,可由用户设置charp-sig;/*进程接收的信号类型数:0~19,0~13系统定义intp-addr;/*ppda区的起址(单位是字符块数):内存64B/块,外存512B/块intp-size;/*除共享正文段外,可交换映像长度intp-wchan;/*睡眠原因:原因消失,那么唤醒intp-textp;/*指向text构造的指针}proc[Nproc];/*Nproc是系统可容纳的最大进程数/50进程的数据构造
——进程的根本控制块/Proc构造S16进程的数据构造
——进程的扩大控制块/User构造(1)每个进程User构造的虚拟起始地址都是u=14000。操作系统通过编译、链接给u变量赋值,其地址空间对应核心空间第7页,其物理地址可以映射到主存中各进程的user构造。User构造含有当进程换出内存候不需要访问的所有数据进程的数据构造
——进程的扩大控制块/User构造(17进程的数据构造
——进程的扩大控制块/User构造(2)Structuser(主要局部){intu-rsav[2];/*调度进程的正常保存区:r5,r6intu-qsav[2];/*中止系统调用的越级返回保存区intu-ssav[2];/*fork时恢复子进程运行的保存区charu-segflg;/*I/O标志,0/1/2分别为:用户数据/系统/用户指令空间charu-error;/*出错返回码charu-uid;/*有效用户标识号charu-gid;/*有效用户组标识号charu-ruid/*实际用户标识号charu-rgid;/*实际用户组标识号intu-procp;/*指向本进程的proc构造指针char*u-base;/*I/O基址,文件传输中表示主存地址,R/W-目标/信息源指针char*u-count;/*I/O字节数char*u-offset[2];/*文件传输中表示文件内相对位移量(字节)char*u-cdir;/*当前目录项i节点指针charu-dbuf[DIRSIZE];/*保存当前用到的文件路径名char*u-dirp;/*当前目录文件名指针进程的数据构造
——进程的扩大控制块/User构造(18进程的数据构造
——进程的扩大控制块/User构造(3)Struct{intu-ino/*i结点号/*该构造保存一个文件目录项charu-name[DIRSIZE];/*该文件路径名分量}u-dent;int*u-pdir;/*父目录项i结点指针charu-uisa[16];/*存放本进程用户空间地址存放器内容charu-uisd[16];/*存放本进程用户空间说明存放器内容charu-ofile[NOFILE];/*用户翻开文件表,共15个表目charu-arg[5];/*用户传入的自变量charu-tsize/*本进程正文段块数charu-dsize;/*本进程数据段块数intu-ssize;/*本进程堆栈段块数charu-signal[NSIG];/*软中断处理程序入口表,20个表目charu-utime;/*进程用户态下运行时间charu-stime;/*进程核心态下运行时间charu-cutime;/*已中止子进程用户态下运行时间总和charu-cstime;/*已中止子进程核心态下运行时间总和charu-intflag;/*系统调用是否执行完成标志}u;进程的数据构造
——进程的扩大控制块/User构造(19进程的数据构造
——共享正文段/text构造Structtext{intx-daddr;/*共享正文段在盘交换区的起始地址intx-caddr;/*共享正文段在内存中的起始块号(*64=起始地址)intx-size;/*共享正文段长度charx-count/*共享该正文段的进程数charx-ccount;/*共享该正文段,且映像在内存的进程数int*x-iptr;/*指向正文段所在文件的inode指针}text[NTEXT];一般NTEXT=40如果有某正文段的共享进程映像在内存中,那么该共享正文段一定在内存中进程的数据构造
——共享正文段/text构造Stru20进程映像的根本构造图p-addrp-sizep-textpx-daddrx-caddrx-iptr
共享正文段user核心栈数据段用户栈ppdau-dsizeu-ssizeProc[]text[]file[]inode[]盘交换区P-sizex-sizeProc[n]text[m]进程映像的根本构造图p-addrx-daddruser21进程的状态进程在其生命周期的不同时刻有不同状态;同一时刻不同进程有不同状态Unix系统中,进城的完整状态有9种。(转换图见下一页)①创立状态②内存就绪③就绪且换出:新创立/原就绪进程,因内存紧张而换出④核心态执行⑤用户态执行⑥内存中睡眠:执行I/O操作进程,等待⑦睡眠且换出:内存紧张时,睡眠进程首先被换出⑧被剥夺状态:进程被调度程序剥夺了处理机后的状态⑨僵死状态:类似于中止状态进程的状态进程在其生命周期的不同时刻有不同状态;同一时刻不同22进程状态转换图被剥夺485926371内存外存盘交换区内存足内存不足调度exit中断/返回中断返回返回用户态睡眠/唤醒睡眠fork调度调度唤醒被剥夺态进程状态转换图被剥夺485926371内存外存内存足内存不足23进程状态转换说明进程执行系统调用、I/O终端、时钟中断后,进入核心态运行。2种不同状态运行的主要差异:进程访问的内存空间的对象受到限制。核心态运行时,不允许被剥夺;而用户态运行可以被剥夺(核心态运行完成,欲返回用户态时可被剥夺);核心态运行时,可被高优先级核心态进程中断。就绪与被剥夺(preempted)状态是等效的,他们在同一队列等待再次调度处于运行状态的进程包括:正在处理机上执行和就绪队列进程进程状态转换说明进程执行系统调用、I/O终端、时钟中断后,进24进程上下文进程上下文由三局部组成:用户级上下文:正文,数据,堆栈,共享内存段存放器上下文:PC,PS,SP,r0,…系统级上下文:Proc[],User,核心栈上下文切换时,要保证内部数据的完整性和一致性。所以切换有严格的条件:当进程是自己进入睡眠时系统调用/中断完成返回用户态而被剥夺以exit退出时Q:进程从用户态到核心态切换时,是否为上下文切换?进程上下文进程上下文由三局部组成:25进程管理
——Unix进程的各种调度状态(1)UnixV6中进程的调度状态有6种,由p-stat描述。1SSLEEP:高优先权睡眠状态2SWAIT:低优先权睡眠状态3SRUN:运行/可运行状态4SIDL:创立子进程的中间状态5SZOMB:进程终止时的中间状态6SSTOP:暂停/正被跟踪状态进程管理
——Unix进程的各种调度状态(1)Unix26进程管理
——Unix进程的各种调度状态(2)进程标志p-flag定义为:#defineSLOAD01映像在内存#defineSSYS02系统进程,应常驻内存#defineSLOCK04进程不能换出#defineSSWAP010进程正被对换#defineSTRC020进程正被跟踪#defineSTWED040另一跟踪标志进程管理
——Unix进程的各种调度状态(2)进程标志27进程管理
——运行状态(运行/就绪)当前运行进程,特点:P-stat为SRUNP-flag包含SLOAD标志KISA6,KISD6指向该进程ppda区可以在核心/用户态运行,所处存储区位置不同就绪进程,特点:P-stat为SRUNP-flag可能包含SLOAD标志,也可能不包含ppda区不是核心态第6页运行-就绪通过系统进程swtch完成,所以转换首先一定是处于核心态进程管理
——运行状态(运行/就绪)当前运行进程,特点28进程管理——睡眠状态等待时间发生而停顿运行的一种状态,特点:P-stat为SSLEEP或SWAIT,不参与竞争处理机P-flag可能包含SLOAD标志,也可能不包含KISA6,KISD6不反映进程图像在内存的位置睡眠原因:进程间同步与互斥引起使用互斥资源无法满足同步等待I/O完毕同步等待出现处理对象,如0#进程/sched暂时没有处理对象进程间的其他同步操作,sleep(),wait()..临界区互斥进程管理——睡眠状态等待时间发生而停顿运行的一种状态,特点:29进程管理
——上下优先权睡眠状态核心态下执行sleep进入睡眠状态P-pri由系统按照睡眠原因设置,-100-+127SSLEEP:P-pri<0,高优先权睡眠0#进程:-100请求资源:-50等快速设备I/O:-50SWAIT:P-pri>0,低优先权睡眠父子进程同步:40等低速设备I/O:10-20唤醒:wakeup程序完成,唤醒后P-pri<100。有时还要由sched完成内存/盘交换区的交换进程管理
——上下优先权睡眠状态核心态下执行slee30进程调度算法
——动态优先权法Unix采用动态优先权法,采用的策略有:核心态运行时,除非自动放弃,不重新调度,保证高速;进程睡眠唤醒后,较其他就绪进程有高的优先权。因为该类进程将继续执行OS程序;进程睡眠唤醒后,按照等待事件的紧迫程度,赋予不同优先权。即同一程序不同段有不同优先权;高级用户进程较一般用户进程有较高的优先级;使用处理机程度低、交互作用平凡的进程赋予较高优先权,以获得比较合理的响应时间。进程调度算法
——动态优先权法Unix采用动态优先权31进程调度算法
——进程优先数计算方法(1)优先数确定的两种方法设置方式:用于高/低优先权睡眠进程计算方式:包括计算方法和计算时机进程正在/即将转入用户态运行时,用计算方式确定其优先权对于一般用户进程来说,用计算方式获得的优先数大于设置获得的优先数进程调度算法
——进程优先数计算方法(1)优先数确定32进程调度算法
——进程优先数计算方法(2)算式:p-pri=min{127,(p-cpu/16+PUSER+p-nice)}说明:P-pri:字符型变量,-128~+127,最低-100PUSER:固定偏置值。设置目的是:为了使被唤醒的睡眠进程应具有的优先数相衔接。被唤醒进程优先数:-100~100V6:PUSER=100;S5:PUSER=60进程调度算法
——进程优先数计算方法(2)算式:33进程调度算法
——进程优先数计算程序Setpri(up)/*up是proc构造指针{register*pp,p;pp=up;p=(pp→p-cpu&0377)/16;/*p-cpu最大值为255p=+PUSER+pp→p-nice;if(p>127)p=127;if(p>curpri)runrun++;/*curpri:现行运行进程被调度占用处理机时的优先数/*runrun:进程调度标志,为0表示不要求进展切换调度pp→p-pri=p;}进程调度算法
——进程优先数计算程序Setpri(u34进程调度算法——关于p-niceP-nice反映进程具有的相对优先程度一般用户可设置范围:0~20;高级用户:-128~20通过系统调用nice(priority)完成设置,代码:{registern;n=u.uar0[R0];/*u.uar0[R0]保存系统调用参数if(n>20)n=20;if(n<0&&!suser())n=0;/*!suser()判断是否为高级用户u.u-proc→p-nice=n;}进程调度算法——关于p-niceP-nice反映进程具有的35进程调度算法——关于p-cpuP-cpu反映进程使用cpu程度每个时钟周期+1
rt=tu/tl=tu/(tu+tnu)其中:rt:进程使用cpu的时间比
tu:进程生成后使用cpu时间的累计值
tl:进程生成后所经时间
tnu:进程生成候不占用cpu的时间累计值进程调度算法——关于p-cpuP-cpu反映进程使用cpu程36进程调度算法
——计算进程优先数的3个时机时钟中断处理程序中,每隔一秒,对所有优先数大于PUSER的进程复算优先数;陷入处理完毕前,重新计算本进程优先数;现进程执行时钟中断处理程序时,如果中断前为用户态,每隔一秒,重新计算本进程优先数。进程调度算法
——计算进程优先数的3个时机时钟中断处37进程调度算法
——进程切换调度的2个时机(1)当前运行进程不再具备运行条件,自动放弃CPU进程完毕进程等待子进程进入暂停状态,等待父进程处理执行进程申请扩大主存,无法满足,入盘交换区执行进程要求调入某一共享正文段,那么先将该进程图像调出,等到适当时机按以下顺序调入:共享正文段,ppda,数据段,用户栈段进程调度算法
——进程切换调度的2个时机(1)当前运38进程调度算法
——进程切换调度的2个时机(2)系统中存在较当前执行进程更适宜占用CPU的进程,于是系统在中断/陷入处理末尾强迫当前运行进程放弃CPU强迫调度标志是runrun,它的设置时机为:睡眠进程被唤醒,或被暂停运行进程变为运行状态时,发现其优先权高于现运行进程Setpri程序中,发现计算所的进程优先数高于当前运行进程被调度运行时的优先数/curpri。以下2种情况现运行进程计算所的优先数大于原先值:进程由核心态变为用户态用户态下运行进程已占用了一段处理机时间,使p-cpu增大进程调度算法
——进程切换调度的2个时机(2)系统中39进程调度算法
——进程切换调度程序swtchSwtch任务:选择进程占用CPU,保存/恢复现场Swtch执行可能涉及三个处于核心态的进程原运行进程,即调用swtch的进程,保存现场,恢复0#系统调度进程0#:从内存就绪队列选一个进程占用CPU新选中运行进程:1)设置UISA,UISD存放器组2)从核心栈中恢复PC,返回原核心态进程调度算法
——进程切换调度程序swtchSwtc40进程的睡眠和唤醒进程间实施互斥、同步机制时,需要进入睡眠状态睡眠原因消失,进程被唤醒进程的睡眠和唤醒进程间实施互斥、同步机制时,需要进入睡眠状态41进程睡眠sleep()Sleep(chan,pri)可使进程进入高/低优先权睡眠Chan:睡眠原因Pri:睡眠后预置的优先数,>0低优先权主要工作:设置欲睡眠进程的p-whan/原因,p-stat,p-pri,并调用swtch进展调度rp→p-wchan=chan;rp→p-stat=SSLEEP/SWAIT;rp→p-pri=pri设置过程执行语句为临界区,执行前处理既优先级提高为6级(防止中断)进程睡眠sleep()Sleep(chan,pri)可使进程42进程睡眠sleep()说明假设进程欲进入低优先权睡眠,首先应检测是否收到不可忽略的信号p-flag。如果收到,先转去执行信号处理程序;系统设置runrun标志,说明是否有在盘交换区的进程准备就绪而因内存缺乏无法进入。假设runrun已经设置,那么将低优先级睡眠进程入盘交换区,并调用sched.进程睡眠sleep()说明43睡眠唤醒wakeup()wakeup(chan)唤醒因chan原因睡眠的进程,并将其状态置为SRUN主要工作:搜索proc[]区,由setrun唤醒所有因chan睡眠的进程:p-wchan=0;p-stat=SRUN说明:系统设置runout标志,表示盘交换区无进程图像可入内存。假设runout>=1,那么执行sched的0#进程睡眠,否那么唤醒。睡眠唤醒wakeup()wakeup(chan)唤醒因cha44进程图像在内存/盘交换区间传递图像传递由0#进程调用sched完成图像入内存算法:sched按照盘交换区中就绪进程p-time,从长到短逐个调入内存,直到全部调入,或者无足够内存图像出内存算法:假设调入进程因内存缺乏无法调入时,sched试图从内存调出一进程,然后再次执行调入操作。进程图像在内存/盘交换区间传递图像传递由0#进程调用sche45调出算法考虑因素某些进程不应该被调出:P-flag为SSYS和SLOCK的进程优先调出:p-stat为SWAIT和SSTOP的进程。假设上述优先进程,那么优先考虑:p-stat为SSLEEP或SRUN中在内存驻留时间最长/p-time的进程。同时要求:内存被选中进程p-time>2s盘交换区欲入内存进程p-time>3s否那么,不执行调出操作调出算法考虑因素某些进程不应该被调出:46进程的创立Unix进程创立有2种方式预置方式:系统初启时预置0#,0#进程创立1#进程,1#进程又为每个终端生成一个子进程(p20、p21、…、p2m)创立方式:由newproc/fork创立(除0#进程)进程的树形构造P0P1P20P2iP2mP30P310#图像传送和调度进程1#终端管理进程P2i管理用户登记和执行shell进程的创立Unix进程创立有2种方式P0P1P20P2iP247创立进程的根本任务和方式根本任务:为新进程构造一个图像:proc[],user[],text[],数据段,栈段新进程创立后即成为系统的一个调度单位根本方式:除了与进程状态、标识以及与时间有关的少数控制项外,子进程复制或共享父进程的图像进程创立程序newproc的工作原理见下页创立进程的根本任务和方式根本任务:48newproc的工作原理(1)Newproc()为子进程分配空闲proc结构设置子进程proc结构:P-stat=SRUN;P-flag=SLOAD;P-time=0;P-pid=分配到的标识数;P-ppid=父进程标识数;P-size,p-uid,p-ttyp,p-nice,p-textp从父进程复制将打开共享正文段等访问计数+1将r5,r6存入u-rsav(savu(u.u-rsav))父进程u-procp指向新进程的proc结构按照p-size申请内存(malloc(coremap,n))newproc的工作原理(1)Newproc()为子进程分配49newproc的工作原理(2)成功?将父进程可调出部分图像复制到新分配内存,新子进程p-addr指向该区恢复父进程为现运行进程(u-procp恢复志向父进程proc)返回将父进程p-stat设置为SIDL,防止被调出,并避免被调度子进程p-addr=父进程p-addr将r5,r6存入u-rsav将现运行进程/即新子进程图像的可调出部分入盘交换区,清SLOAD标志子进程p-flag增设SSWAP,父进程恢复为SRUN状态YNnewproc的工作原理(2)成功?将父进程可调出部分图像复50《UNIX内核分析》(2)幻灯片本课件PPT仅供大家学习使用学习完请自行删除,谢谢!本课件PPT仅供大家学习使用学习完请自行删除,谢谢!《UNIX内核分析》(2)幻灯片本课件PPT仅供大51前序UNIX系统1969年诞生,以其特有的简洁性和开放性获得赞同与青睐,已经被移植到数十种硬件平台上。
UNIX是通用的,交互式的分时系统。UNIX系统已远远超出一个OS软件所起的作用,它在方方面面潜移默化地影响着人们对软件的设计和开发,其蕴含的设计思想至今仍然是十分值得借鉴的。前序UNIX系统1969年诞生,以其特有的简52UNIX系统特点已有技术的精选、提炼和开展,简洁实用,短小精悍,功能强大具有分层、可装卸的文件卷系统任何一个程序可不加改变地在前台/后台异步运行将文件、目录和设备均统一看作文件提供I/O缓冲技术提供功能完备、使用灵活的命令语言丰富的核外系统程序采用高级语言编写,可移植性好UNIX系统特点已有技术的精选、提炼和开展,简洁实用,短小精53UNIX系统构造Hardware进程控制子系统进程通信调度存储管理文件子系统高速缓存字符设备块设备设备驱动程序系统调用接口硬件控制库函数用户程序核心级用户级UNIX系统构造Hardware进程控制子系统进程通信调54UNIX核心源程序构造以UNIXV6为例,其内核源程序约一万行,按编译方式大致分3类44个文件:.c文件:28个文件,190个可单独编译的子程序.h文件:全局变量,14个文件.s文件:汇编程序文件,约1000条,2个文件33个子程序UNIX核心源程序构造以UNIXV6为例,其内核源55进程描述
——程序状态字和通用存放器PDP-11程序状态字组成1514131211109876543210当前态以前态优先级/8级TNZVC进程分Kernel/User2种运行状态,区别进程处于不同地址空间:核心态/用户态空间可否执行特权指令使用不同的栈顶指针寄存器r6进程描述
——程序状态字和通用存放器PDP-11程序状56进程描述
——程序状态字和通用存放器通用存放器PDP-11/40有9个通用存放器,长度16位,编号r0-r7r0-r1:I/O参数传递r2-r4:存放过程执行时的局部变量r5:环境指针r6:堆栈指针,kernel/user态各1个r7:PC进程描述
——程序状态字和通用存放器通用存放器57进程描述
——进程与映像(Process&Image)进程是映像的执行映像是计算机的执行环境,一个映像包括存储映像通用存放器的值翻开文件的状态当前目录其他信息进程描述
——进程与映像(Process&Imag58进程描述
——进程的存储影响进程映像中最为关键的局部是存储映像。存储映像由5局部组成:进程控制块PCB共享正文段数据段共享内存段工作区进程描述
——进程的存储影响进程映像中最为关键的局部是59进程控制块PCBUnix为了节省PCB所占主存,PCB分为2局部常驻内存局部:Proc构造。包含进程调度必须的信息;非常驻内存局部:User构造。包含进程运行时才要用到的更多其他信息,它随用户程序和数据局部换进/换出主存。User区的字段只能由正在运行的进程存取。即只有占用CPU的进程才能访问属于当前进程的私有User区。整个系统有一个进程表,称为Proc数组。Unix系统最多有50个进程;每个进程有专用的User区,但核心根据进程页表,通过地址映射机构,可访问当前进程的User区。(好似系统中仅有一个User区)进程控制块PCBUnix为了节省PCB所占主存,PCB分为260共享正文段是指可由多个进程共享的区域,包括纯代码形式的程序参数一个进程的正文段也可以不存在共享正文段是指可由多个进程共享的区域,包括61数据段指进程执行时用到的数据,包括外部变量静态局部变量常数如果进程执行的程序为非共享的,也可以构成数据段的一局部,可被用户态进程读、写、执行数据段指进程执行时用到的数据,包括62工作区进程的用户栈和核心栈分别为进程用户态和核心态下运行的工作区用于函数调用时的常数传递,现场保存,返回地址保存,局部变量存储等工作区进程的用户栈和核心栈分别为进程用户态和核心态下运行的工63进程映像在存储器中的分布PDP-11/40最多配置248K内存,进程映像分为常驻/非常驻内存局部常驻局部:Proc,共享正文段的控制信息块非常驻局部:数据段,共享正文段,工作区。Unix将除了共享正文段以外的其他局部作为一个整体处理,(构造见下页)无论在主存还是在盘交换区,该局部占用连续存储区作为整体入/出主存Unix设置text数组(共40个元素)管理所有可共享正文段,表目内容主要有:共享正文段外存地址,段长度,共享该段的进程数等进程映像在存储器中的分布PDP-11/40最多配置248K内64非常驻局部的分布构造ppda区只有核心态进程可以访问User结构系统栈区↓用户程序/数据段用户栈区↓底部/02891024顶部进程数据区/ppdaPerProcessDataArea非常驻局部的分布构造ppda区只有核心态进程可以访问User65进程的数据构造
——进程的根本控制块/Proc构造Structproc(主要局部){intp-pid;/*唯一标识一个进程的整数:0~215-1intp-ppid;/*父进程标识数charp-uid;/*用户标识符UID,由高级用户分配charp-stat;/*进程当前状态charp-flag;/*表示进程映像是否在主存/盘交换区charp-pri;/*-100~+127。值越小,优先权越高charp-time;/*调度驻留时间:进程映像最近一次入/出主存后的时间charp-cpu/*CPU使用情况charp-nice;/*偏置值:计算进程优先权时使用,可由用户设置charp-sig;/*进程接收的信号类型数:0~19,0~13系统定义intp-addr;/*ppda区的起址(单位是字符块数):内存64B/块,外存512B/块intp-size;/*除共享正文段外,可交换映像长度intp-wchan;/*睡眠原因:原因消失,那么唤醒intp-textp;/*指向text构造的指针}proc[Nproc];/*Nproc是系统可容纳的最大进程数/50进程的数据构造
——进程的根本控制块/Proc构造S66进程的数据构造
——进程的扩大控制块/User构造(1)每个进程User构造的虚拟起始地址都是u=14000。操作系统通过编译、链接给u变量赋值,其地址空间对应核心空间第7页,其物理地址可以映射到主存中各进程的user构造。User构造含有当进程换出内存候不需要访问的所有数据进程的数据构造
——进程的扩大控制块/User构造(67进程的数据构造
——进程的扩大控制块/User构造(2)Structuser(主要局部){intu-rsav[2];/*调度进程的正常保存区:r5,r6intu-qsav[2];/*中止系统调用的越级返回保存区intu-ssav[2];/*fork时恢复子进程运行的保存区charu-segflg;/*I/O标志,0/1/2分别为:用户数据/系统/用户指令空间charu-error;/*出错返回码charu-uid;/*有效用户标识号charu-gid;/*有效用户组标识号charu-ruid/*实际用户标识号charu-rgid;/*实际用户组标识号intu-procp;/*指向本进程的proc构造指针char*u-base;/*I/O基址,文件传输中表示主存地址,R/W-目标/信息源指针char*u-count;/*I/O字节数char*u-offset[2];/*文件传输中表示文件内相对位移量(字节)char*u-cdir;/*当前目录项i节点指针charu-dbuf[DIRSIZE];/*保存当前用到的文件路径名char*u-dirp;/*当前目录文件名指针进程的数据构造
——进程的扩大控制块/User构造(68进程的数据构造
——进程的扩大控制块/User构造(3)Struct{intu-ino/*i结点号/*该构造保存一个文件目录项charu-name[DIRSIZE];/*该文件路径名分量}u-dent;int*u-pdir;/*父目录项i结点指针charu-uisa[16];/*存放本进程用户空间地址存放器内容charu-uisd[16];/*存放本进程用户空间说明存放器内容charu-ofile[NOFILE];/*用户翻开文件表,共15个表目charu-arg[5];/*用户传入的自变量charu-tsize/*本进程正文段块数charu-dsize;/*本进程数据段块数intu-ssize;/*本进程堆栈段块数charu-signal[NSIG];/*软中断处理程序入口表,20个表目charu-utime;/*进程用户态下运行时间charu-stime;/*进程核心态下运行时间charu-cutime;/*已中止子进程用户态下运行时间总和charu-cstime;/*已中止子进程核心态下运行时间总和charu-intflag;/*系统调用是否执行完成标志}u;进程的数据构造
——进程的扩大控制块/User构造(69进程的数据构造
——共享正文段/text构造Structtext{intx-daddr;/*共享正文段在盘交换区的起始地址intx-caddr;/*共享正文段在内存中的起始块号(*64=起始地址)intx-size;/*共享正文段长度charx-count/*共享该正文段的进程数charx-ccount;/*共享该正文段,且映像在内存的进程数int*x-iptr;/*指向正文段所在文件的inode指针}text[NTEXT];一般NTEXT=40如果有某正文段的共享进程映像在内存中,那么该共享正文段一定在内存中进程的数据构造
——共享正文段/text构造Stru70进程映像的根本构造图p-addrp-sizep-textpx-daddrx-caddrx-iptr
共享正文段user核心栈数据段用户栈ppdau-dsizeu-ssizeProc[]text[]file[]inode[]盘交换区P-sizex-sizeProc[n]text[m]进程映像的根本构造图p-addrx-daddruser71进程的状态进程在其生命周期的不同时刻有不同状态;同一时刻不同进程有不同状态Unix系统中,进城的完整状态有9种。(转换图见下一页)①创立状态②内存就绪③就绪且换出:新创立/原就绪进程,因内存紧张而换出④核心态执行⑤用户态执行⑥内存中睡眠:执行I/O操作进程,等待⑦睡眠且换出:内存紧张时,睡眠进程首先被换出⑧被剥夺状态:进程被调度程序剥夺了处理机后的状态⑨僵死状态:类似于中止状态进程的状态进程在其生命周期的不同时刻有不同状态;同一时刻不同72进程状态转换图被剥夺485926371内存外存盘交换区内存足内存不足调度exit中断/返回中断返回返回用户态睡眠/唤醒睡眠fork调度调度唤醒被剥夺态进程状态转换图被剥夺485926371内存外存内存足内存不足73进程状态转换说明进程执行系统调用、I/O终端、时钟中断后,进入核心态运行。2种不同状态运行的主要差异:进程访问的内存空间的对象受到限制。核心态运行时,不允许被剥夺;而用户态运行可以被剥夺(核心态运行完成,欲返回用户态时可被剥夺);核心态运行时,可被高优先级核心态进程中断。就绪与被剥夺(preempted)状态是等效的,他们在同一队列等待再次调度处于运行状态的进程包括:正在处理机上执行和就绪队列进程进程状态转换说明进程执行系统调用、I/O终端、时钟中断后,进74进程上下文进程上下文由三局部组成:用户级上下文:正文,数据,堆栈,共享内存段存放器上下文:PC,PS,SP,r0,…系统级上下文:Proc[],User,核心栈上下文切换时,要保证内部数据的完整性和一致性。所以切换有严格的条件:当进程是自己进入睡眠时系统调用/中断完成返回用户态而被剥夺以exit退出时Q:进程从用户态到核心态切换时,是否为上下文切换?进程上下文进程上下文由三局部组成:75进程管理
——Unix进程的各种调度状态(1)UnixV6中进程的调度状态有6种,由p-stat描述。1SSLEEP:高优先权睡眠状态2SWAIT:低优先权睡眠状态3SRUN:运行/可运行状态4SIDL:创立子进程的中间状态5SZOMB:进程终止时的中间状态6SSTOP:暂停/正被跟踪状态进程管理
——Unix进程的各种调度状态(1)Unix76进程管理
——Unix进程的各种调度状态(2)进程标志p-flag定义为:#defineSLOAD01映像在内存#defineSSYS02系统进程,应常驻内存#defineSLOCK04进程不能换出#defineSSWAP010进程正被对换#defineSTRC020进程正被跟踪#defineSTWED040另一跟踪标志进程管理
——Unix进程的各种调度状态(2)进程标志77进程管理
——运行状态(运行/就绪)当前运行进程,特点:P-stat为SRUNP-flag包含SLOAD标志KISA6,KISD6指向该进程ppda区可以在核心/用户态运行,所处存储区位置不同就绪进程,特点:P-stat为SRUNP-flag可能包含SLOAD标志,也可能不包含ppda区不是核心态第6页运行-就绪通过系统进程swtch完成,所以转换首先一定是处于核心态进程管理
——运行状态(运行/就绪)当前运行进程,特点78进程管理——睡眠状态等待时间发生而停顿运行的一种状态,特点:P-stat为SSLEEP或SWAIT,不参与竞争处理机P-flag可能包含SLOAD标志,也可能不包含KISA6,KISD6不反映进程图像在内存的位置睡眠原因:进程间同步与互斥引起使用互斥资源无法满足同步等待I/O完毕同步等待出现处理对象,如0#进程/sched暂时没有处理对象进程间的其他同步操作,sleep(),wait()..临界区互斥进程管理——睡眠状态等待时间发生而停顿运行的一种状态,特点:79进程管理
——上下优先权睡眠状态核心态下执行sleep进入睡眠状态P-pri由系统按照睡眠原因设置,-100-+127SSLEEP:P-pri<0,高优先权睡眠0#进程:-100请求资源:-50等快速设备I/O:-50SWAIT:P-pri>0,低优先权睡眠父子进程同步:40等低速设备I/O:10-20唤醒:wakeup程序完成,唤醒后P-pri<100。有时还要由sched完成内存/盘交换区的交换进程管理
——上下优先权睡眠状态核心态下执行slee80进程调度算法
——动态优先权法Unix采用动态优先权法,采用的策略有:核心态运行时,除非自动放弃,不重新调度,保证高速;进程睡眠唤醒后,较其他就绪进程有高的优先权。因为该类进程将继续执行OS程序;进程睡眠唤醒后,按照等待事件的紧迫程度,赋予不同优先权。即同一程序不同段有不同优先权;高级用户进程较一般用户进程有较高的优先级;使用处理机程度低、交互作用平凡的进程赋予较高优先权,以获得比较合理的响应时间。进程调度算法
——动态优先权法Unix采用动态优先权81进程调度算法
——进程优先数计算方法(1)优先数确定的两种方法设置方式:用于高/低优先权睡眠进程计算方式:包括计算方法和计算时机进程正在/即将转入用户态运行时,用计算方式确定其优先权对于一般用户进程来说,用计算方式获得的优先数大于设置获得的优先数进程调度算法
——进程优先数计算方法(1)优先数确定82进程调度算法
——进程优先数计算方法(2)算式:p-pri=min{127,(p-cpu/16+PUSER+p-nice)}说明:P-pri:字符型变量,-128~+127,最低-100PUSER:固定偏置值。设置目的是:为了使被唤醒的睡眠进程应具有的优先数相衔接。被唤醒进程优先数:-100~100V6:PUSER=100;S5:PUSER=60进程调度算法
——进程优先数计算方法(2)算式:83进程调度算法
——进程优先数计算程序Setpri(up)/*up是proc构造指针{register*pp,p;pp=up;p=(pp→p-cpu&0377)/16;/*p-cpu最大值为255p=+PUSER+pp→p-nice;if(p>127)p=127;if(p>curpri)runrun++;/*curpri:现行运行进程被调度占用处理机时的优先数/*runrun:进程调度标志,为0表示不要求进展切换调度pp→p-pri=p;}进程调度算法
——进程优先数计算程序Setpri(u84进程调度算法——关于p-niceP-nice反映进程具有的相对优先程度一般用户可设置范围:0~20;高级用户:-128~20通过系统调用nice(priority)完成设置,代码:{registern;n=u.uar0[R0];/*u.uar0[R0]保存系统调用参数if(n>20)n=20;if(n<0&&!suser())n=0;/*!suser()判断是否为高级用户u.u-proc→p-nice=n;}进程调度算法——关于p-niceP-nice反映进程具有的85进程调度算法——关于p-cpuP-cpu反映进程使用cpu程度每个时钟周期+1
rt=tu/tl=tu/(tu+tnu)其中:rt:进程使用cpu的时间比
tu:进程生成后使用cpu时间的累计值
tl:进程生成后所经时间
tnu:进程生成候不占用cpu的时间累计值进程调度算法——关于p-cpuP-cpu反映进程使用cpu程86进程调度算法
——计算进程优先数的3个时机时钟中断处理程序中,每隔一秒,对所有优先数大于PUSER的进程复算优先数;陷入处理完毕前,重新计算本进程优先数;现进程执行时钟中断处理程序时,如果中断前为用户态,每隔一秒,重新计算本进程优先数。进程调度算法
——计算进程优先数的3个时机时钟中断处87进程调度算法
——进程切换调度的2个时机(1)当前运行进程不再具备运行条件,自动放弃CPU进程完毕进程等待子进程进入暂停状态,等待父进程处理执行进程申请扩大主存,无法满足,入盘交换区执行进程要求调入某一共享正文段,那么先将该进程图像调出,等到适当时机按以下顺序调入:共享正文段,ppda,数据段,用户栈段进程调度算法
——进程切换调度的2个时机(1)当前运88进程调度算法
——进程切换调度的2个时机(2)系统中存在较当前执行进程更适宜占用CPU的进程,于是系统在中断/陷入处理末尾强迫当前运行进程放弃CPU强迫调度标志是runrun,它的设置时机为:睡眠进程被唤醒,或被暂停运行进程变为运行状态时,发现其优先权高于现运行进程Setpri程序中,发现计算所的进程优先数高于当前运行进程被调度运行时的优先数/curpri。以下2种情况现运行进程计算所的优先数大于原先值:进程由核心态变为用户态用户态下运行进程已占用了一段处理机
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度新能源汽车制造与合作合同
- 2024年度公共交通车辆电梯设备采购合同
- 2024年度品牌加盟品牌使用权合同
- 2024年度中秋月饼采购合同格式
- 运货车市场需求与消费特点分析
- 竹笛市场环境与对策分析
- 2024年度环保监测系统建设与维护合同
- 2024年度版权许可合同授权范围界定
- 2024年度某机场航站楼改扩建工程施工合同
- 2024年度智能语音助手定制开发与授权合同
- 计价格[2002]10号工程勘察设计收费管理规定
- CRRT实施期间抗菌药物剂量调整
- 禾本科及莎草科园林植物术语图解
- 附件1:中央电大护理专业本科通科实习出科考核病历
- 作文稿纸模板(打印版)(共5页)
- 高中化学趣味知识竞赛(课堂PPT)
- 超声波清洗机验证
- 卫生部城社区卫生服务中心基本标准
- 2021年考研英语真题(含答案解析).doc
- 销售商品调查明细表
- 工程四新技术应用
评论
0/150
提交评论