[操作系统课设]GeeKOS操作系统的研究与实现

一.GeekOS操作系统概论

        1.1教学操作系统

(1)针对RISC结构MIPS处理器

         操作系统:Nachos、OS/161

(2)针对CISC结构Intel IA-32 (or x86)通用处理

         操作系统:MINIX、GeekOS

    我们用到的是:GeekOS

        1)GeekOS:是一个基于X86架构的PC机上运行的微操作系统内核

        2)是一个用C语言开发的操作系统,可以在LinuxUnix环境下对其进行功能扩充

        3)其针对进程文件系统存储管理等操作系统核心内容分别设计了7个难度逐渐增加的项目供学生选择

        4)GeekOS内核设计简单,却又兼备实用性,它可以运行在真正的X86 PC硬件平台

                GeekOS操作系统源文件geekos-0.3.0.zip可以从http://geekos.sourceforge.net下载。

                或者直接下载本篇文章上面附的压缩包

        1.2 GeekOS的项目(我们要做的项目0~5)

                项目0:项目0要求实现一个内核进程,功能是实现从键盘接收按键,并在屏幕上显示。主要是熟悉GeekOS的编译、运行过程,了解计算机系统的启动原理

                项目1:项目要求熟悉ELF文件格式,并编写代码对ELF文件进行分析,并将分析传送给加载器。主要让学生熟悉可执行链接文件(ELF文件)的结构,并学会加载和运行可执行文件。

                项目2:要求学生实现对用户态进程的支持。在项目2实现之前,GeekOS一直使用内核进程。对用户态进程执行的支持包括用户态进程结构的初始化用户进程空间的初始化用户进程切换用户程序导入等。该项目中,存储分配依然使用分段分配方式。实现项目2后,用户就可以使用GeekOS提供的命令行解释器Shell运行一些命令来执PFAT文件系统内的用户测试程序。

                项目3:要求学生改进GeekOS的调度程序,实现基于4反馈队列的调度算法,并实现信号量,支持进程间通信。

                项目4:要求学生实现分页虚存管理,以替代在项目1和项目2中采用的分段存储管理。实现分页虚存管理后。系统在内存不够的情况下就可以将部分页调到硬盘,以释放内存实现虚拟存储技术。

                项目5:要求实现GOSFS文件系统。由于GeekOS使用了虚拟文件系统,可以加载不同的文件系统,而系统默认加载的是PFAT只读文件系统。在这个项目中,需要实现一个多级目录的、可读写的文件系统。

        1.3GeekOS系统源代码结构

                GeekOS操作系统源文件geekos-0.3.0.zip可以从http://geekos.sourceforge.net下载。

                点开src:

                点开任何一个project:

二. GeekOS实验项目开发环境的搭建        

(1) 下载并安装 VMware虚拟机;(下面是我踩到坑时参考的一些文章)

最新超详细VMware虚拟机安装完整教程 - 付宗乐 - 博客园 (cnblogs.com)

VMware下载安装教程(超详细)-CSDN博客

安装vm虚拟机 Failed to install the hcmon driver 解决方法 - 知乎 (zhihu.com)

VMware安装时出现 “您无权输入许可证密钥,请使用系统管理员账户重试”解决方案_你无权输入许可证密钥,请启用管理员-CSDN博客
        如果还是解决不了的话只能去橙色软件找人帮忙安装了

(2)在 VMware虚拟机上安装 linux;

VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客
(3)在 VMware虚拟机上的 linux 环境下对 GeekOS源文件进行编译和链接,编译成功后生成 fd.img 软盘映射文件和 hd.img 硬盘映射文件;
(4) 下载并安装系统仿真工具 Bochs;  
Bochs x86 PC emulator download | SourceForge.net
(5)配置 Bochs 环境配置文件 Bochsrc.txt;
(6)启动 Boch 环境,在提示中出现 GeekOS的欢迎界面;
(7)GeekOS系统编译和仿真成功。
(8) 开 始 安 装 好 bochs 之 后 , 对 bochsrc.txt 进 行 配 置 , 考 虑 到 bochs 自 带bochsrc-sample.txt 的比较复杂,因此对其进行改写,方便日后阅读。且将该配置文件放在各个项目之下,方便进行修改。Bochs使用配置文件中的信息来寻找使用的磁盘镜像文件,运行环境配置以及其他一些模拟器的配置信息。以project0为例,该项目的配置文件如下:

