进程和线程

进程与线程详解 本文章是对线程进程的一些总结,同时对多线程也有一个初步的认识,欢迎大家前来一起学习。 阅读详情

一、进程:程序文件加载进内存

在这里插入图片描述

1、定义(进程=PCB等相关数据结构+程序的代码和数据)

  • 是什么:进程=PCB等相关数据结构+程序的代码和数据
  • 为什么:任务需要被计算机完成,任务是可能存在多个的,就有了管理的需求,先描述,再组织,PCB等数据结构,任务=代码+数据
  • 怎么办:进程管理(如何新建,如何调度,如何释放,如何进行其他管理)

文件 = 内容 + 属性
进程 = 对应的文件 + 进行属性
进程:可执行程序与管理进程需要的数据结构的集合
系统允许多个进程同时运行,操作系统需要对进程进行管理(先描述,再管理)

2、如何管理进程?

  • 先描述,再组织
    描述(stuct)
    struct task_struct{
    1.标识信息,Pid(一个进程的标识符),PPid(和父进程形成某种关系)
    2.运行信息,时间
    3.优先级信息
    4.上下文
    5.
    }

3、bash和子进程的关系

bash->能不能挂?不能!bash也是一个进程!->bash创建子进程-> 交给子进程->进程是具有独立性的
bash运行原理:bash叫做命令行解释器,通常是如何解释的呢?通过创建子进程,让子进程去完成对应的任务。

4、如何理解进程创建?

创建进程,是系统多了一个进程,多一个进程,系统就要多一组管理进程的数据结构+该进程对应的代码和数据

5、多进程的理解

用fork函数创建子进程时
父进程和子进程共享语句,但数据,各自私有
return函数是一个语句,但return的值是数据,所以return的值不一样

6、函数

①state函数-----查看进程状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、进程的优先级

优先级 VS 权限

①是什么?

优先级:使用“事物”的先后顺序
权限:能不能使用某种“事物”

②为什么?

优先级什么场景下才有价值?被管理对象多的时候

③怎么办?

进程优先级?决定了,哪个进程优先使用某种资源(CPU,外设IO)
struct task_struct{
//优先级,通过整数来表示的,一般数值越小,优先级越高(仲裁,抢占)
}
在这里插入图片描述
prin_new(优先级) = pri_old(pri) + ni(nice优先级的修正数据_不同操作系统不一样)
nice取值范围从-20——19

sudo top-----通过调整ni值调整优先级

在这里插入图片描述

ps-l-----可以当前用户上下文产生的进程
ps aux-----显示所有用户产生的进程

8、其他概念

①竞争性

在这里插入图片描述

②独立性

加粗样式

③并行

在这里插入图片描述

④并发

在这里插入图片描述

9、进程退出的情况:

①代码跑完了,结果是对的

return 0;
0为退出码,说明结果是对的

②代码跑完了,结果是不对的

③代码没跑完,程序退出了

10、进程终止

①exit VS return

  • exit退出整个进程
  • return退出当前函数
exit(5)
a、_exit-----系统调用
b、exit-----C语言的库函数

exit的参数就是进程的退出码

②CTRL + C-----信号终止

11、进程等待

我们通常要让子进程先退出,让父进程先等待
在这里插入图片描述

①wait

在这里插入图片描述

a、是什么?

是父进程通过wait等系统调用,用来等待子进程状态的一种现象

b、为什么?
  • 1.防止子进程发生僵尸问题,进而产生内存泄漏
  • 2.读取子进程状态
c、怎么办?

wait/waitpid,status(signal,exit code)

②waitpid

在这里插入图片描述

int st = 0;
waitpid(pid, &st, 0);    //开始等待,子进程退出,操作系统就会从进程PCB中读取退出信息,保存在status指向的变量中

在看子进程的status时,status的第七位可以看进程是否为信号所杀
退出码:高八位-----代码跑完,结果不对
退出信号:低八位-----
在这里插入图片描述
在这里插入图片描述

12、进程程序替换

①exec-----替换

在这里插入图片描述
第一个参数是让我们找到这个命令,第二个参数是命令行的形式,告诉我们怎么执行这个命令,以NULL结尾表示参数传完了

execl("/usr/bin/ps", "ps", "-e", "-l", "-f", NULL);

替换开始后,用/usr/bin/ps中的代码段和数据段整体替换掉接下来的代码和数据
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

