0.11之路(二):加载setup

BIOS将bootsect这个引导程序载入内存后,接下来就要靠bootsect来加载第二批和第三批程序。

bootsect首先要做的工作就是规划内存

实模式下,寻址最大范围是1MB(0xFFFFF)。关于setup程序,在bootsect.s中要指定setup程序的扇区数和被加载到的位置(0x90200),此外还要指定启动扇区(也就是bootsect.s)被BIOS加载的位置(0x07c00)和将要移动到的新位置(0x90000),内核被加载的位置(0x10000)和内核的末尾位置,根文件系统设备号(ROOT_DEV=0x306,第二个硬盘第一个分区)。

这就是内存规划,可以确保互不重叠。

bootsect的第一步是将自身从0x07c00的位置复制到0x90000的位置。

第二步就是将setup程序加载至内存中。

加载bootsect,BIOS需要 int 0x19 这个中断向量。加载setup,则要借助BIOS提供的 int 0x13 中断向量所指向的中断服务程序——磁盘服务程序。二者不同的是, int 0x19指向的启动加载服务程序是BIOS执行的,而 int 0x13指向的磁盘服务程序是linux自身的启动代码bootsect执行的。前者只负责把第一扇区的代码加载到0x07C00位置,而后者的中断服务程序则根据设计者的意图,把指定扇区的代码加载到内存的指定位置。所以对于 int 0x13 来说,要事先将指定的扇区、加载的内存位置等信息传递给中断服务程序。

复制后的bootsect的起始位置是0x90000,占用512B,因此,0x90200紧挨着bootsect的尾部,所以bootsect和setup是连在一起的。setup程序占据四个扇区,这样加上bootsect,一共加载了五个扇区。bootsect代码执行完毕后就开始执行setup。

时间: 2024-10-08 15:36:33

0.11之路(二):加载setup的相关文章

Linux-0.11源代码阅读一 加载操作系统

x86系列CPU可以在16位实模式和32位保护模式下运行,实模式的特点是地址总线只有20位,也就是只有1MB的寻址空间,为了兼容老的CPU,Intel x86系列CPU包括最新的CPU在上电时都运行在16位的实模式下,同时在硬件上强行将CS置成0xF000,IP置成0xFFF0,那么CS:IP就指向0xFFFF0这个地址,也就是上电瞬间代码从该处开始执行,而BIOS恰恰就存储在这个地方,可以想象一下,如果连BIOS都没有将会是一个什么结果. BIOS程序被存储在计算机主板上的一块ROM芯片里,首

Android Bitmap 全面解析(二)加载多张图片的缓存处理

一般少量图片是很少出现OOM异常的,除非单张图片过~大~ 那么就可以用教程一里面的方法了通常应用场景是listview列表加载多张图片,为了提高效率一般要缓存一部分图片,这样方便再次查看时能快速显示~不用重新下载图片但是手机内存是很有限的~当缓存的图片越来越多,即使单张图片不是很大,不过数量太多时仍然会出现OOM的情况了~本篇则是讨论多张图片的处理问题-----------------------------------------------------------------------图片

No.11 selenium学习之路之加载浏览器插件for Firefox

打开帮助 -- 故障排除信息 点击显示文件夹 地址复制下来: 在代码中添加如下内容: 即可加载浏览器插件.

0.11之路(三):system模块

现在载入第三批代码--system模块,仍然使用 int 0x13 中断. 这批代码要比之前多很多,所以需要一点时间,于是出现了 "Loading system -"的字样.但是,此时操作系统的main函数还没有执行,所以它是用汇编来实现的. system模块被加载至内存的 0x10000 往后的120KB空间中.这样整个操作系统的代码都加载至内存,最后要再次确定一下根设备号. 什么是根设备? 根文件系统设备(Root Device): 0.11使用的是Minix操作系统的文件系统管理

WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要有三种实现方式: 简单忙碌状态控件BusyBox: Win8/win10效果忙碌状态控件ProgressRing: 弹出异步等待框WaitingBox: 二.简单忙碌状态控件BusyBox 效果图: 通过属性"IsActive"控制控件是否启用,后台C#代码: /// <summary> /

0.11之路(四):从实模式到保护模式

(一)关中断并将system移动到内存地址起始位置 0x00000 将CPU的标志寄存器(EFLAGS)中的中断允许标志(IF)置0.这样系统不会再响应中断,直到main函数中能够适应保护模式的中断服务体系重建完毕才会打开,那时候响应中断的服务程序将不再是BIOS提供的中断服务程序,而是系统自身提供的. 就是要完成实模式下的中断向量表和保护模式下的中断描述符表(IDT)的交接工作.借助关中断(cli)和开中断(sti)完成这个过程的创建,即在创建过程中不能去响应中断,否则没有对应的中断程序,系统

0.11之路(六):创建进程1

进程0要做的第一件事就是作为父进程调用fork函数创建第一个子进程--进程1. 内核用last_pid来存放系统自开机以来累计的进程数,也将此变量用作新建进程的进程号.BTW,linux 0.11 的task[64]只有64项,最多只能同时运行64个进程.fork函数中有个很重要的函数叫 copy_process() 函数. 进程0依靠它完成对进程1的创建: 1) 为进程1创建task_struct,将进程0的task_struct的内容复制给进程1 2) 为进程1的task_struct.ts

World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)

ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的.下面来看如何一步步实现假三维模型的加载: 1.Shp文件的制作 首先在arcmap下数字化几个建筑物,并新建height字段存储建筑物的高度. 2.代码实现 /** * * @方法名称: init3DModel : * @方法描述: 导入简易三维模型 : * @参数 :@param filePath :shp文件路径 * @返回类型: void : * @创建人:刘硕; * @创建时间:2015年2月3日

0.11之路(一):BIOS引导过程

BIOS在内存最开始的位置构建中断向量表,紧接着是BIOS数据区,此外还要有与中断向量表相应的中断服务程序.我们正是利用这些中断服务程序把内核加载到内存中. 中断是操作系统里的一个意义重大的概念,是一个技术手段. 加载内核程序并为保护模式做准备 对于Linux 0.11来说,计算机将分三批次逐次加载操作系统的内核代码,第一批由BIOS中断 int 0x19 把第一扇区 bootsect 的内容加载到内存:第二批.第三批在bootsect的指挥下,分别把其后的4个扇区和随后的240个扇区的内容加载