`
noble510520
  • 浏览: 53643 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

操作系统启动顺序

阅读更多

概述

在这里以x86的处理器为例 
机器在启动的时候会执行第一条指令。这条指令会去执行bios,将控制权交给bios。 
bios完成硬件的质检,然后将bootloader从硬盘读到内存中,执行bootloader,并将控制权交给bootloader 
bootloader负责使能保护模式、建立段机制以及加载操作系统,然后将控制权交给操作系统

启动顺序

第一条指令

执行机器的第一条指令是为了跳转到bios执行,那么需要知道bios在哪里?cpu是怎么寻址的?

bios在哪里

bios是固化在内存EPROM中的,断电不会丢失(非易失性),这样biod的地址是固定的,因为在cpu第一次加电了之后,寄存器就会有缺省的初始值,所以bios地址=寻址寄存器的缺省值就好啦。 
寻址是由段寄存器以及指令指针共同完成,bios地址由CS:IP=16*CS+IP(代码段寄存器:指令指针)来表示。 
CS的缺省值是FFFF0000H,IP的缺省值是0000FFF0H。 
CS:IP=FFFFFFF0H

寻址机制

寻址是由段寄存器以及指令指针共同完成。因为内存很大,而且在一段时间内操作的内存具有空间局部性,所以可以将内存分为一段一段由段寄存器来定位,这一段的内存中再由指令指针来定位到具体的代码、数据 
段寄存器: 
- CS——code segment,代码段寄存器 
- DS——data segment,数据段寄存器 
- ES——extra segment,附加段寄存器 
- SS——stack segment,堆栈寄存器

指令寄存器IP(instruction pointer),即是我们熟悉的程序计数器PC。 
一个地址由段寄存器:指令指针=16*段寄存器+指令指针来表示 
由于在这一阶段,机器还是处于实模式,实模式是20位寻址,所以单单只用段寄存器(16位)是不够的。 
因为实模式只有20位寻址,所以最大可调用的空间只有1M

bios

bios是负责做硬件自检并初始化以及将bootloader加载到内存中 
要保证硬盘、内存…在后续工作中不会出错。 
然后将bootloader加载到内存中的0x7c00,然后跳转到0x7c00执行。

bootloader

bootloader要完成使能保护模式(实模式——>保护模式)、建立段机制以及加载操作系统

bootloader结构

bootloader在硬盘中的第一个扇区也叫主引导扇区,一个扇区是512字节,所以bootloader也是512字节。 
其中有400+个字节是启动代码,负责完成bootloader需要完成的工作,剩下的字节是记录硬盘分区表。 
bootloader结构

建立段机制

当没有段机制,CS:IP得到的是真实的物理地址,段机制就是为了更加灵活的分段。 
段机制就是中间做了一层映射,CS先定位到GDT(全局描述表)相应的段描述符,再从段描述符中找到段的起始地址,与IP组成物理地址。

使能保护模式

将CR0寄存器(control 0 register控制寄存器),的第0位设为1,这样就开启了保护模式

查看原文:http://blog.zswlib.com/2016/11/15/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E9%A1%BA%E5%BA%8F/

0
1
分享到:
评论

相关推荐

    修改Ubuntu Windows双操作系统启动顺序

    #修改 GRUB_DEFAULT=0 为操作系统列表中目标操作系统序号,顺序从0开始计数,比如我的 windows 序号为 4#  2.然后:  root@ubuntu:~# update-grub  终端提示信息: Generating grub.cfg … Found linux ...

    win ce 启动顺序

    描述win ce 6.0操作系统启动顺序,

    双系统启动顺序设置

    安装了双系统后对操作系统的启动顺序、等待时间的设置不清楚或是找不到最简单的设置方法。下面就以“WinXP和Win7双系统”为例来说明一种最简单的调整方法。在WinXP的基础上安装了Win7后,默认启动的操作系统是Win 7...

    Linux系统启动顺序

    Linux系统启动顺序,一个完整的启动流程,每一步都做了什么操作都有详细解释

    VirtualBox安装增强功能时报错:未能加载虚拟光盘 到虚拟电脑

    尝试解决: 1,先根据提示路经找到VBoxGuestAdditions.iso,添加到光盘。 2,根据网上找的资料,需弹出光盘,再行安装增强功能。 这一步走了弯路,因为网上提示是鼠标右击光盘图标弹出,我这里犯了难,右击没有反应...

    Fedora16修改启动顺序

    安装linux/windows多操作系统 修改默认启动

    Linux启动顺序的修改.pdf

    Linux启动顺序的修改.pdf

    《计算机操作系统》期末复习指导

    操作系统的五大类型是批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统。 多道程序设计:即在系统内(内存)同时存放并运行几道相互独立的程序。 多道程序设计的基础:是将...

    自己动手写操作系统(含源代码).part2

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    自己动手写操作系统(含源代码).part1

    书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤,读者可以由一个最简单的引导扇区开始,逐渐完善代码,扩充功能,最后形成一个小的操作系统。 本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的...

    操作系统基本知识.pptx

    操作系统基本知识包括了存储,零拷贝技术,进程启动顺序,虚拟内存管理,用户态内核态,逻辑地址和物理地址

    linux操作系统.txt

    对于操作系统而言,只需要把最开始执行的程序"定位" 在启动扇区,其余程序可以依照操作系统的设计顺序加载到后续扇区中。对于BIOS而言,"约定" 接到启动操作系统的命令,"定位识别"只从启动扇区加载代码,而不需要...

    virtualbox安装增强功能时【未能加载虚拟光盘】的问题解决

    进入系统在侧边找到如图加载的虚拟光驱,右击,点击弹出,然后就可正常安装增强功能了 点击安装增强功能 点击“运行” 输入登录系统的密码,点击授权,就开始自动安装了 如图,为安装界面,安装完成后按下回车键...

    linux操作系统命令大全

    而实际上操作系统监控着一个等待执行的任务队列,这些任务包括用户作业、操作系统任务、邮件和显示作业等。操作系统根据每个任务的优先顺序为每个任务分配合适的时间片段,每个时间片段大约都有零点几秒,虽然看起来...

    HP-UX操作系统培训教材

    2.1.5 HP-UNIX的安装步骤(以32bit操作系统、安装媒体为光盘为例): 4 2.2 系统启动配置 6 2.3 系统的启动 6 2.3.1系统加电的一般顺序: 6 2.3.2系统启动流程图 6 2.4 系统的关闭 7 第三章 系统日常管理和维护 7 ...

    Oracle VM VirtualBox虚拟机的安装使用

    虚拟机的安装,使用,简单,便捷,能进行网络测试,跨平台测试。

    操作系统实验一: 进程调度

    指针:进程按顺序排成循环链表,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。 要求运行时间:假设进程需要运行的单位时间数。 已运行时间:假设进程已经运行...

    Linux操作系统

    本书讲解了Linux操作系统的工作机制以及运行Linux系统所需...根据系统启动的大体顺序,本书更深入地介绍从设备管理到网络配置的各个部分,最后演示了系统各部分的运行方式,并介绍了一些基本技巧和开发人员常用的工具。

    广州大学操作系统课程设计实验报告及代码(时间片轮转法).zip

    (4)由于本题目是模拟实验,所以对被选中的进程并不实际启动运行,而只是执行如下操作:1)估计运行时间减1; 2)输出当前运行进程的名字。 用这两个操作来模拟进程的一次运行。 (5)进程运行一次后,以后的...

    网络操作系统Linux大作业文档

    服务器启动时的子进程数为5;使用端口为80。 3.使用bind设置DNS服务器。修改DNS服务器的主配置文件将域xx.com 的正向配置文件设置为db.xx.com;创建db.xx.com正向配置文件,并添加主机记录,使两个网站的域名都能被...

Global site tag (gtag.js) - Google Analytics