已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一实验一 进程管理进程管理 一 一 实验目的 实验目的 1 加深对进程概念的理解 明确进程和程序的区别 2 进一步认识并发执行的实质 3 分析进程争用资源的现象 学习解决进程互斥的方法 4 了解 Linux 系统中进程通信的基本原理 二 二 实验预备内容 实验预备内容 1 阅读 Linux 的 sched h 源码文件 加深对进程管理概念的理解 2 阅读 Linux 的 fork 源码文件 分析进程的创建过程 三 三 实验环境说明 实验环境说明 1 此实验采用的是 Win7 32bit 下虚拟机 VMware workstation 10 0 4 build 2249910 2 ubuntu 版本 3 19 0 3 直接编写 c 文件在终端用命令行执行 4 虚拟机分配 8G 内存中的 1024M 5 虚拟机名称 knLinux 6 ubuntu 用户名 kn 四 四 实验内容 实验内容 1 进程的创建 a 题目要求 编写一段程序 使用系统调用 fork 创建两个子进程 当此程序运行 时 在系统中有一个父进程和两个子进程活动 让每一个进程在屏幕上 显示一个字符 父进程显示字符 a 子进程分别显示字符 b 和 c 试观察记录屏幕上的显示结果 并分析原因 b 程序设计说明 一个父进程 两个子进程 分别输出显示 a b c c 源代码 d 运行结果 e 分析 由输出结果可知 运行结果不唯一 可以是 abc acb bca 等多种情况 因为在程序中 并没有三个进程之间的同步措施 所以父进程和子进程 的输出顺序是随机的 在试验次数足够大的情况下 6 中顺序都有可能 出现 abc acb bac bca cab cba 2 进程的控制 a 修改已经编写的程序 将每个进程输出一个字符改为每个进程输出一句话 再观察程序执行时屏幕上出现的现象 并分析原因 i 程序设计说明 将第一个程序中输出字符的语句改为输出 parent process 和 child process1 后台进程读中断信号 默认挂起 signal SIGQUIT SIG IGN 程序终止信号 默认操作写 dump core 文件 ii 源代码 参照 a 中源代码 iii 运行结果 加上 signal SIGINT SIG IGN 后程序不再继续进行 加上 signal SIGQUIT SIG IGN 后 加上 signal SIGINT SIG IGN 和 signal SIGQUIT SIG IGN 后 iv 分析 只加上 signal SIGINT SIG IGN 则父程序不再继续输出 程序 处于 wait 状态 因为在父进程收到信号时已默认为被杀死 程序停 留在 wait 不再继续进行 也没有父进程的输出 而当只加上 signal SIGQUIT SIG IGN 时 输出结果不变 加上 signal SIGINT SIG IGN 和 signal SIGQUIT SIG IGN 后 输出结果依旧不变 但 是后两种情况的含义是不同的 当只加了 signal SIGQUIT SIG IGN 时 子进程收到键盘上的 ctrl C 中断信号从而被杀死 输出 killed 语句 而同时加上这两句话 屏蔽了从键盘上传来的中断信号 因此子进 程接收到父进程传来的软中断信号 所以被杀死 输出 killed 语句 4 进程的管道通信 a 题目要求 编制一段程序 实现进程的管道通信 使用系统调用 pipe 建 立一条管道线 两个子进程 P1 和 P2 分别向管道各写一句话 Child 1 is sending a message Child 2 is sending a message 而父进程则从管道中读出来自于两个子进程的信息 显示在屏幕上 要 求父进程先接收子进程 P1 发来的消息 然后再接收子进程 P2 发来的消息 b 程序设计说明 两个子进程分别向管道写一句话 为了避免两个进程抢占管道 利用 一个 sleep 函数将两个进程有效的时间区分开来 并且在第一个进程写 进数据时 对管道进行加锁 写完后解锁 第二个进程继续写数据 以 此避免冲突的产生 而父进程则在子进程全部进行完毕后再执行 c 源代码 d 运行结果 e 分析 若是多次进行管道写入 并想保证一个进程完整运行 则必须加锁 若单次 不一定需要 lockf 因为一个标准输出流一定会完整的写完不 被中断 然后再进行其他操作 在管道通信中 系统调用 pipe 函数初 始化一个二元组作为管道 1 为出 0 为进 以此来保证管道通信不发生 冲突 五 五 思考 思考 1 系统是怎样创建流程的 操作系统在创建流程时 首先申请空白的 PCB 进程控制块 再为新进 程分派资源 然后初始化 PCB 最终将新进程插入就绪队列中 而在我们编 程的过程中 系统通过调用 fork 函数来创建进程 而当一个进程中调用了 fork 函数时 则系统会为这个进程创建一个子进程 这个子进程和父进程不 同的地方只有他的进程 ID 其他部分都一样 也就是说新进程通过克隆老进 程或是当前进程来创建 其中系统调用 fork 或 clone 函数可以创建新任务 复制发生在核心状态下地核心中 复制完成后 Linux 允许两个进程共享资 源而不是复制各自的拷贝 包括文件 信号处理过程和虚拟内存 而在创建后 先执行父进程还是子进程则取决于内核的调度算法 子进程 被创建后 父子进程相互竞争系统的资源 并行执行 若想子进程先继续执 行 则需要父进程阻塞至子进程完成任务 即用 wait 系统调用来完成 2 可执行文件加载时进行了哪些处理 在编译执行源代码的过程中 由程序 到编译预处理 到编译 到优化程 序 到汇编程序 到链接程序 最后到可执行文件 在加载可执行文件时首 先操作系统应该判断该文件是否为一个合法的执行文件 若是则按照段表中 的指示为可执行文件分配地址空间 在加载文件的过程中 主要是需要加载 程序段和数据段到内存 并且进行外部定义符号的重定位 任何一个可执行 文件 启动时都需要调用 Ntdll dll 中的 NtCreateProcess 函数 3 当首次调用新创建进程时 其入口在哪里 在进程队列 ready 的状态下 由离自己最近的父进程执行 调度 即入口在最近的父进程处 是 fork 之后的语句 4 进程通信有什么特点 linux 下进程间通信的几种主要方式 下进程间通信的几种主要方式 管道 Pipe 及有名管道 named pipe 管道可用于具有亲缘关系进程间的 通信 有名管道克服了管道没有名字的限制 因此 除具有管道所具有的功能 外 它还允许无亲缘关系进程间的通信 信号 Signal 信号是比较复杂的通信方式 用于通知接受进程有某种事 件发生 除了用于进程间通信外 进程还可以发送信号给进程本身 linux 除了 支持 Unix 早期信号语义函数 sigal 外 还支持语义符合 Posix 1 标准的信号函数 sigaction 实际上 该函数是基于 BSD 的 BSD 为了实现可靠信号机制 又能 够统一对外接口 用 sigaction 函数重新实现了 signal 函数 报文 Message 队列 消息队列 消息队列是消息的链接表 包括 Posix 消息队列 system V 消息队列 有足够权限的进程可以向队列中添加消息 被赋 予读权限的进程则可以读走队列中的消息 消息队列克服了信号承载信息量少 管道只能承载无格式字节流以及缓冲区大小受限等缺点 共享内存 使得多个进程可以访问同一块内存空间 是最快的可用 IPC 形式 是针对其他通信机制运行效率较低而设计的 往往与其它通信机制 如信号量 结合使用 来达到进程间的同步及互斥 信号量 semaphore 主要作为进程间以及同一进程不同线程之间的同步手 段 套接口 Socket 更为一般的进程间通信机制 可用于不同机器之间的进 程间通信 起初是由 Unix 系统的 BSD 分支开发出来的 但现在一般可以移植到 其它类 Unix 系统上 Linux 和 System V 的变种都支持套接字 总的来说 进程间的通信根据通信内容可以划分为控制信息的传送 低级通 信 和大批数据的传送 高级通信 在消息队列中信息的复制需要额外消耗 CPU 时间 不适宜于信息量大或操作频繁的场合 共享内存针对消息缓冲的缺 点改而利用内存缓冲区直接交换信息 无需复制 快捷 信息量大就是又是 但是不同的进程通信方式有不同的优缺点 因此对于不同应用问题 需要根据 问题本身情况来选择进程间的通信方式 六 六 总结 总结 本次实验中我遇到了很多大大小小的问题 首先就是 linux 虚拟机安装的问 题 先是下载了 virtualbox 软件但却因为版本问题一直不能安装 linux 系统成功 于是转而用 VMware 软件 安装上后 仍须安装 gcc g 等编译工具 于是上网 搜索命令行安装的方法 利用 apt get update apt get upgrade apt get install gcc 语句安装成功 但 g 编译器一直提示 这次的实验通过进程创建 进程互斥 进程软中断 管道进程四个小程序让 我们对进程管理这一章有了更深的理解 在听课时 由于没有将书本跟实际动手 操作联系在一起 对知识的印象不是很深 但这次为了编程 将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 33541-2017珠宝玉石及贵金属产品抽样检验合格判定准则》(2026年)深度解析
- 深度解析(2026)《GBT 33349-2016往复式内燃燃气电站系统通 用技术条件》(2026年)深度解析
- 深度解析(2026)《GBT 33362-2016金属材料 硬度值的换算》(2026年)深度解析
- 医疗数据安全标准:区块链与现有体系的融合策略
- 医疗数据安全成熟度评估:区块链驱动的创新方法
- 医疗数据安全意识提升:区块链方案
- 医疗数据安全区块链技术的行业痛点与解决方案升级
- 医疗数据安全分级与区块链溯源体系构建
- 医疗数据安全共享技术研究方向
- 2026届四川省泸州外国语学校数学高一上期末预测试题含解析
- 2024年东北大学马克思主义基本原理概论(期末考试题+答案)1
- 小市政施工方案样本
- 剧场工作总结
- 王立铭进化论讲义
- Hyperion预算管理信息系统介绍
- 2023版设备管理体系标准
- 第三、四单元综合测试卷(含答案)-统编版语文高一下学期必修下册
- 基本心理需要满足量表BPNS
- 焊缝外观检验规范(5817 VT)
- YY 1045.2-2010牙科手机第2部分:直手机和弯手机
- GB/T 4458.1-2002机械制图图样画法视图
评论
0/150
提交评论