进程,线程

news2024/9/24 21:19:23

进程是操作系统分配资源的基本单位,线程是CPU调度的基本单位。
PCB:进程控制块,操作系统描述程序的运行状态,通过结构体task,struct{…},统称为PCB(process control block)。是进程管理和控制的最重要的数据结构。每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程的全过程,知道进程撤销而撤销。

进程(Process)主要由三个部分组成:
1.进程控制块,PCB,包含:进程的描述信息,进程控制和管理信息,资源分配清单,CPU相关信息。
2.数据段,进程运行过程中各种数据(比如程序中定义的变量)
3.程序段,程序的代码(指令序列)

对于操作系统来说,进程就是PCB程序控制块,PCB是给操作系统使用的,数据段,程序段是给进程自己用的。

进程的三态图
运行态,就绪态,阻塞态
状态迁移
就绪态----发生进程调度---->运行态
运行态----时间片用完------->就绪态
运行态----出现阻塞事件---->阻塞态
阻塞态----阻塞事件结束---->就绪态

进程的五态图
新建态,就绪态,运行态,阻塞态,结束态
状态迁移
新建态----进入就绪队列---->就绪态
就绪态----发生进程调度---->运行态
运行态----时间片用完------->就绪态
运行态----结束---------------->结束态
运行态----出现阻塞事件---->阻塞态
阻塞态----阻塞事件结束---->就绪态

进程特征
动态性:进程是程序的一次执行过程,是临时的,有生命周期的,是动态产生,冬天消亡的
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是系统进行资源分配和调度的独立单元
结构性:进程由程序,数据和进程控制块三部分组成


0号进程是主动创建的,用于初始化操作系统进程,之后创建1号进程,1号进程是所有进程的父进程

前台进程:是指用户可以在终端和进程相互交互的进程
后台进程:是指没有占用终端的进程,后台进程不需要和用户交互
守护进程:是指在系统启动时启动,并且在系统关闭时结束的进程

父、子进程:子进程是指由另一进程(对应称之为父进程)所创建的进程。
孤儿进程:一个父进程退出,而他的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
僵尸进程:进程退出时没有释放资源。是指没有占用终端,后台进程不需要和用户交互的进程。

进程间通信(IPC)
不同进程之间总会需要传播、交互数据。这里进程之间通信必须同通过内核,因为进程的用户空间是独立的,内核空间是每个进程都共享的"公共区域",所以研究如何"对话"。

1.管道,匿名管道(pipe),命名管道(FIFO)
2.消息队列
3.共享内存
4.信号量
4.信号
5.套接字(socket)

线程
一个进程可以有多个线程,它们共享这个进程的资源(内存空间,包括代码段,数据集,堆等,及一些进程级的资源,如打开文件和信号等)。
为了减少进程切换的开销,把进程作为资源分配的基本单位(很少调度或切换),线程作为独立调度的基本单位,线程上下文切换比进程上下文切换要快得多。
在这里插入图片描述
线程的优点
1.多个线程共享当前进程的资源
2.进程下的线程间通信,无需操作系统干预(进程通信需要请求操作系统服务,CPU切换到内核态)开销更小。
3线程间的并发比进程开销更小,系统并发性提升。

需要注意的是:从属于不同进程的线程间通信,也必须请求操作系统。同样从属于不同进程的线程间切换,它是会导致进程切换的,所以开销也大。
线程的缺点:当进程中的一个线程崩溃时,会导致其他从属于进程的所有线程崩溃。

线程间通信
1.互斥锁
2.读写锁
3.自旋锁
4.条件变量
5.信号量
6.信号

进程、线程同步
进程间同步方法:
1.消息队列
2.共享存储 映射同一块物理内存
3.信号量
线程间同步方法:
1.互斥量
2.读写锁
3.自选锁
4.条件变量

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

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

相关文章

#电子电气架构——Vector工具常见问题解决三板斧

我是穿拖鞋的汉子,魔都中一位坚持长期主义的工科男。 今天在与母亲聊天时,得到老家隔壁邻居一位大姐年初去世的消息,挺让自己感到伤感!岁月如流水,想抓都抓不住。想起平时自己加班的那个程度,可能后续也要自己注意身体啦。 老规矩,分享一段喜欢的文字,避免自己成为高知…

千锋教育嵌入式物联网教程之系统编程篇学习-03

目录 进程的终止 exit函数 _exit函数 进程退出清理 进程间的替换 进程间通信 常见通信机制 进程间通信的实质 信号 产生信号的方式 信号的默认处理方式 进程对信号的处理方式 kill函数 进程的终止 使用exit函数对进程进行终止,而return只是结束函数&a…

电子技术——共模抑制

电子技术——共模抑制 我们在之前学习过,无论是MOS还是BJT的差分输入对,共模信号并不会改变漏极电流的大小,因此我们说差分输入对共模信号无响应。但是实际上由于各种客观非理想因素,例如电流源有限阻抗等,此时共模是影…

