转自:http://blog.csdn.net/bullbat/article/details/7108402 linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所 ...
分类:
系统相关 时间:
2016-07-10 16:50:59
阅读次数:
301
调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。Windows提供了两种将DLL映像到进程地址空间的方法: 1. 隐式的加载时链接 这种方法需要DLL工程经编译产生的LIB文件,此文件中包含了DLL允许应用程序调用的所有函数 ...
巨页 为什么使用巨页? 当一个进程使用一些内存的时候,CPU就把那部分内存标记成已被该进程使用的。为了提高效率,CPU会按4K字节块(它在很多平台上是默认值)分配内存。这些块被称作页。这些页可以被交换到磁盘上,等等。 因为进程地址空间是虚拟的,CPU和操作系统就得记住哪一页属于哪个进程,存储在什么地 ...
分类:
其他好文 时间:
2016-07-04 20:37:14
阅读次数:
205
当一个线程调用函数fork的时候,整个进程地址空间会被拷贝到子进程中,在8.3节中有提到copy-on-write.子进程是一个与父进程完全不同的进程,但是如果父进程和子进程都没有对内存内容进行修改,那么该内存页就可以在父进程与子进程之间进行共享。 通过继承父进程的整个地址空间,子进程也会继承父进程... ...
分类:
编程语言 时间:
2016-07-02 20:15:59
阅读次数:
187
线程概念:共享进程地址空间的多任务结构 创建线程的相关函数: 1. int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 参数1 : ...
分类:
编程语言 时间:
2016-07-01 11:41:21
阅读次数:
231
1.为什么要有虚拟内存在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。当运行多个程序时,经常会出现以下问题:1)进程地址空间不隔离,没有权限保护。由于程序都是直接访问物理内存,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间中的数据。2)内存 ...
分类:
其他好文 时间:
2016-06-23 18:42:43
阅读次数:
161
进程地址空间 get_unmapped_area()在向数据结构插入新的内存区域之前,内核必须确认虚拟地址空间中有足够的空闲空间,可用于给定长度的区域。该工作由get_unmmaped_area()完成。
在分析get_unmmaped_area()之前,先简单介绍一下进程地址空间的布局。
进程地址空间 经典布局:
经典布局的缺点:在x86_32,虚拟地址空间从0到0xc0000000,每...
分类:
移动开发 时间:
2016-05-27 12:11:15
阅读次数:
360
IPC形式除了管道、FIFO、信号量以外,还有共享内存区和消息队列。这里主要堆共享内存进行介绍。
共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程地址空间,这些进程间数据的传递就不再涉及内核。共享内存与其他进程通信方式相比较,不需要复制数据,直接读写内存,是一种效率非常高的进程通信方案。但它本身不提供同步访问机制,需要我们自己控制。在LINUX中,只要把共享内存段连接...
分类:
其他好文 时间:
2016-05-18 18:23:01
阅读次数:
209
1. 介绍 Linux下的framebuffer是用于在显示器上显示图像的硬件无关抽象层, 意味着包含当前视频帧的一块内存区域 Framebuffer看成是显示内存的一个映像, 将其映射到进程地址空间之后, 可以直接进行读写操作, 写操作可以立即反应在屏幕上, 这种操作是抽象统一的, 用户态进程不必... ...
分类:
系统相关 时间:
2016-05-10 02:04:58
阅读次数:
447
一、进程&&线程1.进程模型
(1)单进程模型:一个进程响应多个请求容易造成请求的阻塞
(2)多线程模型:每个进程响应一个请求进程量大,进切换次数过多每个进程地址空间独立,很多空间是重复的数据,所以内存使用率低2.线程模型(thread)LWP:lightWeightProcess在Linux上..
分类:
编程语言 时间:
2016-05-07 16:51:47
阅读次数:
480