操作系统真相还原
学习操作系统相关知识 并且写出一个简单的OS
剑决浮云气
事了拂衣去,深藏功与名
展开
-
初步实现中断处理
1.kernel.S①有些中断处理,会在栈中留下自己的错误码,就很像Linux的errno,所以当中断处理函数退栈的时候,会造成两种不同的处理方式,这里为了简便,直接将两种一起处理,有错误码的我们执行一条空指令,没有错误码的我们手工压入一个0②我们在这里采用了宏汇编,来对所有的中断函数进行处理,就是当中断发生的时候,调用宏汇编的函数,在宏汇编的函数中,它压入自己的中断号,然后在IDT中查找自己的中断处理函数,进行处理[bits 32]%define ERROR_CODE nop ; 若在相关的原创 2021-12-08 14:59:50 · 206 阅读 · 0 评论 -
编写MBR
1.MBR 主引导记录①当BIOS对基本的外设进行检查,建立好中断向量表等等以后,BIOS也就完成了他的任务了,下一棒就要交给MBR了②MBR必须放在磁盘的0柱面0磁道的第一个扇区,并且扇区的最后两个字节必须是0x55,0xaa,用来标识他就是MBR。③MBR必须被加载到0x7c002.注意点①SECTION MBR vstart=0x7c00这个参数让编译器将section中的数据的地址以vstart的值开始,不再从整个程序头开始。并不代表写了这个参数 程序就自动加载到这个地址加载到内存中原创 2021-12-08 11:08:16 · 575 阅读 · 0 评论 -
详解8259A
链接地址转载 2021-12-03 10:47:07 · 162 阅读 · 0 评论 -
加载内核.
1.ELF文件格式在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。详细了解2.加载内核KERNEL_START_SECTOR EQU 0x9 kernel.bin的扇区号KERNEL_BIN_BASE_ADDR EQU 0x70000 从磁盘读入后 写入该地址KERNEL_ENTRY_POINT equ 0xc0001500 内核的入口函数的地址初始化内核;/*****Init Kernel*********/Init_Kernel:原创 2021-11-21 14:52:25 · 407 阅读 · 0 评论 -
开启分页机制
1. 分页的作用在我们进行程序开发的时候,一般情况下,是不需要管理内存的,也不需要操心内存够不够用,其实,这就是分页机制给我们带来的好处。它是实现虚拟存储的关键,位于线性地址与物理地址之间,在使用这种内存分页管理方法时,每个执行中的进程(任务)可以使用比实际内存容量大得多的连续地址空间。而且当系统内存实际上被分成很多凌乱的块时,它可以建立一个大而连续的内存空间的映象,好让程序不用操心和管理这些分散的内存块。分页机制增强了分段机制的性能。页地址变换是建立在段变换基础之上的。因为,段管理机制对于Intel处理原创 2021-11-15 14:37:04 · 585 阅读 · 0 评论 -
获取物理内存容量
1.linux获取物理内存的方法0xE820 方法1总共有三种,我们只需要了解一种,因为它一般不会出错2.注意实际物理内存 和 检测出来的结果 之间总是相差1MB的,原因是因为有些老的ISA设备要用到地址15MB以上的内存作为缓冲区,也就是说此缓冲区的大小为1MB,操作系统不可以访问这段内存3.代码Total_Memory_Bytes dd 0 ;以字节形式表示的内存大小 存放在此处MemoryBuf times 244 db 0 ; 获取到的全部的信息 存放在此处ARDS_Count原创 2021-11-11 11:04:33 · 1277 阅读 · 0 评论 -
迈入保护模式
此时已完成了MBR的任务,MBR将控制权交给了Loader1.步骤①打开A20 gate②加载gdt③将CR0 寄存器的PE位 置12.代码 Loader.S%include "boot.inc"section Loader vstart=LOADER_BASE_ADDR ; 0x900LOADER_STACK_TOP EQU LOADER_BASE_ADDR//栈顶设置为0x900JMP Loader_Start;/**********Init GDT*********原创 2021-11-10 14:33:24 · 434 阅读 · 0 评论 -
CHS和LBA逻辑块地址
转载地址转载 2021-11-02 13:07:16 · 170 阅读 · 0 评论 -
操作系统的启动流程
1.大致流程1.按下开机键2.BIOS加电自检3.BIOS找到硬盘上的第一个扇区 --> MBR4.MBR在第一个扇区中找到分区表,并发现了活动分区的内核加载器5.内核加载器加载内核2.MBR主引导记录446字节的引导程序及参数64字节的分区表信息2字节的结束标志 0x55 0xaa3.分区表1.一个分区表需要占用16个字节 所以只有四个分区,称为一级分区或者是主分区2.四个分区中只能有一个是活动分区,也就是说只能有一个是被激活的3.活动分区就是这个分区中存放着操作系统原创 2021-10-29 08:50:20 · 920 阅读 · 0 评论 -
LINUX --- 中断 --- INT 0x10
转载地址转载 2021-10-29 08:28:33 · 432 阅读 · 0 评论