megs: 8   

//megs用于设置模拟系统的内存,这里使用的是8MB。

boot: a  

  //引导盘镜像文件, boot用来定义模拟机器中踊跃引导启动的驱动器,可以为软盘硬盘或CDROM,这里使用虚拟软盘A来进行引导系统。

floppya: 1_44=fd.img, status=inserted

// floppya和floppyb分别表示第一个软驱和第二个软驱,如果需要从一个软盘上来引导系统则floppya就需要指向一个可引导的磁盘。

log: ./bochs.out    

// log用于记录日志信息。

#Project 1以后的项目还需要ata串口驱动器,需要加上:

ata0-master: type=disk, path=diskc.img, mode=flat, cylinders=40, heads=8, spt=64

//ata0用于启动模拟系统中的ATA通道,对于每个通道必须指明两个IO基地址和一个中断请求号.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508032.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMvc执行流程源码解析

一、简介 Spring web Mvc是基于ServletApi构建的原始Web模块,从一开始就包含在Spring框架中; 从Servlet到SpringMvc 最典型的MVc就是JSPServletjavaBean的模式; 弊端: 1、xml下配置Servlet的映射非常麻烦,效率低&…

OpenHarmony实战:命令行工具hdc安装应用指南

一、工具概述 hdc(OpenHarmony Device Connector)是为开发人员提供的用于设备连接调试的命令行工具,该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备(或模拟器)进行连接调试通信。 简言之&#xf…

16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串

