主要讲解了80x86cpu在启动的时候时bios如何工作,以及如何最终转换到保护模式. 1.1 启动bios 80x86作为冯诺依曼结构下的cpu,工作模式也是取指执行,即cpu根据cs:ip寄存器的值‘计算’出一个真正的物理地址,在8086实模式的情况下这个地址是20位的,然后通过20位的地址线去寻址.20位的地址线对应1MB可寻址空间,这里特意使用了可寻址空间而不是我一直以为的内存空间,言下之意1MB的寻址空间包括内存(RAM)也包括一些其他的存储介质,而bios就放在这些其他的存储介质上,…
本文参考了如下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详解linux系统的启动过程及系统初始化 linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 加载对应引导上的MBR(bootloader) 主引导设置加载其BootLoader 加载操作系统 启动BIOS,准备实模式下的中断…
本文參考了例如以下文章 深入理解linux启动过程 mbr (主引导记录(Master Boot Record)) 电脑从开机加电到操作系统main函数之前执行的过程 详细解释linux系统的启动过程及系统初始化 linux系统的启动流程 关于linux系统的启动流程我们能够按步进行划分为例如以下: BIOS POST自检 BIOS(Boot Sequence) 引导操作系统 载入对应引导上的MBR(bootloader) 主引导设置载入其BootLoader 载入操作系统 启动BIOS,准备实…
  实验内核版本:0.11 ◆ 从开机到main函数的三步: ① 启动BIOS,准备实模式下的中断向量表和中断服务程序: ② 从启动盘加载OS程序到内存中,加载OS程序的工作就是利用第一步中的中断服务程序实现的: ③ 为执行保护模式下32位的main函数做过渡工作. ➩ Intel将所有80x86系列的CPU硬件都设计为加电即进入16位实模式状态运行: ➩ 将CPU硬件逻辑设计为在加电瞬间强行将CS置为0xFFFF,IP置为0x0000,即是CS:IP指向了0xFFFF0这个地址: 整个过程是一…
最近一直在看操作系统以及内核设计的东西,不确定自己有能力会参与到类似的开发之中,但是争取能自己改造这内核玩一下,然后按照Linux From Scratch那样的把改造后的系统编译运行就心满意足了.正在看的书是<Linux内核设计的艺术>之"图解Linux操作系统架构设计与实现原理",自己看的时候有种恍然大明白的感觉.这本书的特色是图很丰富,看着很爽的感觉,内存地址都画得非常清楚,但是我怕自己只看不动手分析的话,看了很容易遗忘.这里写这篇博客希望能够边看,边学,边分析,边领…
0x0 背景 在我参加的面试和我面试别人.或者参加别人对别人的面试的事后经常遇到的一个问题就是:请从计算机加电开始描述一下计算机启动到操作系统正式启动起来的全过程.这是一个考验对计算机体系结构和基本知识了解程度的问题.今天也就特别针对这个问题做一个回答,答案是基于80x86结构Linux 2.6及更高版本内核的为基准操作系统为例来回答的. 0x1 从加电到BIOS启动 STEP 1 加电引导寄存器置位 这一过程指的是,计算机加电后,一个特殊电路会在CPU对应的一阵针脚产生一个逻辑电平,这个电平的…
图片来自于https://blog.csdn.net/qq_27754983/article/details/75212666 1. UEFI或BIOS启动 服务器加电后,CPU 自动重置成初始状态,启动 BIOS boot program 开机程序. 2. POST自检 接着就会开始实行 POST,BIOS 或 UEFI 进行硬件检查的阶. 3. MBR引导 自检硬件没有问题时候,这里以 BIOS 为例,BIOS 将会直接去找硬盘的第一个扇区,找到前446字节,将 MBR 加载到内存中,MBR…
结合最近学习清华的OS课,先用“人话”来高度抽象的描述一下我自己的理解.CPU在系统加电也就是我们按下电源开关后,开始初始化他的寄存器,主要是cs和eip(本文基于x86架构),然后在ROM中找到一个叫BIOS(Basic Input Output System),加载到RAM中然后开始执行他,他在进行完设备的自检和初始化之后,就根据他自己内部的“我该去哪个设备启动加载程序”表,将其中第一个设备的主引导扇区加载到内存中来,也就是将系统的控制权转交给了这个程序,然后他在正确的引用了bootload…
第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResource.decodeStream和decodeByteArray从不同来源加载出一个Bitmap对象,最终的实现是在底层实现的.如何高效加载Bitmap?采用BitmapFactory.Options按照一定的采样率来加载所需尺寸的图片,因为imageview所需的图片大小往往小于图片的原始尺寸.(2)…
提到开机加载(load)项,大家不要以为就是系统启动(run)项.最简单的例子是,杀毒软件或者用户手动删除病毒文件后,注册表中的自动加载信息仍在,登陆系统时就会提示"加载*dll出错,系统找不到指定的模块",这些dll就是病毒寄生在系统进程之下的加载项. 出错开机加载项大揭秘"> 加载dll出错 病毒本身被阻止运行,却"挟系统以令用户",辗转藏在系统进程后面继续狐假虎威,大行其道:它们被发现并删除后,下次系统登陆.启动服务.初始化用户配置.启动外壳e…