函数 | |
void * | SysMmap (void *addr, size_t size, int prot, int flags, int fd, size_t offset) |
系统调用|申请虚拟内存(分配线性地址区间) 鸿蒙与Linux标准库的差异 http://weharmonyos.com/zh-cn/device-dev/kernel/%E4%B8%8ELinux%E6%A0%87%E5%87%86%E5%BA%93%E7%9A%84%E5%B7%AE%E5%BC%82/ 更多... | |
int | SysMunmap (void *addr, size_t size) |
释放虚拟内存 更多... | |
void * | SysMremap (void *oldAddr, size_t oldLen, size_t newLen, int flags, void *newAddr) |
int | SysMprotect (void *vaddr, size_t len, int prot) |
修改访问权限 更多... | |
void * | SysBrk (void *addr) |
brk也是申请堆内存的一种方式,一般小于 128K 会使用它 更多... | |
int | SysShmGet (key_t key, size_t size, int shmflg) |
得到一个共享内存标识符或创建一个共享内存对象 更多... | |
void * | SysShmAt (int shmid, const void *shmaddr, int shmflg) |
int | SysShmCtl (int shmid, int cmd, struct shmid_ds *buf) |
完成对共享内存的控制 此函数可以对shmid指定的共享存储进行多种操作(删除、取信息、加锁、解锁等) 更多... | |
int | SysShmDt (const void *shmaddr) |
与shmat函数相反,是用来断开与共享内存附加点的地址,禁止本进程访问此片共享内存 更多... | |
系统调用|申请虚拟内存(分配线性地址区间)
鸿蒙与Linux标准库的差异 http://weharmonyos.com/zh-cn/device-dev/kernel/%E4%B8%8ELinux%E6%A0%87%E5%87%86%E5%BA%93%E7%9A%84%E5%B7%AE%E5%BC%82/
addr | 用来请求使用某个特定的虚拟内存地址。如果取NULL,结果地址就将自动分配(这是推荐的做法), 否则会降低程序的可移植性,因为不同系统的可用地址范围不一样。 |
size | 内存段的大小。 |
prot | 用于设置内存段的访问权限,有如下权限: PROT_READ:允许读该内存段。 PROT_WRITE:允许写该内存段。 PROT_EXEC:允许执行该内存段。 PROT_NONE:不能访问。 |
flags | 控制程序对内存段的改变所造成的影响,有如下属性: MAP_PRIVATE:标志指定线性区中的页可以被进程独享 MAP_SHARED:标志指定线性区中的页可以被几个进程共享 |
fd | 打开的文件描述符,如果新的线性区将把一个文件映射到内存的情况 |
offset | 用以改变经共享内存段访问的文件中数据的起始偏移值。 |
在文件 vm_syscall.c 第 58 行定义.
修改访问权限
addr |
在文件 vm_syscall.c 第 100 行定义.
oldAddr | 需要扩大(或缩小)的内存段的原始地址。注意old_address必须是页对齐。 |
oldLen | 内存段的原始大小。 |
newLen | 新内存段的大小。 |
flags | 如果没有足够的空间在当前位置展开映射,则返回失败 MREMAP_MAYMOVE:允许内核将映射重定位到新的虚拟地址。 MREMAP_FIXED:mremap()接受第五个参数,void *new_address,该参数指定映射地址必须页对齐; |
newAddr | 在new_address和new_size指定的地址范围内的所有先前映射都被解除映射。如果指定了MREMAP_FIXED, 还必须指定MREMAP_MAYMOVE。 |
在文件 vm_syscall.c 第 90 行定义.
连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像本地空间一样访问 一旦创建/引用了一个共享存储段,那么进程就可调用shmat函数将其连接到它的地址空间中 如果shmat成功执行,那么内核将使与该共享存储相关的shmid_ds结构中的shm_nattch计数器值加1
shmid | |
shmaddr | |
shmflg |
在文件 vm_syscall.c 第 152 行定义.
完成对共享内存的控制 此函数可以对shmid指定的共享存储进行多种操作(删除、取信息、加锁、解锁等)
shmid | 共享内存标识符 |
cmd | IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中 IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内 IPC_RMID:删除这片共享内存 |
buf | 共享内存管理结构体。 |
在文件 vm_syscall.c 第 174 行定义.
与shmat函数相反,是用来断开与共享内存附加点的地址,禁止本进程访问此片共享内存
shmaddr | 连接的共享内存的起始地址 本函数调用并不删除所指定的共享内存区,而只是将先前用shmat函数连接(attach)好的共享内存脱离(detach)目前的进程 |
在文件 vm_syscall.c 第 192 行定义.
得到一个共享内存标识符或创建一个共享内存对象
key | 建立新共享内存对象 标识符是IPC对象的内部名。为使多个合作进程能够在同一IPC对象上汇聚,需要提供一个外部命名方案。 为此,每个IPC对象都与一个键(key)相关联,这个键作为该对象的外部名,无论何时创建IPC结构(通过msgget、semget、shmget创建), 都应给IPC指定一个键, key_t由ftok创建,ftok当然在本工程里找不到,所以要写这么多. |
size | 新建的共享内存大小,以字节为单位 |
shmflg | IPC_CREAT IPC_EXCL IPC_CREAT: 在创建新的IPC时,如果key参数是IPC_PRIVATE或者和当前某种类型的IPC结构无关,则需要指明flag参数的IPC_CREAT标志位, 则用来创建一个新的IPC结构。(如果IPC结构已存在,并且指定了IPC_CREAT,则IPC_CREAT什么都不做,函数也不出错) IPC_EXCL: 此参数一般与IPC_CREAT配合使用来创建一个新的IPC结构。如果创建的IPC结构已存在函数就出错返回, 返回EEXIST(这与open函数指定O_CREAT和O_EXCL标志原理相同) |
在文件 vm_syscall.c 第 129 行定义.