HyperOS操作系统 研究课题_第1页
HyperOS操作系统 研究课题_第2页
HyperOS操作系统 研究课题_第3页
HyperOS操作系统 研究课题_第4页
HyperOS操作系统 研究课题_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hyper OS提前上学 杨天祺提前上学 李嘉图选题背景操作系统教学中的问题:在操作系统课程中,需要涉及处理器体系结构、编译原理、汇编语言、算法与数据结构等各方面的知识,还需要很强的文档阅读能力。对不熟悉硬件的同学而言学习曲线较为陡峭。需要一个合适的教学用操作系统,在简洁的条件下展示操作系统的执行过程操作系统研究中需求:在部分操作系统的研究中,需要硬件无关的、足够简单的模拟环境例如对算法效率的分析等现状ucore/rcore 等教学用操作系统:时常需要阅读 Intel 手册,了解部分硬件的作用和原理无法清晰的看出操作系统的实际执行流程,增加了学生理解 OS 本质原理的难度OSTEP 等实现,将

2、各个部分拆分成小的模拟程序各个部分之间耦合度为 0,无法展示操作系统各个部分之间的协调工作例如 process 的时间片调度需要用到时钟中断来对时间片进行处理例如虚拟存储中需要用到缺页中断来处理缺页情况需求分析硬件无关:屏蔽掉与硬件相关的内容,展示出 OS 中协调工作的逻辑过程对硬件不太了解的学生学习时,可以大大降低学习难度在对操作系统中算法进行研究时,可以忽略大量与算法本身无关的硬件相关问题,减少测试开销。足够真实:应当体现为一个完整的各个部分协同工作的系统OSTEP 等实现虽然易用,但是难以将各个部分耦合,无法展示协同工作逻辑清晰:应该尽量遵循真实操作系统中的流程,展示真实系统中硬件、操作

3、系统、软件是如何协调工作的。Hyper OS一个运行在用户态,利用线程之间的通信和协调模拟 OS 调度的模拟操作系统硬件无关比较真实的展现操作系统的对各个部分的处理过程放弃了硬件对 kernel 的限制,以及一些 kernel 的实现技巧目前解决的主要问题包括:中断的处理:如何被正确发送给处理器,以及如何正确的返回内存的支持:如何模拟页机制以及虚拟存储,如何利用物理地址进行寻址进程的支持:如何定义用户态程序格式,并被加载成为进程,如何从用户进程中抢夺 CPU 的控制权外部设备的支持:外部设备如何和 OS 协调工作小组分工杨天祺:中断机制外部设备支持李嘉图:内存管理用户态程序与进程管理中断机制

4、调研对支持 SMP 的中断机制进行了调研在多处理器系统中,中断控制器 APIC 分为 Local APIC 和 I/O APIC 两部分Local APIC:处理一个核心的中断I/O APIC:接收一个主板上的中断外部中断分发到哪个进程在由 I/O APIC 发送至 Local APIC 过程中由用户定义的 interrupt affinity 决定内部中断分发至发送该中断的 CPU 指令所在的核心中断处理完成后,CPU 会写入 Local APIC 的 EOI 寄存器通知 Local APIC 中断处理完成,并由 Local APIC 完成后续操作中断机制 实现中断机制的难点在于如何仅通过用

5、户态的机制实现这些信号的传递,以及如何打断当前正在执行的用户进程在线程中通过线程安全队列进行事件的触发和通信线程安全队列中实际采用条件变量采用 std:promise 阻塞发起中断的线程,并在返回时通知发起中断的线程由于 Hyper OS 中 LAPIC 等待在事件队列上,无法通过写入 EOI 寄存器实现中断的返回。因此采用对事件队列发送一条信号事件,通知 LAPIC 进行相关的处理操作中断嵌套采用维护一个中断处理例程栈实现,在收到的是一个内部中断,且目前中断栈上也是内部中断的时候进行嵌套中断机制 打断中断机制中另一个难题是如何打断当前用户进程的执行,并执行中断服务例程。1. 采用软中断,利用

6、进程间的信号模拟一个中断,但是这样需要把所有逻辑进程/设备都用进程维护,需要进程间共享信息,非常不方便2.所有逻辑进程/设备都分别用线程来维护,但这时候就不能用软中断,采用一个单独的线程处理一个CPU的所有中断实际我们采用解决方案2,需要用户态程序放弃 CPU 使用权Kernel应用程序访存接口代码进程进程条件变量所执行程序页表调度器进程状态队列调度算法虚拟内存物理内存管理进程内存布局缺页处理程序应用程序接口应用程序接口设计的难点是如何实现打断应用程序的控制流。可能的解决方案:编写指令级和编译器,用汇编码表示程序:工作量大,复杂性高,失去了 Hyper OS 的抽象性和简洁性我们的设计是,应用

