86.Linux系统下复制进程fork(逻辑地址和物理地址)

目录

fork复制进程

逻辑地址和物理地址 


fork复制进程

         fork 是一个系统调用,在 Linux/Unix 系统中用于创建一个新的进程,新进程称为子进程。子进程是父进程的副本,它从父进程那里继承了大部分属性和资源,包括代码、数据、打开的文件描述符等。

fork 的基本语法如下:

#include <unistd.h>pid_t fork(void);

fork是复制进程,要把一个已有的进程复制一份,在系统中就多出1个进程,它是怎么做的?
        第一步,先将父进程(原来的这个进程)的PCB先复制1份出来,然后给它申请一个pid,唯一标识这个子进程。原来父进程的pid是5255,子进程是5256,然后接下来把父进程的实体复制一份给子进程,这样,系统中就多出这么一个子进程了。
        我们执行完fork之后,才有的新的PCB节点和子进程的实体子进程执行的代码和父进程是一模一样的,父进程做什么,子进程就做什么,唯一不同的是fork的返回值不同。
        在父进程中,fork的返回值是子进程的pid值,是一个大于0的值,在子进程中,这个fork的返回值是固定的,为0,所以说,哪个进程的fork的返回值是0,这个进程就是子进程,因为fork之后,虽然父子进程执行的代码是同一套,但是有时候我们想让父进程和子进程做不同的事情,我们就写个判断“
if(pid==0)(说明子进程在执行这部分的代码)
else(也就是pid大于0 )(我们让父进程执行这部分的代码)

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>int main(){int n = 0;char *s = NULL;__pid_t pid = fork();if(pid==-1){exit(0);}if(pid==0){s = "child";n = 3;}else{s = "parent";n = 7;}for (int i = 0; i < n;i++){printf("s=%s,n=%d,&n=%p,pid=%d,ppid=%d\n", s,n,&n,getpid(),getppid());sleep(1);}exit(0);
}

父子进程用的不是同一块儿空间,物理地址变了,逻辑地址没变

  1. 父子进程用的不是同一块儿空间: 在linux操作系统中,当你使用 fork 创建一个子进程时,操作系统会为子进程分配一块与父进程独立的内存空间。这意味着父进程和子进程不会共享相同的物理内存,它们拥有各自独立的内存副本。

  2. 物理地址变了,逻辑地址没变: 物理地址是计算机内存中存储数据的实际位置,它可能随着进程的内存分配而改变。逻辑地址是程序中使用的地址,通常由操作系统翻译为物理地址。在父子进程的情况下,子进程的物理地址通常会与父进程的不同,因为它们拥有各自的内存空间。然而,逻辑地址通常保持不变,因为进程的代码和数据引用的地址仍然相对于它们自己的内存空间。

这种机制使得父子进程能够独立运行,而不会互相干扰彼此的内存。虽然它们在逻辑地址上看起来好像共享相同的内存,但实际上操作系统在背后进行了地址映射,使它们访问的是各自独立的物理内存空间。这有助于确保进程之间的隔离和安全性。

 

逻辑地址和物理地址 

  1. 逻辑地址: 也称为虚拟地址,是程序中使用的地址。它是相对于进程的内存空间而言的,通常是一个连续的整数地址。逻辑地址是程序员编写代码时使用的地址,但它不直接对应于实际的物理内存位置。逻辑地址提供了一种抽象层,使程序员能够编写不受物理内存布局限制的代码。

  2. 物理地址: 物理地址是计算机内存芯片上的实际存储位置。它对应于计算机的物理硬件,包括 RAM(随机存储器)等。物理地址是实际的存储位置,用于在内存芯片上读取和写入数据。计算机硬件通过物理地址来定位存储器中的特定数据。

        操作系统的内存管理单元负责将逻辑地址翻译为物理地址。这个过程被称为地址映射。操作系统使用页表等数据结构来管理逻辑地址到物理地址的映射,以便确保程序可以访问正确的物理内存位置。逻辑地址和物理地址之间的映射关系是通过操作系统在运行时动态管理的。

        总之,逻辑地址是程序员在编写代码时使用的虚拟地址,而物理地址是实际存储器中的实际位置。操作系统负责将逻辑地址映射到相应的物理地址,从而实现内存管理和进程隔离。这种抽象层允许操作系统更有效地管理内存,同时保护不同进程之间的隔离。

写在最后:以上就是本篇文章的内容了,感谢你的阅读。如果感到有所收获的话可以给博主点一个赞哦。如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~ 

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

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

相关文章

VMware 虚拟机安装 CentOS 7

CentOS 7 1. 下载CentOS 7 iso镜像 Index of /centos/7.9.2009/isos/x86_64/ 2. Vmware安装CentOS 7 安装教程&#xff1a; 超详细VMware CentOS7(最小安装)安装教程_虚拟机最小化安装-CSDN博客 【精选】VMware 安装 Centos7 详细过程_vm虚拟机安装centos7_expectation Fu…

网络原理---封装和分用

文章目录 什么是封装和分用&#xff1f;封装应用层传输层网络层数据链路层物理层 分用物理层数据链路层网络层传输层应用层 什么是封装和分用&#xff1f; 我们前面讲过协议会分层&#xff0c;每一层都有各自的功能。而在数据传输的过程中&#xff0c;得按照顺序把每一层协议都…

