一级操作系统实验报告.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
操作系统实验报告主要关注的是进程管理和Linux操作系统的应用。实验旨在帮助学生深入理解进程的概念,区别进程与程序,并掌握在Linux环境下如何创建、控制和管理进程,特别是守护进程的创建。 **实验目标与原理** 1. **进程概念理解**:进程是程序在执行过程中的实例,具有独立的内存空间和执行路径,与程序的静态存在形式有本质区别。 2. **进程创建与撤销**:在Linux中,可以通过系统调用`fork()`创建新进程,`exit()`或`_exit()`撤销进程。并发执行使得多个进程可以在同一时间片内轮流执行。 3. **守护进程创建**:守护进程是在后台运行且无控制终端的进程,常用在系统服务中。创建步骤包括:创建子进程、脱离会话、改变工作目录、重置文件权限掩码以及关闭文件描述符。 **实验内容** 1. **获取进程信息**:使用`ps`命令查看当前系统中的进程状态,如进程ID(PID)、父进程ID(PGID)等。 2. **进程创建与控制**:通过编程实现父进程创建子进程,两者并发或同步执行特定任务。例如,使用`fork()`创建进程,通过`if`判断条件来区分父子进程,并使用`sleep()`函数控制输出间隔。 **实验代码示例** - 并发输出: ```c #include<sys/types.h> #include<unistd.h> #include<stdio.h> int main() { pid_t pt; printf("Hello world!\n"); int i; pt = fork(); for(i = 0; i < 5; i++) { if(pt == -1) printf("Fork error.\n"); else if(pt > 0) { // 父进程 printf("I am a parent.\n"); sleep(1); } else { // 子进程 printf("I am a child.\n"); sleep(1); } } return 0; } ``` - 同步输出: ```c #include<sys/types.h> #include<unistd.h> #include<stdio.h> int main() { pid_t pt; printf("Hello world!\n"); int i; pt = fork(); for(i = 0; i < 5; i++) { if(pt == -1) printf("Fork error.\n"); else if(pt > 0) { // 父进程 // 子进程完成输出后,父进程再输出 } else { // 子进程 printf("I am a child.\n"); sleep(1); } } return 0; } ``` **思考题解答** 1. **程序与进程的区别**: - 程序是静态的,是有序代码的集合,而进程是动态的,是程序的执行实例。 - 进程是临时的,随着执行结束而消失,而程序可长期保存。 - 进程包含程序、数据和进程控制块,而程序仅包含代码。 - 一个程序可以对应多个并发执行的进程,一个进程也可能执行多个程序。 2. **Linux进程类型**: - 交互进程:与用户交互,响应用户输入。 - 批处理进程:一次性处理大量数据,不需用户交互。 - 守护进程:在后台运行,提供持续服务,如网络服务器。 3. **`fork()`与`vfork()`的区别**: - `fork()`创建完整副本,父子进程各自拥有独立的内存空间。 - `vfork()`创建子进程后,子进程共享父进程的地址空间,直到调用`exec()`或`exit()`。 - `vfork()`效率更高,但需谨慎处理,因为它可能导致父进程被阻塞,直到子进程结束或调用`exec()`。 实验通过实践加深了学生对操作系统中进程管理的理解,特别是进程的创建、同步与通信,以及守护进程的特性。通过编写代码并观察执行结果,有助于巩固理论知识,并提高实际操作能力。
- 粉丝: 10
- 资源: 15万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助