进程

一、基本概念

  • 进程:是程序动态执行过程,包括创建、调度、消亡
  • 程序:存放在外存的一段数据的集合

二、进程创建

(一)进程空间分布

  1. 每个进程运行起来后,操作系统开辟0-4G的虚拟空间
  2. 进程空间:用户空间+内核空间(不允许用户访问)
  3. 用户空间:文本段(文本区)+数据段(数据区)+系统数据段(堆区、栈区)
  4. 文本段:存放代码和指令
  5. 数据段:字符串常量、已初始化全局变量/静态变量,未初始化全区变量/静态变量
  6. 数据区存放数据特点:未初始化值为0、编译时开辟空间、程序结束回收空间。
  7. 系统数据段:堆区(malloc空间)、栈区(局部变量、函数运行)
  8. 堆区存放数据特点:malloc申请堆区空间、free释放堆区空间、注意避免内存泄漏
  9. 栈区存放数据特点:未经初始化值为随机值,执行到变量定义开辟内存空间,超过变量作用  域回收变量空间

(二)虚拟地址和物理地址

  1. 虚拟地址:所有能被用户看到的地址均为虚拟地址,表示用户可以寻址的范围
  2. 物理地址:内存存放数据对应的实际硬件物理地址
  3. MMU:虚拟地址与物理地址之间的映射由内存单元(MMU)完成

(三)多进程存储

        1.存储方式

                1.1:多个进程空间在操作系统中存储时,空间是独立的(物理地址时独立的)

                1.2:多个进程在操作系统中共用一个虚拟内存空间(虚拟地址是共享的)

(四)进程的调度

        1.常见的进程调度算法

                1.1先来先执行,后来后执行

                1.2高优先级调度算法

                1.3时间片轮转调度算法

                1.4多级队列调度算法

                1.5负载均衡调度算法

        2.进程调度本质

                2.1宏观并行,微观串行        

                2.2宏观分析:一个CPU同时执行多个进程任务

                2.3微观分析:一个CPU在多个进程任务中高速切换保障多任务执行

(五)进程相关的命令

        1.top

        2.ps -ef

        3.ps-aux

        4../a.out &:后台执行进程(a.out)任务

        5.fg 编号(通过jobs查看):后台执行的任务放到前台执行

        6.jobs:查看终端下所有后台进程任务

        7.nice/renice

        8.kill/killall

(六)进程的状态

进程状态标识含义
就绪态/运行态R进程位于CPU任务调度的队列中
可唤醒等待态S

等待某个资源的来,资源到来后被唤醒加入调度队列

等待过程可以被打断

不可唤醒等待态D

等待某个资源的来,资源到来后被唤醒加入调度队列

等待过程可以被打断

停止态T用户人为让进程任务暂停等待
僵尸态Z进程代码运行结束,空间尚未被回收
结束态X进程代码运行结束,空间被回收

三、进程相关函数接口

        1.fork

注意:

  • 子进程拷贝父进程文本段、数据段、系统数据段
  • 父进程与子进程空间独立,同一份代码中的变量和数据都会在父子进程中各有一份,父子进程修改自己的空间数据不会影响对方的空间
  • 进程的PID不一样
  • fork的返回值不一样,父进程返回子进程的PID,子进程返回0
  • PID:父进程一定是>0的

        2.getpid 和getppid

        3.exit与_exit

        注意

  • 在主函数中调用exit和return功能保持一致
  • return在函数内部将结束该函数
  • exit在函数内部会将进程结束
  • exit会在结束前刷新缓存区
  • _exit不会刷新缓存区

        4.进程回收

                4.1wait和waitpid

注意:

  • wait具有阻塞等待功能,等到有子进程结束才会回收子进程继续向下执行
  • wait可以实现父子进程任务的同步
  • waitpid可以非阻塞回收子进程空间
  • waitpid可以回收指定子进程空间

        

四、进程消亡

