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

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


Linux环境进程间通信(五): 共享内存(下)
文档选项
打印本页
将此页作为电子邮件发送
级别: 初级
郑彦兴 (mlinux@163.com), 国防科大攻读博士学位
2003 年 5 月 01 日
在共享内存(上)中,主要围绕着系统调用mmap()进行讨论的,本部分将讨论系统V共享内存,并通过实验结果对比来阐述两者的异同。系统V共享内存指的是把所有共享数据放在共享内存区域(IPC shared memory region),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面。
系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应特殊文件系统shm中的一个文件(这是通过shmid_kernel结构联系起来的),后面还将阐述。
1、系统V共享内存原理
进程间需要共享的数据被放在一个叫做IPC共享内存区域的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去。系统V共享内存通过shmget获得或创建一个IPC共享内存区域,并返回相应的标识符。内核在保证shmget获得或创建一个共享内存区,初始化该共享内存区相应的shmid_kernel结构注同时,还将在特殊文件系统shm中,创建并打开一个同名文件,并在内存中建立起该文件的相应dentry及inode结构,新打开的文件不属于任何一个进程(任何进程都可以访问该共享内存区)。所有这一切都是系统调用shmget完成的。
注:每一个共享内存区都有一个控制结构struct shmid_kernel,shmid_kernel是共享内存区域中非常重要的一个数据结构,它是存储管理和文件系统结合起来的桥梁,定义如下:
struct shmid_kernel /* private to the kernel */
{
struct kern_ipc_perm shm_perm;
struct file * shm_file;
int id;
unsigned long shm_nattch;
unsigned long shm_segsz;
time_t shm_atim;
time_t shm_dtim;
time_t shm_ctim;
pid_t shm_cprid;
pid_t shm_lprid;
};
该结构中最重要的一个域应该是shm_file,它存储了将被映射文件的地址。每个共享内存区对象都对应特殊文件系统shm中的一个文件,一般情况下,特殊文件系统shm中的文件是不能用read()、write()等方法访问的,当采取共享内存的方式把其中的文件映射到进程地址空间后,可直接采用访问内存的方式对其访问。
这里我们采用[1]中的图表给出与系统V共享内存相关


相关文档:

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改变文件名和目录名的字符集

今天碰到个问题,中文文件和带中文的目录通过SVN取到WINDOWS系统,然后通过SCP传到LINUX服务器之后,出现了文件名及目录名编码集改变的问题。(都变成了GBK)
最后通过下载一个linux专门用于转换 文件名和目录名 的工具,convmv
转换指令如下:
convmv -f [原始编码] -t [目标编码] -r(目录循环) --notest(实际改变,否 ......

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 ......

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

本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link
editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format
通用对象文件格式)、ELF(Executable and Linking Format
可执行和链接格式)。首先是对可执行文件格式的一个综述,并通过描述 ELF
文件加载过程以揭示 ......

配置RedHat Linux 5 DNS解析

1、vi /etc/resolv.conf
增加以下内容:
nameserver DNSserver_ip_address1
nameserver
DNSserver_ip_address2
如下:
[root@REDHATAS5 /]# cat /etc/resolv.conf
nameserver 192.168.88.1
2、测试DNS是否生效
[root@Develop-Server ~]# nslookup www.baidu.com
Server:      &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号