WangFuJie Blog

路在脚下,心向远方

自制操作系统 - 硬盘驱动

硬盘驱动

PC机最多支持4块IDE硬盘,因此操作系统首先需要识别硬盘,识别硬盘利用IDENTIFY机制。识别硬盘后需要对硬盘进行读写,默认是同步的,因为磁盘IO效率问题,可以通过中断机制实现异步IO。最后还需要对硬盘进行分区,以及通过虚拟设备来进行硬件的读写管理。

自制操作系统 - 进程相关系统调用

进程相关系统调用

进程涉及进程创建,进程退出,进程资源回收等多种操作,在用户态中这些动作依赖系统调用来实现。本文我们将完成brk、 fork、 exit、waitpid、time共五个系统调用。

自制操作系统 - 进程用户态栈

进程用户态栈

在进程进入用户态后,栈应该修改到128M的位置。因为栈是向下增长的,且我们的操作系统最大支持128M内存。用户态栈最大占用2M的物理内存空间,即 0x7e00000 ~ 0x80000000 的空间范围。用户访问这块内存空间就报缺页异常。

自制操作系统 - 内核堆内存管理与用户内存映射

内核对内存管理与用户内存映射

之前实现的内存分配以页为单位一次分配的太大,因此本文将实现内核堆内存的管理,可申请指定大小的内存。在内核内存中,我们只使用了前8M,在进入用户态后需要进行用户内存映射,用户内存映射原理和内核一致,区别是每次使用内存可以申请内存映射,将虚拟地址映射为一个物理地址,使用完毕后可释放映射。

自制操作系统 - 用户态打印printf

自制操作系统 - 用户态打印printf

进入用户态后,内核态的打印函数printk就不能再使用了,因此需要实现用户态的打印函数printf。打印时需要控制台的功能console_wrote,因此需要通过系统调用write来实现。