操作系统实验31
【操作系统实验31】主要涉及了三个重要的操作系统概念:进程控制、进程退出和文件锁。 1. **使用wait系统调用**: wait系统调用是用于父进程等待子进程结束的一个关键机制。在实验中,父进程创建子进程后,通过`sleep(1)`让出CPU时间,使得子进程有机会执行。子进程执行`getpid()`获取其进程ID并结束自身,设置退出状态为5。父进程在`sleep(1)`结束后调用`wait()`,这会导致父进程阻塞,直到子进程结束并发送一个信号给父进程。`wait()`返回子进程的结束状态,通过`WEXITSTATUS()`函数可以获取到子进程的退出状态值,即5。实验结果显示,当子进程执行时间超过父进程的`sleep`时间时,父进程会被阻塞,直到接收到子进程完成的信号。 2. **使用exit系统调用**: `exit()`系统调用是进程结束自身的方式。在实验中,父进程输出一句信息后调用`exit()`,这意味着父进程的其余代码将不再执行。因此,后续的任何输出都不会显示。实验验证了`exit()`调用的立即效果,即父进程的终止。 3. **使用lockf系统调用**: `lockf()`系统调用用于文件锁定,它允许进程对文件的特定部分进行加锁和解锁操作。在实验中,lockf的第一个参数是文件描述符,第二个参数是操作类型(1为锁定,0为解锁),第三个参数是锁定的文件范围。父进程先锁定屏幕输出,然后两个子进程分别执行相同的流程:锁定屏幕输出,循环输出自己的PID和循环计数,最后解锁屏幕输出。由于锁的存在,即使两个子进程并发执行,它们的输出也不会交错。若取消子进程的锁,增加循环次数,子进程可能会在未完成所有输出时就被其他进程抢占,导致输出交错。 通过这三个实验,学生可以深入理解进程间的同步与通信,以及文件锁定的概念,这些都是操作系统中至关重要的知识点。这些实践经验有助于增强对多进程交互的理解,以及在实际编程中如何有效地控制进程行为和资源访问。