博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机操作系统启动和Linux boot
阅读量:7071 次
发布时间:2019-06-28

本文共 953 字,大约阅读时间需要 3 分钟。

  hot3.png

     计算机启动,首先启动的是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中运行。 

 在此输入图片描述

转载于:https://my.oschina.net/manmao/blog/546716

你可能感兴趣的文章
[原创]手写一个PE文件
查看>>
安装php xdebug扩展
查看>>
junit junit4
查看>>
HUT-XXXX 数字游戏 求解区间的最值
查看>>
关于MAX部分快捷键失效的问题分析
查看>>
Qt学习之路_14(简易音乐播放器)
查看>>
linux相关工具
查看>>
HTML 基础控件介绍
查看>>
Visual Studio 2012 Update 3
查看>>
sql执行计划解析案例(二)
查看>>
在页面头部<!DOCTYPE html ....> 前面不能有任何输出
查看>>
hdu 2102 A计划(双层BFS)(具体解释)
查看>>
大型机器学习
查看>>
FluentNhibernate 不支持存储过程
查看>>
Python 修改电脑DNS
查看>>
JSCover+WebDriver/Selenium获得JS代码覆盖
查看>>
其简单的通用适配器的定义
查看>>
IIS应用程序池自动回收问题的有效解决办法
查看>>
数据库设计之半结构化存储
查看>>
BZOJ4385 : [POI2015]Wilcze doły
查看>>