cpu启动时为实模式,此时硬烧录的将cs=0xFFFF,ip=0x0,并自动开始执行0xFFFF0(ROM-BIOS的地址)的代码,BIOS会自检,并在0x0地址处设置中断向量表,此后实模式的int中断全部依赖此表,并将0磁道0扇区的512字节(引导扇区,放bootsect.s)读入内存0x7c000处,并跳转到此地址.

bootsect.s只能占512字节,功能有限,所以需要setup.s, 首先bootsect.s将自身从0x7c000移动到0x90000(为setup.s将system移动到0x00000时腾地方),并将setup.s读入到内存0x90200处,将system模块读入内存0x10000处.转入0x90200(setup.s)执行.

setup.s通过int中断获取硬件参数并放置在内存合适位置,为system模块运行做准备,并将system从内存0x10000移动到0x00000处(此时system中的模块中的逻辑内存地址就是真实的物理地址,而且BIOS中设置的int中断向量表就被覆盖了,int中断用不了了),设置GDT表,将cr0寄存器PE设为1,开启保护模式(指令集改变为32or64位的cpu指令集,寻址方式也改变),PG设为1,启动分页,并跳转(jmpi 0,8)到0x00000,操作系统正式启动!

tip1:自80386开始,除了bootsect.s和setup.s执行在实模式(实模式不区分特权级和用户级,能运行就是最大权限),操作系统和用户程序全部在保护模式下.

tip2:实模式是十六位机,保护模式根据cpu不同有32和64位,所以保护模式最多寻址1MB(16位有20根地址总线),而32位(32根地址总线)可寻址4GB,64(64根地址总线)更是256TB

tip3:实模式和保护模式的区别一个是寻址能力,一个是寻址方式,以及是否区分特权级和用户级.

tip4:之所以现代cpu中仍旧保存实模式的一大原因是与老的cpu或软件保持兼容,实模式本身是一种落后的淘汰设计.

linux0.11启动时bootsect.s和setup.s的主要作用相关推荐

  1. linux0.11 init函数,linux0.11启动与初始化

    简单描述Linux0.11的启动与初始化过程. 启动过程中需要关注:IDT, GDT, LDT, TSS, 页表, 堆栈这些数据. 一:启动过程 启动的代码文件为bootsect.s.setup.s. ...

  2. 很好的linux启动说明( bootsect.S、setup.S、head.S)

    bootsect.S,系统引导程序,一般不超过512字节. 在PC系统结构中,线性地址0xA0000以上,即640K以上用于图形接口卡和BIOS自身,640K以下为系统的基本内存.如果配置更多的内存, ...

  3. Linux0.11启动过程

    从开机加电,到执行main函数之前的过程 好吧,这里应该是有执行3个汇编的文件,但是我不太了解.囧 从main函数,到启动OK(即可以响应用户操作了) 这个步骤做了3件事情: 创建进程0,使之具备在主 ...

  4. 【Linux0.11代码分析】02 之 bootsect.s 启动流程

    [Linux0.11代码分析]02 之 bootsect.s 启动流程 一.boot\bootsect.s 1.1 将bootsect.s 从0x7c00 移动到 0x90000 (512byte) ...

  5. 编译linux0.11内核

    编译linux0.11内核 一.实验环境 二.下载文件 三.配置Linux0.11所需环境 四.编译内核 五.运行linux0.11 六.说明 1.setup.sh脚本里进行了什么操作? 2.最后弹出 ...

  6. Linux0.11内核引导启动过程概述

    Linux0.11仅支持x86架构.它的内核引导启动程序在文件夹boot内,共有三个汇编代码文件.按照启动流程依次是: (1)bootsect.s.boot是启动引导的意思,sect即sector,是 ...

  7. bootsect.s 预备——Linux-0.11 剖析笔记(一)

    文章目录 boot 目录下文件介绍 16 位代码是什么意思 计算机启动过程 Linux 0.11 启动过程 boot 目录下文件介绍 boot 目录中一共有三个文件,都是用汇编语言写的,如下图(图来自 ...

  8. bootsect.s 解读——Linux-0.11 剖析笔记(二)

    题目:bootsect.s 解读--Linux-0.11 剖析笔记(二) 文章目录 一些符号常量 老式Linux设备号的命名规则 bootsect 把自己搬运到 0x90000,并跳转 加载 setu ...

  9. Linux0.11内核源码解析-bootsect.s

    学习资料: Linux内核完全注释 操作系统真像还原 极客时间-Linux内核源码趣读 Linux0.11内核源码 ->上电 ->80x86架构CPU会自动进入实模式 ->从地址0x ...

最新文章

  1. 你在「动森」里遇到的那些「丑动物」,后来怎么样了?
  2. POJ 1852 Ants O(n)
  3. SpringBoot-高级-检索-整合SpringDataElasticsearch
  4. Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题
  5. 用java写jsp页面跳转页面跳转_五种 JSP页面跳转方法详解
  6. 圣地亚哥分校 计算机,加州大学圣地亚哥分校计算机怎么样?
  7. BZOJ5093 图的价值(NTT+斯特林数)
  8. MSSQL → 04:表的创建与维护
  9. 网络安全菜鸟学习之杂项篇——WIFI安全(一)
  10. JAVAWEB学习总结
  11. 弹性力学经典解法与有限元法的不同特点
  12. 微分几何笔记(1)——参数曲线、内积、外积
  13. 一篇文章彻底搞懂JVM常见垃圾收集器算法、常见收集器、CMS三色标记等(深度剖析)
  14. vtk 中vtkMapper的各函数解析
  15. 新应用——信息化财务管理,一站式满足多个需求
  16. 简单的车票管理系统(c语言)
  17. linux pip安装(下载)
  18. Ubuntu设置终端打开时的默认窗口大小和位置坐标
  19. 对 Spring 的核心(AOP 和 IOC)的理解(大白话)
  20. matlab编译得到的可执行文件修改软件图标的方法

热门文章

  1. python生成word文档的表格_2018-10-04 [日常]用Python读取word文档中的表格并比较
  2. 傻瓜攻略(十七)——MATLAB实现SVM二分类之fitcsvm
  3. 【学习总结】网络编程技术
  4. Spring 核心技术 - 数据缓冲区和编解码器
  5. 特立独行的幸福 (25分)
  6. 魏副业而战:做一个特立独行的人,为别人提供价值
  7. 泰达机器人董事长_【百佳专访】深圳泰达董事长陈大立:“沉迷”研发喷涂自动化中国方案的“匠人”...
  8. Host Bridge
  9. 重装系统-入门到精通-window系统
  10. Uni-app原生插件开发