#BIOS之于操作系统

操作系统从开机通电到系统启动成功(执行main函数)分为3个步骤

  1. 启动BIOS,准备实模式下中断向量表和中断服务程序
  2. 从启动盘加载操作系统程序(包括boot镜像和root文件系统镜像)到内存。加载程序是借助第一步中的中断服务程序完成
  3. 为执行32位保护模式的main函数做过渡工作

##启动BIOS,准备实模式下中断向量表和中断服务程序

计算机的运行离不开程序,在加电的一瞬间,计算机的内存中,准确的说是RAM中,空空如也,什么程序也没有.启动盘(软盘/磁盘)中虽然有操作系统,但是CPU的逻辑电路被设计为只能运行内存中的程序,没有能力直接从软盘中运行操作系统.操作系统必须要加载到内存中,CPU方才能够运行(才能启动操作系统).

注意:该博文假定所用计算机是基于IA-32系列CPU,安装了标准的单色显示器,标准键盘,一个软驱,一块硬盘,16M内存,在内存中开辟了2MB内存为虚拟盘,并在BIOS中设置软驱为启动设备

BIOS的启动原理

BIOS也是一个程序,BIOS要能够加载操作系统,首先BIOS必须先运行起来.我们运行程序的一般经验都是,通过双击或者命令行触发.显然需要解决BIOS启动的问题

从体系角度来看,既然BIOS无法靠软件启动,则需要借助硬件了.

从硬件角度看,Intel 80x86系列的CPU可以分别在16位实模式和32位保护模式下运行.为了兼容,也为了解决最开始的启动问题,需要进行以下几点:

  • Intel将80x86系列的CPU,包括最新型号的CPU的硬件都设计为加电即进入16位实模式状态运行.
  • cpu硬件逻辑设计为加电瞬间强行将cs的值设置为0xF000,IP设置为0xFFF0,这样CS:IP就指向了0xFFFF0.该位置即内存中ROM bios所在区域0xFFFF0--0xFFFFF.

通过以上分析:可知BIOS程序需要位于0xFFFF0--0xFFFFF内存段中

BIOS在内存中加载中断向量表和中断服务程序

BIOS程序被固化在计算机主机板上的一块很小的ROM芯片里。我们选用的BIOS程序只有8 KB,所占地址段为0xFE000~0xFFFFF,如图1-1所示。现在CS:IP已经指向0xFFFF0这个位置了,这意味着BIOS开始启动了。随着BIOS程序的执行,屏幕上会显示显卡的信息、内存的信息……说明BIOS程序在检测显卡、内存……这期间,有一项对启动(boot)操作系统至关重要的工作,那就是BIOS在内存中建立中断向量表和中断服务程序。

BIOS之于系统启动的更多相关文章

  1. BIOS设置

    主界面:  标准BLOS设置: 高级BLOS设置: 1.设置从光盘驱动 电脑启动时默认是从硬盘启动,但是在安装操作系统时或者是使用某些特殊软件时,可能需要从光盘.软盘或者U盘启动,这时就需要设置第一启 ...

  2. U盘安装RedHat 5.3

    转载自http://www.cnblogs.com/totozlj/archive/2012/06/03/2532757.html 1.下载rhel-5.3-server-i386-dvd.iso文件 ...

  3. window7环境下VMWare自定义安装Linux虚拟机完全教程

    1.首先准备好以下工具和安装包,最好到官网下载: VMWare 8.x,注意版本不易过高,因为很多时候会出现和Linux镜像不兼容的情况,下载地址:http://www.vmware.com/cn.h ...

  4. MySQL优化小结

    数据库的配置是基础.SQL优化最重要(贯穿始终,每日必做),由图可知,越往上优化的面越小,最基本的SQL优化是最重要的,往上各个参数也没太多调的,也不可能说调一个innodb参数性能就会好多少,而动不 ...

  5. 剖析ironic

    关键技术 在安装操作系统时需要存储介质来存储系统镜像.需要控制物理机开关机,在网络部署环境中还需要预启动环境. PXE (预启动环境) IPMI(电源管理) iSCSI(存储) 什么是PXE PXE( ...

  6. U盘安装RedHat linux 5.3

    U盘安装RedHat linux 5.3 1.下载rhel-5.3-server-i386-dvd.iso文件: 2.下载绿色版UltraISO软件: 3.将rhel-5.3-server-i386- ...

  7. virtualbox 安装虚拟机(centos7) 并映射本地文件夹至虚拟机(增强工具)

    一.安装环境 操作系统:windows10 virtualbox: 5.2.20 (在安装virtualbox 时可能需要 进入BIOS 设置虚拟化系统启动) centos7:http://mirro ...

  8. Deepin 系统安装并配置PHP开发环境

    Deepin是由武汉深之度科技有限公司开发的Linux发行版.Deepin团队基于Qt/C++(用于前端)和Go(用于后端)开发了的全新深度桌面环境(DDE),以及音乐播放器,视频播放器,软件中心等一 ...

  9. Ubuntu18.04 + Windows10 双系统安装

    此处忽略Windows10安装!!! 准备 安装环境 OS:Windows10 CPU:Intel(R) Core(TM) i5-10600KF CPU @ 4.10GHz 4.10 GHz GPU: ...

随机推荐

  1. C语言字符串替换

    void exchg(char * str) { if(str == NULL) return; int len = strlen(str); char tmp; for(int i=0,j=len- ...

  2. Python爬虫—requests库get和post方法使用

    目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...

  3. 图数据库-Neo4j-常用算法

    本次主要学习图数据库中常用到的一些算法,以及如何在Neo4j中调用,所以这一篇偏实战,每个算法的原理就简单的提一下. 1. 图数据库中常用的算法 PathFinding & Search 一般 ...

  4. 怎样发出一个HTTP请求

    需要使用 xhr.send(); 参数为请求数据体, 如果没有就传入null, 一般来说, GET请求是不用传参的, POST就视情况而定, 理论上所有GET请求都可以改为POST, 反之则不行. v ...

  5. 5-MySQL DBA笔记-开发技巧

    第5章 开发技巧 本章将介绍一些和数据库相关的开发技巧.由于开发领域很广,这里只选取部分比较常见的小技巧.5.1 存储树形数据 有时我们需要保存一些树形的数据结构,比如组织架构.话题讨论.知识管理.商 ...

  6. MediaAPIController

    using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.D ...

  7. Markdown: Syntax Text

    Markdown: Syntax Text https://daringfireball.net/projects/markdown/syntax.text Markdown: Syntax ==== ...

  8. 正则表达式split匹配多种例如 “】”,“,”两种(页面级中英文切换方案)

    在做登陆界面的时候,因为涉及到中英文 因为前后台已经分离,所以前端需要自行设计中英文 做法: 编写两个文件,一个中文文件,一个是英文文件,分别放在对应的目录下面 文件的内容 { "login ...

  9. ECharts简单入门demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Centos7.7安装swoole

    系统版本:centos 7.7(查看系统版本:cat /etc/redhat-release) 执行命令安装swoole: yum update -y && yum remove ph ...