"本科《操作系统》课程实验报告:进程创建、进程互斥、软中断通信和地址转换"

需积分: 5 2 下载量 61 浏览量 更新于2024-01-10 收藏 1.2MB DOCX 举报
《操作系统》课程报告 一、实验项目一:进程创建 1.1 实现目的: 通过Linux提供的系统调用fork()创建新的进程,并对新进程进行操作。 1.2 实验内容: 编写一段程序,使用fork()系统调用创建一个新的子进程,然后对子进程进行操作。 1.3 实验步骤: 1. 使用fork()系统调用创建一个新的子进程。 2. 在子进程中,使用exec()或execvp()系统调用执行另一个程序。 3. 在父进程中,等待子进程执行结束,并进行相应的处理。 1.4 实验结果与分析: 通过实验,我们可以观察到父进程和子进程并发执行,并且子进程可以独立于父进程进行一些操作。 二、实验项目二:进程互斥 2.1 实现目的: 通过Linux提供的系统调用signal(),来说明如何执行一个预先安排好的信号处理函数。 2.2 实验内容: 编写一段程序,使用signal()系统调用来处理SIGINT信号,即当键盘输入CTRL+C时执行相应的信号处理函数。 2.3 实验步骤: 1. 使用signal()系统调用将一个信号处理函数与SIGINT信号关联。 2. 编写相应的信号处理函数,以便在接收到SIGINT信号时执行特定的操作。 2.4 实验结果与分析: 通过实验,我们可以观察到在接收到SIGINT信号时,程序会执行相应的信号处理函数。这可以用于处理一些紧急情况下的交互操作。 三、实验项目三:软中断通信 3.1 实现目的: 通过使用系统调用fork()创建子进程,并使用signal()来实现父进程捕获中断信号并向子进程发送信号的功能。 3.2 实验内容: 编写一段程序,使用fork()系统调用创建两个子进程,并使用signal()系统调用让父进程捕获键盘上的中断信号,当捕获到中断信号后,父进程向两个子进程发送信号,子进程输出相应的信息后终止。 3.3 实验步骤: 1. 使用fork()系统调用创建两个子进程。 2. 使用signal()系统调用让父进程捕获中断信号,并设置信号处理函数。 3. 在信号处理函数中,使用kill()系统调用向两个子进程发送SIGTERM信号。 4. 在子进程中,编写相应的信号处理函数来输出信息并终止。 3.4 实验结果与分析: 通过实验,我们可以观察到当父进程捕获到中断信号后,能够向两个子进程发送SIGTERM信号,子进程接收到信号后输出相应的信息并终止。 四、实验项目四:地址转换 4.1 实现目的: 模拟基本分页存储管理,通过给定一个逻辑地址,将其转换为相应的物理地址。 4.2 实验内容: 设计一个数据结构来模拟页表,实现逻辑地址到物理地址的转换。 4.3 实验步骤: 1. 设计一个页表数据结构,用于存储页号与页表项之间的映射关系。 2. 根据给定的逻辑地址,从页表中查找对应的页表项。 3. 根据页表项中的信息,进行地址的转换,得到相应的物理地址。 4.4 实验结果与分析: 通过实验,我们可以观察到给定的逻辑地址可以通过页表进行映射,从而得到相应的物理地址。这对于分页虚拟存储管理有着重要的意义。 总结: 通过实验,我们对操作系统的一些基本概念和原理有了更深入的理解。实验过程中,我们学习了如何创建进程、如何处理信号以及如何进行地址转换等操作。这些实验内容不仅帮助我们巩固了操作系统的理论知识,还培养了我们的动手实践和问题解决能力。通过本科期间的操作系统课程,我们对操作系统的工作原理和应用有了更深层次的认识,为今后的学习和工作打下了坚实的基础。