网站关键词排名优化应该怎么做,做网站后台要学,有哪些做外贸免费的网站,网站推广销售腾讯会员被告怎么办本节要点#xff1a; 1、理解 OS 启动过程发生了什么#xff0c;理解 OS 与 硬件 与 应用 之间的关系 2、本节讲解了 setup 模块 和 system 模块实现的功能 1、计算机上电时#xff0c;操作系统在硬盘#xff08;磁盘#xff09;上#xff0c;为了“取指执行”#xff0… 本节要点 1、理解 OS 启动过程发生了什么理解 OS 与 硬件 与 应用 之间的关系 2、本节讲解了 setup 模块 和 system 模块实现的功能 1、计算机上电时操作系统在硬盘磁盘上为了“取指执行”需要把操作系统代码放在内存里。
bootsect.s将操作系统读入内存分段读 bootsect.s、setup.s、system.s …
2、setup.s 模块完成 OS 启动前的设置OS 接管硬件 int 0x15 获得物理内存的大小保存到 ax#0x88 作为参数[2] 是间接寻址默认段寄存器是 9000所以是 0x90002。即将扩展内存数存入 0x90002使操作系统对内存大小有一个认知把操作系统从 90000 移动到 00000然后再继续 取指执行 CS左移4位IP 只能访问 20位 - 1M这种寻址方式无法方位内存 4G 的空间。所以要从16位机实模式切换为32位机保护模式将值为 #0x0001 赋给寄存器 cr0 来启动保护模式相当于 CPU 要走另外一条解释执行的电路gdt不是实模式的左移4位再相加了再通过 jmpi 赋值 cs 寻找表象赋值 ip 获得偏移 ps: 2^10 1KB 2^20 1MB 2^30 1GB 2^32 4GB gdt 用硬件来实现相比于软件更快。CS用于选择gdt表中的表象以生成基址32位再和ip偏移32位相加同样中断也会根据 int n 去表象中寻找中断处理函数入口地址 setup 初始化保护模式所用到的 gdt 表 前面赋值 cs 8因为一个表象是一个字即两个字节所以一行8个字节则8对应第二行。把四个字填入 设计好的硬件电路按设计来获得 段基址再加上 ip 来获得寻址。
setup.s 任务总结 ① 读硬件参数如内存大小 ② 把 system 模块从 90000 移动到 00000将OS的核心代码一直放在开头 ③ 启动保护模式应用32位的汇编指令跳到 0 地址处执行
3、 system 模块 BIOS 读 bootsect.s bootsect.s 读 setup.s、system模块再执行 setup.s执行 system模块等。system 模块由许多文件组成这些文件运行的先后顺序由 Linux/Makefile 操作系统的控制代码来控制。Makefile 通过一堆源码来产生操作系统镜像再写入0磁道0扇区。将一堆 .c 源文件生成 .o 文件再通过链接指令把文件全部链接在一起就有了 system head.s 建立真正的 idt表中断 和 gdt表寻址之前的临时 gdt 表只是为了跳转到 system 模块来执行此时 head.s 的32位保护模式是用的 32位汇编代码与之前的不一样现在前面是源操作数后面是目标操作数了 c语言中的函数调用对应的压栈把函数参数压入栈中 跳到调用函数去执行最后再通过 ret 指令从栈中弹出返回地址并将控制权转移到该地址。从 head.o 进入到 main.c 去执行汇编调用c文件实际上和上述操作一样通过压栈来执行当 main 函数执行完要返回地址就会回到 L6查看代码可以发现 L6 是死循环电脑死机 main 函数中包含了各种外设的初始化程序 初始化 mem_map 表格先将其置为0右移12位相当于4k即每次4k大小的内存进行初始化end_mem 在 setup.s 读入了内存的大小4G0x90002
系统启动的全过程将 OS、GDT、IDT等代码放在内存的起始位置将应用程序放到内存OS的上端。
boot将 OS 从磁盘读入内存
setup获得一些硬件参数启动保护模式
systemhead初始化 gdt 表 和 idt 表main初始化一堆设备如mem_init