Linux进程概念(续)

news2024/12/23 17:23:46


引入

我们先来看一段代码

#include<stdio.h>
#include <unistd.h>

int g_val=200;//全局变量
int main()
{
    int res=fork();
    if(res>0)//father
    {
        printf("我是父进程。我的全局变量 g_val=%d,他的地址是 %p\n",g_val,&g_val);
    }
    else if(res==0)//子进程
    {
        g_val=100;
          printf("我是子进程。我的全局变量 g_val=%d,他的地址是 %p\n",g_val,&g_val);
    }
    else{
        printf("出错啦");
        return -1;
    }
    return 0;
}

结果可能让人很,,,无措

 

 同一个地址怎么会存储不同的值呢?

答案是

这里的地址,绝对不是物理内存的地址!! ! ! ! ! ! ! ! ! ! ! !!
不是物理地址,而是:虚拟地址(线性地址)!
几乎所有的语言,如果他有“地址”的概念,这个地址一定不是物理地址,而是虚拟地址!! !

进程地址空间

什么是地址空间

1.验证地址空间的排布

  • 代码演示

#include<stdlib.h>
#include<stdio.h>

int g_val=10;
int g_uval;
int main(int argc,char* argv[],char* envp[])
{
    printf("代码区:%p\n",main);
    char* str="abcde";
    printf("只读常量区: %p\n",str);
    printf("初始化数据区: %p\n",&g_val);
    printf("未初始化数据区: %p\n",&g_uval);

    int *p=(int*)malloc(10);
    printf("堆区: %p\n",p);
    printf("栈区: %p\n",&p);
    printf("###############\n");
    int i=0;
    for(i=0;i<argc;i++)
    {
        printf("命令行参数:%p\n",argv[i]);
    }

    while(envp[i])
    {
        printf("环境变量: %p\n",&envp[i]);
        i++;
    }

return 0;
}
  • 演示效果                                           对比排布

进程地址空间分为代码区,常量区,堆栈相对而生,命令行参数,环境变量

为什么要有地址空间

1.历史上过去是可以直接访问物理内存的,这种方式特别不安全。

现代计算机提出了下面的方式:

 如何理解区域划分

上小学的时候,想来有很多同学都经历过38线吧。就像这样

struct desktop{
int start;
int end;
}
struct desktop one =[1,50]
struct desktop one =[51,100]

地址空间是一种内核数据结构,它里面至少有各个区域的划分

所谓的范围变化,本质是对start或者end标记值+ - 一定的范围即可

内核中的结构体名称是mm_struct ,地址空间和页表是每个进程都私有一份,只要保证,每一个页表映射的是物理内存的不同区域,就能做到,进程之间不会相互干扰,保证进程的独立性。

所以,开头的同一个地址存放不同的值也能理解了.

当我们的程序,在编译的时候,形成可执行程序的时候,没有被加载到内存中的时候,

请问:我们程序内部,有地址吗??
其实已经有地址了! ! !
可执行程序其实编译的时候,内部已经有地址了!
地址空间不要仅仅理解成为是OS内部要遵守的,其实编译器也要遵守!!!,即编译器编译代码的时候,就已经给我们形成了各个区域代码区,数据区,...并且,采用和Linux内核中一样的编址方式,给每一个变量,每一行代码都进行了编址,故,程序在编译的时候,每一个字段早已经具有了一个虚拟地址! ! !

程序内部的地址,依旧用的是编译器编译好的虚拟地址
当程序加载到内存的时候,每行代码,每个变量边具有了一个物理地址,外部的

2.凡是非法的访问或者映射,0S都会识别到,并终止你这个进程!!!
有效的保护了物理内存吗! !
 

因为地址空间和页表是0S创建
并维护的!是不是也就意味着
凡是想使用地址空间和页表进行
映射,也--定要在OS的监管之下又
来进行访问! !
也便保护了物理内存
中的所有的合法数据
包括各个进程,以及内核的相关有效数据!

 

 3.

