P2笔记:
本次项目要实现的函数有如下一些:
mian.c
static void Spawn_Init_Process(void),第一个初始化的用户态进程在此。
user.c
int Spawn(const char *program, const char *command, struct Kernel_Thread **pThread),产生一个进程(用户态)
void Switch_To_User_Context(struct Kernel_Thread* kthread, struct Interrupt_State* state),切换至用户上下文
userseg.c
void Destroy_User_Context(struct User_Context* userContext),摧毁用户上下文
int Load_User_Program(char *exeFileData, ulong_t exeFileLength,
struct Exe_Format *exeFormat, const char *command,
struct User_Context **pUserContext),装载用户程序
bool Copy_From_User(void* destInKernel, ulong_t srcInUser, ulong_t bufSize),将用户态的进程复制到内核缓冲区
bool Copy_To_User(ulong_t destInUser, void* srcInKernel, ulong_t bufSize),与上一个相反
void Switch_To_Address_Space(struct User_Context *userContext),切换到用户地址空间
kthread.c
void Setup_User_Thread(
struct Kernel_Thread* kthread, struct User_Context* userContext) 创建一个用户进程
struct Kernel_Thread*
Start_User_Thread(struct User_Context* userContext, bool detached),开始用户进程
还有一个,就是P1中ELF文件分析函数
正确编译后,在build目录下生成fd.img和diskc.img映像文件,
project2.bxrc为本次项目在Windows下的配置文件;
在Linux中亦要安装bochs,
VGABIOS-lgpl-latest等文件的路径一般情况下是在/usr/share/bochs,
本次项目在红旗3.0 SP2和Windows XP测试通过。注意内存的大小。(好像在虚拟机RH9运行不成功)
测试(在build目录下进行):
Windows XP:确定正确安装了bochs后,双击project2.bxrc即可。
红旗:在命令行输入bochs,选择6,即可。
测试时要输入完整的路径,由于GeekOS已实现了一个文件系统,故挂载的文件为/c,如输入
/c/shell.exe,则是一些shell命令,这个用户程序是在主函数一开始时就运行了的,(帮助文档里说有的)当然也可以运行别的程序。
作者:Late Lee(FightNow! Team)
Geekos project2(完全实现)
5星 · 超过95%的资源 需积分: 14 91 浏览量
2010-06-06
22:37:31
上传
评论 4
收藏 560KB RAR 举报
科技岁月
- 粉丝: 43
- 资源: 45
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第31题下一个排列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第30题串联所有单词的子串.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第29题两数相除.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第28题找出字符串中第一个匹配项的下标.zip
- 实验报告模板(1).docx
- C语言基础-C语言编程基础之Leetcode编程题解之第26题删除有序数组中的重复项.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页