a、execl
execl("/usr/bin/ls", "ls", "-i", "-l", "-a", NULL);
b、execlp
execlp("ls", "ls", "-i", "-l", "-a", NULL);
c、execv
char* arg[] = {
  "ls",
  "-a",
  "-l",
  "-i",
  NULL
};
execv("/usr/bin/ls", arg);
d、execvp
char* arg[] = {
  "ls",
  "-a",
  "-l",
  "-i",
  NULL
};
execvp("ls", arg);

13.linux中,一切皆文件的理由

文件是由数组来管理的

struct file*fd_array[]
1
数组fd_array中包含着文件的描述符fd(整数)_0-n
其中,0号文件描述符叫做标准输入
1号描述符叫做标准输出
2号描述符叫做标准错误

fd:文件的描述符
每个文件有个文件的struct
struct file{
//文件的属性信息
//文件的缓冲与存储位置
}

14.一个进程默认最多打开32个文件

15.缓冲方式

①显示器:行缓冲

②文件:全缓冲

  • 重定向影响缓冲方式
    write函数把进程缓冲区(用户级的缓冲区_C语言)的数据复制到操作系统(内核)缓冲区
    fflush函数输出的数据是把用户级的缓冲区(C语言)在操作系统系统刷新
  • FILE结构体包含文件描述符和缓冲区

二、线程

线程进程以及多线程多进程(超详解) 多线程和多进程是实现并发执行的两种常见方式,它们在操作系统和编程领域中被广泛使用。 阅读详情

相关推荐

进程和线程的区别和联系

我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。 进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程...

数字成都 2万+

进程与线程

1.进程和线程基本概念2.进程与线程的区别和联系3.单进程和单线程4.多进程和多进程5.什么时候使用多进程和多进程。

小小黑码王子的博客 8924

SAP FI模块实操:用F-28和F-32搞定客户回款与手动清账,别再让未清项报表一团糟

本文详细解析了SAP FI模块中F-28和F-32事务代码在客户回款与手动清账中的实操应用,帮助财务人员高效管理未清项报表。通过标准清账六步法和手动清账实战技巧,解决因操作不规范导致的账务混乱问题,提升应收账款管理效率。

weixin_30292843的博客 453

线程与进程,你真得理解了吗

相信大家面试时一定没少被一个问题刁难,那就是进程和线程的区别是什么?这个问题延申开来并不像表面那么简单,今天就来深入一探。 开始前先看一组非常传神的图例,相信可以帮助你更好理解进程与线程的概念: 1 进程与线程的关系和区别 什么是进程 进程可以说是一个“执行中的程序”。程序是指令、数据及其组织形式的描述,是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。 进程有哪些特征? 进程依赖于程序运行而存在,进程是动态的,程序是静态的; 进程是操作系统进行

云深不知处 14万+

Appstore开发者必读:3.2(f)违规预警与高效申诉指南

本文为AppStore开发者提供了应对3.2(f)违规通知的完整指南。文章深度解析了3.2(f)条款下的隐瞒性、关联性与真实性违规类型,并提供了黄金48小时内的自查、申诉信撰写与提交全流程策略。同时,文章强调遵循App Review Guidelines,建立内部合规清单与保持账号独立,是预防违规、维护开发者账号安全的关键。

weixin_29214559的博客 272

GEE进行Theil-Sen Median斜率估计和Mann-Kendall检验

Python实现Theil-Sen Median斜率估计和Mann-Kendall检验// 定义时间范围//NDVI图像集合// 定义每年的开始和结束日期// 加载NDVI数据集,按日期过滤,并计算最大值.max()}));// 计算Sen斜率并剪裁// 可视化Sen斜率Map.addLayer(senSlope.select('slope'), vis, "Sen斜率 ");// MK检验// 创建一个列表,包含年度NDVI图像的list。

qq_44894692的博客 965

线程和进程

应用程序是指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。应用程序通常又被分为两部分:图形用户接口(GUI)和引擎。线程是CPU调度的最小单位。线程不能独立存在,必须依赖于进程。

joedan0104的专栏 7409

Virtuoso集成HspiceD:打通模拟设计全流程的仿真与PEX实战

本文详细介绍了Virtuoso集成HspiceD在模拟设计全流程中的应用,包括仿真与PEX实战。通过无缝衔接Virtuoso和HspiceD,设计师可以在同一环境中完成从原理图设计到PEX后仿真的全流程,大幅提升工作效率。文章还提供了仿真环境配置、前仿真关键设置、PEX全流程详解以及性能调优等实用技巧。

weixin_29271263的博客 97

进程和线程的区别

转自文章进程和线程的区别 1、根本区别 进程和线程的根本区别是进程是操作系统资源(OS)分配的基本单位,而线程是处理器(CPU)任务调度和执行的基本单位。 2、资源开销: 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。 3、包含关系: 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线 同完成的;线程是进程的一部分,所行过程不愿一条绿的,而

