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

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

目录

一、认识进程

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.hqwc.cn/news/573793.html

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

相关文章

Kubernetes常用命令汇总大全(备忘清单)

文章目录 1、查看资源信息1.1、节点1.2、容器组1.3、命名空间1.4、无状态服务1.5、服务1.6、守护进程集1.7、事件1.8、日志1.9、服务帐户1.10、副本集1.11、角色1.12、保密字典1.13、配置项1.14、路由1.15、持久卷1.16、持久卷声明1.17、存储类1.18、多个资源1.19、查看和查找资…

如何解决了“该虚拟机似乎正在使用中”问题

一、问题描述 1、在用VMware虚拟机的时候,有时会发现打开虚拟机时提示“该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消©”按钮以防损坏。配置文件: D:\win10x64\Windows 10…

ABC346 A-G 题解

ABC346 A-G题解 A题目AC Code:时间复杂度 B题目时间复杂度AC Code: C题目时间复杂度AC Code: D题目时间复杂度AC Code: E题目时间复杂度AC Code: F题目时间复杂度AC Code: G题目时间复杂度AC Code&#xff…

C语言牛客网BC-37 牛牛的圆(求面积)

题目如下 代码实现 #include<stdio.h> int main() { float r 0;float s 0;scanf("%f",&r);s 3.14*r*r;printf("%.2f",s);return 0; } 创作不易&#xff0c;点点关注&#xff0c;感谢支持&#xff01;&#xff01;&#xff01;

element表格 加滚动,监听底部实现分页加载

表格要实现滚动很简单&#xff0c;给他加一个高度即可 height"300" 然后是监听事件 mounted() {this.lazyLoading();}, methods:{lazyLoading(){let dom document.querySelector(".el-table__body-wrapper");dom.addEventListener("scroll", (…

ROS2从入门到精通0-4:ROS2核心架构与常用指令大全

目录 0 专栏介绍1 ROS2核心架构1.1 工作空间1.2 功能包 2 ROS2常用指令2.1 功能包相关2.2 节点运行相关2.3 话题相关2.4 参数相关2.4 录制包、播放包相关2.5 服务相关2.6 动作相关2.7 生命周期相关 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布…

【绘图案例-自定义进度条 Objective-C语言】

一、好,我们接着来说这个自定义进度条 1.这个Slider啊,简单的这个value属性,介绍完了,以后,监听也可以监听的到了,接下来,我们来做这个自定义进度条啊, 那么,首先啊,我是这么想的,在这个slider的最小值、和、最大值、我给它改成0、到、1、 因为如果这样的话,到时候…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架&#xff1a;java、springboot 2.UI界面&#xff1a;jQuery、HTML、CSS、 VUE 3.开发工具&#xff1a;IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

2024最赚钱的副业!一月轻松上万!实操分享快来学习!

​​每个人都玩抖音吧&#xff0c;我相信大家的手机上必有的两个软件&#xff0c;除了微信&#xff0c;就是抖音 但微信只有上班或者亲戚朋友来信息时才会打开看&#xff0c;而抖音是我们蹲厕所都要打开刷一刷的东西 那找兼职或副业的人有没有想过在抖音上赚钱 抖音最赚钱的…

【前端学习——js篇】11.元素可见区域

具体见&#xff1a;https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop&#xff0c;元素的上外边框至包含元素的上内边框之间的像素距离&#xff0c;其他offset属性如下图所示&#xff1a; 下面再来了解下clientWidth、clientHeight…

Linux系统编程--信号

1、信号&#xff08;一&#xff09; 1.1、什么是中断 1.2、中断分类 1.3、信号 1.4、信号与中断 1.5、信号名称 1.6、进程对信号的三种响应 1.7、signal函数&#xff1a;注册信号 signal(SIGINT, handler);返回值是SIGINT所对应的处理程序 再调用一下signal(SIGINT, handler2…

前端实现浏览器自定义滚动条

前言&#xff1a; 最近有个项目&#xff0c;产品觉得浏览器默认滚动条太丑了。想美化一下&#xff0c;比如自定义颜色&#xff0c;加上圆角&#xff0c;宽高都要更改一下。我查了资料和文档总结了一下 写法&#xff0c;特此记录以便之后使用。 浏览器滚动条api 总结&#xff…