操作系统课程设计报告题 目:Geekos 操作系统的讨论与实现 专业:学号:学生:指导老师:2024 年 3 月 16 日目录一、 实验目的 2二、 项目设计要求 3三、 开发环境的建立 41. 开发环境的介绍 42. 开发环境的构建 4四、 项目设计原理 5五、 项目设计的实现 61. Project0 项目的具体实现 62. Project1 项目的具体实现 83. Project2 项目的具体实现 9六、 系统编译运行的结果 20七、 遇到的问题和解决方法 23八、 课程设计总结 24一、实验目的1.Project0:熟悉 GeekOS 的项目编译、调试和运行环境,掌握 GeekOS 运行工作过程。2.Project1:熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的可执行程序装入到存,建立核进程并运行的实现技术。3.Project2:扩充 GeekOS 操作系统核,使得系统能够支持用户级进程的动态创建和执行。二、项目设计要求1.Project0(1)搭建 GeekOS 的编译和调试平台,掌握 GeekOS 的核进程工作原理。(2)熟悉键盘操作函数,编程实现一个核进程。该进程的功能是:接收键盘输入的字符并显示到屏幕上,当输入 ctrl+d 时,结束进程的运行。2.Project1(1)修改/geekos/elf.c 文件:在函数 Parse_ELF_Executable( )中添加代码,分析 ELF 格式的可执行文件(包括分析得出 ELF 文件头、程序头,猎取可执行文件长度,代码段、数据段等信息),并填充 Exe_Format 数据结构中的域值。(2)在 Linux 环境下编译系统得到 GeekOS 镜像文件。(3)编写一个相应的 bochs 配置文件。(4)在 bochs 中运行 GeekOS 系统显示结果。3.Project2:要求用户对以下几个文件进行修改:(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”中高层操作支持的函数。(5)“src/GeekOS/kthread.c” 文 件 中 的 Start_User_Thread 函 数 和Setup_User_Thread 函数。Setup_User_Thread()函数的功能是为进程初始化核堆栈,堆栈中是为进程首次进入用户态运行时设置处理器状态要使用的数据。St...