16进制的字符串转byte[]数组 public class ClientString16 {@Testpublic void get16Str(){String str="48 47 12 00 14 12 16 08 15 0d 30 0f 02 30 30 30 30 30 30 30 30 30 30 00 c2";byte[] bytes = hexStringToByteArray(str);getBytetoString(bytes);//String …

Redis实战篇-添加优惠卷

3.3 添加优惠卷 每个店铺都可以发布优惠券,分为平价券和特价券。平价券可以任意购买,而特价券需要秒杀抢购: tb_voucher:优惠券的基本信息,优惠金额、使用规则等 tb_seckill_voucher:优惠券的库存、开始抢…

(一)基于IDEA的JAVA基础10

相信最近许多朋友学习语言可能会有焦虑,“现在人工智能这么发达,丢个指令进去它就还给你一个结果,我们学习它还有意义吗?”。 对于这个问题,就像我们小学学习算数,我们明知道有计算器这么方便的东西&#…

Java 处理Mysql获取树形的数据

Mysql数据&#xff1a; 代码如下&#xff1a; Entity&#xff1a; Data Accessors(chain true) public class Region {private BigInteger id;//名称private String name;//父idprivate BigInteger parentId;private List<Region> children;private Integer createTim…

Spring 事件广播机制详解

前言 写这篇文章的初衷源自对 Spring 框架中事件机制的好奇心。在编写观察者模式代码示例时&#xff0c;我突然想起了 Spring 框架中支持多事件监听的特性&#xff0c;例如ContextClosedEvent、ContextRefreshedEvent、ContextStartedEvent等等。传统的观察者模式通常是基于单…

基于springboot+vue实现的驾校信息管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

YOLOv9改进策略 :IoU优化| Inner-IoU基于辅助边框的IoU损失,高效结合新型边界框相似度度量(MPDIoU)| 二次创新

💡💡💡本文独家改进:Inner-IoU引入尺度因子 ratio 控制辅助边框的尺度大小用于计算损失,新型边界框相似度度量(MPDIoU)MPDIoU损失进行有效结合 💡💡💡适用场景:小目标数据集,进一步提升检测精度,强烈推荐 《YOLOv9魔术师专栏》将从以下各个方向进行创新: …

【Java八股面试系列】Arraylist和HashMap的底层原理

文章目录 ArrayList源码总&#xff1a;构造方法扩容机制remove HashMap总&#xff1a;构造方法细节问题putVal()方法resize()方法Hash值 HashMap常见问题 ConcurrentHashMap总&#xff1a;putVal()方法自己的测试 为什么重写HashCode和equals ArrayList源码 总&#xff1a; *…

代码随想录算法训练营三刷day41 | 动态规划之 343. 整数拆分 96.不同的二叉搜索树

三刷day41 343. 整数拆分确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp的初始化确定遍历顺序举例推导dp数组 96.不同的二叉搜索树确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组…

2024年,我写了一个视频去水印的微信小程序

花了两天时间&#xff0c;写了一个简单的微信小程序&#xff0c;主要为了学习一下微信小程序相关的知识。 目录 一、功能介绍 二、页面展示 三、简单总结 四、在线体验 一、功能介绍 小程序的主要功能是对目前的主流视频平台的视频进行去水印处理。 项目难点在于收集各个平…

关于多物理场耦合仿真的相关思考

关于多物理场耦合仿真&#xff0c;写点自己的思考。 1 核心本质 多物理场耦合仿真&#xff0c;听起来是个挺高大上的名词。不少人被各种名词创新搞得云里雾里&#xff0c;不知所谓。 实际上&#xff0c;多物理场耦合仿真理解起来并不算复杂。搞清楚了本质&#xff0c;做多物理…

LeetCode-热题100:160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

“美国债务螺旋上升,每百天膨胀万亿”!华尔街:投入比特币是明智之举,美元早晚垮台?

​ 前不久&#xff0c;黄金和比特币价格的双双逼近历史高位&#xff0c;再度吸引了不少金融市场参与者的关注。虽然这两类资产大涨的背后&#xff0c;有着诸如比特币减半临近、地缘局势引发避险等各自的原因&#xff0c;但也有一些业内人士提到了美国政府债务规模激增等无法回…

day_2FreeRTOS使用PWM+ADC光敏电阻完成光控灯实验

主要代码&#xff1a; int adc_val0;//保存ADC采集到的数值 float volt0;//保存电压值HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);//打开定时器的PWM通道3 TIM3->CCR30;//改变CCR的值&#xff0c;范围0——999&#xff0c;不能超过ARRwhile (1){ HAL_ADC_Start(&had…

小米SU7又“赢麻了”对标雷军的爽文人生:天选成功人士

会议之眼 快讯 2024年3月28日&#xff0c;小米SU7汽车盛大发布&#xff0c;吸引了众多关注者。SU7标准版售价21.59万元&#xff0c;Pro版24.59万元&#xff0c;Max版本29.99万元&#xff0c;全部控制在30万元以内。发布会场面火爆&#xff0c;各大车企领导齐聚&#xff0c;雷军…

OMP压缩感知仿真(MATLAB)

clc; clearvars; close all;% 读文件 Ximread(mandrill256.bmp); tic; Xdouble(X); [m,n]size(X);% % 小波变换矩阵生成 [LL1, LH1, HL1, HH1] dwt2(X, haar); [LL2, LH2, HL2, HH2] dwt2(LL1, haar); % [LL3, LH3, HL3, HH3] dwt2(LL2, haar); % [LL4, LH4, HL4, HH4] d…

ObjectiveC-07-OOP面向对象程序设计基础

OOP&#xff08;面向对象程序设计&#xff09;是一个简单又复杂的课题&#xff0c;之所以简单是因为其概念清晰&#xff0c;内容简单&#xff0c;之所以复杂是因为没有固定的模式可寻&#xff0c;正所谓千人千面。 从本节开始&#xff0c;笔者大概会用5篇左右不同的专题来讲解O…

虚拟机ip不停地变每次使用ssh不好登录?有手就行!

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 虚拟机ip不停地变每次使用ssh不好登录&#xff1f;有手就行&#xff01; 桥接模式下固定ip&#xff1f;NoAvahi服务&#xff0c;你值得拥有Avahi解决方案虚拟机中配置Avahi服务配置成功展示测试成功 桥…