空间布局
我们在学习C语言的时候划过这样的空间布局图

我们用C语言来打印一下对应的地址

#include<stdio.h>
#include<stdlib.h>int g_adder=100;
int g;
int main(int argc,char*argv[],char*env[]){printf("code adder:%p\n",main);
printf("g addr:%p\n",&g_adder);
printf("g uniunt adder:%p\n",&g);
char *newcode=(char*)malloc(10);
printf("heap adder:%p\n",newcode);
printf("stack adder:%p\n",&newcode);
printf("opt adder:%p\n",argv[0]);
printf("opt adder:%p\n",argv[argc-1]);
printf("env adder:%p\n",env[0]);return 0;
}


从图中可以看出从代码区到初始化数据区,再到未初始化数据区再到堆、栈区,再到命令行参数环境变量区的地址都在增大

这是之前学到的

程序地址空间布局
先来分代码感受一下:

#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
using namespace std;int tag=100;
int main(){pid_t tar=fork();
if(tar==0){while(1){tag=1000;
printf("tag:%d,tag ader:%p\n",tag,&tag);
sleep(1);
}
}else if(tar>0){while(1){printf("tag :%d,tag adder:%p\n",tag,&tag);
sleep(1);
}
}
return 0;
}


可以看出两个放问同一个变量但是当一个进程改变该数据值的时候,另一个进程放翁该数据的2值没有改变,这是为什么呢?

在这里插入图片描述
地址空间绝对不是物理地址。我们在语言中打印的地址都是虚拟地址】

那么进程地址空间是什么?

进程地址空间是对物理空间内存的虚拟化表示,虚拟空间最终一定要一毛中的方式转化为物理内存

问题:

  • 刚在的两个进程的数据为什么不同?
    因为子进程在创建是要拷贝父进程的进程控制块,tar的地址也一并被拷贝下来,两个tar地址分别在他们的进程地址空间的地址相同也在物理空间也是同一个。

    但是进程在运行时是独立的,在数据层面先进行独立,当tag值改变时在物理空间重新开辟空间写入数据1000,断开原先的映射关系,重新映射,虚拟地址不变。



问题:

  • 1 什么是进程地址空间?
    每个进程都有 一个地址空间
    系统中可能存在多个进程,所以,系统中一定存在多个地址空间
    所以,地址u空间要不要被管理起来呢???
    1 先描述
    地址空间本身就是一个数据结构struct
    struct mm_struct{
    }
    本质就是在划分区域
    申请空间的本质就是在向内存索要空间,得到物理地址,然后在特定的区域申请没有使用的虚拟地址,建立映射关系,返回虚拟地址即可。
    2 在组织

  • 2 为什么要有地址u空间
    1 能够让地址信息已连续的形式暴露给用户
    2 能够起到保护内存的作用

  • 3 什么是地址空间
    所谓的地址空间本质是描述进程占用资源的相关的一张表,地址空间在操作系统内核当中就是一个数据结构,这狗数据结构将内存划分为若干区域,这些区域对应学过的那些栈堆等。

  • 4 地址空间是怎么工作的
    地址空间暴露的地址都是虚拟地址,实际上当进程放问地址空间上的地址时,都时通过页表映射转换到物理内存,拿到对应的额代码和数据