7、程序使用给定的接口:handle 访问内存访存语句结束后检查是否有中断,如果有则将自己阻塞在一个条件变量上,主动交出控制权。应用程序格式任何程序是一个继承自program的子类,要实现两个虚函数:static_init: 分配静态区、BSS区的空间,修改静态区数据main: 应用程序的入口,被加载到进程中后,执行其中的代码程序必须通过给定的接口handle来分配和访问内存:在静态区分配:在static_init中使用alloc_static() 分配在 bss 区分配:在static_init中使用alloc_bss() 函数分配在栈上分配:在main中使用alloc_stack()函数分配在

8、堆上分配:在main中使用alloc_heap()函数分配,使用free_heap()进行释放进程进程是正在执行的程序的抽象,包括程序和程序的运行上下文。进程信息由 process_t 类管理,包括进程名,进程号,进程状态以及进程所执行的程序。进程上下文主要包括两点:进程的页表进程执行到的位置如何实现控制权的抢夺?handle 访存操作结束后检查是否有中断若有,发出信号,并原子的将自己阻塞在条件变量上调度器Hyper OS 调度器的主要作用是维护进程状态队列,进行进程状态切换目前仅使用简单的 RR 时间片轮转算法调度。进程调度的例子系统调用与进程Hyper OS 提供了系统调用接口应用程序可以

9、通过两个系统调用:create_processexec_program创建进程和加载程序,可以使用wait阻塞自己直到子进程退出shell 是用户态程序创建进程的例子中断机制与进程管理在中断机制的实现中,由于采用大量线程进行维护,其中需要很多锁进行同步互斥操作,容易导致死锁或其它问题。其中一个较大的问题如下:在添加了用户进程支持后,中断机制还需要进行 schedule,唤醒需要唤醒的用户进程。此时若在一个系统调用的同时遭遇时钟中断,此时若时钟中断比系统调用先执行,且由于时间片用完进程发生切换,会导致后发送的系统调用的调用者被挂起,无法被正确的处理解决方案:规定中断的优先级,内部中断始终在外部中

10、断之前执行只有在当前用户程序主动放弃 CPU 使用权时才检查是否有外部中断需要执行,而不是 LAPIC 先执行中断服务例程,再等待当前用户程序放弃 CPU页表像真实的系统一样,Hyper OS 具有页机制,进程拥有完整的 4G 虚拟地址空间,线性地址经过 MMU 的翻译称为物理地址,并通过线程间通信进行物理内存的读/写操作。为了简单起见,Hyper OS 仅使用单级页表,每个进程在 process_t:context 中存有页表,当进程要进入执行状态时,将 core:context 设置为进程的context。进程内存布局Hyper OS 程序有着非常简单的进程内存布局应用程序被加载到内存中时

11、,Kernel 负责为 .data 和 .bss 申请页面,并给 .data 赋值,为 .bss 清零。.text.data.bssheap(up)stack(down)屏幕设备的实现为了更加完善的输入输出支持和更好的用户体验,我们实现了 screen 模块,用于在屏幕上分屏输出 console 和 message。console 部分对应 IO 设备,显示标准输出的结果,并对键盘事件进行捕获,利用进程间通信发送给 Hyper OS,触发对应的中断。message 部分是提供给学习者的帮助,说明 OS 和模拟的硬件在执行何种操作。同时将 console 的所有键盘输入全部捕获,并发送至 ker

12、nel 进行处理。Screen 采用 Python 实现,依赖 prompt_toolkit 模块进行屏幕操作。由于 prompt_toolkit 的文档较少,很多时候需要查看模块源代码对其中提供的方法进行理解,并通过在运行时动态修改其中的部分方法,对其功能进行定制* 这部分由于仍然有 bug,暂未合并至主分支,详细可见分支 feat_screen:/tqyaaaaang/Hyper-OS/tree/feat_screenLogging & Message service手动实现了 logging,会在指定的文件或标准输出中记录运行状况,以便调试。log 有 info、debug、warn、e

13、rror、critcal 五个等级。同时实现了 message service,给学习者提供帮助,说明 OS 和模拟的硬件在执行何种操作。Logging 和 message service 使用方式简便:为了实现这点,采用了大量 C+11 的特性后续工作计划完成屏幕设备,提供完整的输入输出支持实现简单的文件系统,展示文件系统的处理方式编写更多的测试,增加系统的可靠性编写更加详细的文档,对系统中采用的特殊实现技巧进行说明未来展望Hyper OS 并不需要较强的硬件知识基础,对于硬件基础较差的同学(如外系的、高三的同学),可以利用 Hyper OS 更加清晰的理解操作系统的逻辑。可以作为 ucore lab 实验中算法相关部分的替代选项可以为每个部分定义对应的时间开销,模拟真实硬件上的时间开销比例,为算法效率分析提供较为方便

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论