共享内存(shared memory)和信号量(semaphore)简介(转)

共享内存(shared memory) 共享内存是一段可以被多个进程共享的内存段。首先,用shmget系统调用产生指定大小的共享内存段,然后需要访问此共享内存的进程调用shmat系统调用,把这个内存段附加到自己的地址空间,然后就可以像访问自己私有的内存一样访问这个内存段了。等到访问完毕,用shmdt脱离。同message queue一样,共享内存一旦产生,除非明确的删除(某个有权限的进程或者用ipcrm命令)或者系统重启。否则,产生的共享内存会一直保留在系统中。而且,只要有权限,就可以对共享内存进行操作。共享内存的内容由进程自己定义。为了防止多个进程在同一时间写同样一段共享内存,一般程序会使用信号量来控制对某一段地址的读写。 ipcs –am命令可以查看share memory的状况:

Shared Memory: T      ID        KEY    MODE         OWNER    GROUP  CREATOR   CGROUP NATTCH                SEGSZ   CPID   LPID   ATIME    DTIME    CTIME m     258          0 --rw-r-----    oracle      dba   oracle      dba     12              8388608 106303 106329 16:28:54 16:48:36 16:28:49

T: 类型 m 表明这是个共享内存 ID: 用户自己定义的,在调用shmget时传送的参数。

Key: 系统返还的全局唯一的ID。

Mode: 权限,含义和文件权限基本一致

Owner, group: 队列建立者的名字和组

CREATOR, CGROUP:队列建立者和组的ID

NATTCH: 有几个进程挂接(attach)在这段共享内存上

SEGSZ: 共享内存段大小(字节)

CPID: 产生者PID LPID: 最后挂接(attach)或者脱离(detach)者PID

ATIME: 最后挂接(attach)时间

DTIME: 最后脱离(detach)时间。.

CTIME: 建立或者最后修改的时间  

信号量(semaphore) 在操作系统中,有些资源数量是有限的,在同一时间,只能由有限(一个或几个)的进程使用和访问。例如磁带机,同一时间,只能由一个进程使用。这样的资源被称为关键(critical)资源。信号量就是用来记录关键资源的使用情况的。首先,利用系统调用semget产生一个信号量。当需要使用关键资源时,调用semop,传递的参数为需要使用的资源的数量,例如2个,参数就为+2。如果这个资源有2个或者更多可用,进程就获得了使用权,否则就必须等待,直到有足够的资源可用。当进程使用资源结束的时候,也用semop释放关键资源。参数为需要释放的数量,例如2,参数为-2。同message queue一样,共信号量一旦产生,除非明确的删除(某个有权限的进程或者用ipcrm命令)或者系统重启。否则,信号量会一直保留在系统中。而且,只要有权限,就可以对其进行操作。 ipcs –as命令可以查看Semaphore的状况: Semaphores: T      ID        KEY    MODE         OWNER    GROUP  CREATOR   CGROUP NSEMS   OTIME    CTIME s       0 0x696e6974 --ra-r--r--      root   system     root   system     8  9:52:53  9:59:30  

T: 类型 s 表明这是个信号量

ID: 用户自己定义的,在调用semget时传送的参数。

Key: 系统返还的全局唯一的ID。

Mode: 权限,含义和文件权限基本一致 Owner, group: 队列建立者的名字和组 CREATOR, CGROUP:队列建立者和组的ID NSEMS: 本信号量上信号的数量。

OTIME: 最后一次操作(semop)的时间

CTIM: 建立或者最后修改的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值