程序:一组指令的有效集合。它是静态的,不具有任何的运行意义。程序最终转换为二进制文件。

进程:程序的执行就是进程。可以把它看成独立的程序,在内存中有其对应的代码空间和数据空间。一个进程所拥有的数据和代码只属于自己。进程是资源分配的基本单位,也是调度运行的基本单位。

进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。

进程还具有并发性和交往性,而程序却是封闭的。

这节中有几个重要的问题,我举个例子给大家看吧~

第一例:

这段代码是说什么的呢?显然,它输出了函数、初始化的变量,未初始化的变量,堆区,栈区的地址,那么,这些地址有什么规律呢?

可以看的出来,它的地址是依次从低地址到高地址。

然而,还有一类特殊的函数---主函数,它的地址是如何分布的呢?

地址为:

显然,,带有命令行参数的主函数的地址比前面比较的栈区的地址还要大。

所以就有了如图的地址空间:(如果地址空间中的数都是连续的,则我们称之为线性地址空间)

第二例:

父进程和子进程:

运行结果为:

在这里,我们会不会很奇怪一个问题呢?这里将if和else里边的内容都执行了。然而在我们经常编写的代码中,if和else是不能同时执行的。进程却在这里做到了。

fork():是创建子进程。这里的getpid()是获取到子进程的pid,getppid()是获取到父进程的pid(即这里的2677);

我们发现,父进程和子进程指向的是同一块内存,那么我们也应该想到他们的指向也应该是一样的,(这只是我们的推测哦),,看个例子我们就知道了。

eg:

结果是什么呢?

看到那个200和100了吗?它们的值竟然不一样。

说明它们并不是同一个指向,那么为什么地址一样呢?这里就引出了我们的虚拟地址。

虚拟地址空间:在一个带有虚拟存储器的系统中,cpu从一个有N=2的n次方个地址的地址空间中生成虚拟地址。

如图所示:

在这里,虚拟地址空间通过页表和MMU(存储器管理单元)映射到物理地址中,它们的物理地址是不相等的,所以最后得到的值也不相等。

今天的内容先说到这里喽。~~~

欢迎来访,多多提议哦。

linux之地址空间相关推荐

  1. linux 进程 地址空间 内存分布 简介

    目录 一 进程空间分布概述 二 内核空间和用户空间 三 进程内存布局 栈 内存映射段 堆 BBS和数据段 C语言程序实例 栈与堆的区别 一 进程空间分布概述 对于一个进程,其空间分布如下图所示: 程序 ...

  2. Linux进程地址空间学习总结

    Linux内核--内核地址空间分布和进程地址空间 http://www.cnblogs.com/bizhu/archive/2012/10/09/2717303.html 内核地址空间分布 直接映射区 ...

  3. Linux进程地址空间与进程内存布局详解,内核空间与用户空间

    Linux进程地址空间与进程内存布局详解 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始化的数据. 未初始化过的数据( ...

  4. Linux 进程地址空间 进程内存布局

    一 进程空间分布概述     对于一个进程,其空间分布如下图所示: 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始化的 ...

  5. Linux进程地址空间和虚拟内存

    一.虚拟内存 先来看一张图(来自<Linux内核完全剖析>),如下: 分段机制:即分成代码段,数据段,堆栈段.每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低 ...

  6. Windows/Linux内核地址空间管理的异同

    相信很多人都知道Windows页表自映射一说,也晓得Linux内核的一一线性映射.然而很多人也仅仅就是知道而已,记住一个结论比理解一个原因要简单得多.        上周末,有人极具挑衅态度的问我能否 ...

  7. linux虚拟地址空间管理,Linux内存管理4---虚拟地址空间管理

    1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...

  8. linux 虚拟地址空间在哪,Linux虚拟地址空间

    Linux虚拟内存管理(glibc) 在使用mysql作为DB开发的兑换券系统中,随着分区表的不断创建,发现mysqld出现了疑似"内存泄露"现象,但通过 valgrind 等工具 ...

  9. linux进程地址空间没有段,Linux进程的虚拟地址空间

    在x86体系结构中分段机制是必选的,而分页机制则可由具体的操作系统而选择,Linux通过让段的基地址为0而巧妙的绕过了基地址.因此,对于Linux来说,虚地址和线性地址是一致的.在32位的平台上,线性 ...

  10. linux 进程地址空间的一步步探究

    我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间.其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间. 那虚拟内存空间 ...

最新文章

  1. component表
  2. 【总结】有三AI大量原创视频和图文资料,你都存下来了吗
  3. 迷宫问题---递归解决
  4. Spark Streaming实时数据分析
  5. 设计即开发,如何打通软件研发的“任督二脉”?
  6. 移植 Qt4.8.5到Tiny210
  7. 白话CSS3的新特性
  8. Retinex 算法
  9. 《TR-069_Amendment-2》翻译
  10. 微信桌面版如何同时登陆两个微信账号
  11. 关于Keil4 C51版本可以编译但是无法完成编译的问题解决
  12. 西工大计算机课程表,工大、高新、交大、爱知等7所名校初一作息时间表课表新鲜出炉!...
  13. java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)
  14. 前后端分离项目全环境搭建(Ruoyi框架)
  15. HTML之设置背景、边框、边距和补白
  16. AD 如何查看元器件库中的3D模型?
  17. 没有这个路径C:\Program Files\Microsoft Office\root\Office16怎么办
  18. js中TSC打印机在IE浏览器使用ActiveX控件实现打印
  19. CF(Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
  20. 思科、华为交换机err-disable的相关排查解决

热门文章

  1. 基于webpack3.x从0开始搭建React开发环境
  2. ListView执行notifyDatasetChanged无数据显示,getView未执行
  3. jquery的动画学习--jquery权威指南
  4. Response.Write具体介绍
  5. WINDOWS系统Eclipse+NDK+Android + OpenCv
  6. Linux SPI框架
  7. [windows phone 7 ]查看已安装程序GUID
  8. 基于RBAC模型的通用企业权限管理系统
  9. 基于C#.NET的--Windows进程管理工具
  10. 在c语言中a 这条语句的作用,C语言复习第二章