




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 实例研究 UNIX进程模型 1进程模型的基本结构和工作过程2进程状态及转换3UNIX的进程控制与管理4进程通信 2 UNIX的进程由三部分组成 proc结构 常驻内存的PCB 数据段 执行时用到的数据 正文段 程序代码 合称进程映像 UNIX中把进程定义为映像的执行 1进程模型的基本结构和工作过程 3 PCB由基本控制块proc结构和扩充控制块user结构组成 proc结构存放一个进程最基本 必需的信息 常驻内存 user结构存放进程运行时才用到的数据和状态信息 当进程暂时不在处理机上运行时 就把它放在磁盘的对换区中 4 系统中维持一张名叫proc的进程表 每个表目为一个proc结构 供一个进程使用 创建进程时 在proc表中找一个空表目 以建立起相应于该进程的proc结构 内存中设置一张text正文段表 每个表目都是一个text结构 记录一个共享正文段的属性 磁盘和主存中的位置 尺寸 共享的进程数等 正文段文件节点指针 进程映像的基本结构 6 1 进程基本控制块结构structproc charp stat 进程状态 charp flag 进程标志 charp pri 进程优先级 charp sig 软中断号 charp uid 用户号 charp time 驻留时间 charp cpu 进程占据CPU的时间量 charp nice 用于计算优先级 7 intp ttyp 控制终端tty结构的地址 intp pid 进程号 intp ppid 父进程号 intp addr 数据段地址 intp size 数据段大小 intp wchan 等待的原因 int p textp 对应正文段的text项地址 proc NPROC 8 p flag的助记符包括 SLOAD01在内存SSYS02进程0 SLOCK03锁住 不能换出内存SSWAP04正在换出STRC05被跟踪 p stat的助记符 UNIX系统 定义了10种进程状态 NULL0proc为空SSLEEP1睡眠SWAIT2等待SRUN3运行或就绪SIDL4创建时的临时状态SZOMB5僵死状态SSTOP6被跟踪SXBRK7因数据段扩展未满足的换出状态SXSTK8因栈段扩展未满足的换出状态SXFRK9创建子进程时内存不够 父进程锁定在内存的状态SXTXT10因正文段扩展未满足的换出状态 10 2 进程扩展控制块结构structuser intu rsav 2 保留现场保护区指针 charu segflg 用户 核心空间标志 charu error 返回出错代码 charu uid 有效用户号 charu gid 有效组号 intu procp proc结构地址 charu base 内存地址 char u count 传送字节数 char u offset 2 文件读写位移 11 int u cdir 当前目录I节点地址 char u dirp I节点当前指针 Struct intu ino charu name DIRSIZ u dent 当前目录项 intu ofile NOFILE 用户打开文件表 intu arg 5 存系统调用的自变量 intu tsize 正文段大小 12 intu dsize 用户资料区大小 intu ssize 用户栈大小 intu utime 用户态执行时间 intu stime 核心态执行时间 intu cutime 子进程用户态执行时间 intu cstime 子进程核心态执行时间 intu ar0 当前中断保护区内r0地址 13 3 正文段结构structtext intx daddr 磁盘地址 intx caddr 内存地址 intx size 内存块数 intx iptr 文件内存I节点地址 charx count 共享进程数 charx ccount 内存副本的共享进程数 text NTEXT UNIX的进程状态及转换图 2进程状态及转换 15 3UNIX的进程控制与管理 1 创建进程UNIX系统中 进程分为两大类 系统进程和用户进程 系统进程执行操作系统程序 提供系统功能 例如资源分配 进程调度 用户进程执行用户程序 提供用户功能 16 0号是swap进程 系统自举时被创建 1号是init进程 由0号进程孵化而创建 其他进程都是1号进程调用fork 创建的子进程 fork系统调用生成一个新进程 新生成的进程称为子进程 生成新进程的进程为父进程 17 18 Fork举例 includemain intpid 0 printf theparentisgoingtofork n pid fork if pid 0 printf Iamthefatherof d pid elseprintf Iamthechild 运行结果 19 fork系统调用的工作流程 20 父进程创建子进程 21 fork 创建子进程 系统执行操作 为子进程分配进程表 为子进程分配进程标识符 复制父进程的进程映像 但不复制共享内存区 增加父进程所打开文件的计数 表示新进程也使用这些文件 把子进程置为 就绪 状态 返回子进程标识符给父进程 把0值返回给子进程 fork 说明 22 父进程还应执行以下操作之一 以完成进程指派 继续待在父进程中 把进程控制切换到父进程的用户模式 在fork 点继续运行 而子进程进入 就绪 状态 把进程控制传递到子进程 子进程在fork 点继续运行 父进程进入 就绪 态 把进程控制传递到其他进程 父进程和子进程进入 就绪 状态 23 fork 说明 1子进程是父进程的复制品 完全一样2父子进程的指令执行点都在fork 语句之后的那个语句3fork 没有参数 但返回值pid不一样 子进程中pid为0 父进程中pid为非0正整数 即子进程的内部标识号 4父子进程可根据不同pid值执行不同程序 完成不同工作 24 父 子1 子2 main if fork 0 子1的代码段 else if fork 0 子2的代码段 else 父代码段 main if fork 0 子1的代码段 if fork 0 子2的代码段 else 子1的代码段 else 父代码段 25 例1 includemain intp x x 2 if p fork 0 printf thisisparent d x elseprintf thisischild d x 26 例2main fork fork fork 写出程序生成的进程树 A 27 例3main intp if p fork 0 fork else fork fork 写出程序生成的进程树 A 28 例4main intpid printf Beforefork n while pid fork 1 if pid printf Itisparentprocess PID d n getpid printf Producechild sPID d n pid elseprintf Itischildprocess PID d n getpid printf Itisparentorchildprocess PID d n getpid 29 2 进程映像的改换更换进程执行代码 更换正文段 数据段调用格式 exec 文件名 参数表 环境变量表 exec系列函数有execl execv execlp execvp等 30 例5 include include includemain intpid printf Nowthisisprocess1 n if pid fork 1 perror forkfailed exit 1 elseif pid 0 printf Thisischildprocess n if execl bin ps ps ef 0 0 printf thisisprocess1 parentprocess n exit 0 31 3 父 子进程的同步1 进程的自我终止当一个进程执行结束后 进程可以调用exit自我终止 终止时它放弃占用的所有资源 处于等待父进程善后处理状态 32 exit的工作流程 33 调用格式 exit status 在用户态的进程程序中 调用exit status 将使进程终止 参数status是终止进程向父进程传递的参数 在父进程中 利用系统调用wait status 获取该参数 34 2 父进程等待子进程终止系统调用wait 对处于等待善后处理状态的子进程进行善后处理 在用户态进程中 父进程调用wait status 等待它的一个子进程终止 它的子进程还没有终止 则它进入阻塞态 35 36 例父 子进程的同步关系 main intproc id while proc id fork 1 if proc id proc id wait printf thechildprocesshasfinished n printf ThechildprocessPID d n proc id else printf Inchildprocess n exit 37 该程序的运行结果 Inchildprocess Thechildprocesshasfinished ThechildprocessPID 177 38 4 进程通信 管道消息队列共享内存 39 1管道 pipe 管道 pipe 是连接读写进程的一个特殊文件 允许进程按先进先出方式传送数据 也能使进程同步执行操作 发送进程以字符流形式把大量数据送入管道 接收进程从管道中接收数据 所以叫管道通信 40 共享文件通信机制 管道的实质是一个共享文件 基本上可借助于文件系统的机制实现 包括 管道 文件的创建 打开 关闭和读写 41 UNIX管道相关系统调用 通过pipe系统调用创建无名管道 得到两个文件描述符 分别用于写和读 intpipe intfildes 2 文件描述符fildes 0 为读端 fildes 1 为写端 intread intfd char buf unsignednbyte 从fd所指示的文件中读出nbyte个字节的数据 送至由指针buf所指示的缓冲区中 intwrite intfd char buf unsignednbyte 把nbyte个字节的数据 从buf所指向的缓冲区写到由fd所指向的文件中 42 进程间双向通信 通常需要两个管道 只适用于父子进程之间或父进程安排的各个子进程之间 使用时先创建管道再创建进程 43 父子进程之间的管道 44 管道使用 父 子进程 子 子进程使用模式 pipe fork write 写进程 read 读进程 注意 pipe fork顺序例建立一个pipe 父进程生成两个子进程 子进程向pipe中写入字符串 父进程从pipe中读出该字符串 例 include include include includemain intfd 2 pid pid2 n charbuffer 256 dat 40 helloworld n pipe fd pid fork if pid 0 lockf fd 1 1 0 sprintf dat child1processissendingmessage1 n write fd 1 dat strlen dat lockf fd 1 0 0 printf child dwrite dbyge s n getpid strlen dat dat else pid2 fork if pid2 0 lockf fd 1 1 0 sprintf dat child2processissendingmessage1 n write fd 1 dat strlen dat lockf fd 1 0 0 printf child dwrite dbyge s n getpid strlen dat dat else wait 0 wait 0 printf parent1 n n read fd 0 buffer 256 printf parent dread dbytes s getpid n buffer 47 2消息队列 message 消息队列头结构 消息队列头表 消息头结构 消息缓冲区池 消息缓冲区 48 消息队列数据结构 49 UNIX消息队列API msgget依据用户给出的整数值key 创建新消息队列或打开现有消息队列 返回一个消息队列ID msgsnd发送消息 msgrcv接收消息 可以指定消息类型 没有消息时 返回 1 msgctl对消息队列进行控制 如删除消息队列 50 UNIX消息队列API 四个函数使用头文件 include include includeintmsgqid msgget key tkey intflag key 用户指定的消息队列的名字flag是用户设置的标志和访问方式 如IPC CREAT 0400该队列是否已被创建 无则创建 是则打开 51 UNIX消息队列API Intmsgsnd intmsgqid structmsgbuf msgp intsize intflag msgqid 返回消息队列的描述符 msgp 指向用户消息缓冲区的一个结构体指针 size 消息的长度 flag规定当消息队列满或超出限制时应执行的动作 进程是等待 还是立即返回 设置IPC NOWAIT立即返回 为0 被阻塞直到消息可以被写入 52 UNIX消息队列API intmsgrcv intmsgqid structmsgbuf msgp intsize inttype intflag type 规定要读的消息类型 1 type 0 接收该队列的第一个消息 并将它返回给调用者 2 type为正整数 接收类型type的第一个消息 3 type为负整数 接收小于等于type绝对值的最低类型的第一个消息 flag 规定倘若该队列无消息 核心应做的操作 设置了IPC NOWAIT标志 则立即返回 为0 进程挂起等待直到有消息 53 UNIX消息队列API intmsgctl intmsgqid intcmd structmsgqid ds buf buf 用户缓冲区地址cmd 规定的命令 命令可分三类 1 IPC STAT 查询有关消息队列情况的命令 如查询队列中的消息数目 队列中的最大字节数 最后一个发送消息的进程标识符 发送时间等 2 IPC SET 按buf指向的结构中的值 设置和改变有关消息队列属性的命令 如改变消息队列的用户标识符 消息队列的许可权等 3 IPC RMID 消除消息队列的标识符 参考程序 include include include include include include defineMSGKEY175structmsgform intmtype charmtext 1000 structmsgformmsg1 intmsgqid1 cleanup msgctl msgqid1 IPC RMID 0 exit 0 voidserver intj for j 0 j 20 j signal j cleanup msgqid1 msgget MSGKEY1 0777 IPC CREAT 创建75 消息队列 do msgrcv msgqid1 voidclient msgqid1 msgget MSGKEY1 0777 IPC CREAT 创建75 消息队列 do printf client inputthemessagethatwillbesend n scanf s msg1 mtext msg1 mtype 1 msgsnd msgqid1 main intpid1 pid2 while pid1 fork 1 if pid1 server system ipcs q while pid2 fork 1 if pid2 client wait 0 wait 0 system ipcs q 58 3共享内存模式 共享内存共享内存是内核为进程创建的一个特殊内存段 它可连接 attach 到自己的地址空间 也可以连接到其它进程的地址空间最快的进程间通信方式不提供任何同步功能 59 共享内存通信原理 60 共享内存系统调用 include include includeintshmget key tkey intsize intflag void shmat intshmid void addr intflag intshmdt void addr intshmctl intshmid intcmd structshmid ds buf 61 intshmget key tkey intsize intflag 创建或打开共享存储区 依据用户给出的整数值key 创建新区或打开现有区 返回一个共享存储区ID keykey t类型的关键值size为欲创建的共享内存段大小 单位为字节 flag标识共享内存段的创建标识 62 void shmat intshmid void shmaddr intflag 连接共享存储区 执行成功 返回共享内存段首地址 参数 shmid为要操作的共享内存标识符 该值一般由shmget函数返回 shmaddr指定共享内存的映射地址 如果该值为非零 则将用此值作为映射共享内存的地址 如果此值为0 则由系统来选择映射的地址 flag用来指定共享内存段的访问权限和映射条件 63 intshmdt void addr 拆除共享存储区与本进程地址空间的连接addr 共享内存首地址 64 intshmctl intshmid intcmd structshmid ds buf 对共享存储区进行控制 如 共享存储区的删除需要显式调用shmctl shmid IPC RMID 0 shmid 共享内存标识符 由shmget函数返回 cmd 要执行的操作 包括IPC RMID IPC SET IPC STAT和IPC INFO 含义同msgctl的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火锅餐饮行业2025年火锅店品牌战略规划与市场拓展研究报告
- 2025年特色小镇康养产业开发项目技术创新与老年旅游市场拓展可行性报告
- 2025市场营销战略合作合同范本
- 镜子真好玩课件
- 潮玩行业IP运营策略报告:2025年市场分析与竞争策略
- 港口物流智能化技术应用现状与未来竞争力评估报告
- 年产生物质成型颗粒4万吨新建项目环评报告表
- 2025年一级体育考试试题及答案
- 港口物流智能化与港口物流物流环保对2025年港口竞争力提升的协同效应报告
- 2025车辆买卖合同范本
- 2025年卫生类事业单位招聘考试护理学专业知识外科护理试卷
- 个人养老金微课课件
- 肿瘤患者心理抑郁护理
- 2025-2030年中国工程承包行业市场深度调研及竞争格局与投资前景研究报告
- 十个严禁考试题目及答案
- 海底捞会员管理制度
- 吉林:用水定额(DB22-T 389-2019)
- 威士忌餐吧策划书3
- 单位党旗党徽管理制度
- 急性胰腺炎诊治指南(2025)解读
- T/CECS 10378-2024建筑用辐射致冷涂料
评论
0/150
提交评论