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

基于80x86的Linux的分段和分页机制

1 基于80x86的Linux分段机制
80386的两种工作模式:80386的工作模式包括实地址模式和虚地址模式(保护模式)。Linux主要工作在保护模式下。
在保护模式下,80386虚地址空间可达16K个段,每段大小可变,最大达4GB。逻辑地址到线性地址的转换由80386分段机制管理。段寄存器CS、DS、ES、SS、FS或GS各标识一个段。这些段寄存器作为段选择器,用来选择该段的描述符。
分段逻辑地址到线性地址转换图:

Linux对80386的分段机制使用得很有限,因为Linux的设计目标是支持绝大多数主流的CPU,而很多CPU使用的是RISC体系结构,并没有分段机制,所以2.6版内核只有在80x86结构下才使用分段,而且只是象征性地使用了一下:
所有Linux进程仅仅使用四种段来对指令和数据寻址。运行在用户态的进程使用所谓的用户代码段和用户数据段。类似地,运行在内核态的所有Linux进程都使用一对相同的段对指令和数据寻址:它们分别叫做内核代码段和内核数据段。下表显示了这四个重要段的段描述符字段的值:


Base

G

Limit

S

Type

DPL

D/B

P

用户代码段

0x00000000

1

0xfffff

1

10

3

1

1

用户数据段

0x00000000

1

0xfffff

1

2

3

1

1

内核代码段

0x00000000

1

0xfffff

1

10

0

1

1

内核数据段

0x00000000

1

0xfffff

1

2

0

1

1

相应的段描述符由宏__USER_CS,__USER_DS,__KERNEL_CS,和__KERNEL_DS分别定义。例如,为了对内核代码段寻址,内核只需要把这个宏产生的值装进cs段寄存器即可。
注意,与段相关的线性地址从0开始,达到232
-1的寻址限长。这就意味着在用户态或内核态下的所有进程可以使用相同的逻辑地址。所有段都从0x00000000开始,这可以得出另一个重要结论,那就是在Linux下逻辑地址与线性地址是一致的,即逻辑地址的偏移量字段的值与相应的线性地址的值总是一致的。
如前所述,CPU的当前特权级(CPL)反映了进程是在用户态还是内核态,并由存放在cs寄存器中的段选择符的RPL字段指定。只要当前特权级被改变,一些段寄存器必须相应地更新。例如,当CPL=3时(用户态),ds寄存器必须含有用户数据段的段选择符,而当CPL=0时,ds寄存器必须含有内核数据段的段选择符。
类似的情况也出现在ss寄存器中。当CPL为3时,它必须指向一个用户数据段中的用户栈,而当CPL为0时


相关文档:

linux下网络流量监控工具二


因为做linux常常会要做linux下的流量查看,下面的三个方法能很好的解决当前流量查看
iftop工具
用途: 用来即时监看网路状态和各ip所使用的频宽
iftop 官方网站:
http://www.ex-parrot.com/~pdw/iftop/
安装iftop,,必须先安装libpcap
http://www.tcpdump.org/release/
wget http://www.tcpdump.org/release/libpc ......

一些高效的Linux命令行操作


1.
查找Java
项目中,main
方法定义在哪个文件
里.
  切换到你要查找项目的目录下执行
  grep -rlI '\
  如果你觉得自己打字快,不怕麻烦执行如下命令也可以找到该文件
  find -type f -name *.java -exec grep -l '\
2
快速的建立一个文件,并输入一些内容
  cat >> filename
,输入一 ......

一些高效的Linux命令行操作


1. 查找Java项目中,main方法定义在哪个文件里.
  切换到你要查找项目的目录下执行
  grep -rlI '\
  如果你觉得自己打字快,不怕麻烦执行如下命令也可以找到该文件
  find -type f -name *.java -exec grep -l '\
  2 快速的建立一个文件,并输入一些内容
  cat >> filename ,输入一些内容然 ......

在Linux中创建静态库和动态库


感谢原文作者:http://blog.csdn.net/thinkerABC/archive/2006/03/11/621817.aspx
感谢转帖者的排版:http://blog.chinaunix.net/u3/101219/showart_2006014.html
 
 
我们通常把一些公用函数
制作成函数库,供其它程序使用。
函数库分为静态库和动态库两种。
静态库在程序编译时会被连接到目标代码中, ......

打造Linux下的CD播放器

本文详细介绍了音频CD的基本知识,以及如何在Linux下编写实用的CD播放软件,内容涵盖音轨处理、播放控制和音量调节等诸多方面。
在目前的多媒体应用中,CD所承担的重要作用早已勿庸置疑,本文详细介绍了音频CD的基本知识,以及如何在Linux下编写实用的CD播放软件,内容涵盖音轨处理、播放控制和音量调节等诸多方面。
音频 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号