Pintos操作系统用户程序开发指南

需积分: 9 12 下载量 161 浏览量 更新于2024-07-31 收藏 270KB PDF 举报
“PintosProject2 user program的PPt” Pintos是一个操作系统课程项目,旨在让学生通过实际操作理解操作系统的基本原理。在这个项目中,学生将深入研究用户程序的实现,涉及操作系统的核心组件,如进程管理、内存管理和系统调用等。这份Ppt详细介绍了在Pintos环境下创建和使用用户程序所需的知识和技术。 首先,项目的先决条件包括对操作系统基本概念的理解,以及熟悉C语言编程。参与者需要能够修改Pintos源代码,特别是与进程管理、页目录、系统调用、异常处理、全局描述符表(GDT)和任务状态段(TSS)相关的部分,这些都是操作系统核心组件的关键组成部分。 背景介绍中提到,Pintos的基础代码已经支持加载和运行用户程序,但目前还无法实现输入/输出(I/O)或交互性。要在Pintos上实现用户程序,需要在“pintos/src/userprog”目录下工作,并对上述提及的源文件进行必要的修改。 项目的主要内容包括以下几个方面: 1. **制作和使用Pintos文件系统**:学生需要学习如何构建一个能够读写文件的系统,这涉及到文件的创建、打开、关闭和读写操作。 2. **用户程序的工作原理**:讲解用户程序如何在Pintos中启动、执行和终止,以及它们如何与操作系统交互。 3. **虚拟内存布局**:介绍Pintos中的内存管理机制,包括如何分配和映射虚拟内存,以及如何处理页错误。 4. **访问用户内存**:讨论如何在内核中安全地访问和修改用户空间的数据。 5. **过程终止消息**:说明进程结束时,操作系统如何处理清理工作,以及向其他进程发送终止信号。 6. **参数传递**:描述系统如何在调用系统调用时传递参数,以及在用户程序和操作系统之间传递信息的方法。 7. **系统调用**:详细讲解如何定义新的系统调用,以及如何在用户程序中使用它们来扩展操作系统的功能。 8. **禁止对可执行文件的写入**:这是为了保护程序的完整性,防止未经授权的修改。 9. **实施建议的顺序**:给出了一个推荐的开发顺序,帮助学生有条理地完成项目。 10. **评估**:项目完成后,会对实现的功能进行评估,检查其正确性和效率。 11. **文档**:强调了编写清晰、详细的技术文档的重要性,以便于理解和维护代码。 12. **提交**:明确了项目提交的要求,包括代码、文档和其他相关材料。 这个Ppt为学生提供了一个全面的指南,帮助他们了解并实现Pintos操作系统中的用户程序,通过实践加深对操作系统设计和实现的理解。完成这个项目不仅需要编程技能,还需要对操作系统原理的深入理解和问题解决能力。

When the user of the software specifies action 2, your program must add a new user to the library. To add a new user, your program needs to ask the user three things: the role of user (an integer read using readPosInt: the integer 1 represents lender, the integer 2 represents borrower, any other integer must result in an error message "Unknown user role!" being printed and the software going immediately back to the main menu), the name of the user (a string read using readLine), and the initial number of books that the user lends (for a lender) or borrows (for a borrower). You program must then create the correct user, add it to the library, and print an information message. The program then goes back to the menu. For example (where 2, 3, 2, 1, Anna, 5, 2, 2, Bob, and 10 are inputs from the user): Type an action (total:1 add:2 get:3 more:4 less:5 quit:6): 2 Type the user role (lender:1 borrower:2): 3 Unknown user role! Type an action (total:1 add:2 get:3 more:4 less:5 quit:6): 2 Type the user role (lender:1 borrower:2): 1 Enter the name of the user: Anna Enter the initial number of borrowed books: 5 Lender "Anna" lending 5 book(s) has been added. Type an action (total:1 add:2 get:3 more:4 less:5 quit:6): 2 Type the user role (lender:1 borrower:2): 2 Enter the name of the user: Bob Enter the initial number of borrowed books: 10 Borrower "Bob" borrowing 10 book(s) has been added. Type an action (total:1 add:2 get:3 more:4 less:5 quit:6): Note that the readPosInt method prevents the initial number of books from being negative, so the constructor for the Borrower class will never throw a NotALenderException when you create a borrower object. Nevertheless the code of the main method of your CLI class must handle this exception by printing the error message "BUG! This must never happen!" and immediately terminating the program using System.exit(1);

2023-05-24 上传