幻灯片 1

Similar documents
1 CPU interrupt INT trap CPU exception

提纲. 1 实验准备. 2 从实模式进入保护模式. 3 小结 陈香兰 ( 中国科学技术大学计算机学院 ) 软件综合实验之操作系统 July 1, / 11

Linux kernel exploit研究和探索

浙江大学本科论文模板

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Computer Architecture

06721 main() lock pick proc() restart() [2][4] MINIX minix2.0 GDT, IDT irq table[] CPU CPU CPU CPU (IDTR) idt[] CPU _hwint00:! Interrupt

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

untitled

Andes Technology PPT Temp

2/80 2

先生別耍我

C/C++ - 文件IO

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Microsoft Word - 正文.doc

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10

Microsoft Word - 3圓來如此.doc

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt

Microsoft Word - 澎湖田調報告_璉謙組.doc

CC213

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

Microsoft PowerPoint - C15_LECTURE_NOTE_11

CH01.indd

Ác Åé å Serial ATA ( Sil3132) S A T A (1) SATA (2) BIOS SATA (3)* RAID BIOS RAID (4) SATA (5) SATA (a) S A T A ( S A T A R A I D ) (b) (c) Windows XP

AL-M200 Series

Microsoft Word - 選擇_無解答2_.doc

Abstract arm linux tool-chain root NET-Start! 2

ROP_bamboofox.key


P4Dual-915GL_BIOS_CN.p65

CHN_p000A_Cover.ai

投影片 1

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

Microsoft PowerPoint - C15_LECTURE_NOTE_04.ppt

DPJJX1.DOC


USB解决方案.ppt

36 asm ("mov %%fs,%%ax":"=a" ( res):); \ 37 res;}) 38 // 以下定义了一些函数原型 39 void page_exception(void); // 页异常 实际是 page_fault(mm/page.s,14) void divi

Ch03_嵌入式作業系統建置_01

說 說 留 說 參 了 不 弄 弄 不 落 不 異 列 切 TOA 連 異 異 落 露 2

作 業 系 統 簡 介 光 有 電 腦 硬 體, 會 不 容 易 使 用 必 須 要 有 適 當 的 程 式, 才 方 便 操 作 硬 體 衍 生 作 業 系 統 需 求 : 提 供 方 便 使 用 者 執 行 程 式 平 台 有 效 使 用 各 種 電 腦 硬 體 資 源 Jingo C. Lia

Outline 1 中断信号的作用和处理的一般原则 2 I/O 设备如何引起 CPU 中断 3 x86 CPU 如何在硬件级处理中断信号中断和异常的硬件处理 : 进入中断 / 异常中断和异常的硬件处理 : 从中断 / 异常返回 4 Linux 内核中软件级中断处理及其数据结构初始化中断描述符表低级异

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

