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

news2024/11/25 12:51:36

目录

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.coloradmin.cn/o/1178077.html

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

相关文章

【逗老师的无线电】Debian Linux手工编译安装MMDVM

看我干了啥&#xff0c;在Vmware里面装了一个Debian Linux并且运行了MMDVMHost&#xff0c;来支持业余无线电通联 开始之前先举个手&#xff0c;有多少朋友能分清MMDVM和Pi-Star关系的&#xff1f; MMDVM、Pi-Star和树莓派的关系 咱们先科普一下这个小知识点。各位HAM们应…

Python基础(第五期): python数据容器(序列) 列表 集合 元素 字符串 字典 序列遍历操作

python基础专栏 python基础&#xff08;第五期&#xff09; 文章目录 python基础&#xff08;第五期&#xff09;数据容器一、列表1、列表的定义2、列表的下标索引 3、列表的(添加)方法3.1 列表的查询方法3.2 修改特定下标索引的值3.3 列表指定位置插入元素3.3 列表指定元素的追…

自动驾驶高效预训练--降低落地成本的新思路(AD-PT)

自动驾驶高效预训练--降低落地成本的新思路 1. 之前的方法2. 主要工作——面向自动驾驶的点云预训练2.1. 数据准备 出发点&#xff1a;通过预训练的方式&#xff0c;可以利用大量无标注数据进一步提升3D检测 https://arxiv.org/pdf/2306.00612.pdf 1. 之前的方法 1.基于对比学…

setTimeout和setImmediate以及process.nextTick的区别?

目录 前言 setTimeout 特性和用法 setImmediate 特性和用法 process.nextTick 特性和用法 区别和示例 总结 在Node.js中&#xff0c;setTimeout、setImmediate和process.nextTick是用于调度异步操作的三种不同机制。它们之间的区别在于事件循环中的执行顺序和优先级。…

django安装数据库

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

COOHOM通过采用亚马逊云科“专库专用”的方式,为云原生的构建提供稳定的数据支撑

全球化浪潮下&#xff0c;面对全球化业务发展带来的新需求与新挑战&#xff0c;越来越多的企业开启了云原生构建旅程&#xff0c;以推动业务系统快速迭代&#xff0c;为国际业务的拓展打下坚实的基础。COOHOM是杭州群核信息技术有限公司旗下的国际化品牌。为全球企业和个人提供…

au怎么把音乐和人声单独分离出来?分享最简单的方法!

把音乐和人声单独分离&#xff0c;对于音频处理和后期制作来说&#xff0c;可以方便地对人声或音乐进行单独的处理和编辑&#xff0c;以达到更好的效果。下面介绍了怎么把利用AU音乐和人声单独分离出来的详细步骤。 一、AU 1、把自己需要处理的那首歌copy到桌面&#xff0c;再…

npm install:sill idealTree buildDeps

执行npm install&#xff0c;卡在 sill idealTree buildDeps PS D:\workspace-groovy\attendance-india-web> npm install -g cnpm --registryhttps://registry.npm.taobao.org [..................] / idealTree:node_global: sill idealTree buildDeps[.................…

BUUCTF 隐藏的钥匙 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 路飞一行人千辛万苦来到了伟大航道的终点&#xff0c;找到了传说中的One piece&#xff0c;但是需要钥匙才能打开One Piece大门&#xff0c;钥匙就隐藏在下面的图片中&#xff0c;聪明的你能帮路飞拿到钥匙&#xff…

视频编辑软件Corel VideoStudio 会声会影2024中文剪辑使用教程

会声会影&#xff08;Corel VideoStudio&#xff09;2024为加拿大Corel公司发布的一款功能丰富的视频编辑软件。会声会影2023简单易用&#xff0c;具有史无前例的强大功能&#xff0c;拖放式标题、转场、覆叠和滤镜&#xff0c;色彩分级、动态分屏视频和新增强的遮罩创建器&…

​软考-高级-信息系统项目管理师教程 第四版【第15章-项目风险管理-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第15章-项目风险管理-思维导图】 课本里章节里所有蓝色字体的思维导图

多线程JUC 第2季 多线程的原子性

一 多线程原子性 1.1 基本数据类型原子 atomicInteger&#xff0c; atomicLong&#xff0c;atomicBoolean 代码 package com.ljf.thread.atomic;import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger;class MyNumber {AtomicInt…

YoloV5训练V3Det数据集实战

摘要 V3Det&#xff1a;一个庞大的词汇视觉检测数据集&#xff0c;在大量真实世界图像上具有精确注释的边界框&#xff0c;其包含13029个类别中的245k个图像&#xff08;比LVIS大10倍&#xff09;&#xff0c;数据集已经开源&#xff01; 图片的数量比COCO多一些&#xff0c;…

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

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

哪一波最容易亏钱,昂首资本这样讲

有交易者咨询anzo capital昂首资本&#xff0c;按照波浪理论最容易亏钱是在第几波&#xff0c;通过调查得知80%的错误发生在第四波。所以对哪一波最容易亏钱&#xff0c;很有可能就是第四波。当然了如果能准确的判断第四波时&#xff0c;也可能获得相当丰厚的利润。 第四波通…

8 mysql中的索引2

一、索引的种类 1、 B树索引 1.**每个索引就是一颗B树**&#xff0c;二级索引不包含行记录的全部数据 2.叶子节点除了包含键值以外&#xff0c;每个叶子节点中的索引行中还包含了一个书签( bookmark) 3.B平衡树是一颗查找树&#xff0c;B树的叶子节点用来放数据的,并且所有叶…

仿mudou库one thread one loop式并发服务器

目录 1.实现目标 2.HTTP服务器 实现高性能服务器-Reactor模型 模块划分 SERVER模块&#xff1a; HTTP协议模块&#xff1a; 3.项目中的子功能 秒级定时任务实现 时间轮实现 正则库的简单使用 通⽤类型any类型的实现 4.SERVER服务器实现 日志宏的封装 缓冲区Buffer…

软件设计不是CRUD(4):耦合度的强弱(上)

在讨论如何稳定系统内各模块的分层设计前&#xff0c; 本文先介绍一下目前判断各模块间耦合度强弱的度量方式。这些度量方式&#xff0c;在实际工作中读者应该都涉及过&#xff0c;只是可能没有去做详细的划分归类。 1、模块间耦合强度度量 模块间的耦合强度分为以下几种&…

小仙女必备,1分钟就能做出精美的电子相册

不知道大家有没有这样的困惑&#xff0c;手机里的照片太多&#xff0c;长久以来很多照片都容易被忘记。这个时候我们就可以将照片制作成电子相册&#xff0c;方便我们随时回味那些照片里的故事。如何制作呢&#xff1f; 制作电子相册只需要一个简单实用的制作工具就可以轻松完成…

linux硬盘挂载(linux 修改某个磁盘挂载到新目录\lvm扩容)

文章目录 一、什么是硬盘挂载二、linux 修改某个磁盘挂载到新目录三、Esxi下扩容硬盘1. 判断一个已有的文件系统是否使用了LVM(逻辑卷管理)2. 原本文件系统没有使用lvm&#xff0c;还可以lvm扩容吗&#xff1f;3. 原有文件系统使用lvm场景下扩容(lvm扩容)了解LVMEsxi LVM扩容步…