WangFuJie Blog

路在脚下,心向远方

自制操作系统 - 进入用户模式

进入用户模式

用户态和内核态的特权级不同,intel将特权级分为0~3,内核运行在0特权级,用户运行在3特权级,特权级的切换需要依赖任务状态段TSS完成。我们使用 TSS 的主要作用是利用其中的 ss0 和 esp0,使得用户态的程序可以转到内核态,不会使用TSS进行硬件任务切换。

自制操作系统 - 键盘驱动

键盘驱动

键盘中断时8259a芯片的1号中断,中断向量为0x21。当键盘按键时,需要处理0x21中断,获取按下的扫描码,根据不同的扫描码进行处理,例如字符就打印。目前使用键盘都是第二套扫描码,但是内部会被8042转换为第一套扫描码,因此第一套不存在的扫描码就属于扩展码。

自制操作系统 - multiboot2引导

multiboot2引导

Multiboot2是一个协议标准,GRUB 是这个协议的实现,在linux中一班时钟grub引导操作系统,而不是我们自己写的bootloader。使用grub引导需要遵循grub的规范来进行内核的一些列初始化

自制操作系统 - 互斥、信号量与锁

互斥、信号量与锁

在遇到多进程共享资源时,会遇到资源争抢问题,前边我们通过关中断解决。这里通过通过互斥量和锁来解决临界区的问题,锁分为互斥锁、自旋锁、读写锁三种,我们开发的单处理系统,暂不实现自旋锁。

自制操作系统 - 任务状态

任务状态

任务处理就绪态和运行态之外,还有阻塞态和休眠态。本文中将实现任务进入阻塞态和休眠态的实现,详细介绍进入阻塞和解除阻塞已经休眠和唤醒。进入阻塞和休眠的任务分别使用双向链表进行管理。