易截截图软件、单文件、免安装、纯绿色、仅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设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

Linux top 命令 详解

 
top命令用来显示系统当前的进程和其它状况;它是一个动态显示过程,即用户可通过按键来不断的刷新当前的状态,如果在前台执行命令他会独占前台。直到用户终止该程序为止。比较准确的说,top命令提供了实时对系统处理器的状态监视。它将显示CPU最敏感的任务列表。该命令可以按CPU使用,内粗使用,和执行时间对任务进 ......

Ubuntu配置安装ARM Linux交叉编译环境完整流程

              今天花了一整天的时间来解决insight 的端口无法修改的问题,虽然是解决了,但是也付出了很大的代价,花了一整天时间+毁掉了以前的系统。所以来重新安装配置arm linux交叉编译环境。顺便记下.....
     &nb ......

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 根据端口号查找对应进程的ID,操作进程

已经某个端口号被占用,如何根据端口号得到占用它的进程的ID呢
用lsof
,lsof在ubuntu下的安装命令为apt-get install lsof
若已知端口号为15000,则对应查找命令为lsof -i | grep 15000
本机显示结果为:
host    3386
trinea    4u  IPv4  16907    & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号