
操作系统
文章平均质量分 77
kkk8000
道可道,非常道~~!!技术道也,非常道!非常道!~~
展开
-
页式存储(1)----理论篇
<br /> <br />什么叫做"页",所谓"页",就是一块内存,在80386中,页的大小是固定的4096字节。<br /> <br />在未打开分页机制时,线性地址等同于物理地址,于是可以认为,逻辑地址通过分段机制直接转换成物理地址。但当分页开启时,分段机制将逻辑地址转换成线性地址,线性地址再通过分页机制转换成物理地址。下图为地址转换的流程:<br /> <br /><br /> <br /> <br />分页机制就像一个函数:<br />物理地址=f(线性地址) <br />线性地址中任意一个页都能映转载 2010-11-28 19:24:00 · 1279 阅读 · 0 评论 -
调用门实战(1)----调用门跳转
"门",英文原名Gate,门是一种描述符,该描述符的结构如下图:直观来看,一个门描述了由一个选择子和一个偏移所指定的线性地址,程序正是通过这个地址进行转移的。门描述符分为4种:调用门(Call gates)中断门(Interrupt gates)陷阱门(Trap gates)任务门(Task gates)这个例子中,我们用到调用门。简单起见,不涉及任何特权级转变。代码pm.inc添加了门描述符,如下:; usage: Descriptor Base, Limit, Attr ; Base原创 2010-11-18 00:27:00 · 1995 阅读 · 3 评论 -
调用门实战(3)----理论补遗之TSS
<br /> 1 什么是TSS<br /> <br /> TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。<br /> <br /> 2 TSS工作细节<br /> <br /> TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR(任务寄存器)所指定的TSS中;然后,下一任务的TS转载 2010-11-20 19:39:00 · 1009 阅读 · 0 评论 -
调用门实战(2)----调用门特权级转移理论篇
<br /> <br />假设我们想由代码段A转移到代码段B,运用一个调用门G,调用门G中的目标选择子指向代码B的段。这里有几个要素:CPL、RPL、代码B得DPL(DPL_B)、调用门G的DPL(DPL_G)。A访问调用门G是,要求CPL和RPL都小于等于DPL_G。即CPL和RPL需要在更高的特权级上。<br /> <br />除了上面一步符合要求之外,系统还将比较CPL和DPL_B。如果一致代码段的话,要求DPL_B<=CPL;如果非一致代码段的话,call指令和jmp指令有所不同。call指令要求D原创 2010-11-20 19:26:00 · 1252 阅读 · 0 评论 -
操作系统的特权级(2) ---- 一致代码段和非一致代码段
<br />这是在网上看到的比较通俗易懂的解释,转载于:http://blog.youkuaiyun.com/feijj2002_/archive/2009/09/27/4597174.aspx<br /> <br /><br />之所以出现这个定义是因为系统要安全:内核要和用户程序分开..内核一定要安全.不能被用户程序干涉.<br />但是有时候用户程序也需要读取内核的某些数据,怎么办呢?<br />操作系统就引入了访问特权等级(0-3)的机制.<br />这些特权等级,通过三个符号来体现CPL/DPL/RPL.<b转载 2010-11-14 00:00:00 · 1200 阅读 · 0 评论 -
操作系统的特权级(1)----CPL、DPL和RPL
<br /> <br />IA32的分段机制中,特权级总共有4个特权级别,分别是0,1,2,3。数字越小表示特权级越大。DPL和RPL都是用来表示特权级别的。<br /> <br /> <br /><br /> <br />见上图 ,较为核心的代码和数据,被放在特权级较高的层级中。处理器将这样的机制来避免低特权级的任务在不被允许的情况下访问位于高特权级的段。如果处理器检测到一个访问请求不是合法的,将会产生常规保护错误(#GP)<br /> <br />处理器通过识别CPL、DPL、RPL这3中特权级别进行特原创 2010-11-13 23:28:00 · 1900 阅读 · 0 评论 -
代码实现LDT的使用
什么是LDT?简单来说就是一种描述符号表,它的选择子T1位必须为1。使用时,必须先lldt指令加载ldtr,lldt的操作数是GDT中用来描述LDT的描述符。我在原来的代码基础上做了修改:原来代码的地址http://blog.youkuaiyun.com/kkk8000/archive/2010/10/31/5977656.aspx使用LDT的具体步骤如下:1、增加一个32位代码段,代码如下:;CodeA (LDT,32位代码段)[SECTION .la]ALIGN 32[BITS 32]LABEL原创 2010-11-07 18:04:00 · 1823 阅读 · 0 评论 -
RDTSC指令
<br /> 在Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。<br /> 在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C 语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样:转载 2010-12-28 17:14:00 · 1582 阅读 · 0 评论 -
从实模式跳转到保护模式再跳回实模式的程序
这是一段用nasm编写的程序,有2个文件组成,第一个头文件为pm.inc,第2个文件为pmtest.asm,编译成.com文件在DOS下运行。程序在保护模式打印一串字符串,然后返回实模式退回dos原创 2010-10-31 15:39:00 · 1846 阅读 · 0 评论 -
nasm下定义GDT结构
预备知识:NASM中的位移运算符:">"表示右移。注意这里的位移总是无符号数(非负数)。并且位置时,左侧总是用0填充,不会出现符号扩展。可以理解成汇编语言中的逻辑左移和逻辑右移。定义如下:; usage: Descriptor Base, Limit, Attr; Base: dd (32 bits 段基址); Limit: dd (low 20 bits available,20 bits 段界限); Attr: dw (lower 4 bits of hig原创 2010-10-30 18:37:00 · 3072 阅读 · 0 评论 -
GDT详细介绍
<br /> <br /><br />这是一个国外的站点对GDT的描述,比国人描述的更清楚些。<br />转载地址:http://wiki.osdev.org/Global_Descriptor_Table<br />更详细的GDT参考教材:http://wiki.osdev.org/GDT_TutorialGlobal Descriptor TableFrom OSDev WikiStructure<br />The GDT is loaded using the LGDT assembly instru转载 2010-10-30 19:11:00 · 2496 阅读 · 0 评论 -
GDT详解
这篇文章在理论上解释了GDT,看了以后加深了印象.转载于:http://blog.youkuaiyun.com/zdwzzu2006/archive/2009/03/27/4030882.aspx在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。转载 2010-10-30 18:21:00 · 1021 阅读 · 1 评论 -
什么是Processor affinity
处理器关联(Processor affinity)是一个本地队列中央在对称多处理操作系统调度算法的改进。每个任务(无论是进程或线程)在队列中有一个标记,表明其首选/健处理器。在分配时,每个任务分配给其亲属优先于其他处理器。处理器关联注意到一个事实,即一个进程上一次运行的数据残留会保存在一个处理器内(尤其是在它的缓存),所以调度到同一处理器上运行会比调度到另一个处理器运行效率更高效。 实际调度算法实现非常复杂多变。在某些情况下将允许一些实现任务切换到另一个处理器。一个明显的例子涉及到两个处理器密集型任务(A和翻译 2010-12-10 20:36:00 · 8647 阅读 · 0 评论 -
调用门实战(4)----特权级转移实践
本次实践从ring0进入ring3然后又回到ring0原创 2010-11-21 15:25:00 · 952 阅读 · 0 评论