(一)孤儿进程:父进程先结束,子进程会成为孤儿进程,被init进程收养

(二)僵尸进程

        1.是每个进程结束必然经历的阶段

        2.产生原因:子进程结束后,父进程没有回收子进程空间,导致进程执行结束,空间依然被占用的状态

        3.如何吧面产生僵尸进程?

  •         父进程先结束,子进程成为孤儿进程,孤儿进程被init收养,子进程在结束,init进程回收进程空间
  • 子进程结束,父进程回收子进程空间

五、exec函数族

        1.exec函数族

  • 利用进程空间执行另外一份代码
  • exec常用搭配fork使用,fork负责创建新的子进程,exec负责让子进程执行自己的代码

        2.主函数传参

        3.system函数

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

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

相关文章

Mybatis学习笔记(五)

分页插件与性能优化 分页插件配置 简要描述:MybatisPlus分页插件是基于物理分页实现的高性能分页解决方案,支持多种数据库的分页语法,能够自动识别数据库类型并生成对应的分页SQL。 核心概念: 物理分页:直接在SQL层面进…

企业可商用的conda:「Miniforge」+「conda-forge」

文章目录一、彻底卸载现有 Anaconda/Miniconda二、安装 Miniforge(推荐)macOS/Linux检查Windows检查三、将通道固定为 conda-forge(严格优先)四、验证是否仍引用 Anaconda 源五、常见问题(FAQ)六、参考命令…

Flutter ExpansionPanel组件(可收缩的列表)

可以展开或者收缩的面板组件,收缩面板组件效果由ExpansionPanelList组件和ExpansionPanel组件共同完成。 ExpansionPanelList属性说明属性说明children子元素expansionCallback设置回调事件ExpansionPanel属性说明headerBuilder收缩的标题body内容isExpanded设置内容…

C/C++ 进阶:深入解析 GCC:从源码到可执行程序的魔法四步曲

引言距离上一篇博客更新已经过去了大概一两周的时间,而对于 Linux 系统的基本指令以及 Shell 编程的学习其实基本讲解完毕,Linux基础一块的知识就将告一段落了,如果有细节性的知识,我也会及时分享给各位,作为一名正在攀…

云服务器运行持续强化学习COOM框架的问题

1 环境要求 下载地址:https://github.com/TTomilin/COOM tensorflow 2.11以上 python 3.9以上 tensorflow2.12.0,需要安装tensorflow-probability0.19 2 修改代码 COOM/wrappers/reward.py 将 from gym import RewardWrapper修改为 from gymnasium impor…

MyBatis Interceptor 深度解析与应用实践

MyBatis Interceptor 深度解析与应用实践 一、MyBatis Interceptor概述 1.1 什么是MyBatis Interceptor MyBatis Interceptor,也称为MyBatis 插件,是 MyBatis 提供的一种扩展机制,用于在 MyBatis 执行 SQL 的过程中插入自定义逻辑。它类似…

【自动化测试】Web自动化测试 Selenium

🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 测试分类 了解各种各样的测试方法分类,不是为了墨守成规按照既定方法区测试,而是已了解思维为核心,并了解一些专业名词 根…

2025 电赛 C 题完整通关攻略:从单目标定到 2 cm 测距精度的全流程实战

摘要 2025 年全国大学生电子设计竞赛 C 题要求“仅用一颗固定摄像头”在 5 s 内完成 100 cm~200 cm 距离、误差 ≤2 cm 的单目测距,并实时显示功耗。本文整合国一选手方案、CSDN 高分博文、B 站实测视频及官方说明,给出从硬件选型→离线标定→在线算法→…

Day 10: Mini-GPT完整手写实战 - 从组件组装到文本生成的端到端实现

Day 10-2: Mini-GPT完整手写实战 - 从组件组装到文本生成的端到端实现 📚 今日学习目标 掌握GPT架构组装:将Transformer组件组装成完整的生成模型 理解生成式预训练:掌握自回归语言建模的核心机制 端到端代码实现:从数据预处理到模型训练的完整流程 文本生成实战:训练Mi…

