《80X86汇编语言程序设计教程》这本书的推荐星级是:5星。毕竟是经典书籍,没什么好说的。它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学的不仅仅是汇编语言,还有CPU的体系架构,它让你基本猜测得到在编写基于80386CPU的操作系统时,大概要做一些什么事情。 ...
分类:
编程语言 时间:
2017-11-20 01:07:27
阅读次数:
240
逻辑地址到线性地址: 逻辑地址 = 段标识符(或者叫段选择符)16位 + 偏移量 32位 段标识符 = index + tl + rpl 其中,cpu中的段寄存器只保存段标识符,根据其中的tl 确定段描述符在GDT还是LDT中,从不同的寄存器获取线性基地址,再加上index*8就得到了段描述符的地址 ...
分类:
其他好文 时间:
2017-10-16 18:07:47
阅读次数:
139
在开启PAE之后,32位的线性地址的结构发生了变化,具体结构如下 30-31位:页目录指针表索引 21-29位:页目录索引 12-20位:页表索引 0-11位:页内偏移 在开启PAE之后,表中地址都是物理地址,所有表项的大小变为8Byte,具体格式如下: 结合Windows Server 2008中 ...
分类:
数据库 时间:
2017-10-11 20:20:52
阅读次数:
205
内核空间和用户空间:由于操作系统都包括内核空间和用户空间(或者说内核态和用户态),内核空间主要存放的是内核代码和数据,是供系统进程使用的空间。而用户空间主要存放的是用户代码和数据,是供用户进程使用的空间。目前Linux系统简化了分段机制,使得虚拟地址与线性地址总是保持一致,因此,Linux系统的虚拟 ...
分类:
其他好文 时间:
2017-09-24 23:39:27
阅读次数:
271
内存地址分类 逻辑地址:机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段(segment)和偏移量(offset或displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离。 线性地址(或 虚拟地址):一个32位(或64位)无符号整数,在32位系统中可以 ...
分类:
系统相关 时间:
2017-09-08 15:30:39
阅读次数:
297
init是用户空间第一个程序,在调用init前程序都运行在内核态,之后运行init时程序运行到用户态。 操作系统上,一些内核线程在内核态运行,它们永远不会进入用户态。它们也根本没有用户态的内存空间。它的线性地址空间就是共享内核的线性地址空间。一些用户进程通常在用户态运行。有时因为系统调用而进入内核态 ...
分类:
其他好文 时间:
2017-08-27 12:44:24
阅读次数:
214
问题:段描述符中的字段含义? 段首地址的线性地址/偏移/粒度/特权限制等信息。 1,快速访问段描述符 在加载段选择符时,相应的段描述符被自动由内存装入对应的非编程CPU寄存器。装入后就不再访问主存中的GDT或LDT。 2,段选择符的字段 index:指定了放在GDT或LDT中相应段描述符的入口 TI ...
分类:
系统相关 时间:
2017-08-25 01:12:26
阅读次数:
183
调用、调用接口、库调用线性内存地址空间、物理内存地址空间、线性地址、物理地址交换内存:缺页异常进程内存结构常驻内存集、虚拟内存集进程、进程元数据、结构体、任务结构体、链表进程类型、状态(read,runing,sleep,stopped,zombie)可中断睡眠、不可中断睡眠创建子进程的过..
分类:
系统相关 时间:
2017-08-22 21:55:21
阅读次数:
295
1,三个地址 逻辑地址,机器语言指令中用来指定一个操作数或一条指令的地址。 线性地址:32位无符号整数,高达4GB。64位的cpu就是64位的线性地址 物理地址:内存芯片级内存单元寻址。老式x86由32位或36位无符号整数表示。 2,MMU内存控制单元 存在一个分段单元的硬件电路将一个逻辑地址转换为 ...
分类:
系统相关 时间:
2017-08-21 22:58:11
阅读次数:
232
1. 内存管理区 为什么分成不同的内存管理区? ISA总线的DMA处理器有严格的限制:仅仅能对物理内存前16M寻址。 内核线性地址空间仅仅有1G,CPU不能直接訪问全部的物理内存。 ZONE_DMA 小于16M内存页框 ZONE_NORMAL 16M~896M内存页框 ZONE_HIGHMEM 大于 ...
分类:
系统相关 时间:
2017-08-12 19:00:23
阅读次数:
268