Linux09管道&共享内存

Posted by 川川的博客 on May 14, 2025

管道/共享内存

pipe 系统调用

  • 参数是一个长度为2的int数组

image-20250621174219192

image-20250621174141353

先pipe再fork

image-20250621174736449

管道的例子 (无名管道)

image-20250621175543510

有名管道

mkfifo 创建有名管道

unlink 删除管道文件

rename 修改文件名字

link 创建新的硬链接

image-20250621175948237

共享内存

  • 让不同进程虚拟内存页对应同一物理内存的页框

image-20250621181305587

库文件经常使用共享内存

System V版本的共享内存机制

  • ipcs 查看所有共享内存
  • ipcrm -M 删除共享内存
  • IPC_PRIVATE,创建私有共享内存,进程之间必须存在亲缘关系

image-20250621184146585

例子:

创建共享内存时,会把4096的内存全部置为0

image-20250621184651374

竞争条件

image-20250621190735988

共享内存 control

image-20250622160755400

设置和修改共享内存属性
  • 修改前必须先获取状态

image-20250622160939936

删除共享内存

image-20250622161800696

内存机制的实现

虚拟内存和物理内存的转换

image-20250622164455364

局部性原理

  • 减少页表的大小

image-20250622165741475

页表每个进程各有一个

image-20250622165646212

练习:共享内存各加10000000

软件上互斥

image-20250622174042889

练习:通过管道实现文件远程拷贝,管道一端读文件,另一端写文件

image-20250624182147744

image-20250624182204828