Skip to content

2329408386/os

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

No packages published