进程,任务

简介: 进程,任务

20231116

操作系统 -> 软件

1.管理各种硬件设备

2.给软件提供稳定的运行环境

软件工程的本质:就是针对''复杂程度''的管理

人脑能够思考的复杂程度是有限的

如何管理"复杂程度"的核心就是"抽象封装"

                                                       --->同一时刻只关注其中的一个部分~


Windows,linux,mac,ios...

进程,任务

进程就是操作系统提供的一个软件资源

咱们现在使用的系统,都是"多任务操作系统"

--->同一时刻,可以运行多个任务

单任务没有"后台执行"

要想执行 另一个程序就需要先退出前一个程序

单任务非常不方便,所以多任务才是当下主流的方式

对于多任务的系统来说,进程的概念就非常重要了

换而言之,也可以认为计算机中的每个进程在运行的时候都需要分配一定的系统资源

进程是系统分配资源的基本单位

在计算机中都是内存和外存,不要说运存什么的...

进程在系统中是如何管理的???

操作系统的进程管理 --> 先描述,再组织

描述--->使用类或者结构体把实体的属性给列出来

组织--->使用一定的数据结构,把这些结构体或者对象给串到一起

表示进程控制的结构体,叫做PCB(Process Control Block)进程控制块

PCB是属于操作系统学科的通用概念

在Windows在Linux上都可以成为 PCB

在linux上,PCB是一个叫做struct task_struct{...}这样的结构体

(要将看到的直观效果,跟代码的图景联系起来)

在Linux中是使用链表这样的数据结构将若干个task_struct给串起来的

当我们看到任务管理器的这些进程的时候,意味着系统内部在遍历链表,并且打印每个节点的相关信息

如果运行一个新的程序,系统中就会添加一个PCB,添加到链表上,结束进程就会删除一个节点

如果程序崩溃,是属于异常,系统就能"try-catch"住这样的异常,并且对齐做善后处理

也有些程序,崩溃了可能会导致系统崩溃的

比如有些程序,是带有驱动的,驱动实在内核中执行的,可能会导致系统卡死或者崩溃

PCB中的一些核心属性

PCB这个结构体是一个非常庞大的结构体(有上百个属性)

核心属性:

pid:进程的身份标识  

      此处是使用一个不重复的整数来区分的

       后续根据某个进程进行操作,就可以拿着这个pid来进行区分了

比如,选中某个进程,点击结束任务,此时任务管理器获取到你选中的pid

调用一个系统api,将pid作为参数传进去,从而杀死进程

内存指针

进程运行过程中,需要消耗一些系统资源,其中内存就是一个重要的资源

整个系统有16G内存,16G不能随便用,得向系统申请,才能使用

每个进程都必须使用自己申请到的内存

内存指针,就是用来描述说你这个进程,都能使用哪些内存(描述内存资源的详细情况)

一个进程跑起来之前,指令和数据都要先(数据比较大就会导致开的慢)加载到内存中

外挂的工作原理很多都是在加载内存的时候操作的

文件描述符表(描述了这个进程涉及的硬盘相关的资源)

每个进程的文件描述符表是一个数组,存指针,指针指向内核中表达打开文件的结构体

文件描述符表是通过文件描述符来管理打开的文件或io资源

进程经常要访问硬盘

操作系统对硬盘这样的硬件设备进行了封装-->文件

存储器 ->内存+外存

外存(包含但不限于硬盘,软盘,光盘,U盘flash...)

不管什么盘,都是统一的抽象,按照"文件"的方式来操作的

一个经常想要操作文件,需要先"打开文件",就是让你的进程在文件描述符表中创建一个表项(构造一个结构体),表示这个文件的相关信息,看看都打开了哪些文件

操作系统提供的api,叫做open

内存,硬盘,网卡等资源在pcb中都好体现

一个进程,消耗cpu资源是啥意思???

cpu是一个舞台,要执行的指令是演员(进程要执行指令)

cpu可能有一个核心,也可能有很多核心

演员需要登上舞台才能进行表演

同一时刻,一个舞台只能有一个演员

假设电脑有16个cpu,但是进程却远远大于cpu个数

这就涉及到一个非常关键的概念---分时复用(并发)

关键要点:多个演员轮流登台

假设现在咱们得电脑上只有一个核心

只要两个进程切换的速度足够快,人眼看起来就像多个任务是同时执行的

后来,随着多核cpu诞生,同时执行进程,就变得更加复杂了

此时此刻,在微观上,几个进程是真正的同时执行,而不是靠快速切换

但是"并发执行"仍然存在

现在计算机的执行过程往往是并行+并发同时存在的

并行和并发怎么样都是看系统调度的

咱们感知不到也干预不了

往往就把这种并行和并发统称为并发了

对应的编程方式(解决一个问题,同时高多个任务协同完成,就叫并发编程)

进程的调度 - 分时复用,并发执行

PCB就得提供一些属性来支持系统完成这些进程的调度

状态

描述某个进程是否能够描述某个进程方不方便

就绪状态:随时准备好执行

阻塞状态:这个进程不方便去cpu执行

其他的状态,暂时不做展开

优先级

多个进程等待系统调度

多个进程之间调度的先后关系不是那么平均的

先调度谁,后调度谁,谁长谁短

上下文

记账信息

针对每个进程,占据了多少cpu时间进行一个统计

会根据这个统计时间结果调整调度策略

因此就需要在下一轮次进行调整,确保每个进程都能分配到cpu

相关文章
|
3月前
|
Linux Perl
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
在Linux中,系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
|
5月前
|
Java 程序员
Java多线程编程是指在一个进程中创建并运行多个线程,每个线程执行不同的任务,并行地工作,以达到提高效率的目的
【6月更文挑战第18天】Java多线程提升效率,通过synchronized关键字、Lock接口和原子变量实现同步互斥。synchronized控制共享资源访问,基于对象内置锁。Lock接口提供更灵活的锁管理,需手动解锁。原子变量类(如AtomicInteger)支持无锁的原子操作,减少性能影响。
46 3
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之运行run-application --target kubernetes-application执行,通过进程的返回码来决定作业是否成功,任务返回码都是0,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
Java 测试技术 Python
Python的多线程允许在同一进程中并发执行任务
【5月更文挑战第17天】Python的多线程允许在同一进程中并发执行任务。示例1展示了创建5个线程打印"Hello World",每个线程调用同一函数并使用`join()`等待所有线程完成。示例2使用`ThreadPoolExecutor`下载网页,创建线程池处理多个URL,打印出每个网页的大小。Python多线程还可用于线程间通信和同步,如使用Queue和Lock。
71 1
|
算法 调度 C++
【OSTEP】进程调度: 介绍 | Convoy护航效应 | 最短任务优先(SJF) | 最短完成时间优先(STCF) | 轮转 RR | 结合I/O
【OSTEP】进程调度: 介绍 | Convoy护航效应 | 最短任务优先(SJF) | 最短完成时间优先(STCF) | 轮转 RR | 结合I/O
149 0
|
6月前
|
Python
在Python中,如何使用多线程或多进程来实现任务的并行执行?
在Python中,如何使用多线程或多进程来实现任务的并行执行?
191 1
|
6月前
|
大数据 Python Windows
Python大数据之Python进阶(二)多任务编程-进程
Python大数据之Python进阶(二)多任务编程-进程
71 0
|
Python Windows
[Python]多任务编程--进程(二)
[Python]多任务编程--进程(二)
[Python]多任务编程--进程(二)
|
调度 Python Windows
【python】多任务编程之线程、进程知识点详细总结
【python】多任务编程之线程、进程知识点详细总结
83 0
|
调度 Python