Book OS
什么是Book OS? “书是人类进步的阶梯” ——高尔基。 因此它叫做Book OS。
Book OS是一个基于x86平台的32位操作系统，其基于xbook2内核进行开发。
xbook2内核特性：
> i386处理器平台
> ELF格式内核和程序
> 内存管理: 分页内存管理，物理内存管理，虚拟内存管理，进程地址空间管理
> 多任务: 多进程和内核线程，用户多线程（pthread）
> IO驱动框架: 设备对象框架，高级中断机制，软中断机制
> 内核: 时间管理，定时器管理，异步异常管理
> 文件系统: FSAL文件系统抽象层（类VFS），FATFS文件系统
> 进程间通信: 消息队列，共享内存，信号量，pipe管道，fifo命名管道
> 通用驱动: ramdisk，null，zero，tty，ptty，view
> PC驱动: ahci磁盘，console控制台，e1000网卡，ide磁盘，ps2keyboard键盘，ps2mouse鼠标，rtl8139网卡，sb16声卡，serial串口，vbe视频
Book OS系统功能：
> 库：xlibc标准C库，pthread，netsocket，SDL2，SDL2_image，SDL2_ttf，cario，cjson，dotfont，freetype，gato，jpeg，libwebp，pixman，uview，xtk，zlib等
> 命令行程序：bash，cal，cat，cp，cpuinfo，date，echo，ls，lua，mem，mkdir，osver，ps，rename，rm，rmdir，sh等
> 图像界面程序：infones游戏模拟器，invader游戏，lite文本编辑器
很抱歉，暂无可下载镜像版本！请转到开发页面，到开源仓库下载源码构建！
BookOS开发文档
xbook2内核开发文档
BookOS仓库：(gitee) or (github)
xbook2仓库：(gitee) or (github)
Windows 平台工具链： BuildTools
Windows Qemu for i386模拟器: Qemu
Windows Tap 虚拟网卡: Tap Windows
开源软件供应链点亮计划 - 暑期2021
简介：开源软件供应链点亮计划鼓励大家关注开源软件和开源社区，致力于培养和发掘更多优秀的开发者。 活动将在暑期进行，我们将与开源社区紧密合作，提供一对一的导师指导，邀请技术大牛开展线上免费讲座。 我们鼓励研究人员、开源爱好者、在校师生参与开源软件的开发与维护，促进开源软件的发展和优秀开源软件社区建设， 增加开源项目的活跃度，推进开源生态的发展。
开发者可以在开源之夏上面参与Book OS发布的项目，可以通过 【传送门】 报名参加

