144教育现代化传媒品牌
投稿邮箱:jyxdhbjb@vip.163
课程与教学
EOS 是为操作系统教学实验而设计的基于x86-64架构的的微型宏内核OS。它需要实现几个基本模块:内存管理、设备管理、进程调度、文件系统,并且支持多处理器。难点在于OS 跑在x86-64架构。在源代码方面,尽可能的做到简单,条理清晰,可读性强。在EOS 最终完成之后,会分成多个实验,供老师学生使用。EOS 需要在64位的Linux 下开发。
一 设计流程
我们使用QEMU 模拟器来运行EOS,使用QEMO+GDB 调试,使用bochs 作为辅助调试器。EOS 实验全部完成后会生成2个可用的文件:内核映像kernel.img 和文件系统映像fs.img
Makefile 中使用如下命令在模拟器上运行:
qemu-system-x86_64 -m $(MEMSIZE) -hda kernel.img -hdb fs.img -smp $(CPUS)
$(MEMSIZE) 是指为模拟器上的OS 分配的内存大小,$(CPUS) 是指模拟出的CPU 核心数 。
kernel.img 是由2个部分组成,一部分是引导文件boot,一部分是内核文件eoskernel
k e r n e l.i m g : $(O B J D I R )/k e r n /e o s k e r n e l $(OBJDIR)/boot/boot
$(V)dd if=/dev/zero of=kernel.img~ bs=512 count=20000 2>/dev/null
$(V)dd if=$(OBJDIR)/boot/boot of=kernel.img~ conv=notrunc 2>/dev/null
linux内核设计与实现 pdf
$(V)dd if=$(OBJDIR)/kern/eoskernel of=kernel.img~ seek=1 conv=notrunc 2>/dev/null
$(V)mv kernel.img~ kernel.img
boot 的文件格式与其他文件ELF64的格式不同,它是ELF32并且位于磁盘的0磁道0柱面1扇区中,模拟器模拟“开机启动”时它被加载到0x7c00处主要作用是在实模式下为进入保护模式做准备,并且
通过e820探测内存映射,保存到某地址供以后使用,然后进入保护模式。
在保护模式中采用读取ELF 文件头,然后根据ELF 文件头加载程序段,然后跳入kernel 的入口函数。
kernel 是由ELF32格式的bootstrap 与其余的各个ELF64格式的内核功能模块文件组成。
内核基址0xFFFF800000000000,被加载到物理内存0x200000处
如下的内核链接脚本:SECTIONS
{/*链接地址等于加载地址*/. = ENTRY32_BASE;
.bootstrap : {obj/kern/bootstrap.o (.text .data .bss)}/*链接地址等于加载地址+KERN_BASE*/. += KERN_BASE;
.text : AT(ADDR(.text) - KERN_BASE) {
*(EXCLUDE_FILE(obj/kern/bootstrap.o) .text .stub .text.* .*)}
.rodata : {
*(EXCLUDE_FILE(obj/kern/bootstrap.o) .rodata .rodata.* .*)}
. = ALIGN(0x1000);
.data : {*(EXCLUDE_FILE(obj/kern/bootstrap.o) .data)}
.bss : {*(EXCLUDE_FILE(obj/kern/bootstrap.o) .bss)}
/DISCARD/ : { *(.eh_frame .note.GNU-stack)}}
在bootstrap.S 中主要实现探测CPU 是否支持长模式(long mode),并且建立临时页表,每页大小2M,映射内存低4G 空间跟内核基址所在的高4G 空间到物理内存0-4G,为进入长模式做准备,然后进入到长模式。
x86-64教学操作系统EOS 的设计
李蓓,王禹,肖明明,郭京英,李宗璞
(临沂大学  信息学院,山东  临沂  276000)
摘 要:本文是在学习操作系统课程之上。设计了一个供教学使用的基于x86-64操作系统的设想和实验。关键词:操作系统;EOS;进程;多线程
基金项目:  本文受“临沂大学2015年大学生创新创业训练计划项目”资助。
作者简介:  李蓓,女,山东菏泽人,临沂大学,计算机科学与技术,在读本科。研究方向:数据管理。通讯作者:郭京英,李宗璞。
DOI:10.16541/jki.2095-8420.2016.34.057

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。