共享内存是Linux下提供的最基本的进程通信方法,它通过mmap或者shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用释放这块内存,使用共享内存的好处是多个进程使用同一块内存时,在任何一个进程修改了共享内存中的内容后,其它进程通过访问这段内存就能够得到内存变化。这里探讨nginx对共享内存的封装。...
分类:
其他好文 时间:
2014-11-14 17:54:49
阅读次数:
361
1. 内存地址
以Intel的中央处理器为例,Linux 32位的系统中,物理内存的基本单位是字节(Byte),1个字节有8个二进制位。每个内存地址指向一个字节,内存地址加1后得到下一个字节的地址。这里用以表示物理内存实际位置的地址,就是通常所说的物理地址(Physical Address)。CPU正在执行的进程代码、进程数据和栈区数据等,都临时保存在物理内存中。
线性地址(Linear Ad...
分类:
系统相关 时间:
2014-11-12 16:31:01
阅读次数:
272
1. 内存管理区
为什么分成不同的内存管理区?
ISA总线的DMA处理器有严格的限制:只能对物理内存前16M寻址。
内核线性地址空间只有1G,CPU不能直接访问所有的物理内存。
ZONE_DMA 小于16M内存页框
ZONE_NORMAL 16M~896M内存页框
ZONE_HIGH...
分类:
系统相关 时间:
2014-11-06 17:40:56
阅读次数:
359
参考:http://bbs.chinaunix.net/thread-2083672-1-1.html
本贴涉及的硬件平台是X86,如果是其它平台,不保证能一一对号入座,但是举一反三,我想是完全可行的。
一、概念
物理地址(physical address)
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一...
分类:
其他好文 时间:
2014-10-23 22:42:33
阅读次数:
289
buddy算法是用来做内存管理的经典算法,目的是为了解决内存的外碎片。避免外碎片的方法有两种:1,利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。2,开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的请求而把大块的空闲块进行分割。基于下面三种原因,内核选择第二种避...
分类:
编程语言 时间:
2014-10-16 16:09:42
阅读次数:
141
1. 基本概念1.1 地址(1)逻辑地址:指由程序产生的与段相关的偏移地址部分。在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址。(2)线性地址:段中的偏移地址(逻辑地址),加上相应段的基地址就生成了一个线性地址。(3)物理地址: 放在寻址总线...
分类:
系统相关 时间:
2014-10-16 14:13:42
阅读次数:
272
virtual address Linear address...
分类:
其他好文 时间:
2014-10-07 13:53:13
阅读次数:
234
只要学过汇编的人都知道8086处理器对存储器采用分段管理机制,为什么要这么设计呢?采用线性地址直接访问存储器该多好,直接明了。其实Intel的工程师绝对不会那么傻,当然是有他的道理:首先,地址总线有20根,可寻址1M的地址空间,而寄存器是16位,仅能寻址64K,总不能白白浪费多出来的空间。要知道在8...
分类:
其他好文 时间:
2014-09-26 21:01:18
阅读次数:
168
内核空间和用户空间,内核态和用户态(转载)内核空间和用户空间Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址 0xC0000000到0xFFFFFFFF),供内核使用,称为“...
分类:
其他好文 时间:
2014-09-18 00:31:22
阅读次数:
236
IA-32处理器平台允许3种不同的访问系统内存的方法: (1)平坦内存模式 (2)分段内存模式 (3)实地址模式 平坦内存模式把全部系统内存表示为连续的地址空间。所有指令、数据和堆栈都包含在相同的地址空间中。通过称为线性地址(linear address)的特定地址访问每个内存位置。 分段内存模式把...
分类:
其他好文 时间:
2014-08-05 21:53:30
阅读次数:
298