Linux内存共享有多种,如mmap()、Posix共享内存、System V 共享内存。
1>mmp()通过映射一个普通文件实现共享内存,具有文件实体,shmget()对应文件在内存中,无文件实体。
2>mmp()不建议使用叠加方式共享,shmget()用于多个进程间交换数据。
3>mmp() shmget() 进程重启后共享内存中的数据都不会丢失;但是机器重启后只有mmp()方式的共享内存可以保存数据
4>mmap()接口更简单,通用性也更高。
Linux下IPC机制
- IPC在linux下的某些进程间的通信机制,它是多个进程之间相互沟通的一种渠道。
- 在linux下有以下几种种进程间通信的方法:半双工管道、命名管道、消息队列、信号、信号量、共享内存、内存映射文件,套接字等等。
- 使用这些机制可以为linux下的网络服务器开发提供便捷和灵活而又顽固的框架
-
共享内存:允许两个或N个进程共享一定的存储区域,因为不需要拷贝数据,所以这是最迅速的一种IPC。
-
课上测试
- 解析:填充消除了冲突不命中,对于x和y数组,只有在引用第0个和第4个元素的时候发生不命中。因而命中率为75%。
- 解析:高速缓存容量为2048,高速缓存结构为(( 32 ),8,8,32)
- 解析:不同层之间是以块为大小传输单元在层与层之间复制,空缓存的不命中叫强制性不命中或冷不命中
- 解析:存储器层次结构的叫第一层的数据缓存到较高一层。缓存存储器是分区域的,数据总是以块为基本单位在每一层之间传递,块的大小只在相邻传递的两层之间相同
7.下面代码中()局部性最差
1 #define N 1000 2 3 typedef struct { 4 int vel[3]; 5 int acc[3]; 6 } point; 7 8 point p[N];
A
1 void clear1(point *p, int n) 2 { 3 int i, j; 4 5 for (i = 0; i < n; i++) { 6 for (j = 0; j < 3; j++) 7 p[i].vel[j] = 0; 8 for (j = 0; j < 3; j++) 9 p[i].acc[j] = 0; 10 } 11 }
B
1 void clear2(point *p, int n) 2 { 3 int i, j; 4 5 for (i = 0; i < n; i++) { 6 for (j = 0; j < 3; j++) { 7 p[i].vel[j] = 0; 8 p[i].acc[j] = 0; 9 } 10 } 11 }
C
1 void clear3(point *p, int n) 2 { 3 int i, j; 4 5 for (j = 0; j < 3; j++) { 6 for (i = 0; i < n; i++) 7 p[i].vel[j] = 0; 8 for (i = 0; i < n; i++) 9 p[i].acc[j] = 0; 10 } 11 }
D. 不确定
- 正确答案: C
- 解析:函数clear1步长为1,clear2服从步长大于1的模式,clear3在结构间可以来回切换,可以说空间局部性中clear3是最差的
- 解析:循环具有良好的空间局部性和时间局部性。
- 解析:程序访问某个向量,步长越小或短,空间局部性越好
- 解析:磁盘以扇区大小的块来读写数据。
- 解析:服从公式磁盘容量=柱面数 * 磁盘面数 * 扇区数 * 字节数=4x2x100000x400x512=163.84GB
- 解析:每个扇区包含相等数量的数据位(通常是512字节)
- 解析:用来传输数据的总线线路可以分为三个类型:数据线、地址线和控制线
- 解析:DRAM、SRAM是易失性存储器,PROM可以用紫外线进行消除
- 解析:RAM分为静态SRAM和动态DRAM。SRAM快于DRAM
- SRAM(静态):高速缓存存储器。将每个位存储在一个双稳态的存储器单元里面。
- DRAM(动态):将每个位存储为对一个电容的充电。存储单元对干扰(如光线、噪音等)很敏感;当电容的电压被打扰之后就再次不会恢复。
- 解析:程序