【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…

音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法

一、介绍 音乐推荐与管理系统。本系统采用Python作为主要开发语言&#xff0c;前端使用HTML、CSS、BootStrap等技术搭建界面平台&#xff0c;后端使用Django框架处理请求&#xff0c;并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协…

ARMday1

1、计算机的组成 输入设备-输出设备-运算器-控制器-存储器 输入设备&#xff1a;键盘、鼠标、手柄、扫描仪 输出设备&#xff1a;显示屏、打印机、音响 存储器&#xff1a;存放数据以及指令、是实现“程序存储控制”的基础、外存、内存、cache、寄存器 控制器&#xff08;…

django安装数据库

使用pip安装django pip3 install django注意我使用的是python3所以用pip3安装&#xff0c;如需安装指定版本 django ..* 检测是否安装成功,不报错&#xff0c;则安装成功 # python3 # import django下边这是报错的 django迁移数据库 再mysql中简历数据库 CREATE DATABA…

chinese-stable-diffusion中文场景文生图prompt测评集合

腾讯混元大模型文生图操作指南.dochttps://mp.weixin.qq.com/s/u0AGtpwm_LmgnDY7OQhKGg腾讯混元大模型再进化&#xff0c;文生图能力重磅上线&#xff0c;这里是一手实测腾讯混元的文生图在人像真实感、场景真实感上有比较明显的优势&#xff0c;同时&#xff0c;在中国风景、动…

【PyQt学习篇 · ⑪】:QPushButton和QCommandLinkButton的使用

文章目录 构造函数菜单设置扁平化默认处理右键菜单QCommandLinkButton的使用 构造函数 QPushButton的构造函数如下&#xff1a; """QPushButton(parent: Optional[QWidget] None)QPushButton(text: Optional[str], parent: Optional[QWidget] None)QPushButt…

【QT】 Qt自定义ui控件

在使用Qt的ui设计时&#xff0c;Qt为我们提供了标准的窗口控件&#xff0c;但是在很多复杂工程中&#xff0c;标准窗口控件并不能满足所有的需求&#xff0c;这时就需要我们自定义控件。我们自定义的类既可以作为独立的窗口显示&#xff0c;又可以作为一个控件显示。 我们要实现…

Flink SQL DataGen Connector 示例

Flink SQL DataGen Connector 示例 1、概述 使用 Flink SQL DataGen Connector&#xff0c;可以快速地生成符合规则的测试数据&#xff0c;可以在不依赖真实数据的情况下进行开发和测试。 2、使用示例 创建一个名为 “users” 的表&#xff0c;包含 6 个字段&#xff1a;id…

【Leetcode】349. 两个数组的交集

题意 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 说明&#xff1a; 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 思路 这道题目&#xff0c;主要要学会使用一种哈希数据结构&#xff1a;unordered_set&#xff0c;这个数据结构可以解决…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

前端框架Vue学习 ——(七)Vue路由(Vue Router)

文章目录 Vue路由使用场景Vue Router 介绍Vue Router 使用 Vue路由使用场景 使用场景&#xff1a;如下图&#xff0c;点击部门管理的时候显示部门管理的组件&#xff0c;员工管理的时候显示员工管理的组件。 前端路由&#xff1a;指的是 URL 中的 hash(#号)与组件之间的对应关…

软件开发必备神器!一文读懂10款热门看板工具推荐!

看板&#xff08;Kanban&#xff09;是一种流行的框架&#xff0c;用于实施敏捷和DevOps软件开发。它要求实时沟通每个人的能力&#xff0c;并全面透明地展示正在进行的工作。工作项目在看板上以可视化方式表示&#xff0c;使项目经理和所有团队成员可以随时查看每个工作的状态…

“网站不安全”该如何解决

当我们的网站被客户访问的时候&#xff0c;经常会出现提示不安全的情况&#xff0c;导致客户的不信任&#xff0c;从而出现客户流失的现象&#xff0c;这种情况我们应该如何解决呢&#xff1f; 首先&#xff0c;我们要确定网站会出现不安全的原因&#xff0c;一般来说&#xff…

vue项目中订单完成提交按钮动画

1. 动画1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Order</title><!-- <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/re…

【数据结构】单向链表的增删查改以及指定pos位置的插入删除

目录 单向链表的概念及结构 尾插 头插 尾删 ​编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念&#xff1a;链表是一种 物理存储结构上非连续 、非顺序的存储结构&#xff0c;数据元素的 逻辑顺序 是…

[vmware]vmware虚拟机压缩空间清理空间

vmware中的ubuntu使用如果拷贝文件进去在删除&#xff0c;vmare镜像文件并不会减少日积月累会不断是的真实物理磁盘空间大幅度减少&#xff0c;比如我以前windows操作系统本来只有30GB最后居然占道硬盘200GB&#xff0c;清理方法有2种。 第一种&#xff1a;vmware界面操作 第二…

掌握视频封面提取与剪辑技巧,提升视频品质

在当今的数字媒体时代&#xff0c;视频已成为人们获取信息、娱乐、社交等多种需求的重要方式。一个高质量的视频封面和剪辑技巧可以大大提高视频的吸引力和品质&#xff0c;因此&#xff0c;掌握视频封面提取与剪辑技巧对于视频制作者来说至关重要。那么现在一起来看看云炫AI智…