• 进程映射、mmap(day05)


    一、内存管理(续)
    每个进程都有自己独立的4G的虚拟地址空间。
    冯.诺伊曼体系结构
    哈佛体系结构
    section   代码段   只读数据段    栈段
    
    举例说明   数据所属的段。
    代码参见  memory.c
    如何获取进程自己的pid?
    getpid(2)
    #include <sys/types.h>
    #include <unistd.h>
    pid_t getpid(void);
    功能:获取进程的id
    参数:
    void
    返回值:
    pid_t   当前进程的pid
    
    
    cat /proc/pid/maps
    
    初始化和赋值是两码事
    
    栈段和代码段   数据段
    
    栈段   栈段是一个容器,栈段中有多个栈帧。
    一个进程只有一个栈段。
    
    每个函数都有自己的栈帧,在函数结束的时候,函数的栈帧释放。
    函数中变量的空间分配在栈帧上的,变量的空间释放了。
    变量的生命结束了。
    什么样的变量的空间分配在栈帧上?
    函数中的自动局部变量和函数的形参的空间分配在栈帧中。  函数
    
    静态的局部变量和全局变量的空间分配在数据段。进程
    但两者的作用域不同。
    stack
    heap
    代码段 数据段  堆、 栈
    堆的生命周期   要么程序员手动释放堆空间。否则,进程结束的时候。
    
    
    
    
    二、使用mmap将物理地址映射到进程的虚拟地址空间。
    
    mmap(2)
    #include <sys/mman.h>
    void *mmap(void *addr, size_t length, int prot, int flags,
                      int fd, off_t offset);
    功能:将文件或者设备映射到内存
    参数:
    addr:指定了映射区域的起始地址。NULL  地址有内核决定
    
    length:指定了映射区域的长度
    prot:
    PROT_EXEC  Pages may be executed.
    PROT_READ  Pages may be read.
    PROT_WRITE Pages may be written.
    
    PROT_NONE  Pages may not be accessed.
    
    flags:
    2选1:
    MAP_SHARED:对映射区域的更新给其他进程看,也同步到下层的文件。
    
    MAP_PRIVATE:对映射区域的更新不给其他进程看。也不同步到下层的文件
    
    MAP_ANONYMOUS:映射区域的内容被初始化为0.不与任何文件相关。
    如果指了这个参数。fd和offset被忽略。
    
    fd:文件描述符(文件)
    offset:文件的起始位置(文件)
    返回值:
    MAP_FAILED    错误   errno被设置
    返回映射区域的首地址。
    
    
    int munmap(void *addr, size_t length);
    功能:解除文件到内存的映射
    参数:
    addr:mmap(2)的返回值
    length:指定了映射区域的长度。
    返回值:
    0   成功
    -1  失败   errno被设置
    
    补充:
    一切皆文件。
    举例说明,使用mmap将物理地址映射到进程的虚拟地址空间,然后对虚拟地址空间进行操作。代码参见mmap.c
    
    
    
    总结:  
    一、进程的映射
    代码段  数据段  堆  栈
    周六日   复习C语言
    二、使用mmap将物理地址映射到进程的虚拟地址空间
  • 相关阅读:
    Zookeeper zkCli.sh常用命令
    windows 服务
    Zookeeper的下载安装
    Zookeeper 基础知识
    在Java中使用Redis
    Redis 集群(cluster)
    Redis 哨兵(Sentinel)机制
    Redis 主从复制
    Redis 发布/订阅
    Redis 事务
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7732553.html
Copyright © 2020-2023  润新知