易截截图软件、单文件、免安装、纯绿色、仅160KB

深入理解linux内核笔记七:内存管理(1)之内存寻址

1 内存地址
       linux中,我们必须区分三种不同的地址
逻辑地址:机器语言指令中用来指定一个操作数和一个指令的地址.在X86中,每一个逻辑地址都由一个段(segment)和偏移量(offset)组成.
线性地址(也称虚拟地址):是一个32位无符号函数,可以表示高达4GB的地址,范围从0x00000000到0xffffffff.
物理地址:用于内存芯片级寻址,它们与从微处理器的地址引脚发送到内存总线上的电信号相对应.
 
逻辑地址转换图
 
2         分段
①     硬件分段
段选择符和段寄存器
一个逻辑地址由一个段标识符和一个段内相对地址的偏移量组成.段标识符是一个16位长的字段,称为段选择符
                                       
Index:指定在GDT或LDT中相应段描述符的入口
TI:指明段描述符在GDT(TI=0)或LDT(TI=1)中
RPL:请求者特权级,当相应段选择符装入到cs寄存器中指示出cpu当前的特权级.
 
X86中提供了6个段寄存器cs ss ds es fs gs,段寄存器的唯一目的就是存放段选择符.
 
段描述符
每一个段描述符由8个字节组成,段描述符放在全局描述符表或局部描述符表中
Base:包含段的首字节的线性地址
G:  粒度标志,0以字节为单位,否则以4096字节为单位
Limit:存放段中最后一个内存单元的偏移量,从而决定段的长度.如果G为0,则一个段的大小在1个字节到1MB之间,否则,在4KB到4GB之间
S:  系统标志,0为系统段,否则普通的代码段或数据段
Type:描述段的类型特征和它的存取权限
DPL: 描述段的特权级.表示访问这个段要求的cpu最小的优先级
P: Segment-Present标志,等于0表示段不在主存中,linux总把这个标志设为1
D或B:称为D或B标志,取决于是代码段还是数据段,如果段偏移量地址是32位,就基本把它设置为1,如果这个偏移量是16位,它被清为0
AVL: 被linux忽略
 
Linux中广泛使用下面三种段描述符
代码段描述符:可以放在GDT或LDT中,该描述符置S为1
数据段描述符:可以放在GDT或LDT中,该描述符置S为1,栈段通过一般的数据段实现
任务状态段描述符:表示一个任务状态段


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

Linux下目录及文件详解

 
/   根目录
    │
    ├boot/          Linux的内核及系统引导程序所需要的文件目录 
    │    └grub/   Grub引导器相关的文件
    │
 &n ......

linux 进程线程时间片

 首先申明,我是菜鸟.菜到什么程度,大家看看下面的代码.
代码要求:取得1000次单独创建进程的时间.
[code:1:fdac913669]#include 
#include
#include
#include 
#include 
strut timeval {
long tv_sec; /* 秒数 */
long tv_usec; /* 微秒数  ......

用GCC开发linux应用程序(经典)

用GCC开发linux应用程序(经典)
2009年11月01日 星期日 23:58
作为自由软件的旗舰项目,Richard Stallman 在十多年前刚开始写作 GCC 的时候,还只是把它当作仅仅一个 C程序语言的编译器;GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C语言;它现在还支持 Ada 语言、C++ 语言、Ja ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号