新建
上传
首页
助手
最?/div>
资料?/div>
工具

 

?/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; 

Ͼλ
新建
上传
首页
助手
最?/div>
资料?/div>
工具

 

?/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; 

">
新建
上传
首页
助手
最?/div>
资料?/div>
工具

 

?/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; 

Ͼλ">
Ͼλ
Ŀ

计算机操作系统实验_运行用户态程?- 百度文库
新建
上传
首页
助手
最?/div>
资料?/div>
工具

 

?/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; 



ļ׺.doc޸Ϊ.docĶ

  • ͳĩϰ
  • 2016-2020йýҵͶʷǰԤⱨ
  • Ԫ֤
  • óʵ.doc
  • ڽֵ쿪ߵı׼泡ʹ֤
  • ע׮׮עʩ
  • мز÷ѹ취
  • ʵһ ָ MATLAB ڿϵͳģͽеӦ
  • ؾ֮ʫ衶Ӱʼĩ
  • ˽̰꼶ϲ()10Ρˡʿνѧ

վ

԰ Ͼλ
ϵͷ779662525#qq.com(#滻Ϊ@)