信号量通常用于进程并发控制,此处并发有两个含义:进程共享资源的互斥,进程时序关系控制。这两种方式也是信号量最常见的应用。互斥量作为共享资源互斥最常用的方式,只能用于单一进程(要实现多进程,可以采用共享内存映射某个互斥量,但一般不这么做)。在Linux操作系统中,有两种类型的信号量:XSI信号量和PO ...
分类:
系统相关 时间:
2020-05-31 14:31:05
阅读次数:
88
1 概述 linux常见的五大进程间通信方式包括:共享内存、管道、消息队列、信号量、Socket。 2 共享内存 定义:将同一块物理内存映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。 特定:(1)不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以。 (2)共享内存是 ...
分类:
系统相关 时间:
2020-05-28 01:02:42
阅读次数:
79
真正的零拷贝有两种方式: mmap+write Sendfile mmap 是一种内存映射文件的方法,即将一个文件或者其他对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对应关系。 这样就可以省掉原来内核 Read 缓冲区 Copy 数据到用户缓冲区,但是还是需要内核 ...
分类:
其他好文 时间:
2020-05-20 18:34:29
阅读次数:
72
原因: so库不再压缩了,这样操作系统就可以对so内存映射。 自定义: android:extractNativeLibs 软件包安装程序是否将原生库从 APK 提取到文件系统。如果设为 false,则原生库必须保持页面对齐状态并以未压缩的形式存储在 APK 中。无需更改代码,因为链接器在运行时直接 ...
分类:
移动开发 时间:
2020-05-15 15:24:23
阅读次数:
186
kmalloc 函数原型: void *kmalloc(size_t size, gfp_t flags); kmalloc() 申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因为存在较简单的转换关系,所以对申请的内存大小有限制,不能超过128KB。 ...
分类:
其他好文 时间:
2020-05-15 11:36:36
阅读次数:
74
内存映射数据结构是一系列经过特殊编码的字节序列,创建它们所消耗的内存通常比作用类似的内部数据结构要少得多,如果使用得当,内存映射数据结构可以为用户节省大量的内存。 不过,因为内存映射数据结构的编码和操作方式要比内部数据结构要复杂得多,所以内存映射数据结构所占用的CPU时间会比作用类似的内部数据结构要 ...
分类:
其他好文 时间:
2020-05-14 19:34:58
阅读次数:
56
一般流程是先创建或打开一个文件,然后使用mmap进行内存映射。 1. 读取文件 // 打开文件 int fd = open("input.txt", O_RDONLY); // 读取文件长度 int len = lseek(fd,0,SEEK_END); // 建立内存映射 char *addr = ...
分类:
编程语言 时间:
2020-05-01 16:19:49
阅读次数:
176
内存映射 在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM。在对于 RAM 紧缺的嵌入式系统中,是缺少 MMU 内存管理单元的。因此在一些嵌入式系统中,比如常用的 STM32 来讲,内存映射被划分为闪存段(也被称为F ...
分类:
其他好文 时间:
2020-04-29 14:19:41
阅读次数:
342
多线程、并发及线程的基础问题 1)Synchronized 用 过 吗 , 其 原 理 是 什 么 ? 2)volatile 能使得一个非原子操作变成原子操作吗? 3)volatile 修饰符的有过什么实践? 4)volatile 类型变量提供什么保证? 5) 10 个线程和 2 个线程的同步代码, ...
分类:
编程语言 时间:
2020-04-25 17:19:05
阅读次数:
54
内存映射文件的方法 Windows采用MapViewOfFile系统api,Linux则采用mmap相关函数。之前在做大数据查询计算的时候,经常会出现内存不足的情况,malloc无法分配内存了。那时候就经常在想能不能使用硬盘来充当内存,就像swap交换那样,硬盘是非常大的,如果能使用硬盘来当内存也许 ...
分类:
其他好文 时间:
2020-04-19 11:12:46
阅读次数:
69