Linux操作系统基础 Intel32位系统架构总览
前言
说是Linux操作系统基础,其实应该是Intel IA-32架构,但是以学习Linux操作系统为目的,故而称为《Linux操作系统基础》。本部分开始主要讲解80x86保护模式下基本概念,最主要的参考资料为Intel开发手册第三卷《系统编程指南》和赵炯的《Linux内核完全剖析》,最开始部分会直接翻译《系统编程指南》,当然不是逐字逐句的翻。
本来想从中断开始写的,后来发现要把中断相关知识写出来必需要先明白分段机制,而分段机制和分页机制属于内存管理,内存管理之前还有一些最基本的概念比如标志寄存器、控制寄存器、内存寻址模式、地址变换、IDT、GDT等。所以先给出一个总体概念描述,然后再详细解释,循序渐进。基本概念看起来最头痛,但它是后续学习的基础,不好好理解基本概念,以后将会举步维艰,磨刀不误砍柴工。
这一节将对Intel 32位系统架构中涉及的一些最基本的概念做概要介绍,在以后的博文中做具体阐述。如图1为Intel 32位系统架构总览。
系统架构总览
全局描述符表(GDT)和局部描述符表(LDT)
GDT的线性基地址存储在GDT寄存器(GDTR)中;LDT的线性基地址存储在LDT寄存器(LDTR)中。
系统段、段描述符和门
除了代码段、数据段和堆栈段是构成程序运行的环境外,系统架构还定义了两个系统段:任务状态段(task-state segement)和LDT。GDT不认为是段,因为它不通过段选择符或者段描述符访问。TSSs和LDTs都有相应的段描述符定义它们。
任务状态段(TSS)和任务门(taskgates)
4. 从新TSS加载新任务的状态到通过寄存器、段寄存器、LDTR、控制寄存器CR3(页表基地址)、EFLAGS标志寄存器和EIP寄存器中。
任务也可以通过任务门访问。任务门和调用门类似,只不前者是对TSS的访问(通过段选择符),后者是对代码段的访问。
中断和异常处理
外部中断、软中断和异常是通过IDT处理的。IDT存储提供访问中断和异常处理程序的门描述符的集合。和GDT类似,IDT也不是段。IDT的线性基地址存储在IDTR(中断门描述符表寄存器)中。
内存管理
为了使用这种分页机制,一个线性地址被分为三部分:页目录,页表和页框。系统可以有一个或者多个页目录。例如,每个任务可以有它自己的页目录。
系统寄存器
为了帮助处理器初始化和控制系统操作,系统架构提供存储系统标志的EFLAGS寄存器和几个系统寄存器:
l 系统标志和IOPL域在EFLAGS寄存器中,控制任务和运行模式切换、中断处理、指令跟踪他访问权限。
l 控制寄存器(CR0、CR2、CR3和CR4)包含多种标志和数据域来控制系统级操作。这些寄存器中的其它标志表示支持在操作系统和执行时的特别的处理能力。
l debug调试寄存器允许在调试程序和系统软件时设置中断。
l GDTR、LDTR和IDTR寄存器包括他们各自表的线性基地址和表的大小。
其它系统资源
除了在前面提到的系统寄存器和数据结构外,系统架构还提供以下额外的资源:
l 操作系统指令。比如LGDT、SGDT用来操作GDTR寄存器。
性能监控计数器是用来记录处理器事件的事件计数器,比如指令解码数、中断接收数和高速缓存加载数。
处理器提供一些内部高速缓存和缓冲区。高速缓存用来存储数据和指令,缓冲区用来存储类似于系统解码地址和应用程序段和等待执行的写操作。
参考:《Intel System ProgrammingGuide》
运行模式
l 保护模式(Protected mode)这是处理器主要运行模式。在这种模式下可以提供最多的架构特性指令集,最高的性能以及向后兼容。
l 实地址模式(Real-address mode) 这种模式提供了8086处理器程序运行的环境,比如提供切换到保护模式和系统管理模式的能力。
l 虚拟8086模式(Virtual8086 mode) 在保护模式下,处理器支持一个准操作模式模式叫虚拟8086模式。在这种模式下允许处理器在保护模式和多任务环境下执行8086程序。
系统加载或复位时CPU处于实模式。CR0寄存器的PE标志用于控制CPU工作在实模式或保护模式。
EFLAGS寄存的VM标志用于决定CPU工作在保护模式还是虚拟8086模式。保护模式和虚拟8086之前的切换通常完成任务切换或者从中断或异常处理程序返回的一部分。
每当处理器接收到SMI,就会从其它模式切换到SMM。当执行RSM指令时,处理器总是返回到SMI发生之前的模式。
EFLAGS寄存器中的系统标志和域
EFLAGS寄存器中的c系统标志和IOPL域控制I/O,可屏蔽硬件中断,调试,任务切换和虚拟8086模式,如图3所示。只有特权级代码(通常为操作系统代码)允许修改这些标志位。
内存管理寄存器
处理器提供四个内存管理寄存器(GDTR,LDTR,IDTR和TR),用于指定分段内存管理所使用的系统表的基地址,如图4所示。处理器为这些寄存的加载和存储提供了特别的指针。
GDTR全局描述符表寄存器
GDTR寄存器保存了GDT的32位线性基地址和16位表长度。基地址指定GDT中字节0在线性地址空间的地址;表长度指明GDT表的字节长度。
LGDT和SGDT指令分别用来加载和存储GDTR寄存器。在CPU刚加电或复位时,线性基地址默认设为0,表长度设置为0FFFFH。在保护模式CPU初始化过程中,GDTR寄存器必须加载一个新值。
LDTR局部描述符表寄存器
LDTR寄存器保存了LDT的32位基地址,16位段选择符,限长和描述符属性。基地址指定LDT段中字节0在线性地址空间的地址;段限长指明LDT段的字节长度。
LLDT和SLDT指令分别用来加载和存储LDTR寄存器。GDT表中必须包含LDT的段段描述符。当通过LLDT指令加载段描述符到LDTR时:LDT的基地址,段限长和描述符表属性将自动的加载到LDTR。
当发生任务切换时,新任务LDT的段选择符和段描述符自动的加载到LDTR中。在写入新的LDT信息到LDTR之前,LDTR不会自动保存旧的信息。
当处理器刚加电或复位时,段选择符和基地址被默认设为0,段限长默认高为0FFFFH。
IDTR中断描述符表寄存器
IDTR寄存器保存了IDT的32位线性基地址和16位表长度。基地址指定IDT中字节0在线性地址空间的地址;表长度指明IDT表的字节长度。LIDT和SIDT指令分别用来加载和存储IDTR寄存器。在CPU刚加电或复位时,线性基地址默认设为0,表长度设置为0FFFFH。在CPU初始化过程中,基地址和表长可以改变。
TR任务寄存器
TR寄存器保存了当前任务TSS的32位基地址,16位段选择符,段限长和描述符属性。选择符引用GDT中的TSS描述符。基地址指定TSS中字节0在线性地址空间的地址;段限长指明TSS的字节长度。
当发生任务切换时,新任务的TSS段描述符和段选择符自动加载到TR寄存器中。在写入新的TSS信息到TR中之前,TR不会自动保存旧的信息。
控制寄存器
控制寄存器(CR0,CR1,CR2,CR3和CR4)决定处理器的操作模式和当前执行任务的特性,如图5所示。。在32位模式和兼容模式下这些寄存器都是32的。
通过MOV CRn 指令操作这些寄存器的。控制寄存器总述如下。
CR0——包含控制系统模式和处理器状态的系统控制标志。
CR1——保留。
CR2——包含导致页错误的线性地址。
CR3——包含页目录表的物理地址和两个标志(PCD和PWT)。CR3也被称为页目录基地址寄存器(PDBR)。它只有高20位是有效的;低12位被设置为0。因此页目录必须是4KB对齐。PCD和PWT标志控制处理器内部数据缓存区的页目录的高速缓存(它们不能控制查找缓冲区TLB的页目录信息)。
CR4——包含一组标志用于开启一些架构额外的选项,并且指明系统对某些处理器的兼容性。CR4可以通过mov指令读取和加载。在保护模式下,MOV指令允许控制CR4寄存器读取和加载(特权级0)。这种限制意味着应用程序或其它系统程序(运行在特权级1,2,3上)将不能读取的加载CR4寄存器。
图五
系统指令一览表
系统指令操作系统级功能,比如加载系统寄存器,管理高速缓存,管理中断,设置设置寄存器。这些指令中的多数只能被操作系统或特权级为0的程序执行,其它可以被任何级别的程序执行。
如下图列出了系统指令并且指示哪些可以被应用程序使用。
参考:《Intel SystemProgramming Guide》
Linux操作系统基础 Intel32位系统架构总览相关推荐
- 信创培训第一课:linux操作系统基础
信创培训第一课:linux操作系统基础 文章目录 信创培训第一课:linux操作系统基础 主要任务: 一.了解什么是 PKS? 了解麒麟桌面版本和麒麟服务器版本的区别 二.掌握云主机的基本操作 使用y ...
- linux基础操作与实践,Linux操作系统基础与实践
<21世纪高等院校计算机网络工程专业规划教材:Linux操作系统基础与实践>由清华大学出版社出版. ¥19.18定价:¥29.50(6.51折) /2014-06-01 <Linux ...
- linux远程执行迷路,linux操作系统基础
Linux的基本原则 1.由目的单一的小程序组成:组合小程序完成复杂任务 2.一切皆文件 3.尽量避免捕获用户接口 4.配置文件保存为纯文本格式 linux操作系统基础及常用命令 在bash下一般管理 ...
- Linux操作系统基础知识学习
Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会(Free Software Foundation,FSF)的一个项目, ...
- Linux操作系统基础教程
Linux操作系统基础教程 福州大学信息学院计算机系 刘延华 2003.2 目 录 前言 2 第一讲 Linux基础 2 一.什么是Linux? 2 ...
- linux操作系统基础命令-2
CentOS7 linux操作系统基础命令-2 1.在linux 操作系统中 有内部命令和外部命令之分,使用type命令可以查看该命令是外部命令还是内部命令 . [root@000000 ~]# ty ...
- 第1课:Linux操作系统基础【DevOps基础培训】
第1课:Linux操作系统基础 --DevOps基础培训 1. 云主机.公网IP 1.1 公网ip和私网ip 只有公网ip是能够连接互联网的,私网IP 一般只用作局域网 我们能够上网靠的是isp组织分 ...
- 只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》
只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官<❤️记得收藏❤️> 目录
- linux系统基础与应用,Linux操作系统:基础、原理与应用
<Linux操作系统:基础.原理与应用> 第1部分基础篇 第1章操作系统概述/3 1.1认识操作系统3 1.1.1操作系统的概念3 1.1.2操作系统的功能4 1.2操作系统的发展与现状5 ...
最新文章
- ubb代码转化html代码
- 真没想到中国有这么猛的软件,杀伤力太强了!
- 妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
- 递归行为时间复杂度估算
- 计算机图形表示的原理
- vscode中用emmet语法a{}*3无法自动换行
- 打印文件提示服务器错误,要打印文件时,总是出现打印错误,上班族的你快来看看吧!...
- uniapp onReachBottom 不触发
- SWT学习|常用组件及参数
- JavaScript高级编程--对象详解
- typescript将ES5转ES6
- 个人收款平台 XorPay 对比 Payjs
- 面向对象程序设计(c++)面试常问——for考研复试面试
- 数据库同步有哪些方式?【怎么保障目标和源数据一致性】
- Android P版本应用兼容性适配技术指导
- 止步89岁!宣布证明黎曼猜想后,数学大师阿蒂亚爵士突然逝世
- 总结:Prometheus存储
- python爬取历史天气查询_历史天气爬取
- AI人工智能进阶-BERT/Torch/Huggingface知识集锦
- ABB机器人单面直线角焊缝自动排道焊接程序