1、进程内存分布
对于32位系统 进程的虚拟内存空间有4G,其中内核空间占高位地址的1G,用于:进程管理、内存管理、设备管理和虚拟文件系统等,3G的用户空间程序上是连续的,实际物理内存不一定连续,进程内部从低位到高位依次是.data段,.bss段,堆,mmap,栈。 linux系统下默认栈空间大小为10M,也就是系统最多分配300个线程(3G/10M)。
好处:
- 方便编程,程序上内存地址是连续的
- 进程之间内存隔离,每个进程都有自己的虚拟空间
- 虚拟内存逻辑上扩大了内存,通过换入换出来置换用不到和用到的数据,内存利用更加高效
(1)进程切换后为什么变慢了?
进程虚拟地址空间到物理地址的映射是通过查找页表实现,每个进程都有自己的页表,页表占用一定内存,切换存在耗时;同时为了加速页表查找,用TLB将常用地址映射cach住,进程切换后TLB失效了需要重新缓存,所以变慢。现成切换时TLB不会失效,所以切换比进程切换要快。
(2)进程通信方式
- 管道:只能用于血缘关系的进程间通信,命名管道能用于普通进程间通信;
- 信号