基本知识点
程序的运行就是CPU执行指令
程序的二进制指令都是放在内存中或映射在内存中
CPU当前要执行的指令由CS:IP指定
开机或复位以后CPU从实模式0xFFFF0(0xFFFFFFF0)的位置开始执行第一条指令
CPU的地址,有逻辑地址,线性地址,物理地址的区分
逻辑地址 – 程序执行时指令指定的地址
线性地址 – 由逻辑地址经过一定规则转换而来
物理地址 – 实际传送到CPU地址总线上的地址
CPU寄存器概念
寄存器(Register)直接位于CPU的内部,是一种高速存储位置,其访问速度远远高于任何传统存储器(包括cache),可以类比为“最高速的内存”。因此当一个程序为了速度需要进行优化时,常常选择把某些数据储存在寄存器当中
实模式
实地址模式/Real-address Mode
CPU上电和复位后默认工作模式
1MB物理寻址空间,线性地址等于物理地址
内存无权限限制,所有内存都可读,写和执行,操作系统和用户程序无差别
指令无优先级/特权限制,所有指令都可执行,包括所有特权指令
单任务
通过中断机制提供系统服务,中断向量表存放中断服务程序入口地址
1MB物理寻址空间(20根地址线)
地址空间按照64KB长度分为16个段,段内偏移量为16位
寻址方式为段地址左移4位+偏移量方式计算出20位地址
例如ES = 0x1000, DI = 0x1234,
则地址为(0x1000 << 4) + 0x1234 = 0x11234
当CPU支持20根以上地址线时,可以访问到0x100000到0x10FFEF的地址,但是需要打开A20地址线支持,否则访问到的是0x0000-0xFFEF的内存地址
保护模式
Segment Selector
段寄存器在保护模式下功能变更为段选择子
CS, DS, ES, SS
段选择子用来指定段描述符在全局描述符表/局部描述符表中的位置和请求访问权限(Requestor privilege level)
段选择子一旦赋值,对应的段基址和属性就自动确定
段选择子包括两部分,可见部分和隐藏部分
可见部分是代码/指令可以直接操作/赋值的部分
MOV, PUSH, POP, JMP等
隐藏部分是在给可见部分赋值后,CPU自动从段描述符中获得段描述信息后缓存到此部分,减少CPU访问内存开销,加快地址转换速度,这部分通过指令无法直接访问
任务
应用程序/进程/操作系统服务/中断或异常服务程序/系统内核等
由处理器调度、执行和休眠
任务被调度执行或者任务切换时,处理器会保存任务状态
一个系统至少有一个任务,每个任务都有LDT和TSS
一个任务由两部分构成
任务执行空间
代码段,栈段,一个或多个数据段
任务状态段(TSS)
由段选择子指定的任务执行空间状态(CS, DS, SS, ES, FS, GS)
各寄存器状态
通用寄存器/标识寄存器/控制寄存器/任务寄存器等
任务执行/切换
通过远过程调用CALL指令/远跳转JMP指令调用任务
中断/异常任务调用/返回
虚拟8086模式
系统管理模式
内存访问:
实模式:在实模式下,内存访问是基于物理地址的,程序可以直接访问整个1MB的内存空间。段寄存器用于指定内存段的起始地址,通过段寄存器和偏移地址的组合来计算物理地址。
保护模式:在保护模式下,内存访问是基于虚拟地址的,程序使用段选择子和偏移地址的组合来访问内存。通过分段机制和分页机制,保护模式提供了更灵活的内存管理和访问权限控制。
内存保护:
实模式:实模式下没有内存保护机制,程序可以直接访问整个内存空间,包括操作系统的关键数据结构和代码。这意味着一个程序的错误可能会影响整个系统的稳定性。
保护模式:保护模式提供了内存保护机制,通过分段和分页机制,可以将内存划分为不同的段和页面,并为每个段和页面设置访问权限。这样可以防止程序越界访问和保护操作系统的关键数据。
特权级别:
实模式:实模式下没有特权级别的概念,所有程序都在同一特权级别下运行,即特权级别0。
保护模式:保护模式引入了特权级别的概念,将处理器的运行状态划分为4个特权级别(0-3),称为特权级别环。操作系统运行在最高特权级别(特权级别0),应用程序运行在较低的特权级别。
扩展性:
实模式:实模式下,寻址空间只有1MB,无法充分利用现代计算机的内存容量。
保护模式:保护模式支持32位和64位的寻址空间,可以访问更大的内存容量,充分利用现代计算机的性能和资源。