《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程
80x86 保护模式极其编程
。。
这个保护模式比較难啃,暂停并非停止,我喜欢回过头来看问题。喜欢update。
4.1.1标志寄存器--EFLAGS
- TF:trap flag 当设置该位的时候。可为调试操作启动单步调试运行方式,复位时则禁止单步运行。
- IOPL: I/O privilege level。指明当前执行程序的IO特权级IOPL。当前执行程序的CPL必须小于或者等于这个IOPL才干訪问这个IO地址空间。
- NT:nested task。控制着被中断任务和调用任务之间的链接关系。
- RF:resume flag。用于控制处理器对断点指令的响应。当设置时,这个标志位会暂时禁止断点指令产生的调试异常;当标志位复位的时候。断点指令将会产生异常。
- VM: vitual 8086 Mode。设置则开启虚拟8086方式;复位则回到保护模式。
4.1.2内存管理寄存器-- GDTR, LDTR, IDTR and TR
4.1.3控制寄存器 CR0-CR3
4.2保护模式的内存寻址
4.2.1内存寻址
80x86是一种先存小值(small endian)的处理器
4.2.2 地址变换
4.3.2 保护
1.任务之间的保护
。
。
。。。
。事实上我认为这里的映射更应该做函数讲,这是数学上的概念,一一相应的映射是函数。
每一个任务唯一的虚拟地址空间部分被称为局部地址空间(local address space)。
2. 特权级保护。
在给定CPL(current privilege level)级别上运行的程序同意訪问同级别或者低级别的数据段。不论什么高级别段的引用都是非法的,而且会引发一个异常来通知操作系统。
当一个程序从一个特权级切换到另外一个特权级的时候,堆栈段也随之该换到新的级别的堆栈中。
果然分页是必不可免的!
于是乎,补呗。
4.4分页机制
分段机制和逻辑地址转换成线性地址,而分页则线性地址转换成物理地址。
分页与分段的最大不同在于分页使用了固定长度的页面。段的长度通常与存放在当中的代码和数据结构具有同样的长度。
与段不同,页面具有固定的长度。假设仅使用分段地址转换,那么储存在物理地址中的一个数据结构包括其全部的部分。但假设使用了分页。那么一个数据结构就能够分一部分储存在物理内存中,而还有一部分保存在磁盘中。
为了降低地址转换所要求的总线周期数量。近期訪问的页文件夹和页表会被存放在处理器缓冲器件中,TLB(http://blog.csdn.net/cinmyheart/article/details/24888847 MOS 的第三章有讲这个)
4.4.1页表结构
1.两级页表结构
文件夹表项中的存在位还能够用于在虚拟内存中存放二级页表。这意味着在不论什么时候仅仅有部分二级页表须要存放在物理内存中,而其余的可保存在磁盘上。
处于物理内存中页表相应的页文件夹项将被标注为存在。以表明可用他们进行分页转换。处于磁盘上的页表相应的页文件夹项将被标注为不存在。因为二级页表不存在而引发的异常会通知操作系统把缺少的页表从磁盘上载入进物理内存。把页表储存在虚拟内存中降低了保存分页转换表所须要的物理内存量。
4.4.2页表项格式
R/W 位1是读写标识。0表示仅仅读或仅仅可运行
U/S 位2是用户/超级用户标识。
1,不论什么特权级都能够訪问该页面。0,那么页面仅仅能被执行在超级用户特权级上的程序訪问。对全部映射的页面有效
D 位6是页面已经被改动标识。置1表示是dirty page
AVL 该字段是保留字段。处理器不会改动这些位。
《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程的更多相关文章
- 80X86保护模式及其编程(一)
80x86系统寄存器和系统指令 1.标志寄存器(EFLAGS) 标志寄存器EFLAGS的标志位含义如下图: TF 位8是跟踪标志(Trace flag),当设置该位时可为调试操作启动单步执行方式.复位 ...
- 《linux 内核全然剖析》 chapter 2 微型计算机组成结构
微型计算机组成结构 系统的基本组成: 软件是一种控制硬件操作和动作的指令流. 2.1 微型计算机的组成原理 当中CPU通过地址线,数据线,和控制信号线组成的内部总线与系统其它部分进行数据通信.地址线用 ...
- 《linux 内核全然剖析》sched.c sched.h 代码分析笔记
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011368821/article/details/25129835 sched.c sched.h ...
- 《linux 内核全然剖析》 fork.c 代码分析笔记
fork.c 代码分析笔记 verifiy_area long last_pid=0; //全局变量,用来记录眼下最大的pid数值 void verify_area(void * addr,int s ...
- 《linux 内核全然剖析》 sys.c 代码分析
sys.c 代码分析 setregid /* * This is done BSD-style, with no consideration of the saved gid, except * th ...
- 《linux 内核全然剖析》 mktime.c
tm结构体的定义在time.h里面 struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_y ...
- 《linux 内核全然剖析》编译linux 0.12 内核 Ubuntu 64bits 环境
我×.. . 最终好了,大概3 4个小时吧...各种毛刺问题.终究还是闯过来了.. .. ubuntu2@ubuntu:~/Downloads/linux-0.00-050613/linux-0.00 ...
- 《linux 内核全然剖析》 include/asm/io.h
include/asm/io.h #define outb(value,port) \ __asm__ ("outb %%al,%%dx"::"a" (valu ...
- 《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
在memory.c里面.遇到一个宏定义,例如以下: #define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ current->sta ...
随机推荐
- Python学习笔记 - day7 - 类
类 面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同.在Python中,定义类 ...
- MySQL 查询语句练习2
创建表 /* Navicat MySQL Data Transfer Source Server : localhost_3306 Source Server Version : 50719 Sour ...
- Kuangbin 带你飞专题十一 网络流题解 及模版 及上下界网络流等问题
首先是几份模版 最大流:虽然EK很慢但是优势就是短.求最小割的时候可以根据增广时的a数组来判断哪些边是割边.然而SAP的最大流版我只会套版,并不知道该如何找到这个割边.在尝试的时候发现了一些问题.所以 ...
- Django REST Framework的序列化器是什么?
# 转载请留言联系 用Django开发RESTful风格的API存在着很多重复的步骤.详细可见:https://www.cnblogs.com/chichung/p/9933861.html 过程往往 ...
- Selenium2+python自动化44-元素定位参数化(find_element)【转载】
前言 元素定位有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把八种定位合为一种呢?也就是把定位的方式参数化,如id,name.css等设置为一个参数,这样只需维护定位方式的参数 ...
- (一)mysql基础和安装mysql5.7
(1)数据库系统 RDS:关系型,oracle,mysql,mariaDB,percona server ,DB2 NoSQL:Redis,MongoDB,memcache (2)SQL语言:结构化查 ...
- LightOJ 1012.Guilty Prince-DFS
Guilty Prince Time Limit: 2 second(s) Memory Limit: 32 MB Once there was a king named Akbar. He had ...
- (14)python 文件和流
打开文件 f=open('C:\Temp.txt') 读取数据 f.read(); 关闭文件 f.close();#关闭后将无法再读取 打开文件的方式 不写模式,默认是只读模式 1.r 打开只读文件, ...
- 2017中国大学生程序设计竞赛 - 女生专场C【前后缀GCD】
C HDU - 6025 [题意]:去除数列中的一个数字,使去除后的数列中所有数字的gcd尽可能大. [分析]: 数组prefixgcd[],对于prefixgcd[i]=g,g为a[0]-a[i]的 ...
- Codeforces 891B - Gluttony
891B - Gluttony 题意 给出一个数字集合 \(a\),要求构造一个数组 \(b\) 为 \(a\) 的某个排列,且满足对于所有下标集合的子集 \(S=\{x_1,x_2,...,x_k\ ...