logo资料库

linux实现软中断通信和管道通信报告(含代码).docx

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
I.进程管理实验
A.实验目的
B.实验内容
C.实验要求
D.软中断
E.管道通信
II.存储器管理实验
A.实验目的
B.实验内容
C.实验要求
D.实验原理
E.实验代码
F.实验结果
G.遇到的问题
1.缺页率
2.NUR算法
III.体会
(往下拉)
目录 I. 进程管理实验 ................................................................................................................................ 3 A. 实验目的............................................................................................................................... 3 B. 实验内容 ............................................................................................................................... 3 C. 实验要求 ............................................................................................................................... 3 D. 软中断 ................................................................................................................................... 4 E. 管道通信 ............................................................................................................................... 6 II. 存储器管理实验........................................................................................................................... 9 A. 实验目的............................................................................................................................... 9 B. 实验内容 ............................................................................................................................... 9 C. 实验要求 ............................................................................................................................... 9 D. 实验原理 ............................................................................................................................... 9 E. 实验代码 ............................................................................................................................. 10 F. 实验结果 ..............................................................................................................................16 G. 遇到的问题.........................................................................................................................18 III. 体会............................................................................................................................................ 18
I. 进程管理实验 A. 实验目的 1) 加深对进程概念的理解,明确进程和程序的区别。 2) 进一步认识并发执行的实质。 3) 分析进程争用资源的现象,学习解决进程互斥的方法。 4) 了解 Linux 系统中进程通信的基本原理。 进程是操作系统中最重要的概念,贯穿始终,也是学习现代操作系统的关键。通过 本次实验,要求理解进程的实质和进程管理的机制。在 Linux 系统下实现进程从创建到 终止的全过程,从中体会进程的创建过程、父进程和子进程的关系、进程状态的变化、 进程之间的同步机制、进程调度的原理和以信号和管道为代表的进程间通信方式的实现。 B. 实验内容 1) 编制实现软中断通信的程序 使用系统调用 fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘上 发出的中断信号(即按 delete 键),当父进程接收到这两个软中断的某一个后,父进 程用系统调用 kill()向两个子进程分别发出整数值为 16 和 17 软中断信号,子进程获得对 应软中断信号,然后分别输出下列信息后终止: Child process 1 is killed by parent !! Child process 2 is killed by parent !! 父进程调用 wait()函数等待两个子进程终止后,输入以下信息,结束进程执行: Parent process is killed!! 多运行几次编写的程序,简略分析出现不同结果的原因。 2) 编制实现进程的管道通信的程序 使用系统调用 pipe()建立一条管道线,两个子进程分别向管道写一句话: Child process 1 is sending a message! Child process 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求:父进程先接收子进程 P1 发来的消息,然后再接收子进程 P2 发来的消息。 C. 实验要求 1) 按照实验内容,认真完成各项实验,并完成实验报告。 2) 实验报告必须包括:程序清单(含注释)、实验结果、实验中出现的问题、观 察到的现象的解释和说明,以及实验体会。
D. 软中断 1. 程序清单 2. 实验结果
3. 实验中出现的问题 Signal 函数的使用 a) 问题: 在实验中,需要使用 signal 函数接收键盘上 DELETE 键的中断信号和父进程传递的 16、 17,而对于如何捕捉该信号,却不清楚. 解决: 经查询资料,得知: signal(SIGHUP, SIG_IGN); signal 信号函数,第一个参数表示需要处理的信号值(SIGHUP),第二个参数 为处理函数或者是一个表示,这里,SIG_IGN 表示忽略 SIGHUP 那个注册的信号。 SIGHUP 和控制台操作有关,当控制台被关闭时系统会向拥有控制台 sessionID 的所有进程发送 HUP 信号,默认 HUP 信号的 action 是 exit,如果远程登陆启动某 个服务进程并在程序运行时关闭连接的话会导致服务进程退出,所以一般服务进程 都会用 nohup 工具启动或写成一个 daemon。 在 signals 中,有: 由 Interrupt Key 产生,通常是 CTRL+C 或者 DELETE。发送给所有 ForeGround Group 的进程 SIGINT 故在接收键盘信号时,使用”SIGINT"信号. 在子进程中,使用直接 16、17 即可。 b) 加库 问题: Fork,signal,wait 等函数并不属于默认库中,需引进这些库. 解决: [kill]函数 int kill(pid_t pid, int sig); 用于向任何进程组或进程发送信号。 #include #include [fork]函数 #include [signal]函数 signal(SIGHUP, SIG_IGN); #include 4. 实验现象 a) 现象
b) 解释说明 子进程 1,2 被创建后,使用 signal 函数等待父进程把信号传入,待传入后依次输出并 退出子进程. 父进程使用两个 wait 等待两个子进程分别结束后,输出并退出. E. 管道通信 1. 程序
2. 实验结果 3. 出现的问题 i. ii. 互斥问题 问题:两个子进程同时向管道发送信息,如何平衡两者以保证不冲突。 解决:使用 lockf 函数,对子进程加锁,通过锁的开关解决互斥问题。 Exit()函数报错 问题: 解决:exit 并不属于库,而是属于,故在使用时需加入此库。 【附】exit(0)与 exit(1),return 三者区别 exit(0):正常运行程序并退出程序; exit(1):非正常运行导致退出程序; return():返回函数,若在主函数中,则会退出函数并返回一值。 详细说: 1. return 返回函数值,是关键字; exit 是一个函数。 2. return 是语言级别的,它表示了调用堆栈的返回;而 exit 是系统调用 级别的,它表示了一个进程的结束。 3. return 是函数的退出(返回);exit 是进程的退出。 4. return 是 C 语言提供的,exit 是操作系统提供的(或者函数库中给出 的)。 5. return 用于结束一个函数的执行,将函数的执行信息传出个其他调用 函数使用;exit 函数是退出应用程序,删除进程使用的内存空间,并将应用程 序的一个状态返回给 OS,这个状态标识了应用程序的一些运行信息,这个信 息和机器和操作系统有关,一般是 0 为正常退出,非 0 为非正常退出。 6. 非主函数中调用 return 和 exit 效果很明显,但是在 main 函数中调用 return 和 exit 的现象就很模糊,多数情况下现象都是一致的。 exit 和_exit 进程终止有 5 种方法: 1 正常终止 (1)从 main 函数返回 (2)调用 exit (3)调用_exit 2 异常终止 (1)调用 abort (2)由一个信号来终止 exit 和_exit 就是用来正常终止一个进程的,主要区别是_exit 会立刻进入 内核,而 exit 先执行一些清除工作(包括执行各种终止处理程序,关闭所有标 准 I/O 等,一旦关闭了 IO,例如 Printf 等函数就不会输出任何东西了),然 后才进入内核。这两个函数会对父子进程有一定的影响,当用 vfork 创建子进 程时,子进程会先在父进程的地址空间运行(这跟 fork 不一样),如果子进
分享到:
收藏