1)因为在物理内存中理论上可以任意位置加载,那么是不是物理内存中的几乎所有的数据和代码在内存中是乱序的呢?
2)但是,因为页表的存在,它可以将地址空间上的虚拟
地址和物理地址进行映射,那么是不是在进程视角所有的内存分布,都可以是有序的! !

3)地址空间+页表的存在可以将内存分布,有序化!

4)地址空间是0S给进程画的大饼

5)结合第2条:进程要访问的物理内存中的数据和代码,可能目前并没有在物理内存中,同样的,也可以让不同的进程映射到不同的物理内存,是不是很容易做到

6)进程的独立性,可以通过地址空间+页表的实现!

结论:
因为有地址空间的存在,每-一个进程都认为自己拥有4GB空间(32),并且各个区域是有序的,进而可以通过页表映射到不同的区域,来实现进程的独立性! !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day38-Mobile Tab Navigation(手机tab栏导航切换)

50 天学习 50 个项目 - HTMLCSS and JavaScript day38-Mobile Tab Navigation&#xff08;手机tab栏导航切换&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"…

Cesium态势标绘专题-多边形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

mybatis_使用

第一步&#xff1a; 编写接口 第二步&#xff1a; 编写对应的mapper中的sql语句 第三步&#xff1a; 测试 CRUD <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http…

喜报 | 擎创科技入选2023中国金融科技竞争力百强榜

2023中关村金融科技论坛——第七届金融科技与金融安全峰会已圆满落幕。本次峰会主要围绕银行科技、保险科技、新一代信息技术、互联网3.0展开专题论坛&#xff0c;共有千余位金融机构和科技公司相互分享研究成果、探索前沿知识、交流实践经验。 会议上正式公布了“2023中国金融…

C++ 引用型别未定义

什么是引用型别未定义呢&#xff1f;&#xff08;首先是基本数据类型的&#xff09; 在使用函数的时候&#xff0c;我们在给函数传参的时候可能会传入一个左值也可能是右值。当我们使用如下函数funtion的时候&#xff0c;会在控制台打印什么样的结果呢&#xff1f;&#xff08;…

fastadmin框架重定向

由于&#xff0c;我们一打开fastadmin框架就进入到前端页面很麻烦&#xff0c;下面这种方法可以解决这个问题。 首先我们找到这个路径 找到重定向&#xff0c; application》index》controller》index 原本文件是这个样子&#xff1a; <?phpnamespace app\index\controll…

Redisson实现简单消息队列:优雅解决缓存清理冲突

在项目中&#xff0c;缓存是提高应用性能和响应速度的关键手段之一。然而&#xff0c;当多个模块在短时间内发布工单并且需要清理同一个接口的缓存时&#xff0c;容易引发缓存清理冲突&#xff0c;导致缓存失效的问题。为了解决这一难题&#xff0c;我们采用Redisson的消息队列…

SuperCLUE中文大模型排行榜(2023年7月)

中文通用大模型综合性测评基准&#xff08;SuperCLUE&#xff09;&#xff0c;是针对中文可用的通用大模型的一个测评基准。 它主要要回答的问题是&#xff1a;在当前通用大模型大力发展的情况下&#xff0c;中文大模型的效果情况。包括但不限于&#xff1a;这些模型哪些…

思科设备静态路由配置

一、静态路由基本知识 路由器的主要功能就是用来转发IP 数据包以使数据包到达正确的目的主机。可以想象数据包到达路由器就像一辆汽车开到十字路口&#xff0c;路由表就类似路标&#xff0c;列出可能到达的目的地&#xff0c;以及应该选择哪条路到达目的地。 路由器必须要有相应…

Cesium态势标绘专题-圆形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

Set集合类详解(附加思维导图)

