zoukankan      html  css  js  c++  java
  • 面试问题之操作系统:Linux下进程的内存结构

    转载于:http://www.hqj.com/news/emb184.htm

      Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间。该地址空间是大小为4GB的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址。利用这种虚拟地址不但能起到保护操作系统的效果(用户不能直接访问物理内存),更重要的是,用户程序可以使用比实际物理内存更大的地址空间。

      4GB的进程地址空间会被分成两个部分:用户空间与内核空间。用户地址空间是从0到3GB(0xc0000000),内核地址空间占据3GB到4GB。用户进程在通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。只有用户进程使用系统调用(代表用户进程在内核态执行)时可以访问到内核空间。每当进程切换时,用户空间就会跟着变化;而内核空间由内核负责映射,它并不会跟着进程改变,是固定的。内核空间地址有自己对应的页表,用户进程各自有不同的页表。每个进程的用户空间都是完全独立、互不相干的。其中 用户空间包括以下几个功能区域。

    只读段:包含程序代码(.init和.text)和只读数据(.rodata)。

    数据段:存放的是全局变量和静态变量。其中可读可写数据段(.data)存放已初始化的全局变量和静态变量,BSS数据段(.bss)存放未初始化的全局变量和静态变量。

    :由系统自动分配释放,存放函数的参数值、局部变量的值、返回地址等。

    :存放动态分配的数据,一般由程序员动态分配和释放。若程序员不释放,程序结束时可能由操作系统回收。

    共享库的内存映射区域:这是Linux动态连接器和其他共享库代码的映射区域。

  • 相关阅读:
    python网页内容提取神器lxml
    tf–idf算法解释及其python代码
    刷搜索刷下拉框原理
    python爬取全站壁纸代码
    刷百度相关搜索发包参数详解
    Python3 if 变量variable SQL where 语句拼接
    python抓取网站提示错误ssl.SSLCertVerificationError处理
    Windows中的txt文件到Mac打开是乱码 解决办法
    python移动目录下所有子目录文件到新的总目录
    Spring Boot
  • 原文地址:https://www.cnblogs.com/yichengming/p/11466006.html
Copyright © 2011-2022 走看看