Yuerer's Blog

钰儿的Blog

x86 特权级 (Privilege Levels)

  • RING 0(内核)
  • RING 1(服务)
  • RING 2(服务)
  • RING 3(应用程序)

当前操作系统 一般只用到了 RING 0 和 RING 3 比如 Linux
在访问数据段 页表 进入中断服务例程 (ISRs) CPU 会检查特权级

x86 特权级检查失败

会提示 General Protection Fault 一般保护错误

阅读全文 »

为什么需要非连续内存分配

连续内存分配有缺点

  • 分配给程序的物理内存必须连续
  • 存在外碎片 和 内碎片
  • 内存分配的动态修改困难 (难以动态的增加内存和减少内存)
  • 内存利用率低

之前连续物理内存地址分配 给进程分配内存 必须给其分配连续的物理内存区域 若内存中没有满足需要的内存大小的连续内存区域 分配内存就会失败

非连续内存分配目标

提高内存利用效率和管理灵活性

  • 允许程序使用非连续物理内存空间
  • 允许共享代码与数据 (两个进程共用一个函数库的时候)
  • 支持动态加载和动态链接
阅读全文 »

练习1:理解通过make生成执行文件的过程

  1. 操作系统镜像文件ucore.img是如何一步一步生成的?
1
2
3
4
5
6
$(UCOREIMG): $(kernel) $(bootblock)
$(V)dd if=/dev/zero of=$@ count=10000
$(V)dd if=$(bootblock) of=$@ conv=notrunc
$(V)dd if=$(kernel) of=$@ seek=1 conv=notrunc
从 MakeFile 里面 可以看出 生成 ucore.img 首先需要生成 大小为 10000字节 的空间
然后 将 bootblock 和 kernel 依次写入到 那块空间之中
阅读全文 »

系统启动

CPU加电之后 初始化寄存器 从 CS:IP = 0xF000:FFF0 执行第一条指令 系统处于实模式 故 PC = 16 * CS + IP 此时物理地址为 0xFFFF0 20位地址总线 可用内存为 1MB 此时距离 1MB 只剩下 16个字节

16个字节够用吗?

0xffff0 物理地址处为跳转指令 会长跳转到 BIOS 代码真正开始的地方

BIOS 初始化

  • 基本输入输出
  • 系统设置信息
  • 开机后自检
    1. 硬件自检POST
      • 检测系统中内存或显卡等关键部位的存在和工作状态
      • 查找并执行显卡等接口的初始化程序
    2. 系统初始化
      • 检测配置即插即用设备
      • 更新 ESCD 扩展系统配置数据
  • 系统自启动等
阅读全文 »
0%