一文即可帮助你认识进程和线程~

news2024/11/24 13:01:48

本文的重点:什么是:进程、进程调度、线程和他们之间的联系。主讲概念知识,不讲代码实现

目录

一、认识进程

1.什么是进程

2.进程的信息

3.进程调度(***)

4.进程调度的基本过程

二、线程

1.线程的引入

2.什么是线程

3.进程于线程的联系区别


前置知识:我们写的代码是如何操作系统的

写了一个打印字符串的代码

1)应用程序执行println,调用系统提供的api

2)操作系统内核里,感知到要执行操作显示器的行为

3)操作系统内核,通过驱动程序,找到对应的硬件设备(显示器),并执行“显示字符串”操作

类似去食堂打饭,想要某个菜,并不是自己去抓取,而是通过食堂阿姨去操作。

我需要吃饭==执行程序,告诉阿姨==调用api,阿姨听到了==感知到我要吃饭,通过阿姨的眼睛找到了大白菜==通过驱动程序找到…… 

一、认识进程

进程,就是运行起来的程序等等,这是对进程最基本的概念

1.什么是进程

1.1.概念

(1)一个程序,允许起来,在操作系统中就会出现一个进程;可以理解成进程就是一个跑起来的程序。

(2)进程是程序的一次执行,是一组指令的集合。

(3)进程可以视为是 操作系统进行资源分配的基本单位 。

1.2.查看进程

1.3.进程运行的条件

(1)进程可以运行起来,是必须要消耗一些系统资源的。(跟人要吃饭一样)

(2)需要的资源

cpu,内存,硬盘,网络带宽,显卡等等很多资源

(3)查看进程消耗的资源

(4)进程的作用

        进程可以视为是 操作系统进行资源分配的基本单位!

2.进程的信息

背景

当操作系统中的进程多起来之后,就需要对其进行管理,和分配资源,于是就出现了一些操作,用来对进程进行管理操作。

2.1.管理进程的方式

(1)通用手法:描述+组织

(2)如何描述和组织

描述:一般通过一些结构体/类,把一个进程的核心信息抽象提取出来,并进行表示(就是对一个东西就行描述,比如进行有哪些东西,描述出来)。

管理:通过一定的数据结构,把多个这样的结构体/类的对象串起来,方便进一步的各种增删查改。

(3)如何描述Ⅱ

使用名字为:PCB 的结构体描述,再使用类似链表的数据结构组织。

所以,进程的核心信息都存储在PCB的结构体中,下面了解PCB就可以了解到进程有哪些信息。

2.2.PCB的核心信息(**)

(1)pid (2)内存指针 (3)文件描述符表 (4)状态、优先级、上下文、记账信息

其中第(4)是为了支撑 进程调度而产生的。

这四点我们下面分别介绍。

2.3.pid

(1)作用:唯一身份标识,标识一个进程。就像人的身份证

(2)查看进程的pid值

(3)总结

同一个机器,同一个时刻,进程id一定是不同的 

2.4.内存指针

(1)内存指针,实际上就是一组指针

(2)作用:指针,就是 指向 进程所需要的 资源在内存中的位置。

(3)哪些资源?

1. 硬件资源 2.内存资源 3.指令资源 4.依赖的数据(进程的状态)

(4)指令的作用

进程是一组指令的集合,有了指令,才知道进程接下来要做什么(比如:调用显示器等等)

2.5.文件描述符表

(1)用来记录打开的文件,结构类似顺序表

(2)作用:在进程运行的时候,会打开一些文件;而文件描述符表就会记录下来,进程都打开过哪些文件。

目前用处较少,后期还会继续介绍。

2.6.状态、优先级、上下文、记账信息

这四大属性存在是为了支撑进程调度而存在。下面先简单的介绍这四个属性,然后再介绍进程调度。

2.6.1状态

进程/线程的状态大概有五种

(1)新建态 (2)就绪态 (3)运行态 (4)阻塞态 (5)死亡态

2.6.2.优先级

这个属性,用来决定给进程分配时间的多少

2.6.3.上下文

(1)上下文,类似于书签

