深入理解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,栈段通过一般的数据段实现
任务状态段描述符:表示一个任务状态段
相关文档:
前提:
1. 下载ubuntu并安装
2. 知道常用的linux命令
3. 能看英文
摘要:
对新手来说
,驱动就是一个程序,通过调用注册函数和修改makefile使linux内核能加载它,于是它在接受操作的时候能有点反应;其与应用程序的主要区别在于其权限高,跑在kernel space里。
开动:
* 下载《Linux Device Drivers 3rd Edition》
......
首先申明,我是菜鸟.菜到什么程度,大家看看下面的代码.
代码要求:取得1000次单独创建进程的时间.
[code:1:fdac913669]#include
#include
#include
#include
#include
strut timeval {
long tv_sec; /* 秒数 */
long tv_usec; /* 微秒数  ......
1关机命令 shutdown
好像ubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令。
1)shutdown –help
可以查看shutdown命令如何使用,当然也可以使用man shutdown命令。
2) shutdown -h now 现在立即关机
3)shutdown ......
How to change the hostname of a Linux system
Normally we will set the hostname of a system during the installation process. Many peoples don’t care about this, and don’t change the hostname even if for example this was set to something really stupid by the datacenter that installed the ......