【校招 --阶段一 操作系统基础】进程地址空间相关推荐

  1. 模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制

    进程(Process) 的定义 从不同的角度,进程可以有不同的定义,传统典型的定义: 进程是程序的一次执行过程. 或者:一个正在执行的程序的实例 进程是一个程序及其数据在处理机上顺序执行所发生的活动 ...

  2. Linux操作系统~什么是虚拟地址?深度剖析进程地址空间

    目录 1.所以进程的地址空间是什么呢? 2.mm_struct内部有什么? 3.虚拟地址空间与物理内存如何关联 页表 4.为什么设计这样一个进程地址空间,不让程序直接访问内存 Q:为什么子进程修改值以 ...

  3. 内存管理基础学习笔记 - 3.1 进程地址空间 - VMA线性区

    目录 1. 前言 2. 进程地址空间 3. 用户空间与内核空间的隔离 4. 进程地址空间主要数据结构 struct mm_struct struct vm_area_struct 5. vma的标志属 ...

  4. 内存管理基础学习笔记 - 3.2 进程地址空间 - brk系统调用

    目录 1. 前言 2. SYSCALL_DEFINE1(brk, unsigned long, brk) |- -__do_munmap |- -do_brk_flags |- - -get_unma ...

  5. 计算机基础(04)操作系统基础

    4 操作系统基础 4.1 操作系统基础知识 4.1.1 操作系统基本概念 操作系统:是管理计算机软硬件资源的程序,同时它又是用户与计算机硬件的接口:操作系统是配置在计算机硬件上的第一层软件,是控制计算 ...

  6. 网安--第八章 安全操作系统基础

    第三部分 网络安全防御技术 ★第8章 安全操作系统基础 ◎ 安全操作系统的基本概念.实现机制 ◎ 安全模型以及安全体系结构 ◎ 操作系统安全的36条基本配置原则 ★第9章 密码学与信息加密 ◎ 密码学 ...

  7. Linux操作系统——基础详解

    目录 Linux操作系统 Linux 简介 Linux 接口 Linux 组成部分 Shell Linux 应用程序 Linux 内核结构 Linux 进程和线程 基本概念 Linux 进程间通信 L ...

  8. python 操作系统和进程

    一. 操作系统介绍 多道程序系统 多道程序设计技术 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬.软件资源 ...

  9. Linux 内存管理 详解(虚拟内存、物理内存,进程地址空间)

    Linux -操作系统内存管理 存储系统 存储器的层次结构 Linux的内存管理 物理内存 物理内存管理 虚拟内存 虚拟地址空间 (写时拷贝) 和物理地址映射关系 页表 虚拟内存优缺点 「在 4GB ...

  10. 计算机体系结构和操作系统基础

    目录 1 冯诺伊曼体系 1.1 冯诺伊曼体系简介 1.2 CPU 简介 1.3 CPU 访问方式 1.4 CPU 访问速度 1.5  操作系统 2 内存管理 2.1  MMU 2.2  内存管理方式 ...

最新文章

  1. Tick技术栈之InfluxDB
  2. (三)ORB特征匹配
  3. bert 中文 代码 谷歌_如何用最强模型BERT做NLP迁移学习?
  4. SQL语言基础:数据库语言概念介绍
  5. android 获取当前画布,Android硬件位图填坑之获取硬件画布
  6. 小心pthread_cond_signal和SetEvent之间的差异
  7. fluentd主从配置
  8. 46 CO配置-控制-利润中心会计-创建虚拟利润中心
  9. pytorch从ubuntu16.04到win7的迁移(解决)
  10. 初始化调用avplayer学习笔记
  11. Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题
  12. 全局流控介绍和实现思路
  13. IIS中启用ASP并连接Access数据库的解决办法
  14. Chrome的油猴Tampermonkey下载安装,以及搜索安装脚本
  15. sakai 工具翻译——测试和测验1
  16. CHM电子书木马制作攻略
  17. Abaqus中多层介质设置初始应力场(补充介绍)
  18. 硬盘属于计算机的主存吗,.硬盘装在主机箱内,因此硬盘属于主存对吗
  19. xp计算机找不到音量调节,关于电脑声音小喇叭图标XP中不见没有声音的恢复教程...
  20. 金山wps支持java接口开发吗_金山wps开放平台使用踩坑实录

热门文章

  1. java 支付宝支付 demo_java开发支付宝支付详细流程_demo的运行
  2. 15年来 那些值得永远铭记的硬件
  3. 青橙 GO M3 3G手机(珍珠黑)WCDMA/GSM 双卡双待 360特供机--高通胶水双核,A5老架构,内存缩水,,,强烈要求降价...
  4. 数字推理题的解题技巧
  5. 使用visdom三维可视化图像。
  6. TYUT太原理工大学2022需求工程考试填空题
  7. 2020秋招 携程算法岗笔试编程题解答
  8. AppleScript+JavaScript自动认证校园网
  9. 通过Grafana进行监控报警
  10. 单片机驱动为什么要设置为低电平有效?