易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux环境进程间通信(五): 共享内存(上)


Linux环境进程间通信(五): 共享内存(上)
文档选项
打印本页
将此页作为电子邮件发送
级别: 初级
郑彦兴 (mlinux@163.com), 国防科大攻读博士学位
2003 年 5 月 01 日
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。
采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的。
Linux的2.2.x内核支持多种共享内存方式,如mmap()系统调用,Posix共享内存,以及系统V共享内存。linux发行版本如Redhat 8.0支持mmap()系统调用及系统V共享内存,但还没实现Posix共享内存,本文将主要介绍mmap()系统调用及系统V共享内存API的原理及应用。
一、内核怎样保证各个进程寻址到同一个共享内存区域的内存页面
1、page cache及swap cache中页面的区分:一个被访问文件的物理页面都驻留在page cache或swap cache中,一个页面的所有信息由struct page来描述。struct page中有一个域为指针mapping ,它指向一个struct address_space类型结构。page cache或swap cache中的所有页面就是根据address_space结构以及一个偏移量来区分的。
2、文件与address_space结构的对应:一个具体的文件在打开后,内核会在内存中为之建立一个struct inode结构,其中的i_mapping域指向一个address_space结构。这样,一个文件就对应一个address_space结构,一个address_space与一个偏移量能够确定一个page cache 或swap cache中的一个页面。因此,当要寻址某个数据时,很容易根据给定的文件及数据在文件内的偏移量而找到相应的页面。
3、进程调用mmap()时,只是在进程空间内新增了一块相应


相关文档:

linux上装多个mysql

安装步骤
   
1先安装好第一个mysql :
#tar zxvf mysql*.tar.gz
#cd mysql*
#groupadd mysql
#useradd -g mysql mysql
#./configure --prefix=/usr/local/mysql #make
#make install
#scripts/mysql_install_db
#chown -R root /usr/local/mysql
#chown -R mysql /usr/local/mysql/var
#chgr ......

Linux 安装tomcat

Linux tomcat对于电脑使用的玩家的常用软件,然后我就学习及深入的研究Linux tomcat,在这里和大家一起探讨Linux tomcat的使用方法,希望对大家有用。操作系统:Redhat Linux(Fedora Core 2)JDK: j2sdk-1_4_2_01-linux-i586.bin Linux tomcat:jakarta-Linux tomcat-5.0.19.tar.gz
安装步骤:
JDK:
1)将安装程序复制到 /u ......

vmware tools 在红帽Linux中的安装

redhat9下安装VMware Tools
下面是安装步骤:
1.启动Rad Hat 9.0(图形界面方式登陆),并且以管理员的身份登陆。
2.在VMware虚拟机的菜单中点击:虚拟机->安装VMware 工具->install。
3.Red Hat 9.0自动挂载VMware Tools的虚拟光驱,并显示在桌面。
4.进去VMware Tools的虚拟光驱里,把VMwareTools-5.5.1-19175.tar ......

Linux的bash中进程前台后台转换的方法

一、利用kill命令 
先用ps -a找到进程号,再用sudo kill -stop procNumber,将进程暂停。然后再用jobs查看一下要转到后台的进程,找到它的job号,最后用bg jobNumber将其转到后台。大概就像这样: 
ps -a 
PID  TTY       TIME  CMD 
6729 pts/0 &nb ......

UNIX/LINUX 平台可执行文件格式分析

本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link
editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format
通用对象文件格式)、ELF(Executable and Linking Format
可执行和链接格式)。首先是对可执行文件格式的一个综述,并通过描述 ELF
文件加载过程以揭示 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号