(2)作用:

进程第一次被调度到cpu上工作,一会后被调走,此时需要记录一些工作的进度;当第二次调度回来后,就可以继续执行。

2.6.4.记账信息

(1)用来标记每个进程所 分配到的资源大小

(2)作用:可以更好的分配系统资源,防止一些进程无法分配到(可以尽量做到雨露均沾)

3.进程调度(***)

背景引入:

在一个操作系统中,进程的数量远远大于cpu的数量(目前cpu都是多核心的,一个核心同一个时间只能执行一个进程)。有那么多的进程,是无法同时运行的,所以有了进程调度。

3.1.进程调度概念

(1)进程调度,可以说是一种手段

(2)进程调度的作用

根据不同的条件,将一个进程分配到cpu(或cpu上的核心)运行。

(3)如何调度 

根据上面提到的进程中四大属性(状态、优先级、上下文、记账信息),加上一些特定的算法和规定,选择合适的进程并将其分配到cpu上进行运行

3.2.调度的效果

进程调度一般是产生并发执行的效果,下面通过半道理的方法来说明。

(1)并行执行

一个cpu,存在一个或者两个核心。一个核心,同一个时刻,只能运行一个程序;一般的系统中都存在多核心(我们以16核心举例),这个时候,就是16个核心上面同时有16个进程。这16个进程是完全同时执行的,这种情况我们称为并行执行

(2)并发执行

同一个核心,同一个时刻不能执行多个进程,但是不同时刻,可以执行不同的进程(分时复用)。

cpu就会把总的执行时间,分割成许多小的时间段;在每个小的时间段里面,执行一个进程,因为时间极短,人感知不到,因此可以认为是很多个进程在“同时执行”,这就称为并发执行,也就是进程调度的基本体现。

(3)我们把并发执行+并行执行 统称为 《并发执行》

3.3.深入理解调度

这里借用一个《渣女小故事》,结合进程的四大属性(状态、优先级、上下文、记账信息)来更好的理解。

(1)故事背景设置

背景:重生了,我是一个才貌双全的女孩子。所以,追我的男生从这里排到了法国,因此,我有了选择男朋友的权利。

选择男朋友的标准:(1)高 帅(2)富 (3)会添 

但是同时具备三个条件的男生:很少/具备也看不上我

做法:同时谈三个,分别为:A(高帅)  B(富)  C(超级无敌三百六十度螺旋添)

为了防止被他们发现,只能运行《时间管理》对他们进行分时复用,也就是进行合理的调度。

在微观上,我是同一个时间只和一个小哥哥在一起;宏观上,我在和三个小哥哥同时在一起。

而调度发挥的作用就是:可以合理的安排时间

(2)进程的状态

在上面的时间表中,需要考虑到三个小哥哥的状态。

1)三个小哥哥随叫随到。在操作系统中,称为进程的就绪状态

2)有个小哥哥有事,无法随叫随到。在操作系统中,称为:进程处于阻塞状态

所以进程的调度就会根据不同的进程分配不同的时间。

(3)进程的优先级

三个小哥哥,我会根据给我的价值,对他们分配不同的时间。如给A分配的时间就会更多,B其次,C最少。

(4)进程的上下文

在和小哥哥约会的时候,有些事情未完成,就会记录下来这次,等到下次执行的时候就可以恢复

(5)进程的记账信息

通过一个表格,记录给每个小哥哥分配的时间,当分配时间少的时候,就适度加多时间。

每个进程都有自己的属性(如状态、优先级这些)

4.进程调度的基本过程

(1)进程的创建 (创建自己的PCB,并加入链表中)--进程的新建态

(2)就绪队列管理  (如:进程的优先级,进行排队)--进程的就绪态

(3)进程选择  (根据一些特定的算法,选择合适的进程)

(4)进程切换  (涉及上下文,当前的进程分配到cpu上,记录该线程在硬盘上的数据)

(5)进程执行(在cpu上进行执行)--进程的运行态

(6)阻塞和唤醒(如进行IO操作,如:Scanner时;此时就会先调度其他的进程)--进程的阻塞态

