logo资料库

四川大学操作系统实验课件.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
实验报告 (学生打印后提交) 实验名称: shell 编程 实验时间: 10 年 04 月 21 日 实验人员:(姓名)(学号)(年级) 实验目的:1.熟悉使用 Linux 下的软件开发工具,如 gcc 2.熟练使用man帮助手册 3.学习使用Linux的系统调用,对进程进行管 理和完成进程之间的通信(如用信号和管道 进 行进程间通信) 4.理解并发程序中的同步问题 实验环境: linux 实验步骤: 1. 用帐户 root 登录,密码 123456 2. 自己用学号建立目录,把源文件拷入目录中 3. 阅读关于 fork,exec,wait,exit,pipe 系统调用的 man 帮助手册 4. 编译程序 fork.c 并运行,观察结果,观察进程 5.编译程序 pipe.c 并运行,观察结果 6.阅读关于函数 sigaction,tcsetpgrp 和 setpgid 的 man 帮助手册 7.编译程序 signal.c 并运行,观察结果,观察进程 8.编译程序 process.c 并运行,观察结果,观察进程 9.写实验总结 实验陈述: 1、基础知识:  什么是系统调用:系统调用是 UNIX 操作系统核心提供给用户程序使用的操作系统服 务,系统调用主要提供用户程序对文件进行读写,进程的创建,删除和控制以及数 据的输入/输出等。  简述 fork 调用: 用 fork()创建一个新的进程,成为原先进程的子进程,原先进程 是父进程。  如何实现进程间的通信: UNIX 进程通信方式有信号,管道,消息,共享存储区和信 号量。  如何实现进程间的连接:可以利用管道和 socket 2、 写出下列函数的原型 int fork(); fork: signal: int signal(int sig,int func); pipe: int pipe(int fildes[2]); tcsetpgrp: int tcsetpgrp(int fildes,pid_t pgid_id) 3、运行和观察结果  fork.c  简述结果(不是执行结果):与执行 ls -l/相同
 程序中如何区分父进程和子进程:通过 fork 的返回值 pid 的值的大小来区分子 进程和父进程,如果 pid 的值等于 0,表明是子进程,如果>0 表明是父进程,如 果小于 0,表明子进程创建失败  pipe.c  简述结果(不是执行结果): 相当于将 ls –l /etc/内容重定向到一个地方(程 序中是缓冲),然后用 more 命令以页为单位在屏幕上显示出重定向的内容
 vp(prog2_argv[0],prog2_argv)(第 56 行)是否执行,如果没有执行是什么原因:会执行, 父进程创建子进程时后父进程和子进程的执行所随机的,所以只要第二次子进程创建成功, 都会执行这一句话。  signal.c
 简述结果(不是执行结果):不断的输出父进程和子进程的 ID 号,父进程是 3693, 子进程是 3694     怎 样 让 函 数 ChildHandle r 执 行 ? 当 子 进 程 接 收 到信号的时候就执行 ChildHandler 函数  process.c  简述结果(不是执行结果):显示 parent 和 child 进程的进程号,其中 parent 的进程号为 5193,child 的进程号为 5194,然后使子进程所在的进程组成为前台 进程组,然后执行 vi 进 程 列 表 中 有 几 个 ./p rocess,区别在哪里:进程中有两个,一个所主进程,在后台等待输入,子进程在前台调用 vi 1. 杀死主进程后,出现什么情况:子进程也结束了 实验总结: 1.通过本次实验,了解了 linux 下的软件开发工具 gcc 的具体使用方法 2.学会用 man 帮助手册,查看一些系统调用的具体内容
3 学习使用 Linux 的系统调用,如用信号和管道,对进程进行管理和完成进程之间的通信
分享到:
收藏