-
Notifications
You must be signed in to change notification settings - Fork 1
2329408386/os
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
一 整体介绍: 2018 年寒假期间, 实现一个以 c 语言为主, 以 grub 作为 bootloader 的 mini 操作系统. 目前通过测试的主要功能有: 控制台操作, 内核调试, gdt 表, idt 表, 内存管理, 用户操作. 对于用户, 可以输入指令来执行系统内嵌的命令, 当发生错误时, 会打印错误信息 二 使用说明: 我只在虚拟机上测试使用过该操作系统. 过程: 1. 安装qemu虚拟机 2. 根据自己的cpu情况建立一个qemu虚拟机的链接,比如我的是i386的, 那么是命令是(sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu) 3. 在根目录下建立/mnt/kernel文件 4. 进入os文件夹, 键入 make qemu命令就好了. 三 项目流程: 1. 2018年1月27号, 增加common模块, 主要包含3个函数的实现: (1) outb(): 输出一个字节到端口处 (2) inb(): 从端口处读入一个字节 (3) inw(): 从端口处读入一个字 2. 2018年1月31号, 增加console模块, 增加对控制台信息的操作, 具体实现的函数包括: (1) void console_clear(): 清屏操作 (2)void console_putc_color(char c,real_color_t fore,real_color_t back): 输出一个带颜色的字符 (3) void console_write(char *cstr): 输出一个以'\0'结尾,黑色背景,白色前景色的字符串 (4) void console_write_color(char *cstr,real_color_t fore,real_color_t back): 输出一个以'\0'结尾,自定义前景色和背景色的字符串 (5) void console_write_hex(uint32_t n,real_color_t fore,real_color_t back): 以16进制的形式输出一个自定义前景色和背景色的无符号整数,假设该整数是符合条件的整数 (6) void console_write_dec(uint32_t n,real_color_t fore,real_color_t back): 以10进制形式输出一个自定义前景色和背景色的无符号整数,假设该整数是符合条件的整数 (7) void console_write_dec_sign(int32_t n,real_color_t fore,real_color_t back): 以10进制形式输出一个自定义前景色和背景色的有符号整数,假设该整数是符合条件的整数 除了这几个对外部可见的函数, 还实现了move_cursor()和scroll()2个帮助函数,用于更新光标位置, 和滚动屏幕. 滚动屏幕的实现有参考 清华大学王爽老师 <<汇编语言>> 的设计思想. 3. 2018年1月31日, 增加string模块, 包含对字符串处理的基本函数, 具体接口在(include/string.h)说明, 具体实现在(libs/string.c)文件. 4. 2018年2月2日,为console模块添加打印浮点数函数(默认都当做是单精度浮点数处理). 5. 2018年2月3日,修改console模块中打印浮点数的实现,让其可以保留更多有效位. 添加内核打印模块, 用于根据一定规则打印出字符串的内容. 具体接口在(include/print.h)说明, 引用的可变长参数的定义在(include/vargs.h)说明, 具体实现在(libs/print.c)文件. 6. 2018年2月5日,引用grub规范中的multiboot模块和elf(excutable linked formater)模块,用于记录grub在启动内核时记录的内核的相关信息. 定义见(include/multiboot.h,include/elf.h),实现见(libs/elf.c) 7. 2018年2月5日,增加debug模块及相应的调试函数. 定义见(include/debug.h),实现见(libs/debug.c). 8. 2018年2月9日,增加gdt模块,及相应调试函数, 用于实模式切换到保护模式时, 初始化全局描述符表. 定义见(include/gdt.h),实现见(libs/gdt.c,libs/gdt_t.s). 9. (a) 2018年2月13日, 增加idt模块, 搭建基本的中断处理框架, 具体实现见(libs/idt.c,libs/idt_t.s). (b). 增加时钟中断处理函数(drivers/timer.c). 10. 2018年2月16日,增加键盘输入(keyboard)模块,具体实现见(drives/keyboard.c). 11. 2018年2月25日,添加物理内存管理模块, 具体实现见(libs/pmm.c)(Physical MeMory). 12. 2018年3月2日, 参见hurley代码, 实现对虚拟内存的管理(libs/vmm.c). 注册页错处中断(pmm.c->page_fault()). 13. 2018年3月6日, 以hurley同学的heap框架为基础, 实现内核堆模块(libs/heap.c). 14. 2018年3月8日, 完成内核线程调度模块(libs/sched.c). 15. 2018年3月10日, 添加用户模块,具体见(user文件夹). 16. 2018年3月10日, 啊啊啊, 不敢相信呢, 我居然把操作系统的基本部分完成了, 有交互功能了, 好高兴的样子!!!! 四 注意事项: 1. 对所有直接引用的代码, 都有注释出处, 如有侵权,请联系我(lcp2329408386@gmail.com), 我会将引用的部分全部删除. 2. 出于学习目的的同学, 可以直接使用任何部分的代码,注明出处就好了. 3. 非常感谢大家提出的意见. 五 代码引用: 1 James先生(http://www.jamesmolloy.co.uk/tutorial_html/): /Makefile,/boot/boot.s 2 hurley: /libs/vmm.c, /srcipts/kernel.ld, heap.c 3 另外, /include/elf.h和/include/multiboot.h文件来源于grub规范
About
一个简单操作系统的实现
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published