程序 linux/include/linux/math_emu.h 1 /* 2 * linux/include/linux/math_emu.h 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 #ifndef _LINUX_MATH_EMU_H 7 #de

Bus Hound 5

ARM JTAG实时仿真器安装使用指南

untitled

1.ai

Microsoft PowerPoint - C15_LAB_MTS86_INTRO

untitled

闖 關 組 4. 任 一 隊 員 曾 獲 得 第 一 屆 第 2 次 全 國 大 專 ITSA 盃 程 式 設 計 桂 冠 挑 戰 大 賽 菁 英 組 前 三 名 或 歷 屆 全 國 大 專 ITSA 盃 程 式 設 計 桂 冠 挑 戰 大 賽 挑 戰 組 前 三 名 應 報 此 組 5. 任 一

untitled

一 学 校 基 本 情 况 目 录 二 部 门 预 算 报 表 ( 一 ) 收 支 总 表 ( 二 ) 收 入 总 表 ( 三 ) 支 出 总 表 ( 四 ) 财 政 拨 款 支 出 表 三 部 门 预 算 报 表 说 明 ( 一 ) 收 支 总 表 说 明 ( 二 ) 收 入 总 表 说 明 (

目 录 一 学 校 基 本 情 况 二 2016 年 预 算 报 表 ( 一 ) 中 南 大 学 收 支 预 算 总 表 ( 二 ) 中 南 大 学 收 入 预 算 表 ( 三 ) 中 南 大 学 支 出 预 算 表 ( 四 ) 中 南 大 学 财 政 拨 款 支 出 预 算 表 三 2016 年

信息参考

Microsoft Word - 15dbtb007

投影片 1

海 南 冯 琳 峰 海 南 省 锅 炉 压 力 容 器 与 特 种 设 备 检 验 所 海 南 省 定 安 县 白 蒙 路 47 号 信 XC 内 蒙 古 冯 磊 赤 峰 市 特 种 设 备 检 验 所 内 蒙 古 赤 峰 市 红 山 区 八 里 铺 油 库 路

ESP-Jumpstart

audiogram3 Owners Manual

一个开放源码的嵌入式仿真环境 ― SkyEye

Data Management Software CL-S10w

入學考試網上報名指南

/ / (FC 3)...

Static Enforcement of Security with Types

P4VM800_BIOS_CN.p65

基于 x86 的 Linux 启动代码分析小结和作业.... Linux 操作系统分析 2 基于 x86 的 Linux 启动代码分析 陈香兰 苏州研究院中国科学技术大学 Fall

C/C++ - 字符输入输出和字符确认

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

CL-S10w

PCM-3386用户手册.doc

安全防范

02

775i65PE_BIOS_CN.p65

E11701


untitled

秘密

FBOS 内核剖析 作者 : 小虾 (xiaoxia.org) 注意 : 这是一篇对于 FBOS 的非官方描述文章, 对于文章内容对读者造成的误解, 作者不负任何责任 对 于利用本文内容有意或不小心进行了商业用途或犯罪行为者, 作者不负任何责任 姑且请读者好自为之 目录一 FBO

P4V88+_BIOS_CN.p65

华恒家庭网关方案

Microsoft PowerPoint - TTCN-Introduction-v5.ppt

Microsoft PowerPoint - C15_LECTURE_NOTE_05.ppt

投影片 1

目 录

1

目次 

P4i45GL_GV-R50-CN.p65

Data Management Software CL-S10w

50-FB23-24_BES_V_ z1_ b

简 介 本 白 皮 书 高 度 概 述 了 支 持 移 动 互 联 网 设 备 (Mobile Internet Device) 的 Intel C++ Software Development Tool Suite for Linux* OS, 目 标 读 者 主 要 是 技 术 决 策 制 订

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

微處理機期末專題

PROFIBUS3.doc

EK-STM32F

自由軟體教學平台

Transcription:

操作系统课程实验 Lab1:bootloader 启动 ucore os

大纲 x86 启动顺序 C 函数调用 gcc 内联汇编 (inline assembly) x86-32 下的中断处理

理解 x86-32 平台的启动过程理解 x86-32 的实模式 保护模式理解段机制 x86 启动顺序

x86 启动顺序 寄存器初始值 摘自 "IA-32 Intel 体系结构软件开发者手册 "

x86 启动顺序 第一条指令 CS = F000H, EIP = 0000FFF0H 实际地址是 : Base + EIP = FFFF0000H + 0000FFF0H = FFFFFFF0H 这是 BIOS 的 EPROM (Erasable Programmable Read Only Memory) 所在地 当 CS 被新值加载, 则地址转换规则将开始起作用 通常第一条指令是一条长跳转指令 ( 这样 CS 和 EIP 都会更新 ) 到 BIOS 代码中执行

x86 启动顺序 处于实模式的段 摘自 "IA-32 Intel 体系结构软件开发者手册 " 段选择子 (Segment Selector): CS, DS, SS, 偏移量 (Offset): EIP

x86 启动顺序 从 BIOS 到 Bootloader BIOS 加载存储设备 ( 比如软盘 硬盘 光盘 USB 盘 ) 上的第一个扇区 ( 主引导扇区,Master Boot Record, or MBR) 的 512 字节到内存的 0x7c00 然后转跳到 @ 0x7c00 的第一条指令开始执行

x86 启动顺序 从 bootloader 到 OS bootloader 做的事情 : 使能保护模式 (protection mode) & 段机制 (segmentlevel protection) 从硬盘上读取 kernel in ELF 格式的 ucore kernel ( 跟在 MBR 后面的扇区 ) 并放到内存中固定位置跳转到 ucore OS 的入口点 (entry point) 执行, 这时控制权到了 ucore OS 中

x86 启动顺序 段机制 摘自 "IA-32 Intel 体系结构软件开发者手册 "

x86 启动顺序 段机制 摘自 "IA-32 Intel 体系结构软件开发者手册 "

x86 启动顺序 段机制 Loading GDT: lgdt gdtdesc gdt: gdtdesc:.word 0x17.long gdt 摘自 "IA-32 Intel 体系结构软件开发者手册 "

x86 启动顺序 使能保护模式 摘自 "IA-32 Intel 体系结构软件开发者手册 " 使能保护模式 (protection mode), bootloader/os 要设置 CR0 的 bit 0 (PE) 段机制 (Segment-level protection) 在保护模式下是自动使能的

x86 启动顺序 加载 ELF 格式的 ucore OS kernel struct elfhdr { uint magic; // must equal ELF_MAGIC uchar elf[12]; ushort type; ushort machine; uint version; uint entry; // program entry point (in va) uint phoff; // offset of the program header tables uint shoff; uint flags; ushort ehsize; ushort phentsize; ushort phnum; // number of program header tables ushort shentsize; ushort shnum; ushort shstrndx; };

x86 启动顺序 加载 ELF 格式的 ucore OS kernel struct proghdr { uint type; uint offset; uint va; uint pa; uint filesz; uint memsz; uint flags; uint align; }; // segment type // beginning of the segment in the file // where this segment should be placed at // size of the segment in byte

x86 启动顺序 参考资料 Chap. 2.5 (Control Registers) ), Vol. 3, Intel and IA-32 Architectures Software Developer s Manual Chap. 3 (Protected-Mode Memory Management), Vol. 3, Intel and IA-32 Architectures Software Developer s Manual Chap. 9.l (Initialization Overview), Vol. 3, Intel and IA-32 Architectures Software Developer s Manual An introduction to ELF format: http://wiki.osdev.org/elf

理解 C 函数调用在汇编级是如何实现的理解如何在汇编级代码中调用 C 函数理解基于 EBP 寄存器的函数调用栈 C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现

C 函数调用的实现 其他需要注意的事项 参数 (parameters) & 函数返回值 (return values) 可通过寄存器或位于内存中的栈来传递 不需要保存 / 恢复 (save/restore) 所有寄存器

C 函数调用的 参考资料 Understanding the Stack: http://www.cs.umd.edu/class/sum2003/cmsc311/notes/mips/stack.html

阅读理解内联汇编 (inline assembly instructions) GCC 内联汇编 INLINE ASSEMBLY

CC 内联汇编 什么是内联汇编 ( Inline assembly )? 这是 GCC 对 C 语言的扩张 可直接在 C 语句中插入汇编指令 有何用处? 调用 C 语言不支持的指令 用汇编在 C 语言中手动优化 如何工作? 用给定的模板和约束来生成汇编指令 在 C 函数内形成汇编源码

CC 内联汇编 Example 1 Assembly (*.S): movl $0xffff, %eax Inline assembly (*.c): asm ( movl $0xffff, %%eax\n )

CC 内联汇编 Syntax asm ( assembler template : output operands (optional) : input operands (optional) : clobbers (optional) );

CC 内联汇编 Example 2 Inline assembly (*.c): uint32_t cr0; asm volatile ("movl %%cr0, %0\n" :"=r"(cr0)); cr0 = 0x80000000; asm volatile ("movl %0, %%cr0\n" ::"r"(cr0)); Generated asssembly code (*.s): movl %cr0, %ebx movl %ebx, 12(%esp) orl $-2147483648, 12(%esp) movl 12(%esp), %eax movl %eax, %cr0

CC 内联汇编 Example 2 Inline assembly (*.c): uint32_t cr0; asm volatile ("movl %%cr0, %0\n" :"=r"(cr0)); cr0 = 0x80000000; asm volatile ("movl %0, %%cr0\n" ::"r"(cr0)); volatile No reordering; No elimination %0 The first constraint following r A constraint; GCC is free to use any register

CC 内联汇编 Example 3 long res, arg1 = 2, arg2 = 22, arg3 = 222, arg4 = 233; asm volatile ("int $0x80" : "=a" ( res) : "0" (11),"b" (arg1),"c" (arg2),"d" (arg3),"s" (arg4)); movl $11, %eax movl -28(%ebp), %ebx movl -24(%ebp), %ecx movl -20(%ebp), %edx movl -16(%ebp), %esi int $0x80 movl %eax, -12(%ebp) Constraints a = %eax b = %ebx c = %ecx d = %edx S = %esi D = %edi 0 = same as the first

CC 内联汇编 - 参考资料 GCC Manual 6.41 6.43 Inline assembly for x86 in Linux: http://www.ibm.com/developerworks/library/l-ia/index.html

了解 x86 中的中断源了解 CPU 与操作系统如何处理中断能够对中断向量表 ( 中断描述符表, 简称 IDT) 进行初始化 X86 中的中断处理

中断 Interrupts 外部中断 External (hardware generated) interrupts 串口 硬盘 网卡 时钟 软件产生的中断 Software generated interrupts The INT n 指令, 通常用于系统调用 异常 Exceptions X86 中的中断处理 中断源 程序错误软件产生的异常 Software generated exceptions INTO, INT 3 and BOUND 机器检查出的异常 S

X86 中的中断处理 确定中断服务例程 (ISR) 每个中断或异常与一个中断服务例程 ( Interrupt Service Routine, 简称 ISR) 关联, 其关联关系存储在中断描述符表 ( Interrupt Descriptor Table, 简称 IDT) IDT 的起始地址和大小保存在中断描述符表寄存器 IDTR 中 摘自 "IA-32 Intel 体系结构软件开发者手册 "

X86 中的中断处理 确定中断服务例程 (ISR) 摘自 "IA-32 Intel 体系结构软件开发者手册 "

X86 中的中断处理 确定中断服务例程 (ISR) 摘自 "IA-32 Intel 体系结构软件开发者手册 "

X86 中的中断处理 切换到中断服务例程 (ISR) 不同特权级的中断切换对堆栈的影响 High Low EFLAGS CS EIP Error Code Stack Usage with No Privilege-Level Change ESP Before Transfer to Handler ESP After Transfer to Handler Stack Usage with Privilege-Level Change ESP Before Transfer to Handler ESP After Transfer to Handler SS ESP EFLAGS CS EIP Error Code Stack 1 Stack 1 Stack 2

X86 中的中断处理 从中断服务例程 (ISR) 返回 iret vs. ret vs. retf : iret 弹出 EFLAGS 和 SS/ESP( 根 据是否改变特权级 ), 但 ret 弹出 EIP, retf 弹出 CS 和 EIP Stack Usage with No Privilege-Level Change Stack Usage with Privilege-Level Change High EFLAGS ESP After Transfer to Handler SS ESP After Transfer to Handler SS CS ESP ESP EIP Error Code ESP Before Transfer to Handler EFLAGS CS EFLAGS CS EIP Error Code ESP Before Transfer to Handler EIP Error Code Low

X86 中的中断处理 系统调用 用户程序通过系统调用访问 OS 内核服务 如何实现 需要指定中断号使用 Trap, 也称 Software generated interrupt 或使用特殊指令 (SYSENTER/SYSEXIT)

X86 中的中断处理 参考资料 Chap. 6, Vol. 3, Intel and IA-32 Architectures Software Developer s Manual