目录 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 2.2、TreeSet集合的使用 三、HashSet、LinkedHashSet、TreeSet的使用场景 四、list和set集合的区别 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 ①&#xff1a;add…

Docker安装Elasticsearch相关软件安装

Docker安装Elasticsearch相关软件安装 本文将介绍通过 Docker 的方式安装 Elasticsearch 相关的软件。 1、Docker安装Elasticsearch 1.1 搜索镜像 $ docker search elasticsearch $ docker search elasticsearch:7.12.11.2 拉取镜像 $ docker pull elasticsearch:7.12.11.…

# jellyfin安装设置使用散记

jellyfin安装设置使用散记 文章目录 jellyfin安装设置使用散记0 软件简介1 安装2 视频转码问题2.1 局域网转码情况测试&#xff08;不同网段&#xff09;2.2 局域网jellyfin app默认转码问题解决2.3 外网转码情况测试 3 一些坑4 插件5 最后 0 软件简介 Jellyfin 是一个自由的软…

ConcurrentHashMap 相比于 HashMap 的优势

ConcurrentHashMap 使用每个链表头节点作为锁对象, 把一把大锁转换成多把小锁, 大大缩小了锁冲突的概率 HashTable 是给整个 Hash 表加锁, 因此只要有线程抢到了锁其他线程就得阻塞等待. ConcurrentHashMap 是对每个链表加锁, 因此只要不是对同一个链表进行修改就不会阻塞, 大…

linux 查看网卡,网络情况

1&#xff0c;使用nload命令查看 #yum -y install nload 2&#xff0c; 查看eth0网卡网络情况 #nload eth0 Incoming也就是进入网卡的流量&#xff0c;Outgoing&#xff0c;也就是从这块网卡出去的流量&#xff0c;每一部分都有下面几个。 – Curr&#xff1a;当前流量 – Avg…

vue中重新获取数据导致页面加长,要求在页面更新之后浏览器滚动条滚动到之前浏览记录的位置。以及获取当前页面中是哪个元素产生滚动条的方法。

目前的页面样式为&#xff1a; 代码是&#xff1a; <section id"detailSection"><el-tableref"multipleTable":data"logDetailList"style"width: 650px;margin:20px auto;"id"dialogDetail":show-header"fals…

13 QT资源文件导入

导入资源: 1&#xff1a;将资源文件放入到项目目录下 2&#xff1a;添加资源文件 2.1&#xff1a;右键项目->添加新文件->Qt->Qt Resource file ->给资源文件命名 ex: res ->生成res.qrc 3&#xff1a;编辑资源文件 3.1&#xff1a;添加前缀 3.2&#xff1a;…

荧光效率的测试原理-荧光量子效率测试系统

荧光染料是一种新型染料,它既有常规染料的着色特性,又能发射出荧光,使得织物的饱和度和鲜艳度提高,广泛用于纺织、服装等领域。目前,荧光染料在防伪、分子探针等方面的应用也方兴未艾。由于荧光染料在科技和人们的生活中得到了越来越多的应用,对其测配色的研究也引起了颜色学家…

数据中心蓄电池监测,这个方法太好用了!

在数字化时代&#xff0c;数据机房扮演着至关重要的角色&#xff0c;成为企业和组织保障信息安全和业务稳定运行的关键枢纽。 数据中心的可靠性和持续运行并不仅仅依赖于稳定的电力供应&#xff0c;而是需要多层次的保障措施。其中&#xff0c;蓄电池监控系统作为数据中心不可或…

多城市同城分类信息发布h5公众号系统开发

多城市同城分类信息发布h5公众号系统开发 1&#xff1a;分类信息&#xff0c;商户入驻&#xff0c;红包广告&#xff0c;同城动态&#xff0c;代理加盟。 2&#xff1a;全国版&#xff0c;多城市版&#xff0c;本地版自由切换。 3&#xff1a;付费发帖&#xff0c;付费置顶、付…