中国企业在线/徐州关键词优化排名
进程地址空间
例子引入:
我们在讲C语言的时候,老师给大家画过这样的空间布局图,但是我们对它不了解
我们写一个代码来验证Linux进程地址空间
#include<stdio.h>
#include<assert.h>
#include<unistd.h>
int g_value=100;
int main()
{pid_t id=fork();assert(id>=0);if(id==0){//childwhile(1){printf("我是子进程,我的id是:%d,我的父进程是:%d, g_value:%d,&g_value:%p\n",getpid(),getppid(),g_value,&g_value);sleep(1);}} else{//fatherwhile(1){printf("我是父进程,我的id是:%d,我的父进程是:%d,g_value:%d,&g_value:%p\n",getpid(),getppid(),g_value,&g_value);sleep(2);} } return 0;
}
这里没什么问题,就是他们的g_valule 和其地址都是一样的,
我们将代码调整一下,让子进程的g_value++
#include<stdio.h>
#include<assert.h>
#include<unistd.h>
int g_value=100;
int main()
{pid_t id=fork();assert(id>=0);if(id==0){//childwhile(1){printf("我是子进程,我的id是:%d,我的父进程是:%d,g_value:%d,&g_value:%p\n",getpid(),getppid(),g_value,&g_value);sleep(1);g_value++;//只有子进程会进行修改}} else{//fatherwhile(1){printf("我是父进程,我的id是:%d,我的父进程是:%d,g_value:%d,&g_value:%p\n",getpid(),getppid(),g_value,&g_value);sleep(2);} } return 0;
}
我们可以发现子进程的g_value变了,但是父进程没有变,两个的地址还是一样的
❓为什么他们两个地址相同但是读出来的数据不同呢?(下文会解答)
🔥子进程对全局数据修改,并不影响父进程!——进程具有独立性!
❓这个地址会是物理地址?💡不会
显然这个地址绝对不是物理地址!所以我们平常在语言层面用的地址,绝对不是物理地址,所以以前用的指针绝对不是地址,其实这个地址叫做虚拟地址or线性地址
故事引入:
香港某个老板非常滴有钱,有10亿美金,他有 4个私生子,每个私生子都并不知道对方的存在,他们都以为自己是独生子。因为他们彼此不知道对方的存在,所以他们在生活和工作上也没有交集,不会有任何互相的影响(这就是独立性的体现)。财阀老板为了维护自己的独立性:
他就对大儿子说:“儿子,你好好学习,以后老爹钱都是你的。”,大儿子一听卧槽真好,高枕无忧,就好好学习,一想到自己以后有钱,就更想学习了。
然后又对二儿子说:“儿子,好好工作,等以后我就把公司给你。”,二儿子一听热泪盈眶,于是就好好工作,等着将来有一天可以继承公司。
后来又对三儿子说:“儿子,你好好干活,等你长大老爹的家产交给你!”,三儿子知道自己以后会继承老爹的所有财产,开心坏了,就努力的干活。
后来又对四儿子说:“儿子,你好好干活,等你长大老爹的家产交给你!”,四儿子知道自己以后会继承老爹的所有财产,开心坏了,就努力的干活。
只要在财阀爹的可承受范围内,孩子要多少钱他都给多少钱,所以三个儿子自然都认为自己有很多钱。财阀老板给他的三个儿子画了一张虚拟的、不存在的大饼,让他们都能努力学习工作干活(这个步骤就是给他们分别建立了进程地址空间)。
画的饼:进程地址空间,10亿美金:内存,老板:操作系统,四个私生子是进程
❓大富翁,要不要把“饼”管理起来呢?
显然需要的,遵循先描述再组织的原则
所以,进程地址空间,就是就是给进程画的大饼
进程地址空间 → 逻辑上抽象的概念 → 让每个进程都认为自己独占系统的所有资源
**概念:**操作系统通过软件的方式,给进程提供一个软件视角,认为自己是独占系统的所有资源(内存)。
区域和页表:
什么叫做区域?我们来拿一张桌子来理解,初中的时候小花和小胖分过 “38线”
三八线的本质就是区域划分!
🔥地址空间本身就是一个线性区域,地址空间是线性结构的!
struct mm_struct {long code_start;long code_end;long init_start;long init_end;long uninit_start;long uninit_end;long heap_start;long heap_end;long stack_start;long stack_end;...
}
如果限定了区域,那么区域之间的数据是什么?
是虚拟地址or线性地址
🔥程序加载到内存,由程序变成进程后,由操作系统给每个进程构建的一个页表结构,就是 页表。
🔥数据和代码真正只能在内存中!
找到地址不是目的,而是手段
回到之前那个问题:
❓为什么他们两个地址相同但是读出来的数据不同呢?
💡如果子进程对数据进行了修改,因为进程具有独立性,子进程的修改不能影响父进程
子进程这里的 物理地址改了,但是虚拟地址没有改
写时拷贝发生在物理地址,虚拟地址没有变
因为进程具有独立性,比如如果此时子进程把变量改了(写入),就会导致父进程识别的问题就出现了父进程和子进程不一的情况,因为进程是具有独立性的,所以我们就要做到互不影响。我们的子进程要进行修改了,影响到父进程怎么办?没关系!操作系统会出手!当我们识别到子进程要修改时,操作系统会重新给子进程开辟一段空间,并且把 100 拷贝下来,重新给进程建立映射关系,所以子进程的页表就不再指向父进程所对应的 100 了,而直接指向新的 100。你在做修改时又把它的值从 100 改成 200 时,我们就出现了 “改的时候永远改的是页表的右侧,左侧不变” 的情况,所以最后你看到了父子进程的虚拟地址一样,但是经过页表映射到了不同的物理内存,所以了你看到了一个是 100 一个是 200,父子进程的数据不同的结果。
我们的操作系统当我们的父子对数据进行修改时,操作系统会给修改的一方重新开辟一块空间,并且把原始数据拷贝到新空间当中,这种行为就是 写时拷贝!
当父子有任何一个进程尝试修改对应变量时,有一个人想修改,就会触发写时拷贝,让他去拷贝新的物理内存,这只需要重新构建也表的映射关系,虚拟地址是不发生任何变化的,所以最终你看的结果是虚拟地址不变,而内容不同。
这个结构也体现了进程具有独立性
pid_t id=fork()
if(){}
else
{}
❓fork在返回的时候,父子都有,return两次,id是不是pid_T类型定义的变量呢?
💡是的,返回的本质就是写入!谁先返回,谁就让OS发生写时拷贝
如果是父进程就返回pid,如果是子进程就返回0
为什么进程地址空间要存在?
❓如果没有地址空间,我们OS是如何工作呢?
💡这里就是害怕野指针的情况,要寻找一个地址因为你的代码错误找到了一个越界地址时写入时会使别人的进程错了而且很不安全,因此有了页表和虚拟空间
🔥这两个存在的意义:1.防止地址随意访问,保护物理内存与其他进程
❓常量字符串不能修改,这是为什么呢?💡因为页表访问的时候是有权限的,权限不能修改
char*str=“hello world”;
*str=‘H’;
🔥先来将另外一个扩充:malloc的本质——
❓向OS申请内存,操作系统立马给你,还是说在你需要的时候给你?
💡1.在你需要的时候给你,OS一般不允许任何的浪费或者不高效
2.申请内存==立马使用呢?不一定等于立马使用
3.在你申请成功之后,和你使用之前就有一段小小的时间窗口,这个空间没有被正常使用,但是别人用不了—-闲置状态
🔥如果有500进程这样的话,这样操作系统就有大块的空间处于这种状态,这种情况叫做缺页中断
❓因为有页表,你关心不关心你申请的空间是在物理空间的哪一块呢?💡不关心,一样的
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/9a221328830cd48b58acfa3cb2dbe653.png)
【Linux进行时】进程地址空间
进程地址空间 例子引入: 我们在讲C语言的时候,老师给大家画过这样的空间布局图,但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …...
![](https://img-blog.csdnimg.cn/img_convert/565de9d561dc5d1ec33fb46d066e024b.png)
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
本文介绍基于Python语言,读取一个文件夹,并将其中每一个子文件夹内符合名称要求的文件加以筛选,并将筛选得到的文件复制到另一个目标文件夹中的方法。 本文的需求是:现在有一个大的文件夹,其中含有多个子文件夹&#x…...
![](https://img-blog.csdnimg.cn/02938b4c658f41128f6b3ae104f26fef.png)
TensorFlow入门(一、环境搭建)
一、下载安装Anaconda 下载地址:http://www.anaconda.comhttp://www.anaconda.com 下载完成后运行exe进行安装 二、下载cuda 下载地址:http://developer.nvidia.com/cuda-downloadshttp://developer.nvidia.com/cuda-downloads 下载完成后运行exe进行安装 安装后winR cmd进…...
![](https://img-blog.csdnimg.cn/34eadac4e6dc4307a171edcb58563371.png)
90、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Hash 相关命令
本次讲解要点: Hash 相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe red…...
![](https://www.ngui.cc/images/no-images.jpg)
我开源了一个加密算法仓库,支持18种算法!登录注册业务可用!
文章目录 仓库地址介绍安装用法SHA512HMACBcryptScryptAESRSAECC 仓库地址 仓库地址:https://github.com/palp1tate/go-crypto-guard 欢迎star和fork! 介绍 此存储库包含用 Go 编写的全面的密码哈希库。该库支持多种哈希算法,它允许可定制…...
![](https://img-blog.csdnimg.cn/img_convert/fcfc4d9ae635392255c2ed229c33ab0e.png)
FPGA设计时序约束二、输入延时与输出延时
目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…...
![](https://img-blog.csdnimg.cn/3ffc499f046544f19edf4a69f60411e0.png#pic_center)
电阻的基础与应用
文章目录 电阻的基础与应用电阻的介绍与分类电阻介绍电阻的分类碳膜/金属膜电阻厚膜/薄膜电阻功能性电阻(光敏/热敏/压敏)特殊电阻(绕线电阻/水泥电阻/铝壳电阻) 电阻的主要厂家与介绍国外厂家VISHAY(威世)KOA(兴亚)Kyocera(京瓷)…...
![](https://www.ngui.cc/images/no-images.jpg)
5.html表格
<table><tr><th>列1标题</th><th>列2标题</th><th>列3标题</th></tr><tr><td>行1列1</td><td>行1列2</td><td>行1列3</td></tr><tr><td>行2列1</td>…...
![](https://img-blog.csdnimg.cn/18fd3e7af62b4a6da379f0fcfa4c73ad.png)
飞桨EasyDL-Mac本地部署离线SDK-Linux集成Python
前言:本文对使用飞桨EasyDL桌面版实现本地部署物体检测做一下说明 一、训练模型 如何使用飞桨EasyDL桌面版这里就不再赘述,直接参照官方文档进行物体检测模型训练。 飞桨EasyDL桌面版-用零代码开发实现物体检测https://ai.baidu.com/ai-doc/EASYDL/Tl2…...
![](https://www.ngui.cc/images/no-images.jpg)
【kubernetes】Kubernetes中的DaemonSet使用
目录 1 为什么需要DaemonSet2 DaemonSet的Yaml的关键字段3 DaemonSet的使用4 一种自行控制Pod更新的方式5 总结 1 为什么需要DaemonSet Deployment可以用于部署无状态的应用,例如系统的接口层或者逻辑层,而多个Pod可以用于负载均衡和容灾。如果有这样一…...
![](https://img-blog.csdnimg.cn/img_convert/b04cca13733e2b92955eb791f7645a14.jpeg#pic_center)
《 新手》web前端(axios)后端(java-springboot)对接简解
文章目录 <font color red>1.何为前后端对接?2.对接中关于http的关键点2.1. 请求方法2.2. 请求参数设置简解: 3.对接中的跨域(CROS)问题**为什么后端处理跨域尽量在业务之前进行?**3.总结 1.何为前后端对接? “前后端对接” 是指前端和后端两个…...
![](https://img-blog.csdnimg.cn/da5db259884c41b49811b5bb76ec376f.png)
第七章 查找 十、散列查找
一、哈希表(散列表) 哈希表的数据元素的关键字与其存储地址直接相关。 二、解决冲突的方法 三、散列表中元素的查找 总共对比了3个关键字,所以查找长度为3. 四、查找效率计算 (1)成功的概率 需要对比一次的关键字为…...
![](https://www.ngui.cc/images/no-images.jpg)
第一章 C语言知识补充
求字节数运算符:sizeof 强制类型转换运算符:(类型) 下标运算符:[ ] 函数调用运算符:( ) 算术移位指令 算术移位指令有:算术左移SAL和算术右移SAR。算术移位指令的功能描述如下:…...
![](https://www.ngui.cc/images/no-images.jpg)
【Book And Paper 】
【paper Interactive Segmentation of Radiance Fields 算法设计: 电子版...
![](https://img-blog.csdnimg.cn/42cfbdfb7ea3483dae12a00e17409fb4.png#pic_center)
计算机竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录 动态规划 13
300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…...
![](https://img-blog.csdnimg.cn/6a8fffae84a14147b2a2738bd152ed62.png)
lv6 嵌入式开发-Flappy bird项目
目录 1 项目功能总结 2 知识储备: 3 项目框图 4 Ncurses库介绍 做Flappy bird项目有什么用? 1. 复习、巩固c语言知识 2. 培养做项目的逻辑思维能力 3. 具备开发简单小游戏的能力 学会了Flappy bird项目,贪吃蛇和推房子两款小游戏也可…...
![](https://www.ngui.cc/images/no-images.jpg)
【Java】方法重写
概述 子类中出现了和父类一模一样的方法 当子类需要父类的功能,而功能主体中,子类有自己独特的内容,就可以通过重写父类中的方法,这样即延续了父类的功能,又定义了自己的特有内容 Override 是一个注解,可以…...
![](https://img-blog.csdnimg.cn/d0d2ba140ea9444597be4b6b3931f925.png#pic_center)
艺术表现形式
abstract expressionism 抽象表现主义 20世纪中期的一种艺术运动,包括多种风格和技巧,特别强调艺术家通过非传统和通常非具象的手段表达态度和情感的自由。 抽象表现主义用有力的笔触和滴落的颜料来表达情感和自发性。 简单地结合“abstract expression…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP 反序列化漏洞:手写序列化文本
文章目录 参考环境序列化文本Scalar Type整数浮点数布尔值字符串 Compound Type数组数据结构序列化文本 对象数据结构序列化文本 Special TypeNULL数据结构序列化文本 手写序列化文本过程中的注意事项个数描述须于现实相符序列化文本前缀的大小写变化符号公共属性 参考 项目描…...
![](https://img-blog.csdnimg.cn/0e3b6bbbee2348a9bcf190695c3bb9d3.png)
react.js在visual code 下的hello World
想学习reacr.js ,就开始做一个hello world。 我的环境是visual code ,所以我找这个环境下的例子。参照: https://code.visualstudio.com/docs/nodejs/reactjs-tutorial 要学习react.js ,还得先安装node.js,我在visual …...
![](https://img-blog.csdnimg.cn/b5081ccda01d4f679770fab6d051f74d.png#pic_center)
CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果
上一篇,我们介绍了动画编辑器相关功能面板说明,感兴趣的朋友可以前往阅读: CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明。 熟悉了动画编辑器的基础操作,那么再使用动…...
![](https://img-blog.csdnimg.cn/08841096280d4d64bbf560096c9e3249.gif)
第1篇 目标检测概述 —(3)YOLO系列算法
前言:Hello大家好,我是小哥谈。YOLO(You Only Look Once)系列算法是一种目标检测算法,主要用于实时物体检测。相较于传统的目标检测算法,YOLO具有更快的检测速度和更高的准确率。YOLO系列算法的核心思想是将…...
![](https://img-blog.csdnimg.cn/0f63d729b1894679a65afb023a0b07ec.png)
SpringBoot整合数据库连接
JDBC 1、SQL准备 DROP TABLE IF EXISTS t_book;CREATE TABLE t_book (book_id int(11) NOT NULL,book_name varchar(255) DEFAULT NULL,price int(11) DEFAULT NULL,stock int(11) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;/*Data for the table t_book */insert…...
![](https://img-blog.csdnimg.cn/a5b09608bef64a07ade8612a79f68de3.png)
uni-app:canvas-绘制图形4(获取画布宽高,根据画布宽高进行图形绘制)
效果 代码 var width ; var height ; const query uni.createSelectorQuery(); //获取宽度 query.select(#firstCanvas).fields({ size: true }, (res) > { width res.width; height res.height; }).exec(); console.log(宽度width); console.log(高…...
![](https://www.ngui.cc/images/no-images.jpg)
EM@坐标@函数@图象的对称和翻折变换
文章目录 abstract翻折变换关于坐标轴翻折 f ( − x ) , f ( x ) f(-x),f(x) f(−x),f(x) − f ( x ) , f ( x ) -f(x),f(x) −f(x),f(x) 偶函数奇函数小结 其他翻折变换关于 y x y\pm x yx对称的直角坐标 关于 x u 对称 关于xu对称 关于xu对称的函数关于 y v yv yv对称的两…...
![](https://www.ngui.cc/images/no-images.jpg)
Python之json模块
JSON (JavaScript Object Notation),由 RFC 7159 (它取代了 RFC 4627) 和 ECMA-404 指定,是一个受 JavaScript 的对象字面值句法启发的轻量级数据交换格式。JSON独立于编程语言的文本格式来存储和表示数据,现在大部分的数据传输基本使用的都是…...
![](https://img-blog.csdnimg.cn/1744c9e8d15e4cae919d95b185aa2ee5.png)
机器学习---BP算法
1. 多级网络 层号确定层的高低:层号较小者,层次较低,层号较大者,层次较高。 输入层:被记作第0层。该层负责接收来自网络外部的信息。 第j层:第j-1层的直接后继层(j>0)ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/2551d0ea8b3e09c224de93a9723701d8.jpeg)
继苹果、联发科后,传高通下一代5G芯片将由台积电以3纳米代工
台积电3纳米又有重量级客户加入。市场传出,继苹果、联发科之后,手机芯片大厂高通下一代5G旗舰芯片也将交由台积电以3纳米生产,最快将于10月下旬发表,成为台积电3纳米第三家客户。 针对相关传闻,至昨日(25日…...
![](https://img-blog.csdnimg.cn/b210585d77e94160bb9a18f9fd0b6432.png)
【自定义类型】--- 位段、枚举、联合
💓博客主页:江池俊的博客⏩收录专栏:C语言进阶之路👉专栏推荐:✅C语言初阶之路 ✅数据结构探索💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…...
![](/images/no-images.jpg)
简述网站的建设步骤/百度搜索风云榜总榜
摘自: http://www.ffmpeg.com.cn/本程序实现转码一个普通视频文件为视频mpeg4,音频mp3的功能 #include <avcodec.h> #include <avformat.h> #include <stdio.h> #include <avutil.h> #include <stdio.h> #include <stdlib.h> …...
![](https://pic002.cnblogs.com/images/2012/214741/2012031723204922.png)
海外网文/天津百度seo推广
5天不再惧怕多线程——第四天 信号量 今天整理“信号量”的相关知识,其实想想也蛮有趣的,锁,互斥,信号量都可以实现线程同步,在framework里面主要有三种。 <1>:ManualResetEvent <2>࿱…...
![](https://img-blog.csdnimg.cn/img_convert/ec3a5eaf9d1f4b32e4c7ca260f7ffa17.png)
文山做网站的地方/茶叶营销策划方案
静态常量使用全大写下划线的方式, 例: public static final boolean IS_RELESAE true; Kotlin使用的布局中的控件id必须使用小驼峰方式, 例: android:id"id/tvLogin" 推荐: 文件/资源命名时采用 模块类型 的方式, 以便迅速查找相关内容, 例如登录页面…...
![](https://img-blog.csdnimg.cn/img_convert/e77c24c64088c7bfb8340464c594507f.gif)
电商网站建设功能需求/浏览器打开网站
点击上方“学士科技”,选择“设为星标”资讯、技术干货第一时间送达!01.C语言基础-数据类型02.C语言中算法的基本特性和表达方式03.C语言中的输入输出函数04.C语言基础-循环控制语句05.C语言基础-条件控制语句06.C语言基础-控制语句示例07.C语言数组- 一…...
![](https://img-blog.csdnimg.cn/img_convert/04eb15cfcb4178644c9dd7b4837cc090.png)
wordpress 网易/打开百度网站
Tp6 数据库管理工具,数据库内容的搬运工支持MySQL数据库,可视化配置直接生成前后台CRUD页面减少重复劳动,可以直接作为后台页面使用。前端页面技术基于 iszsw/surface支持多表关联、一对一、一对多、远程一对多支持页面自定义按钮,…...
![](https://www.oschina.net/img/hot3.png)
wordpress首页热门排行显示/营业推广策略有哪些
为什么80%的码农都做不了架构师?>>> 对象之间的通信: 有时候,一个大的任务是需要很多个不同的对象协力来完成,这时某个对象会需要另外一个对象的职责功能来协助。 创建对象--->调用对象的方法-->返回结果。这个…...