我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的...
分类:
系统相关 时间:
2015-03-15 15:09:35
阅读次数:
262
1.
2.内存管理需要达到的目的?
1)地址保护:多道程序之间互不干扰,一个进程不能随便访问另外一个进程的地址空间。
2)地址独立:程序发出的地址与具体机器的物理主存地址是独立的。
3.为什么提出了虚拟内存?
在计算机中,一个程序要运行,必须加载到物理主存中,但是物理主存的容量是非常有限的,因此我们要把一个程序全部加载到主存,我们的每一个程序大小就要限制。另外,即使我们编写...
分类:
其他好文 时间:
2015-03-09 12:56:33
阅读次数:
197
进程的地址空间中有很大的一块区域是被称作“堆”的区域
其地址空间是在进程的.data和.bss的地址增长方向到动态库区域的低地址部分的范围
堆可以理解成是进程的一大块内存区域(已经分配实际物理内存,但并不是所有的地址空间都分配了物理内存,其大小根据系统类型和版本来定)
用来供进程中的程序动态分配内存空间
通常,进程通过向操作系统批发一大块实际的内存空间交给glibc管理以提高动态内存请求和释放的效率
在程序要请求动态分配比较小的内存空间的时候,glibc从这一大块内存空间中分配之
当程序要请求动态分配较大的...
分类:
系统相关 时间:
2015-03-07 20:03:14
阅读次数:
194
概述 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图)。 共享内存 VS. 其他IPC形式 用管道/消息队列传递数据 用共享内存传递数据 共享内存生成之后,传递数据并不需要再走Linux内核,共享内存允许两个或多个进程共享一个给定的...
分类:
系统相关 时间:
2015-02-19 15:09:59
阅读次数:
280
简介adbi 是一个android平台的二进制注入框架,源码开放在github上 : ADBI 项目,从hook技术的分类来说,其属于so注入+inline hook, 这种方式的套路是:基于linux系统的ptrace机制,attach一个目标进程,注入一个动态链接库进入目标进程的地址空间,然后用...
分类:
移动开发 时间:
2015-02-10 13:08:07
阅读次数:
8794
第四章,存储器管理,小结: 交换:系统可以处理比内存所能容纳的更多的进程,得不到空间的进程将被换出到磁盘上。内存和磁盘上的空闲空间可以用位图或空洞表跟踪。 虚拟存储器:每个进程的地址空间都被划分为同样大小的称为页的块,可以被放到内存中任何可用的页框中去。有许多页面替换算法,最著名的两个是第二...
分类:
其他好文 时间:
2015-01-28 19:16:38
阅读次数:
211
2.4 C语言的类型系统
这一节,我们准备初步讨论一下C语言的类型系统,相关的代码主要在ucl\type.c和ucl\type.h中。我们知道,一个进程的地址空间可分为代码区和数据区。
对于数据区,C语言提供了char、short、int、long、float和double等基本类型来刻画基本的操作数。char、short、int和long等整型还进一步分有unsigned和...
分类:
编程语言 时间:
2015-01-28 09:56:58
阅读次数:
251
话说用户态访问内核内存很简单,将这块内核内存映射到用户地址空间即可。依托一个字符设备,实现其mmap回调函数,在用户进程打开那个设备,mmap之,很容易实现用户进程直接访问内核内存。 但是反过来呢?内核访问用户内存。理论上也很简单,因为所有进程的内核态地址空间都是共享的,所以想访问哪个进程的内存,就切换到那个进程的地址空间,这将丝毫不会影响当前的执行流。事实上也是这么简单,use_mm...
分类:
其他好文 时间:
2015-01-11 12:27:19
阅读次数:
166
1、什么是进程?狭义定义:进程就是一段程序的执行过程。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。在传统操作系统中,进程作为资源分配和独立运行的基本单元。2、每个进程的地址空间都一样吗?地址空间都包括哪些内容?每一个进程都有它自己的地址空间,一般情况下,包括文本区域(t...
分类:
编程语言 时间:
2014-11-28 09:55:39
阅读次数:
173
共享内存基本概念 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图)。 共享内存 VS. 其他IPC形式 用管道/消息队列传递数据 用共享内存传递数据 (内核为每个IPC对象维护一个数据结构) 共享内存生成之后,传递数据并不需要再走Linux...
分类:
系统相关 时间:
2014-11-27 16:17:24
阅读次数:
313