自制操作系统
文章平均质量分 79
hbvfhb
这个作者很懒,什么都没留下…
展开
-
系统调用
系统调用1.设计系统调用功能使用syscall和sysretq指令完成,系统调用进入内核后,内核系统调用函数仍然使用的是用户地址空间的栈,即系统调用不会手动进行栈切换。因为系统调用处理函数采用c语言编写,利用c语言函数调用的特点:参数通过RDI、RSI、RDX、RCX、R8和R9寄存器传递,并且RAX用于保存函数返回值。通过这个特点,使用syscall和sysretq指令将系统调用模拟成一个普通的c函数调用。2.实现1.SystemCallTabel内核会维护一个SystemCallTabel,保原创 2021-04-26 19:10:51 · 279 阅读 · 0 评论 -
进程管理
进程管理1.设计在KePOS系统中,涉及到多进程场景,设计进程的初始化,进程的切换,进程的销毁;并且设计了一个可重入自旋锁来实现进程的同步和互斥。上图代表着每一个用户进程的线性地址空间,高地址为该进程的内核线性地址空间,低地址为该进程的用户线性地址空间。在每一个用户进程的页表中,都保存有完整的内核线性地址映射,和已经分配的用户线性地址映射。地址0x7fffffffffff为该进程的栈基址(栈向低地址扩展)。系统调用时,仍然使用用户空间的栈,这样设计的原因是:我将系统调用也当作该进程发生的一种普通函数原创 2021-04-26 17:21:37 · 164 阅读 · 0 评论 -
中断和异常
中断和异常1.介绍KePOS运行在长模式下,在长模式下,中断和异常处理过程如下:1.cpu会自动根据中断/异常向量,从中断描述IDT表中找到当前中断和异常的描述符,然后根据描述符中的IST,从Tss表中选出对应的栈指针将其赋值给RSP,完成栈的切换;然后,cpu会自动保存rsp,ss,cs,rip寄存器值到新栈,在长模式中,不论是否发生CPL变换,都会将中断/异常发生时的rip,rsp,ss,cs压栈,同时如果异常有错误码也会自动把错误码压栈,执行完后,栈环境如下图:2.然后将IDT表中该中断/异原创 2021-04-25 22:07:05 · 395 阅读 · 1 评论 -
C语言和汇编语言函数调用
C语言和汇编语言函数调用关系1.汇编语言函数调用X86结构中,cs寄存器和rip寄存器共同控制着CPU要执行的下一条指令(当前在不同的模式中控制方式不同,如:实地址2模式和保护模式,长模式等),一般会按照指令在内存中存储的顺序,依次执行。如果想要在普通程序(除去系统调用和中断)执行中跳转到某一条指令,就需要使用JMP、CALL、RET及其变种指令。jmp指令是无条件跳转指令,直接跳转到某条指令。call指令在执行时,会先将下一条指令地址压栈,然后跳转到目标指令。ret指令执行时,会从当前栈顶弹出原创 2021-04-24 23:59:47 · 1363 阅读 · 0 评论 -
设备管理
设备管理1.概念设备管理的主要功能有缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等,由于I/O设备不仅种类繁多,而且他们的特性和操作方式往往相差甚大,使得设备管理称为操作系统中最繁杂且与硬件最紧密的部分,下面开始正式的学习1。2.相关结构体设备管理模块主要的功能是管理每一个设备的驱动程序,从而可以对设备进行读写I/O操作,和其他操作;在该系统设计时,没有考虑字符设备和块设备的区别,简单的为所有的设备都划分2块缓冲区。1.Buffer//队列//head出队//tail入队str原创 2021-04-23 16:07:59 · 195 阅读 · 0 评论 -
内存管理
内存管理1.内存相关结构体设计了E820结构体,Zone结构体,Page结构体,Slab结构体,SlabPool结构体,Memory结构体。1.E820struct E820{ unsigned long address;//该块内存的物理开始地址 unsigned long length;//该块内存的长度 unsigned int type;//该块内存的类型}__attribute__((packed));E820结构体保存的是一块物理内存的信息,该信息在lo原创 2021-04-23 00:30:21 · 106 阅读 · 0 评论 -
Loader设计与实现
Loader设计与实现1.设计loader最主要的功能就是检测计算机硬件信息,然后加载操作系统到指定的物理内存0x200000。因为KePOS操作系统还没有文件系统功能,因此将应用程序简单的保存到了物理内存地址0xd0000000。要将应用程序最终保存到物理内存上,就需要程序实现从软盘FAT12文件系统读取应用程序bin文件(mymain.bin),然后将其保存到物理地址0xd0000000。2.功能1.检测计算机SVGA信息,设置SVGA。2.在软盘上找到kernel.bin,并将其加载到物理原创 2021-04-22 17:27:18 · 134 阅读 · 0 评论 -
Boot设计与实现
Boot设计与实现1.MBR主引导记录是存在于任何硬盘的第一个扇区中的信息。它包含有关操作系统在硬盘中的位置和位置的信息,以便它可以在RAM中引导1。主引导记录(master boot record,MBR)位于硬盘的第一物理扇区。由于历史原因,硬盘的一个扇区大小是512字节,包含最多446字节的启动代码、4个硬盘分区表项(每个表项16字节,共64字节)、2个签名字节(0x55,0xAA)2。计算机系统启动首先对本机的硬件设备进行测试, 测试成功之后进入自举程序INT l9H, 然后将磁原创 2021-04-22 16:19:31 · 300 阅读 · 0 评论