LINUX提权入门手册

前言 发点存货 LINUX权限简介 在学习提权之前我们先了解一下linux里面的权限我们使用命令: ls -al即可查看列出文件所属的权限: 文件头前面都有一段类似的字符,下面我们仔细分析一下里面符号分别代表什么。 -rw-r--r-- 1 root root 第一个符号-的…

现代 cmake (cmake 3.x) 操作大全

cmake 是一个跨平台编译工具,它面向各种平台提供适配的编译系统配置文件,进而调用这些编译系统完成编译工作。cmake 进入3.x 版本,指令大量更新,一些老的指令开始被新的指令集替代,并加入了一些更加高效的指令/参数。本…

MongoDB--》MongoDB数据库以及可视化工具的安装与使用—保姆级教程

目录 数据库简介 MongoDB数据库的安装 MongoDB数据库的启动 MongoDB数据库环境变量的配置 MongoDB图形化管理工具 数据库简介 在使用MongoDB数据库之前,我们应该要知道我们使用它的原因: 在数据库当中,有常见的三高需求: Hi…

如何手写一个springboot starter?

本文主要分享了如何手写一个spring starter,把你的代码作为jar包进行开源。命名规则(不要使用spring-boot开头,以避免将来spring-boot官方使用你的starter而重名)官方命名格式为:spring-boot-starter-xxx非官方命名格式…

ucos-ii 的任务调度原理和实现

ucosii 任务调度和原理1、ucos-ii 任务创建与任务调度 1.1、任务的创建 当你调用 OSTaskCreate( ) 进行任务的创建的时候,会初始化任务的堆栈、保存cpu的寄存器、创建任务的控制块(OS_TCB)等的操作; if (OSTCBPrioTbl[prio] (OS_…

Python中如何书写文件路径

当程序运行时,变量是保存数据的好方法,但变量、序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。Python 提供了内置的文件对象,以及对文件…

数据库 delete 表数据后,磁盘空间为什么还是被一直占用?

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 最近有个上位机获取下位机上报数据的项目&#xff0c…

计算机网络6:Http协议

目录HTTP1.基本概念1.1.1 URI2. 请求和响应报文2.1.请求报文2.2.响应报文3.HTTP报文实现细节3.1响应头主要字段3.2HTTP状态码3.3 HTTP方法3.3.1 GET方法3.3.2 HEAD3.3.3 POST3.3.4 PUT3.3.5 PATCH3.3.6 DELETE3.3.7 OPTIONS3.3.8 CONNECT3.4 HTTP首部(头部&#xff…

【MT7628】开发环境搭建-Fedora12安装之后无法上网问题解决

1.按照如下图所示,打开Network Connections 2.点击Network Connections,弹出如下界面

面向对象程序(C++)设计基础

一、类&对象C 在 C 语言的基础上增加了面向对象编程,C 支持面向对象程序设计。类是 C 的核心特性,通常被称为用户定义的类型。类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型…

面试题(二十二)消息队列与搜索引擎

2. 消息队列 2.1 MQ有什么用? 参考答案 消息队列有很多使用场景,比较常见的有3个:解耦、异步、削峰。 解耦:传统的软件开发模式,各个模块之间相互调用,数据共享,每个模块都要时刻关注其他模…

Grafana 系列文章(十五):Exemplars

Exemplars 简介 Exemplar 是用一个特定的 trace,代表在给定时间间隔内的度量。Metrics 擅长给你一个系统的综合视图,而 traces 给你一个单一请求的细粒度视图;Exemplar 是连接这两者的一种方式。 假设你的公司网站正经历着流量的激增。虽然…

ansible的模块详解

ansible 的概述 什么是ansible Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 Python…

Redux 源码分析

Redux 目录结构 redux ├─ .babelrc.js ├─ .editorconfig ├─ .gitignore …

列线图工具_Nomogram

定义 列线图是一种相对传统的分析方法,用于展示自变量和因变量的线性关系,及其特征的重要程度。 现在用SHAP,和机器学习库中的 Feature importance 工具可以实现类似甚至更好效果。不过很多传统的研究领域比较认这种方法。 列线图工具建立在…

什么是相机标定

1. 相机标定的定义及作用 相机标定是指借助标定板来计算单个或多个相机的内参、外参和镜头畸变参数。 作用: 将畸变的图像恢复为正常的图像,为后续进行拼接、SLAM等奠定基础。 多相机标定可以将所有相机输出变换到同一个坐标系。 相机标定是三维视觉…

适用于 Windows 11/10/8/7 的 10 大数据恢复软件分享

适用于 Windows 11/10/8/7 的 最佳数据恢复软件综述。选择首选的专业数据/文件恢复软件,轻松恢复丢失的数据或删除的照片、视频等文件、SSD、外接硬盘、USB、SD卡等存储设备中的文件等。流行的sh流行的数据恢复软件也包括在内。 10 大数据恢复软件分享 为了帮助您恢…