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

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

目录

一、认识进程

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)进程是系统分配资源的基本单位;线程是调度执行的基本单位。

  • 34
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小娥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值