orange一个操作系统的实现
文章平均质量分 61
直接上源码+文字解析,通俗易懂。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
xf807989
这个作者很懒,什么都没留下…
展开
-
orange‘s的磁盘管理
一个FAT表9个扇区再往后跟着的是根目录区,根目录区从第19扇区开始,一个根目录条目占32字节。指定了开始的簇号。数据区第一个簇号是2,也就是说没有0和1簇号。第一个文件开始的簇号就是2.fat表里面存放fat项,一个12字节,如果值大于0xFF8,则表示是最后一个簇了,否则则表示该文件下一个簇号,直到最后一个簇为止。fat2是fat1的复制,但应该是用于数据恢复用的。...原创 2021-05-06 20:03:35 · 120 阅读 · 0 评论 -
orange‘s中断机制
采用中断门的方式来实现这些。直接上源码:*======================================================================*/PUBLIC void init_prot(){init_8259A();// 全部初始化成中断门(没有陷阱门)init_idt_desc(INT_VECTOR_DIVIDE, DA_386IGate, divide_error, PRIVILEGE_KRNL);init_idt_desc(原创 2020-08-09 19:33:51 · 233 阅读 · 0 评论 -
oranges一个操作系统的实现笔记四
第二章大完结1.获取内存大小2.为啥在od里面不同进程的内存地址相同?3.中断与异常4.i/o1.获取内存大小2.在od里面不同的进程为什么有相同的内存地址?在这里先要排除掉一个误区,那个内存地址是线性地址,而不是实际物理地址,然后,通过更改cr3里面的值,线性地址不变,但最终也会更改实际物理地址的值。这就是这个问题的答案。3.中断与异常鉴于中断与异常部分要截图的东西太多了,建议直接看书,再具体我就不说了!4.i/o好了,第二章终于完了...原创 2020-06-08 23:37:05 · 262 阅读 · 0 评论 -
oranges一个操作系统的实现笔记三
第二章保护模式继续1.进入ring3注意的地方:1.gdt的属性里面设置为ring3下运行。2.这里通过retf来达到跳转的目的。2.TSS:LABEL_DESC_TSS: Descriptor 0, TSSLen-1, DA_386TSS注意的地方:1.tss要初始化2.ltr加载tss3.从低特权级跳到高特权级要用到tss,同时可以通过调用门来达到跳转的目的。3.页式存储页式存储一般分为2级,第一级为页目录,也称PDE,大小为4kb,一原创 2020-05-25 16:56:18 · 299 阅读 · 0 评论 -
oranges一个操作系统的实现笔记二
第二章节保护模式继续鉴于实模式下只有1M的寻址能力,所以要在保护模式下验证他能否读写大内存的地址。1.跳出保护模式:具体步骤如下:1.先把各个寄存器设置到一个适合回到实模式的值。2.置位cr0的PE位为0.3.跳回到实模式。4.恢复实模式下各个寄存器包括sp的值。5.关闭A20地址线。6.开中断。7.回到dos。具体怎么读写大内存地址,我就不说了,反正是可以的,也不难。LDT:要注意的地方:1.申明LDT的GDT。2.lldt加载LDT的gdt。3.在LDT的段里面申原创 2020-05-25 12:33:05 · 344 阅读 · 0 评论 -
oranges一个操作系统的实现笔记一
第一部分:实现一个最小的操作系统这部分代码需要注意如下几点:1.代码需要加载到0x07c00H处的内存上,才能得到有效的执行,这是bios规定的。2.因为一个扇区是512字节的大小,所以这段bootloader必须占有512字节的大小。3.整个扇区必须以0xaa55作为结尾。4.int 10h是显示字符串用的bios中断。第二部分:保护模式:org 07c00hjmp LABEL_BEGIN[SECTION .gdt]; GDT;原创 2020-05-25 11:26:54 · 747 阅读 · 2 评论