(7)终止(进程的任务完成,就会被移除就绪队列)--进程的死亡态

二、线程

线程是一个轻量级的进程,是系统调度执行的基本单位

1.线程的引入

(1)背景

利用多个cpu核心完成同一个任务----->引入多进程编程------>多进程编程存在问题(而且Java中也不太支持)------->引入多线程编程

(2)两个原因

1)需要把多个核心利用上 

2)多进程编程,需要消耗的资源很大,时间慢,俗称:大重量。

2.什么是线程

2.1.线程由来

(1)线程其实是进程的一部分

(2)一个进程,最少有一个线程,也可以包含多个线程

2.2.线程与PCB

前面提到,PCB是描述一个进程的;本质上,一个PCB是描述一个线程的,多个PCB就构成一个进程。所以说,进程中有的,线程中都有。

(1)线程的PCB信息

pid、内存指针、文件描述符表、tgid、状态、优先级、上下文、记账信息。

(2)不同线程共享的信息

内存指针、文件描述符表、tgid

(3)线程单独一份的信息

pid、状态、优先级、上下文、记账信息

3.进程于线程的联系区别

3.1.区别
名字/不同点进程线程

资源

占用

进程是分配资源的最小单位。不同的进程之间,拥有的资源不一样.不同的线程之间,共享一部分进程的资源

执行

方式

不同进程的地址空间不一样,一般一个进程崩溃后,不会影响其他的进程线程没有单独的地址空间,当一个线程崩溃后,可能影响所有的线程

调度

速度

进度调度较慢线程调度较快

系统

开销

系统开销大,创建/销毁慢系统开销小,创建/销毁快
3.2.联系

(1)一个程序至少拥有一个线程,一个进程至少拥有一个线程;线程是组成进程的基本单位

(2)线程是进程内的一个执行单元,也是进程内可以调度的实体。当进程分配到资源时,该进程中的所有线程共享该资源。所以真正在处理机上运行的是线程

(3)进程和线程都可以并发执行,提供程序的执行效率。

(4)进程是系统分配资源的基本单位;线程是调度执行的基本单位。

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

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

相关文章

鸿蒙开发之ArkUI组件常用组件图片和文本

ArkUI即方舟开发框架是HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。 开发文档地址 &…

【功能实现】新年贺卡(蓝桥)

