Skip to content

Latest commit

 

History

History
28 lines (16 loc) · 1.08 KB

user.md

File metadata and controls

28 lines (16 loc) · 1.08 KB

用户进程

简介

为了测试内核以及让内核更加的「可交互」,我们实现了一部分用户进程,其中包括一个简易 Shell,可以执行一些简单的命令。

用户进程组成

用户编写的程序入口为 main(),还需要链接启动汇编和我们编写的一些库文件,具体文件如下:

  • Entry.S:程序入口,完成 argc argv 的传递
  • include/*.h:库文件,实现了一些基本的函数
  • *.c:库文件的具体实现和用户程序

用户进程加载

我们采取了两种用户进程的加载方式:链接到内核和 exec 加载。

链接到内核

由于初期未实现文件系统以及一些关键系统调用,我们无法直接执行 sd 卡中的程序,故我们将 ELF 文件转化为 C 文件中的字符数组,编译到内核中,并将其按照二进制文件的形式加载到内存对应位置:

  • PROCESS_CREATE_PRIORITY(syscall_test, 1)
  • PROCESS_CREATE_PRIORITY(sh, 1)

Exec

将用户程序编译完成后,生成 sd 卡镜像,内核通过 exec 系统调用访问该程序。