深入解析Prompt缓存机制:原理、优化与实践经验

深入解析Prompt缓存机制:原理、优化与实践经验 概述 在大型语言模型应用中,API请求的延迟和成本始终是开发者关注的核心问题。Prompt缓存(Prompt Caching)技术通过智能地复用重复内容,有效减少了API响应时间和运行成本…

CV 医学影像分类、分割、目标检测,之【3D肝脏分割】项目拆解

CV 医学影像分类、分割、目标检测,之【3D肝脏分割】项目拆解第1行:from posixpath import join第2行:from torch.utils.data import DataLoader第3行:import os第4行:import sys第5行:import random第6行&a…

Mybatis学习笔记(七)

Spring Boot集成 简要描述:MyBatis-Plus与Spring Boot的深度集成,提供了自动配置、启动器等特性,大大简化了配置和使用。 核心概念: 自动配置:基于条件的自动配置机制启动器:简化依赖管理的starter配置属性…

机器人伴侣的智能升级:Deepoc具身智能模型如何重塑成人伴侣体验

引言:机器人伴侣市场的技术变革需求随着人工智能技术的飞速发展和人们情感需求的多元化,机器人成人伴侣市场正在经历前所未有的增长。传统机器人伴侣已经能够满足基础的交互需求,但在智能化、情感化和个性化方面仍存在明显不足。这正是深算纪…

metabase基础使用技巧 (dashboard, filter)

这是metabase系列分享文章的第2部分。本文将介绍metabase的基础概念和使用介绍 question question是metabase中提供的通过UI化操作就能实现简单的 快捷 直接的BI查询。 点击右侧的New -> Question即可创建Question,可以理解为一个格式化的查询: 这里…

机器人成人伴侣的智能化升级:Deepoc具身模型赋能沉浸式体验

引言:成人机器人市场的技术革新需求随着人工智能和机器人技术的快速发展,成人陪伴机器人行业正经历从简单机械运动到智能化交互的转型。据市场研究数据显示,全球成人机器人市场规模预计将在2026年突破100亿美元,年复合增长率保持在…

Go语言企业级权限管理系统设计与实现

最近跟着学长再写河南师范大学附属中学图书馆的项目,学长交给了我一个任务,把本项目的权限管理给吃透,然后应用到下一个项目上。 我当然是偷着乐呐,因为读代码的时候,总是莫名给我一种公费旅游的感觉。 本来就想去了解…

Java应用快速部署Tomcat指南

将Java应用部署到Apache Tomcat服务器是开发Web应用过程中常见的任务。Tomcat是一个免费且开源的Servlet容器,它为Java应用提供了运行环境。本文将介绍如何准备你的Java应用,并将其部署到Tomcat服务器上。 Java 应用部署 tomcat 的根目录结构 Tomcat中默认网站根目录是$CAT…

Java 学习笔记(基础篇2)

1. 分支结构① if 语句:(1) 双分支:if (条件) {// 语句体1 } else {// 语句体2 }(2) 多分支if (条件1) {// 语句体1 } else if (条件2) {// 语句体2 } else {// 语句体N }② switch 语句:(1) 语法:如果都不是(default&…

谷歌云代理商:用 AI 启航,Gemini 重塑旅游酒店行业新体验

本文由谷歌云谷歌地图官方授权代理商、高级合作伙伴 CloudAce云一 整理发布。谷歌云谷歌地图在中国授权代理商名单:Cloud Ace云一,全球20分公司,国内核心城市多个据点,谷歌云与谷歌地图代理商、顶级合作伙伴(Premier P…

springboot+vue实现通过poi完成excel

前端1、按钮<el-buttontype"text"size"mini"click"handleExport">导出</el-button>2、方法//导出async handleExport() {if (!this.activityId) {this.$message.warning(活动ID不存在);return;}try {this.loading true;const res …