这份文档是针对华中科技大学操作系统课程所撰写的实验报告,详细记录了学生在该课程中的实验操作、心得以及遇到的问题和解决方案。
### 实验一:Linux系统的安装及用户界面的使用
#### 一.实验目的
1. 掌握Linux操作系统的安装过程,并熟悉其启动流程和使用环境。
2. 熟练掌握在Linux环境下使用vi编辑器的方法。
3. 学会从编写到调试,再到运行一个C语言程序的全过程。
#### 二.实验内容
**实验要求**
1. 在VMware虚拟机或真实机器上安装一个Linux操作系统。
2. 使用并体验Linux中的X Window系统。
3. 掌握基本键盘命令,并能够熟练使用常用的基本命令。
4. 学会如何在命令行方式下使用vi编辑器进行文件的编辑和保存操作。
5. 编写一段C程序,利用fork()函数创建两个子进程。其中父进程显示字符“a”,而这两个子进程分别输出字符“b”与“c”。多次运行该程序并分析其执行效果的原因。
### 实验二:Linux进程控制
#### 一.实验目的
1. 掌握什么是进程,明确区分程序和进程的概念。
2. 认识并发执行的实质及其重要性。
#### 二.实验内容
**实验要求**
1. 编写一个程序,在其中使用fork()函数创建两个子进程。父进程中显示字符“a”,而这两个子进程分别输出字符“b”与“c”。多次运行该程序并分析其结果。
2. 修改上述代码,使得每个进程的输出从单个字符改为循环输出一句话(如:“parent:加上自己的PID”、“Child1: 加上自身的PID”等),再观察执行时屏幕上出现的现象,并进行原因分析。
3. 编写一个父进程创建子进程并使用exec系统调用让该子进程运行另一个程序的代码。每个进程中显示不同的信息,然后观察其执行结果及其并发性效果。
4. 设计一段程序以构建如图所示的进程树,在其中每一个节点(即进程)输出自己的PID以及父级PID。
### 实验三:Linux进程间通信
#### 一.实验目的
1. 理解当多个进程争用同一资源时的现象,并学习解决此类问题的方法。
2. 学习如何通过系统提供的“软中断”机制和管道技术实现不同程序间的交互,加深对其工作原理的理解。
3. 掌握pipe()、msgget()、msgsnd()、msgrcv()等系统调用的功能及其应用方式;熟悉使用共享内存进行进程间通信的方法。
#### 二.实验内容
**实验要求**
1. 修改之前编写的程序,在每个进程中输出一句话而非单个字符,观察执行时屏幕上的现象,并分析出现该情况的原因。可以考虑利用locking()函数为每一个进程添加锁来解决多进程互斥访问的问题。
2. 编写一个实现“软中断”通信的程序:创建两个子进程;让父进程捕捉键盘输入信号(例如Del键)并使用kill()向其发送信号;当子进程接收到该信号时,输出特定信息后结束运行。最后由父进程等待所有子线程结束后退出。
3. 编写一个实现管道通信的程序:通过pipe()建立一条通道,并让两个子进程分别循环往其中写入消息(例如:“Child 1 is sending a message!”、“Child 2 is sending a message!”),而父进程中则从该管道中读取信息并显示出来。