who.c.zip_Who
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在哈工大的操作系统课程实验中,学生被要求增强已有操作系统0.11的功能,通过添加新的系统调用来实现特定的任务。在这个案例中,实验2的目标是添加一个名为"who"的系统调用,用于显示当前登录到系统的用户信息。这个系统调用的实现主要集中在`who.c`文件上,它包含了必要的函数定义和系统调用接口。 我们需要理解操作系统0.11的基本架构。这是一个简化版的操作系统,通常用于教学目的,帮助学生深入理解操作系统的核心概念,如进程管理、内存管理和系统调用等。系统调用是用户程序与操作系统内核交互的桥梁,它允许程序执行只有内核权限才能完成的任务,如文件操作、进程控制和硬件访问。 `who.c`文件中的核心工作是对"who"系统调用的实现。这通常涉及以下步骤: 1. **定义系统调用号**:在0.11操作系统中,每个系统调用都有一个唯一的编号,这在`sys_call.h`头文件中定义。你需要找到合适的空闲编号,并将其分配给"who"系统调用。 2. **实现系统调用函数**:在`who.c`中,你需要编写一个函数(例如`sys_who`),该函数将处理实际的用户请求,如读取并返回当前登录用户的列表。 3. **更新系统调用表**:系统调用表是内核中的一张表格,记录了每个系统调用号对应的处理函数。你需要在`sys_call.s`或类似的汇编代码文件中,将`sys_who`函数地址填入对应的系统调用表项。 4. **处理用户请求**:在`sys_who`函数内部,你需要遍历系统数据结构(如进程描述符),检查哪个进程是活动的登录会话,然后收集这些信息。这可能涉及到对进程状态、打开的终端设备以及登录时间的检查。 5. **返回结果**:一旦获取了所有必要的用户信息,你需要将它们以某种格式(比如字符串数组)组织起来,并通过系统调用的返回值传递给用户空间。 6. **用户空间接口**:为了使用户程序能调用这个新系统调用,还需要在C库(如`lib.c`或`unistd.h`)中添加相应的声明和实现。这样,用户可以使用`syscall`或`system`函数来调用`who`。 7. **测试和调试**:编写测试程序,确保新添加的系统调用能够正确工作。这可能包括创建多个用户会话,然后检查`who`调用返回的结果是否符合预期。 通过这个实验,学生不仅能够掌握如何在实际操作系统中添加系统调用,还能深入理解进程管理、内存模型和系统调用机制。此外,这也是一种实践编程技巧和调试技能的好机会。在完成这个任务后,学生对于操作系统的理解将更加深入,为后续更复杂的系统级编程打下坚实基础。
- 1
- 粉丝: 90
- 资源: 1万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助