Skip to content

Latest commit

 

History

History
81 lines (60 loc) · 3.24 KB

README.md

File metadata and controls

81 lines (60 loc) · 3.24 KB

WYOS

简介

WYOS是我在15年前大二的时候开始的一个实践活动,目的是手工打造一个基于32位x86的多任务实时操作系统。

没有参考linux的实现(因为当时深受windows习惯所致,不喜欢linux,但是最终借鉴了一些minix系统的bootloader部分)。

这个半成品的系统,在大学期间断断续续坚持了两年,在工作之后就荒废了。

今天(2019.7.11)突然又发现了这份代码,写份简介留作纪念。

功能

WYOS实现了以下功能

  • 硬件方面面
    • 通过软驱引导(2004年及以前还是非常常见的)
    • IO控制
    • 3.5寸软盘驱动(DMA支持)
    • 其余未来得及实现(比如键盘驱动,至今不能输入 手动狗头)
  • 内存方面
    • 分页模式
    • 每个进程4G线性空间(缺页未实现磁盘缓存,仅用空闲物理内存来处理)
    • 针对内存碎片做了一定优化
    • 权限控制
  • 系统方面
    • 多进程多线程的支持(多级优先级队列,抢占式优先级,以线程为调度单位,进程只是资源分配单位)
    • 内核态和用户态区隔(ring0、ring3)
    • 互斥量、信号量和消息机制(类似于windows的sendmessage)
    • FAT12文件系统的支持
  • 编程接口
    • string标准库(仅根据用户态测试程序的需要来编写,标准库内容太多了)
    • 系统调用(仅根据用户态测试程序的需要来编写)

目录结构

WYOS/trunk
   |---boot <dir>               引导代码,实模式到保护模式切换,加载系统内核,并跳转至内核执行
   |---driver <dir>             驱动代码
   |     |---disk <dir>         软驱驱动代码
   |---fs <dir>                 fat12文件系统代码
   |---include <dir>            头文件
   |---io <dir>                 io控制代码,DMA控制器驱动
   |---kernel <dir>             内核入口head.asm和kernel.c,还有cpu、中断等代码
   |---lib <dir>                实现的标准库代码
   |---message <dir>            消息机制代码
   |---mm <dir>                 内存管理代码
   |---out <dir>                编译链接输出目录
   |---process <dir>            进程线程代码
   |---syscall <dir>            系统调用API代码
   |---userlib <dir>            entry.asm是用来链接用户态程序的main函数,其它为API的ring3层代码
   |---userprogram <dir>        用户态测试程序代码,userbuild.bat是用来编译用户态代码的。
   |---video <dir>              显示器驱动程序
   |---build.bat                内核编译链接脚本,最后会在out目录生成wyosflp.img,刻录至软盘,插入电脑即可启动运行
   |---clean.bat                编译清理脚本
   |---nasmw.exe                汇编翻译程序

编译

只在windows下进行过编译

配置好gcc的环境变量

软盘镜像通过fdmake.exe,不过这个软件现在应该找不到了。也可以用别的,只要保证文件系统是fat12,并且将WYOSBOOT.BIN写入引导扇区即可。

运行build.bat

编译后的文件以及软盘镜像输出在out目录

调试

调试可以用bochs + gdb的方式。

引导代码直接通过二进制调试即可,c代码通过gdb来调试。

协议

无任何协议。