一、Linux 内存管理的基本框架 线性地址的映射分为4步: 1.线性地址最高的位段作为下标 在PGD(页面目录)中找到表项,该表项指向PMD(中间目录)。 2.线性地址第二位段作为下标在PMD中找到表项,该表项指向页面表。 3.线性地址第三位段作为下标在页面表中找到PTE,该表项存放指向物理页面的 ...
分类:
其他好文 时间:
2018-07-03 22:35:28
阅读次数:
176
什么是保护模式? 通过对程序使用的存储区采用分段、分页的存储管理机制, 达到分组使用、互不干扰的保护目的。能为每个任务提供一台虚拟处理器,使每个任务单独执行,快速切换。 所以,内存地址由段基地址、偏移地址构成。 在内存中段怎么描述? 段的描述符:段基地址(32位)、段长度(20位,单位为2^12,即... ...
分类:
其他好文 时间:
2018-03-21 23:16:15
阅读次数:
217
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数 ...
分类:
编程语言 时间:
2018-03-03 18:16:32
阅读次数:
210
来源:Linux社区 作者:astrotycoon 一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。 在glibc头文件"execinfo.h"中声明了三个函数用 ...
分类:
系统相关 时间:
2018-01-09 12:58:10
阅读次数:
297
这部分演示32位代码段与16位代码段之间的切换。实现的功能是以十六进制和ASCII码字符两种形式显示从内存地址100000H开始的16个字节的内容。具体步骤包括:作切换到保护方式的准备、切换到保护方式一个32位代码段拷贝数据、切换到16位段代码、把源数据直接作为ASCII码填入显存、切回实模式等。 ...
分类:
编程语言 时间:
2017-11-19 15:35:39
阅读次数:
363
逻辑地址到线性地址: 逻辑地址 = 段标识符(或者叫段选择符)16位 + 偏移量 32位 段标识符 = index + tl + rpl 其中,cpu中的段寄存器只保存段标识符,根据其中的tl 确定段描述符在GDT还是LDT中,从不同的寄存器获取线性基地址,再加上index*8就得到了段描述符的地址 ...
分类:
其他好文 时间:
2017-10-16 18:07:47
阅读次数:
139
利用C语言结构的位段操作,实现了STM32F030访位带操作,只是在效率可能会稍逊于真正的位带操作,但是代码上可以兼容。 ...
分类:
其他好文 时间:
2017-08-26 19:41:04
阅读次数:
247
利用C语言结构的位段操作,实现了STM32F030访位带操作,只是在效率可能会稍逊于真正的位带操作,但是代码上可以兼容。 ...
分类:
其他好文 时间:
2017-08-26 18:28:34
阅读次数:
168
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数 ...
分类:
编程语言 时间:
2017-08-25 16:59:25
阅读次数:
172
问题:1,逻辑地址怎么求?2,段描述符的base字段怎么求? 逻辑地址:由16位段选择符和32位偏移量组成,并不是说这个地址就是段选择符偏移32位再和偏移量相加。 段选择符:或叫段标识符,是一个16位长的字段。顾名思义,用于选择段的。为了快速找到段选择符,处理器提供段寄存器。 15~3bit,段索引 ...
分类:
系统相关 时间:
2017-08-24 00:02:34
阅读次数:
215