?/p>
1
?/p>
西北工业大学
操作系统实验
实验报告
一、实验目?/p>
掌握?/p>
GeekOS
系统用户态模式下加载并运行可执行程序的方法?/p>
二、实验要?/p>
1.
按照实验讲义
P127
页中的设计要求,
实现在用户态模式下加载并运行可
执行程序的代码,给出关键函数的代码以及实验结果?/p>
三、实验过程及结果
答:核心函数代码如下?/p>
================== user.c ===============
//
产生一个进程(用户态)
int Spawn(const char *program, const char *command, struct Kernel_Thread **pThread)
{
//TODO("Spawn a process by reading an executable from a filesystem");
int rc;
char *exeFileData = 0;
ulong_t exeFileLength;
struct User_Context *userContext = 0;
struct Kernel_Thread *process = 0;
struct Exe_Format exeFormat;
if ((rc = Read_Fully(program, (void**) &exeFileData, &exeFileLength)) != 0 )
{
Print("Failed to Read File %s!\n", program);
goto fail;
}
if((rc = Parse_ELF_Executable(exeFileData, exeFileLength, &exeFormat)) != 0 )
{
Print("Failed to Parse ELF File!\n");
goto fail;
}
if((rc
=
Load_User_Program(exeFileData,
exeFileLength,
&exeFormat,
command,
&userContext)) != 0)
{
Print("Failed to Load User Program!\n");
goto fail;
}
//
在堆分配方式下释放内存并再次初始?/p>
exeFileData
Free(exeFileData);
exeFileData = 0;