进程通信(运行在内存)
1.虚拟内存机制
计算机存储系统
-
CPU寄存器
-
高速缓存(Cache)
-
内存
-
存储设备(外存)如:硬盘,U盘,SD卡
计算机存储系统---内存
为什么分虚拟内存?
直接工作在真实内存上的坏处:
-
操作系统占用一定内存,进程和操作系统平分真实空间,进程便可以直接访问操作系统物理空间,不安全
-
如果创建新进程内存空间不足,便会把不用的进程分配到外存中,如果再次想用还要在外存中读取回来,低效率
工作在虚拟内存上的优点:
利用内存管理技术,开辟虚拟空间,可以分配出若干个,这样每创建一个进程就可以分配到物理内存空间大小
虚拟内存不是“扩容”,使用算法更高效分布内存
虚拟内存和物理内存
虚拟地址空间(页)和物理内存地址(页框)之间有一个页表(一一对应)做链接,如果虚拟地址空间内存不够,则找外存(swap)
2.进程间通信背景
4G内存空间分配:3G分配给用户,用来写应用程序;一个1G放内核(连续映射虚拟内存,开辟一块缓冲区,方便进程间通信)
3.如何高效选择进程通信方式
无名管道
-
单向数据通信
-
亲缘关系(父进程、子进程)
-
依赖文件系统
-
基于数据流
-
有大小限制(4k)
有名管道
-
非亲缘关系
-
mkfifo(const char *pathname,mode_t mode)
-
设备文件
消息队列
-
单向通信
-
主动
-
生命周期长
-
数据块
共享内存
-
最快的IPC方式
-
最简单
int shmget(key_t key,size_t size,int shmflg); 功能:用来创建共享内存 void *shmat(int shmid,const void *shmaddr,int shmflg); 功能:将共享内存段连接到进程地址空间 int shmdt(const void *shmaddr); 功能:将共享内存和当前进程分离
信号量(互斥):同步互斥机制(保护临界资源)
信号:处理异步事件的方式(ctrl+c)