L2 【哈工大_操作系统】开始揭开钢琴的盖子

本文详细解析了冯·诺依曼计算机开机时的过程,涉及x86结构的初始化步骤,包括实模式、ROMBIOS映射、内存检查、引导扇区代码bootsect.s的执行,以及BIOS中断INT0x13在读取系统模块中的作用。
摘要由CSDN通过智能技术生成

1、思考 OS 开机背后发生的事情
2、图灵机 -> 通用图灵机(把菜谱载入到控制器里,计算机就能做指定的菜)。进一步,把程序载入到内存,执行这个程序出现响应的结果。

在这里插入图片描述

  • 冯洛伊曼:计算机由五大部件组成:输入设备、输出设备、存储器、运算器、控制器
  • 把程序载入内存(存储器)(取),用一个IP指针指向当前处理的指令(指),运算器、控制器解释执行这条指令(执行),计算机就能执行响应的工作
  • 计算机是怎么工作的:“取指执行”

ps:为了帮助大家理解与回忆李治军老师课程内容,本系列图片将保留李老师课堂上的笔记

在这里插入图片描述

3、计算机 x86结构(Intel)开机时:
(1) x86 PC刚开机时CPU处于实模式
(2) 开机时,CS = 0xffff; IP=0x0000 (实模式的寻址 CS:IP - CS左移4位+IP)
(3) 寻址0XFFFF0 (ROM BIOS映射区)
(4) 检查RAM,键盘,显示器,软硬磁盘
(5) 将磁盘0磁道0扇区(OS引导扇区)读入内存0x7c00处
(6) 设置 cs=0x07c0,ip=0x0000

  • 计算机刚上电内存是固化的寻址0xFFFF0(ROM BIOS-basic input ouput system)
  • 一个扇区为 512 bytes

4、引导扇区代码: bootsect.s(s是汇编代码),将被汇编为机器指令,然后放在引导扇区上

在这里插入图片描述

  • 先将端寄存器分别赋值:ds=7c0, es=900, 再赋值偏移地址: si=0, di=0,于是得到两个地址ds:si,es:di。
  • movw 移动字,一共移动cx=256个字,即512 bites。将读入的bootsect.s从ds:si移动到es:di,即从7c00移动到90000(为了腾出空间,后续便于把OS整体从90000移动到从00000开始的地方,OS的长度会覆盖到 7c000,所以需要把 OS 先移动90000再去取指执行
  • jmpi-间接跳转,go(标号)->ip, INITSEG->cs,即顺序执行跳到go标号处继续

在这里插入图片描述

  • 关键是 int 0x13,这是BIOS读磁盘扇区的中断(BIOS中断之一)
  • cl开始读,读al个扇区,读到 es:bx 内存地址(0x90200,与0x90000差512个字节,因为第一个扇区从90000开始占用了512个字节了)

在这里插入图片描述

  • bp存放开机显示界面存放的偏移,把#msg1中存放字符串打印到屏幕上
  • 再用 int 0x13 中断读 system模块 -> 黑色屏幕干了:打印logo,读入system模块,执行setup.s
  • 修改OS登录界面的LOGO
    • 修改 msg1 对应的字符串
    • 修改 mov cx, #24 , 24是指输出24个字符

在这里插入图片描述

  • 先通过中断0x13把 system 模块读入,此时 bootsec.s 已经执行完退出,再把控制权交给 setup(SETUPSEG = 0x9020)

bootsect.s 任务总结

  1. CS=0xffff, IP=0x0000,ROM BIOS映射区 -> 检查RAM,键盘,显示器,软硬磁盘
  2. CS=0x07c0, IP=0x0000,磁盘0磁道0扇区的引导扇区bootsect.s -> 先把本身bootsect.s 移动到 CS=0x0900, IP=0x0000 腾出空间
  3. CS=0x0900, IP=0x0000,还是执行 bootsect.s -> 将磁盘区中4个steup扇区读入boot扇区256个字节之后,执行 bootsect.s
  4. CS=0x0920, IP=0x0000,还是执行 bootsect.s -> 打印logo,读入system模块,跳到(90200)准备执行 setup.s
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小猪沉塘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值