首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序进程

昨天复习《深入理解计算机系统》,参考了小土刀的博客,看到了进程程序在内存中是如何组织的,虽然这张图看了很多遍但是总感觉有疑问。努力解决,参考《深入理解计算机系统》。 ?...关于程序进程区别的概念 程序是指令和数据的集合,可以作为目标文件保存在磁盘中,或者作为段存放在内存地址空间中。 进程程序运行的一个具体的实例,程序总是运行在某个进程的上下文中。...过程简单介绍 shell 执行一个程序时,父 shell 进程生成一个子进程,他是父进程的一个复制。子进程通过 execve 系统调用加载器。...最后,加载器跳转到 _start 地址,调用程序的 main 函数。 通过上面的描述可以理解到为什么 “程序总是运行在某个进程的上下文中”。...大胆的概括 可执行文件加载入内存(可执行文件在内存中的内存映像顺序存储) 开辟进程进行虚拟内存地址的重定向(程序可以说约等于进程) 执行 了解了可执行文件的存储格式,加载一个可执行文件到初始化一个进程

47230
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    \n"); return 1; } } return 0; } 运行结果: 4.进程程序替换 4.1 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支...),子进程往往要调用一种exec函数以执行另一个程序。...当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。...shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束 然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程结束。...Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    13710

    Linux进程控制【进程程序替换】

    ---- 前言 子进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 子进程 执行其他任务,可以把当前 子进程程序替换为目标程序,此时需要用到 Linux...进程程序替换相关知识 子进程 替换为其他程序后,无法再执行原有程序,但 进程 始终为同一个 火爆全网的 ChatGTP 能否替换 “人类” ?...,让子进程完成对应指令 子进程实现对应指令依赖于程序替换 总结: 程序替换的目的是让子进程帮我们执行特定任务 就像汽车拥有各种各样的轮胎,如越野时需要换上路面兼容性更好、更耐造的越野胎;日常家用时,舒适性更好...(1); } return 0; } 可以看到在进行程序替换后,子进程和待替换程序为同一个进程 这就表明程序替换并不是进程替换 因为是同一个进程,所以对父进程没有任何影响,体现了进程间的独立性...在子进程执行程序替换前,子进程和父进程共享一份只读区域的数据,但因为发生了程序替换,触发 写时拷贝 机制,令子进程读取另一块区域的数据 写时拷贝 在只读数据区也能触发,因为不能影响到父进程 ----

    23620

    【Linux】进程程序替换

    Linux进程程序替换也是Linux进程中非常重要的部分。我们将从什么是Linux进程程序替换,为什么要有Linux进程程序替换,以及如何实现Linux进程程序替换(原理)三个方面展开讲解。...想要弄明白为什么要有进程程序替换,我们首先要知道父进程创建子进程的目的是什么?想要子进程完成什么样的任务? 想让子进程执行父进程代码的一部分。...让子进程想办法,加载磁盘上的指定程序,然后执行新程序对应的代码和数据。...(这就是我们所讲的进程程序替换) 一.什么是进程程序替换 进程程序替换顾名思义,就是将其他程序替换过来继续执行,主要是通过exec* 这类函数来帮助我们替换,直接来学这类函数。...2.多进程 在理解单进程程序替换的基础上,多进程程序替换就容易理解了。 我们先要达成一个共识:写时拷贝这种机制,不仅仅是对数据,对代码也有写时拷贝策略。

    9010

    使用VS2010开发Qt程序的一点经验

    导读      相比于Qt Creator,我更喜欢用VS2010来进行开发。虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手。...The system cannot find the path specified       当我从用VS2010打开从网上下载下来的源代码工程进行编译的时候,输出栏中出现了一系列如下的错误提示: ?...我的开发环境为:VS2010 32位旗舰版,Windows 7 64位,Qt库版本为5.2.1。第一次遇到这样的问题,还真的莫名其妙。于是上网搜了搜,发现了一些苗头。...重新编译工程,此时编译过程顺利结束,生成了期待中的可执行程序。这仅仅是lib文件的设置,源代码的修改其实是另一大难题。尤其是QtGui在Qt 5.x中已经消失,因此需要大面积修改文件内容。

    1.5K80

    进程控制第二弹(进程程序替换)

    基本原理 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。...调用exec并不创建新进程,所以调用exec前后该进程的id并未改变 我们知道,进程=内核数据结构+代码数据 程序替换的本质是将当前进程的代码和数据进行替换。 替换的时候,会不会创建新的进程?...只不过是拿老程序的壳子执行新程序的代码。 站在被替换进程的角度:本质上是这个程序被加载到内存。使用exec系列函数加载,exec系列函数类似一种Linux上的加载函数。...让子进程执行一个全新的程序 首先父进程和子进程的PCB、虚拟内存构建好后,通过页表映射到物理内存中。...所以重新开辟内存,将ls代码加载到物理内存,修改子进程的映射关系。至此,只要程序替换成功,彻底将子进程和父进程分开了。

    7710

    程序进程、线程的区别

    程序程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。进程进程是操作系统进行任务调度和资源分配的基本单位。...系统运行一个程序即是一个进程从创建,运行到消亡的过程,也就是程序的一次执行过程。简单来说,一个进程就是一个计算机中运行的程序的实例。...线程: 线程是操作系统中的最小执行单元,负责当前进程程序的执行。进程和线程的区别:根本差别:进程是操作系统任务调度和资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。...资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小...所以多进程要比多线程健壮。执行过程:每个独立的进程程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。

    15840

    Linux从程序进程

    计算机如何执行进程呢?这是计算机运行的核心问题。即使已经编写好程序,但程序是死的。只有活的进程才能产出。我们已经从Linux进程基础中了解了进程。现在我们看一下从程序进程的漫漫征程。...一段程序 下面是一个简单的C程序,假设该程序已经编译好,生成可执行文件vamei.exe。...不用太过在意这个程序的具体功能。要点是这个程序的运行过程。下图为该程序的运行过程,以及各个变量的作用范围: ? 运行流程 进程空间 为了进一步了解上面程序的运行,我们还需要知道,进程如何使用内存。...当程序文件运行为进程时,进程在内存中获得空间。这个空间是进程自己的小屋子。 每个进程空间按照如下方式分为不同区域: ? 内存空间 Text区域用来储存指令(instruction),说明每一步的操作。...程序调用exec的时候,进程清空自身内存空间的text, global data, heap和stack,并根据新的程序文件重建text, global data, heap和stack (此时heap

    1.5K90

    【Linux】进程程序替换

    程序替换 1.创建子进程的目的是什么? 目标:为了让子进程帮父进程执行特定的任务 具体做法:1....,父进程通过if判断分流让子进程去跑了 2.创建一个子进程不执行父进程的代码,而是让子进程在磁盘当中执行全新的程序,这种操作称之为进程程序替换 2.了解程序是如何进行替换的 程序替换函数 execl...程序替换就是让一个进程去执行另一个在磁盘中的程序,让一个进程把一个新的程序运行起来 3....,用当前进程的数据替换老进程的数据段 ---- 站在进程的角度 进程程序替换有没有创建新的进程呢?...没有,只是将新的程序加载到当前进程的代码段和数据段,用CPU去调度当前进程就可以跑起来了 ---- 站在程序的角度 程序被加载了内存中,就可以称程序替换的接口(execl) 为加载器 当创建进程的时候,

    2K30

    【Linux】详解进程程序替换

    一、替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。...当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。...二、子进程进行程序替换 通过子进程进行程序替换可以让子进程帮我们去做一部分工作,而且子进程发生程序替换不会影响父进程执行,因为替换时代码和数据会发生写时拷贝。...\n"); return 0; } 2.1、让子进程执行我自己的程序    我自己写了一个C++程序,向替换子进程帮我跑一下: //C++程序 #include using...\n"); return 0; }  执行结果如下,证明了我们不仅仅可以替换子进程执行系统程序,还可以替换子进程执行我们的程序

    7610
    领券