BIOS和bootsect

CPU加电即进入16位实模式
硬件逻辑设计为加电瞬间强行设置:CS=0xF000,IP=0xFFF0,CS:IP=0xFFFF0
而BIOS程序的入口地址即0xFFFF0,是计算机上电后CPU执行的第一条指令的地址
 
 
BIOS程序在内存中加载中断向量表和中断服务程序
 
调用INT 0x19中断,将软盘第一扇区(0面0磁道1扇区)的512字节即bootsect.s加载到内存0x07C00处
 
bootsect.s将自身复制到0x90000~0x90200,ds:si -> es:di
rep指令重复256次,一次复制4字节即双字,复制结束后便跳过去,跳时指定了段和偏移(段内偏移实际没变)
 
调用INT 0x13中断,将setup.s对应的程序加载到0x90200处,共四个扇区2K
再通过INT 0x13中断,将system加载到0x10000
检查根设备
然后跳到setup.s的第一行指令
 
可见,bootsect主要完成的是搬运加载工作
 

setup

setup程序的第一件事是利用BIOS中断服务程序将机器系统数据加载在原bootsect的位置(覆盖),0x90000~0x901FD,在setup前只空了2个字节
关中断,将system从0x10000复制到0x00000
 
设置全局描述符表(将来存放LDT和TSS)以及中断描述符表,GDT -> GDTR,IDT -> IDTR,注:setup.s从0x92000开始,gdt段内偏移相对0x90000要加上512
打开A20,实现32位寻址
建立保护模式下的中断机制,设置中断控制器8259A,保留内部不可屏蔽中断0x00~0x1F,重新映射中断号,IRQ0为0x20
将控制寄存器CR0的第0位PE置1,打开保护模式(之后要根据GDT)
跳到GDT的1项指向的地址开始执行,即head.s
 
参考:《Linux内核设计的艺术》
 

bootsect及setup的更多相关文章

  1. Linux内核0.11 bootsect文件说明

    一.总体功能介绍 这是关于Linux-kernel-0.11中boot文件夹下bootsect.s源文件的说明,其中涉及到了一些基础知识可以参考这两篇文章. 操作系统启动过程 软盘相关知识和通过BIO ...

  2. linux0.11内核源码——boot和setup部分

    https://blog.csdn.net/KLKFL/article/details/80730131 https://www.cnblogs.com/joey-hua/p/5528228.html ...

  3. Linux启动过程详述

    http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...

  4. [No000031]操作系统 Operating Systems 之Open the OS!

    从打开电源开始… 这神秘的黑色背后发生着什么?… 打开电源,计算机执行的第一句指令什么? 计算模型(图灵机) ⇒ 我们要 关注 指针IP 及其 指向的内容 看看x86 PC (1) 刚开机时CPU 处 ...

  5. Linux内核--网络栈实现分析(一)--网络栈初始化

    本文分析基于内核Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7488828 更多请看专栏, ...

  6. system(linux) power on note

    读詹荣开文档摘 BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader Boot Loader执行全 ...

  7. tools/build.c

    /* *  linux/tools/build.c * *  Copyright (C) 1991, 1992  Linus Torvalds */ /* * This file builds a d ...

  8. Linux1.0源代码编译过程

    根据源代码包中的readme文件及http://chfj007.blog.163.com/blog/static/173145044201191195856806/?suggestedreading& ...

  9. linux kernel 0.11 head

    head的作用 注意:bootsect和setup汇编采用intel的汇编风格,而在head中,此时已经进入32位保护模式,汇编的采用的AT&T的汇编语言,编译器当然也就变成对应的编译和连接器 ...

随机推荐

  1. 在MFC中对Excel的一些操作

    首先要在程序中加载CExcel.h和CExcel.cpp文件,这里面包装了很多函数和对Excel文件的操作,下面所有程序中的m_excel都是类CExcel的对象,如: private: _Appli ...

  2. 【BZOJ 5222】[Lydsy2017省队十连测]怪题

    题目大意: 传送门 给一个长度为$n(n<=200)$的数列$h$,再给$m$个可以无限使用的操作,第$i$个操作为给长度为花费$c_i$的价值给长度为$l_i$的数列子序列+1或-1,求将数列 ...

  3. 最短路 BZOJ3694 树链剖分+线段树

    分析: 树剖裸题,[Usaco2009 Jan]安全路经Travel 的简化版 剖开最短路树,遍历每一条没在最短路树上的边. 这种情况下,有且仅有u到v路径上,出来lca之外的点能够通过这条边到达,并 ...

  4. appium--xpath定位元素用法

    一.xpath的使用场景: 自动化测试中经常对元素进行操作时,如果存在id.name.content_desc时,可通过appium框架提供的方法find_element_by_id/name/tag ...

  5. 如何将markdown转换为wxml

    话说我要为技术博客写一个小程序版,我的博客解决方案是 hexo + github-page,格式当然是技术控们喜欢的 markdown 了 .但小程序使用的却是独有的模版语言 WXML.我总不能把之前 ...

  6. 【转】AB实验设计思路及实验落地

    这篇文章会讨论: 在什么情况下需要做 AB 实验 从产品/交互角度,如何设计一个实验 前端工程师如何打点 如何统计数据,并保证数据准确可信 如何分析实验数据,有哪些数据需要重点关注 附:如何搭建前端实 ...

  7. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  8. String求求你别秀了

    小鲁班今年计算机专业大四了,在学校可学了不少软件开发的东西,也自学了一些JAVA的后台框架,踌躇满志,一心想着找个好单位实习.当投递了无数份简历后,终于收到了一个公司发来的面试通知,小鲁班欣喜若狂. ...

  9. KnockOut 绑定之foreach绑定

    foreach绑定对于数组中的每一个元素复制一节标记语言,也就是html,并且将这节标记语言和数组里面的每一个元素绑定.当我们呈现一组list数据,或者一个表格的时候,十分有用. 如果你绑定的数组是一 ...

  10. python微信聊天机器人改进版,定时或触发抓取天气预报、励志语录等,向好友推送

    最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容.于是开始了分析思路.博主是采用了多线程群发,因为微信对 ...