索引 | 项目名 | 难度 | 内容
--- | --- | --- | ---
1 | Pthread 多线程的优化与完善 | 中 |
导师 | 项目社区导师：吴松杰 导师联系方式：2991707448@qq.com
描述 | 在xbook2中的pthread仅实现了最基础的线程管理功能，仍有许多功能尚未实现， 需要优化原有实现并且完善它，让它和标准的pthread功能一样， 最终支持SDL2_Thread的pthread子模块。
产出要求 | * 标准的pthread库 * 支持SDL_Thread的pthread接口
基础要求 | * C语言基础 * pthread编程经验
参考资料 | * POSIX thread (pthread) libraries
项目直达 | 项目编号：210420173
2 | Qemu virtio驱动的支持，虚拟化走起! | 高 |
导师 | 项目社区导师：朱宇 导师联系方式：yu.zhu8@foxmail.com
描述 | 熟悉virtio specification和xbook 驱动框架， 并编写可用的qemu virtio 驱动，包括但不限于 gpu, block, mouse, keyboard。
产出要求 | * 实现Qemu Virtio驱动
基础要求 | * C语言基础 * 驱动开发经验 * Qemu使用经验
参考资料 | * Qemu KVM virtio
项目直达 | 项目编号：210420172
3 | 从声卡驱动到DSP编程接口的实现 | 中 |
导师 | 项目社区导师：胡自成 导师联系方式：2323168280@qq.com
描述 | 在x86平台从零实现一个ac97声卡驱动， 熟悉并使用xbook2内核的驱动框架， 了解声卡的数据传输以及编程接口。 并在此驱动基础之上封装一套dsp编程接口作为音频驱动框架， 并掌握简单的音频编程流程。
产出要求 | * 实现AC97声卡驱动 * 实现DSP驱动框架接口 * 使用DSP接口编程 * 支持SDL2_Audio的DSP接口
基础要求 | * C语言基础 * 驱动开发经验 * 音频编程经验
参考资料 | * linux 下DSP音频处理
项目直达 | 项目编号：210420171
4 | Bookos内存管理防止碎片化机制 | 中 |
导师 | 项目社区导师：李石亮 导师联系方式：25755975@qq.com
描述 | 内存防止碎片化，保证有一定连续性的物理内存。 设置内存的分区域使用，有效的加强的内存缓存的命中率， 这些都是和内存防止碎片化有着紧密的关系。也是内核讨论里面最近这些年新增的性能。 同样也是希望能够把这个功能实现出来， 让同学们能够亲自体会一个简单的操作系统向一个优化的操作系统的过渡。 其中最大的困难就是内存和其他模块紧密相连， 对其余部分的代码不了解是最大的困难， 而不是内核内存管理的本身的算法。
产出要求 | * 实现一个内存的分区域的管理 * 在分配机制上实现区域化 * 在内存的回收和保留的部分实现区域化管理
基础要求 | * 对bookos有一定的了解 * 愿意花时间投入到这个项目 * 对linux内存管理部分有一定的理解 * 有雄心壮志有承担中国操作系统的理想
参考资料 | * 待补充
项目直达 | 项目编号：210420156
5 | Bookos内存管理页面回收机制 | 高 |
导师 | 项目社区导师：李石亮 导师联系方式：25755975@qq.com
描述 | 内存的页面回收机制，一直是linux的开源社区内存管理的核心位置， 这个部分性能的优化对大型的服务器是非常有价值的。 特别是锁的机制细化，对性能的提升甚至能到30%。 在bookos的基础上，把简单的内存管理系统，增加页面的回收机制， 同时也增加缓存的系统实现。根据学生的能力和基础， 尽可能的实现一个相对复杂的页面缓存和回收机制。 现在的书上有代码可实现的操作系统模型在内存管理部分都不是非常的复杂。 而对linux内核内存管理部分的书籍，即使代码讲的再详细， 因为linux内核与内存管理相应的api又太多，我们又很难的去修改内核。 所以我们设计这个项目，让学生通过在我们熟悉和了解的bookos上实现内存管理的回收机制， 来提升学生对操作系统的理解能力。
产出要求 | * 完成一个简单的内存的缓存的机制 * 在这个机制上设置内存的页面回收机制 * 增加对应的自动回收内存的内核线程，能定期的唤醒 * 保证这个功能的可执行。
基础要求 | * 实现过操作系统，能调bug * 对linux内核的内存部分要熟悉 * 能够熬，能够面对调好几天都很难解决的bug * 勤奋
参考资料 | * 待补充
项目直达 | 项目编号：210420155
6 | Bookos内存管理页面交换模块 | 中 |
导师 | 项目社区导师：李石亮 导师联系方式：25755975@qq.com
描述 | 在bookos的基础上，把简单的内存管理系统，增加页面交换到硬盘的模块， 主要是仿照linux内核内存管理的部分来实现。根据学生的能力和基础， 尽可能的实现一个相对复杂的交换系统。 现在的书上有代码可实现的操作系统模型在内存管理部分都不是非常的复杂。 而对linux内核内存管理部分的书籍，即使代码讲的再详细，因为linux内核与内存管理相应的api又太多， 我们又很难的去修改内核。所以我们设计这个项目，让学生通过在我们熟悉和了解的bookos上实现交换模块， 来提升学生对操作系统的理解能力。
产出要求 | * 在bookos上基本实现一个交换模块，完成基本的交换功能。 * 在完成交换功能以后，把这个交换功能和内存的页面回收机制结合再一起，方便页面的换出和回收。 * 在前两个基础上要统一接口。 * 对性能做测试，保证性能。
基础要求 | * 对bookos操作系统有了解 * 对操作系统有了解 * 最好自己实现过操作系统 * 能吃苦肯花时间学习 * 即使前面的基础都没有，但是应用代码量大，技术基础好，喜欢内核也是可以的。
参考资料 | * 待补充
项目直达 | 项目编号：210420153