文档章节

计算机操作系统启动和Linux boot

满小茂
 满小茂
发布于 2015/12/17 13:29
字数 648
阅读 118
收藏 0

     计算机启动,首先启动的是BIOS系统,当打开电源,BIOS开始自检,然后出发19号中断,在处理19号中断时,BIOS检测电脑是否具有软盘、硬盘或是固定磁盘,内存,和一些启动操作系统的必要设备,如果有使用磁盘,就把磁盘的第一个扇区MBR(512B)加载到内存的0x7C00地址处,然后跳转到这个地方

       (1)  Linux 0.11 磁盘第一个扇区bootsect模块(boot/bootsect.s编译而成),它由BIOS读入到内存的绝对地址0x7C00(31KB)处,  并且执行,在bootsect执行期间,会将自己移动到内存绝对地址,0x90000开始处,并执行。

       (2)  执行bootsect 程序执行的作用是加载位于磁盘第二个扇区第四个扇区setup模块(boot/setup.s编译而成),读入到内存绝对地址0x90200

       (3)   执行setup模块,再把磁盘上的system模块加载到内存0x10000(64kb)处,然后利用BIOS中断0X13取磁盘参数表中当前引导盘的参数,设置显示器显示模式等,最后system模块加载到内存绝对地址0x00000处,开始执行head.s

     (4) 执行system模块head.s位于system模块头部。从这里开始,内核完全是在保护模式下运行。首先是加载各个数据段寄存器,重设中断描述符表idt,使各表项执行一个 报错误的哑中断子程序ignore_int。然后重设gdt,检测A20地址线是否已真的开启, 如果没开启进入死循环。检测数学协处理器。 设置分页处理机制,将页目录表放在绝对物理地址0开始处(本程序会被覆盖)。最后, head.s利用返回指令将预先放在堆栈中的/init/main.c程序的入口地址弹出,去运行 main()程序。

                 在此输入图片描述        

在此输入图片描述    

      执行 main.c

        main.c程序首先利用前面setup.s程序取得的系统参数设置系统的根文件设备号以及一 
些内存全局变量。 
在此输入图片描述

       内核先进行所有方面的硬件初始化。包括陷阱门、块设备、字符设备和tty,包括人工设置 

第一个任务(task 0)。待所有初始化完成后设置中断允许标志开启中断,并“手动”切换 
到任务0中运行。 

 在此输入图片描述



© 著作权归作者所有

满小茂
粉丝 79
博文 122
码字总数 138345
作品 0
成都
程序员
私信 提问
给电脑加电之后,电脑都干了些什么?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整...

webxiaohua
2015/04/15
25
0
计算机是如何启动的?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整...

oschina
2013/02/19
10.7K
99
自由软件基金会对使用 Secure Boot 提出安全警告

"自由软件基金会(FSF,Free Software Foundation )发布了邀大家公开签名的声明,题为‘为自由而站起来,安装自由软件’。该声明是 对微软一则声明的回应;微软声明,如果计算机制造商想发行...

xyxzfj
2011/10/19
1K
7
Linux的启动流程(CentOS 6)

前言 Linux启动的过程在实际生产中有着至关重要的作用。试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办。如果我们了解Linux的详细启动过程,...

Eumenides_s
2017/09/14
0
0
计算机如何启动(How Computers Boot Up)

How Comuputers Boot Up 计算机如何引导启动 前面的博文介绍了Intel计算机的底板芯片组与内存映射,为理解计算机引导初始过程打下了基础。引导是一个复杂的、多阶段的、有趣的“东西”。下面...

人生能绕几个圈
2013/09/17
76
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
30分钟前
6
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
46分钟前
5
0
IT兄弟连 HTML5教程 HTML5表单 HTML表单设计1

表单是PHP程序中最常使用的收集站点访问者信息的数据输入界面。通过表单浏览器获取用户的输入数据,并传送给Web服务器的脚本程序中,以各种不同的方式进行处理。在表单中提供了多种输入方式,...

老码农的一亩三分地
47分钟前
4
0
武者Vue

本文转载于:专业的前端网站➼武者Vue 1 - Introduction2 - The Vue Instance3 - Data & Methods4 - Data Binding5 - Events6 - Event Modifiers7 - Keyboard Events8 - Two-Way Data......

前端老手
53分钟前
6
0
uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部