题目分析: 想要实现一个随机抽取功能 功能拆解:题目给了数组,我们采用生成随机数的方式,随机数作为数组的索引值访问数组的值。 并返回获取到的值,将获取到的值插入到页面中。 document.addEventListener(DOMConten…

Diffusion添加噪声noise的方式有哪些?怎么向图像中添加噪声?

添加噪声的方式大致分为两种,一种是每张图像在任意timestep都加入一样的均匀噪声,另一种是按照timestep添加不同程度的噪声 一、在任意timestep都加入一样的noise batch_size 32x_start torch.rand(batch_size,3,256,256) noise torch.randn_like(x_…

【spring】@Autowired注解学习

Autowired介绍 Spring框架是Java领域中一个非常重要的企业级应用开发框架,它提供了全面的编程和配置模型,旨在帮助开发者更快速、更简单地创建应用程序。在Spring框架中,Autowired是一个非常重要的注解,它用于实现依赖注入&#…

保研线性代数机器学习基础复习1

1.什么是代数(algebra)? 为了形式化一个概念,构建出有关这个概念的符号以及操作符号的公式。 2.什么是线性代数(linear algebra)? 一项关于向量以及操作向量的公式的研究。 3.举一些向量的例子&#x…

我的编程之路:从非计算机专业到Java开发工程师的成长之路 | 学习路线 | Java | 零基础 | 学习资源 | 自学

小伙伴们好,我是「 行走的程序喵」,感谢您阅读本文,欢迎三连~ 😻 【Java基础】专栏,Java基础知识全面详解:👉点击直达 🐱 【Mybatis框架】专栏,入门到基于XML的配置、以…

C语言运算符和表达式——赋值运算符

目录 变量的定义 赋值运算符 赋值表达式 如何给变量赋值 变量的定义 声明变量的名字和类型 变量的类型决定了 *占用内存空间的大小 *数据的存储形式 *合法的表数范围 *可参与的运算种类 *变量名标识了内存中的一个存储单元 问题:未被初始化的变量的值是什么&a…

yolov8 pose keypoint解读

yolov8进行关键点检测的代码如下: from ultralytics import YOLO# Load a model model YOLO(yolov8n.pt) # pretrained YOLOv8n model# Run batched inference on a list of images results model([im1.jpg, im2.jpg]) # return a list of Results objects# Pr…

PCL拟合并绘制平面(二)

使用RANSAC拟合点云平面 1、C实现2、效果图 普通的点云平面拟合方式在一般情况下可以得到较好的平面拟合效果,但是容易出现平面拟合错误或是拟合的平面不是最优的情况。此时就需要根据自己的实际使用情况,调整平面拟合的迭代次数以及收敛条件。 使用RAN…

浏览器工作原理与实践--调用栈:为什么JavaScript代码会出现栈溢出

在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript引擎先会对其进行编译,并创建执行上下文。但是并没有明确说明到底什么样的代码才算符合规范。 那么接下来我们就来明确下,哪些情况下代码才算是“一段”代码&am…

TheMoon 恶意软件短时间感染 6,000 台华硕路由器以获取代理服务

文章目录 针对华硕路由器Faceless代理服务预防措施 一种名为"TheMoon"的新变种恶意软件僵尸网络已经被发现正在侵入全球88个国家数千台过时的小型办公室与家庭办公室(SOHO)路由器以及物联网设备。 "TheMoon"与“Faceless”代理服务有关联,该服务…

46秒AI生成真人视频爆火,遭在线打假「换口型、声音」

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站 每天给大家更新可用的国内可用chatGPT资源 更多资源欢迎关注 是炒作还是真正的 AI 视频能力进化? AI 生成视频已经发展到这个程度了吗? 前段时间,英国王室凯特…

每天能提醒自己做事的app有哪个?

在忙碌的日常生活和工作中,我们时常面临各种任务和琐事。一旦处理不及时,很容易导致遗忘,进而给自己带来不必要的麻烦和损失。因此,拥有一款能够高效提醒我们做事的提醒app显得尤为重要。 敬业签就是这样一款实用的提醒软件。它不…

零基础10 天入门 Web3之第1天

10 天入门 Web3 Web3 是互联网的下一代,它将使人们拥有自己的数据并控制自己的在线体验。Web3 基于区块链技术,该技术为安全、透明和可信的交易提供支持。我准备做一个 10 天的学习计划,可帮助大家入门 Web3: 想要一起探讨学习的…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写,发表于2002年。研究团队通过第一性原理计算,探讨了位错对氮化镓(GaN)电子能量损失谱(EEL)…

python——修改注册表

如图:想要修改Public的值为2.2.1.1 import winreg# 定义要修改的键和新值 key_path rSOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList key_name Public new_name 2.2.1.1# 打开指定的键 # 注意此处是注册表路径拼接,此处是HKEY_LOCAL_MACH…

docker部署ubuntu

仓库: https://hub.docker.com/search?qUbuntu 拉一个Ubuntu镜像 docker pull ubuntu:18.04 查看本地镜像: docker images 运行容器 docker run -itd --name ubuntu-18-001 ubuntu:18.04 通过ps命令可以查看正在运行的容器信息 docker ps 进入容器 最…

Obsidian插件:增加目录栏 flating toc

一、插件介绍 增加目录栏 插件市场搜索 flating toc安装即可 二、使用 写文档时候可以看到左边默认出现目录 可以自己配置一些相关设置 最后也可以安装一下插件样式设置插件,自己按照自己喜好调整

leetcode —— 5.最长回文子串

题目: 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"…

基础数据结构(蓝桥杯Python组)

链表 基础概念 链表可以快速插入、删除元素,用于存储数据。 每个节点维护两个部分:数据域和指针域数据域就是节点所存储的数据,指针其实就是下标(next,节点的下一个节点在哪)链表维护head和tail,每次从ta…