?? shm.h
字號:
#ifndef _LINUX_SHM_H_#define _LINUX_SHM_H_#include <linux/ipc.h>struct shmid_ds { struct ipc_perm shm_perm; /* operation perms */ int shm_segsz; /* size of segment (bytes) */ time_t shm_atime; /* last attach time */ time_t shm_dtime; /* last detach time */ time_t shm_ctime; /* last change time */ unsigned short shm_cpid; /* pid of creator */ unsigned short shm_lpid; /* pid of last operator */ short shm_nattch; /* no. of current attaches */ /* the following are private */ unsigned short shm_npages; /* size of segment (pages) */ unsigned long *shm_pages; /* array of ptrs to frames -> SHMMAX */ struct shm_desc *attaches; /* descriptors for attaches */};/* mode for attach */#define SHM_RDONLY 010000 /* read-only access */#define SHM_RND 020000 /* round attach address to SHMLBA boundary */#define SHM_REMAP 040000 /* take-over region on attach *//* super user shmctl commands */#define SHM_LOCK 11#define SHM_UNLOCK 12struct shminfo { int shmmax; int shmmin; int shmmni; int shmseg; int shmall; };#define SHM_RANGE_START 0x40000000#define SHM_RANGE_END 0x60000000 /* _SHM_ID_BITS is a variable you can adjust to */ /* tune the kernel. It determines the value of */ /* SHMMNI, which specifies the maximum no. of */ /* shared segments (system wide). SRB. */#define _SHM_ID_BITS 7 /* keep as low as possible */ /* a static array is declared */ /* using SHMMNI */#define __SHM_IDX_BITS (BITS_PER_PTR-2-SHM_IDX_SHIFT)/* !!!!!!!????? * Why reserve the two (2) high bits of the signature (shm_sgn) field? * Since, as far as I can see, only the high bit is used (SHM_READ_ONLY). * SRB. */#define _SHM_IDX_BITS (__SHM_IDX_BITS+PAGE_SHIFT>=BITS_PER_PTR?\ BITS_PER_PTR-PAGE_SHIFT-1:__SHM_IDX_BITS) /* sanity check *//* not present page table entry format bit 0 is 0, low byte defined in mm.h */#define SHM_ID_SHIFT 8#define SHM_ID_MASK ((1<<_SHM_ID_BITS)-1)#define SHM_IDX_SHIFT (SHM_ID_SHIFT+_SHM_ID_BITS)#define SHM_IDX_MASK ((1<<_SHM_IDX_BITS)-1)#define SHM_READ_ONLY (1<<(BITS_PER_PTR-1))#define SHMMAX 0x3fa000 /* max shared seg size (bytes) */#define SHMMIN 1 /* really PAGE_SIZE */ /* min shared seg size (bytes) */#define SHMMNI (1<<_SHM_ID_BITS) /* max num of segs system wide */#define SHMALL (1<<(_SHM_IDX_BITS+_SHM_ID_BITS))/* max shm system wide (pages) */#define SHMLBA 0x1000 /* attach addr a multiple of this */#define SHMSEG SHMMNI /* max shared segs per process */#ifdef __KERNEL__/* shm_mode upper byte flags */#define SHM_DEST 01000 /* segment will be destroyed on last detach */#define SHM_LOCKED 02000 /* segment will not be swapped *//* ipcs ctl commands */#define SHM_STAT 13#define SHM_INFO 14struct shm_info { int used_ids; ulong shm_tot; /* total allocated shm */ ulong shm_rss; /* total resident shm */ ulong shm_swp; /* total swapped shm */ ulong swap_attempts; ulong swap_successes;};/* * Per process internal structure for managing segments. * A shmat will add to and shmdt will remove from the list. */struct shm_desc { struct task_struct *task; /* attacher */ unsigned long shm_sgn; /* signature for this attach */ unsigned long start; /* virt addr of attach, multiple of SHMLBA */ unsigned long end; /* multiple of SHMLBA */ struct shm_desc *task_next; /* next attach for task */ struct shm_desc *seg_next; /* next attach for segment */};#endif /* __KERNEL__ */#endif /* _LINUX_SHM_H_ */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -