跳转至

Hw1:NexOS 用户态编程与系统调用(对应实验一)

作业定位

  • Hw1 是实验一“NexOS 用户态编程与系统调用”的配套作业;
  • 本次作业侧重阅读、理解与书面整理,帮助你在正式实践前后梳理核心知识点;
  • 完成本作业后,你应能更顺畅地进入实验一中的代码实现与调试环节。

作业目标

  • 熟悉 NexOS 用户态程序的组织方式,掌握新增用户程序并打包进 fs.img 的完整流程;
  • 理解用户态 Shell 的基本工作机制,区分内建命令与外部命令,掌握 fork/exec/wait 相关执行模型;
  • 理解系统调用从用户态到内核态再返回用户态的路径,掌握在 NexOS 中添加新系统调用的全流程(调用号、分发、内核实现、用户态封装与测试);

作业题

与实验一的关系

Hw1 是实验一的配套书面作业。你可以将其理解为实验一的预习与整理任务:先阅读下列材料,完成作业题,再在实验课中继续推进对应的代码实践。

阅读说明

请在完成本次作业前,务必仔细阅读以下三个配套阅读材料页面:

上述文档包含必要的操作步骤与原理分析,能够帮助你顺利完成本次作业,并为实验一中的相关实践内容做好准备。

Warning

Hw1 截止时间为 4月2日18:00,请在截止日期之前在 BB 系统页面上提交作业。

  1. 阅读 NexOS 用户态程序创建指南,写出在 NexOS 中新增一个用户程序(例如 sid)所需的三个必要步骤,并分别说明:如果漏掉 UPROGS 或漏掉 fsimg 规则中的 --add,会出现什么现象?

  2. 阅读 理解 NexOS 的 Shell 工作原理,解释“内建命令”与“外部命令”的区别,并回答:为什么 cd 必须做成内建命令,而 echo/ls 等可以作为外部命令通过 fork + exec 运行?

  3. 阅读 理解 NexOS 的 Shell 工作原理,结合文件描述符约定 0/1/2,用自己的话说明:输入重定向与输出重定向分别是在“把什么接到哪个 fd 上”?

  4. 阅读 在 NexOS 中添加系统调用,以文档示例 hello_id(int tag) 为例,写出“从零添加一个系统调用”必须修改的文件与关键改动点(至少包含系统调用号、内核实现、分发表、用户态封装、头文件声明)。并说明:用户态参数与系统调用号分别通过哪些寄存器传递?返回值最终通过哪个寄存器返回给用户态?