- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GeekOS操作系统课程设计项目介绍讲解
一、项目设计目的 熟悉GeekOS的项目编译、调试和运行环 境,掌握GeekOS运行工作过程。 二、项目设计要求 1、搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。 2、熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并显示到屏幕上,当输入ctrl+d时,结束进程的运行。 三、项目0的实现主要由以下步骤完成(在项目0的/src/geekos/main.c中完成): 编写一个C语言函数,函数功能是:接收键盘输入的按键,并将键值在显示器显示出来,当输入ctrl+d就退出; 在Main函数体内调用Start_Kernel_Thread函数,将步骤1编写的函数地址传递给参数startFunc,利用Setup_Kernel_Thread函数建立一个待运行的线程。 在Linux环境下编译系统得到GeekOS镜像文件。 编写一个相应的bochs配置文件。 在bochs中运行GeekOS系统显示结果。 第九章 设计项目1 一、项目设计目的 熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的可执行程序装入到内存,建立内核进程并运行的实现技术。 二、项目设计要求 1、修改/geekos/elf.c文件:在函数Parse_ELF_Executable( )中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构中的域值。 2、在Linux环境下编译系统得到GeekOS镜像文件。 3、编写一个相应的bochs配置文件。 4、在bochs中运行GeekOS系统显示结果。 三、项目设计提示 1、ELF文件格式 2、内存中的可执行文件镜像 3、内核线程的建立流程 4、Spawn_Program函数的功能 根据Exe_Format中的Exe_Segment结构提供的用户程序段信息,及用户进程堆栈大小计算用户进程所需的最大内存空间,即要分配给用户进程的内存空间; 为用户程序分配内存空间,并全部初始化为零,否则系统后面运行可能出错; 根据段信息将用户程序中的各段内容复制到分配的用户内存空间。 根据Exe_Segment提供的用户段信息初始化代码段、数据段以及堆栈段的段描述符和段选择子。 5、Parse_ELF_Excutable函数 int Parse_ELF_Executable(char *exeFileData, ulong_t exeFileLength, struct Exe_Format *exeFormat) 参数:exeFileData——已装入内存的可执行文件所占用空间的起始地址 exeFileLength——可执行文件长度 exeFormat——保存分析得到的elf文件信息的结构体指针 根据ELF文件格式,用户可以从exeFileData指 向的内容中得到ELF文件头,继续分析可以得到 程序头,程序代码段等信息。 第十章 设计项目2 一、项目设计目的 扩充GeekOS操作系统内核,使得系统能够支持用户级进程的动态创建和执行。 二、项目2要求用户对以下几个文件进行修改: 1)“src/GeekOS/user.c”文件中的函数Spawn(),其功能是生成一个新的用户级进程; 2)“src/GeekOS/user.c”文件中的函数Switch_To_User_Context(),调度程序在执行一个新的进程前调用该函数以切换用户地址空间; 3)“src/GeekOS/elf.c”文件中的函数Parse_ELF_Executable()。该函数的实现要求和项目1相同。 4)“src/GeekOS/userseg.c”文件中主要是实现一些为实现对“src/GeekOS/user.c”中高层操作支持的函数。 Destroy_User_Context()函数的功能是释放用户态进程占用的内存资源。 Load_User_Program()函数的功能通过加载可执行文件镜像创建新进程的User_Context结构。 Copy_From_User()和Copy_To_User()函数的功能是在用户地址空间和内核地址空间之间复制数据,在分段存储器管理模式下,只要段有效,调用memcpy函数就可以实现这两个函数的功能。 Switch_To_Address_Space()函数的功能是通过将进程的LDT装入到LDT寄存器来激活用户的地址空间; 5)“src/GeekOS/kthread.c”文件中的Start_User_Thread函数和Setup_User_Thr
您可能关注的文档
最近下载
- 2025年秋新人教版三年级上册数学全册教学课件.pptx
- 初中道德与法治统编版七年级上册第三单元 珍爱我们的生命第八课 生命可贵认识生命 (1).pptx
- 长期卧床患者的皮肤护理与预防压疮课件.pptx VIP
- iso-10816-3-2009机械振动标准.docx VIP
- 健康管理学知到智慧树期末考试答案题库2025年上海健康医学院.docx VIP
- (2025秋)部编版二年级语文上册 《 去外婆家》精品教案.pdf VIP
- HD 60364-4-41-2017 国外国际规范.pdf VIP
- 从维熙《秋山寻野》.docx VIP
- 初中道德与法治新人教版七年级上册第三单元《珍爱我们的生命》教案(2024秋).doc VIP
- 居住建筑节能设计标准.pdf VIP
文档评论(0)