qq_40855100的博客 2万+

LLC 谐振变换器开发设计1

本文档详细介绍了基于DSP28335的LLC谐振变换器开发设计。系统采用频率调制(FM)控制方式,实现高效率、高功率密度的隔离型DC/DC变换。文档阐述了LLC拓扑结构和工作原理,给出了谐振频率、品质因数等关键参数的计算公式。硬件设计包括功率器件选型和采样电路实现,软件部分提供了DSP28335的核心控制算法和代码示例,涵盖频率转换、PI控制和PWM生成。系统还设计了启动策略和保护机制,确保可靠运行。该设计实现了主开关零电压开通和低纹波输出特性。

331

RK3588 C++ MeloTTS 推理

本文介绍了基于RK3588平台和RKNN工具链实现的端侧语音合成(TTS)系统。该系统支持中英文混合输入处理,通过自动合并英文单词、转换标点符号等方式预处理文本,并将其转换为音素和声调序列。核心推理流程包含编码器、中间处理和解码器三个阶段:编码器将音素序列转为隐藏状态,中间处理调节音调和语速,解码器生成最终波形。代码示例展示了输入数据设置和模型推理过程,利用RK3588内置NPU实现高效语音合成。该系统展现了在边缘计算设备上实现复杂AI任务的能力。

J。 200

线程和进程 / 进程和线程的区别和联系

💻进程(process) 🎃进程的特点 📢进程跟程序不一样 🎯进程状态 📠线程(Thread) 🔦线程的特点 🚢进程 VS 线程 🛫区别 💡Tips:堆和方法区 🧧多进程和多线程区别

qq_60021974的博客 7711

【Neo4j × Python】基于知识图谱的电影问答系统(含问题记录与解决)附:源代码(含Bug解决)

此前,曾介绍过Neo4j的一些基础知识,本篇将在PyCharm中与Neo4j建立关联,从0到1实现一个基于知识图谱的电影问答系统,实现过程中,没有一帆风顺,而是遇到了一些问题,因此也包含问题的记录与解决。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 3166

Linux进程和线程的区别和联系

Linux中,线程是CPU调度和分派的基本单位,进程是分配资源的基本单位(操作系统)

qq_44846784的博客 2489

R数据分析:潜在转化分析LTA的做法和解释(一)

之前给大家写了很多潜在类别分析的教程Mplus教程:如何做潜在类别分析LCAR数据分析:用R语言做潜类别分析LCAMplus数据分析:潜在类别分析(LCA)流程(详细版)R数据分析:再写潜在类别分析LCA的做法与解释,今天继续给大家拓展一步。 今天要介绍的就是潜在转换分析,这个东西就是LCA的纵向版本。是一个专门用来研究质变的统计技巧。有一句话叫做量变起质变,你怎么知道质变到底发生没有?就用潜在转换分析。 Latent transition analysis is an extension of...

Codewar的博客 7703

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

线程和进程的区别

1. 进程(Process)进程是计算机中运行的一个程序的实例。它是操作系统分配资源和调度的基本单位,每个进程都有自己的内存空间、文件描述符和其他资源。每个进程都有独立的地址空间。进程之间的通信需要通过进程间通信(IPC)机制,例如管道、信号量或消息队列。进程是重量级的,创建和销毁成本较高。2. 线程(Thread)线程是进程中的一个执行单元,是CPU调度的基本单位。一个进程可以包含多个线程,它们共享进程的资源。线程之间共享同一个进程的内存空间和资源(例如堆和全局变量)。

Flying_Fish_roe的博客 5979

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java之进程和线程

深入理解进程和线程 生动形象的比喻: 进程:一个车间 = 一个进程; (即一个运行的程序) 多进程:一座工厂可以同时运行多个车间; CPU和进程:单CPU只能同时运行单个进程,多CPU可以同时运行多个进程。 线程分为单线程和多线程 单线程:车间内一个工人 = 一个线程; 多线程:车间内多个工人 = 多个线程; 进程与线程:一个进程可以包括多个线程。 线程间内存共享:一个车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。 同理一个进程的内存空间是共享的,里面的每个线..

NoviceZ的博客 996

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

进程和线程区别、进程和进程,线程和线程怎么通信

1 进程和线程区别 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位 在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。 所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线...

每天多学一点点. 的博客 545
上一篇: 操作系统-
下一篇: 操作系统的大框架
Code_Paradise
博客等级 码龄7年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值