深入理解操作系统中进程与线程的区别及切换机制(上)

深入,理解,操作系统,进程,线程,区别,切换,机制 · 浏览次数 : 325

小编点评

**进程** 进程是指正在运行的程序,可以包含一个或多个线程。 **5状态模型** 1. 就绪 2. 运行 3.阻塞 4. 就绪 5. 结束 **进程状态** * **就绪:** 进程等待分配时间片执行任务。 * **运行:** 进程正在执行任务。 * **阻塞:** 进程等待系统服务返回结果。 * **就绪:** 进程等待时间片结束,但任务未完成。 * **结束:** 进程完成任务,释放资源并退出。

正文

进程

所谓进程,大家可以理解为我们打开的应用程序,如微信、QQ、游戏等,但也有系统应用是我们看不见的,可以打开任务管理器一探究竟,我们写的代码程序在服务器上在不运行的情况下,它就是一个二进制文件,并不是进程!

image

一个进程可以包含一个或者多个线程,但对于CPU来说他就是一个任务而已;

image

在早期,我们的CPU只有一个,而有多个任务需要执行时,它们只能排队等待,无论前面的任务执行时间有多长,后面的任务都得耐心等待。这种方式显然存在明显的弊端。举个例子,假设排在前面的A任务需要执行1小时,而排在后面的B任务仅需1分钟,那么B任务必须等待A任务完成后才能执行,这种方式显得极其不灵活。

进一步发展后,我们拥有了多任务的系统。在CPU在同一时间只能处理一个任务的前提下,系统将时间划分为多个时间片,每个任务只能占用一个时间片来执行自己的任务。一旦时间片用完,就必须轮到下一个任务执行,这种方式看起来就像是多个进程或任务同时在运行,这就是我们所说的并发,也称为伪并行。

有伪并行,那么就有真并行,随着现代化发展,我们的CPU开始拥有多核处理器,如4核、8核等。这样每个核心就像一个独立的CPU一样,可以并行处理多个任务。,8核对应的就是8个任务并行处理;

image

然而,我们当前的服务器系统都是高并发状态,不仅要运行自己的业务,还要占用一定的CPU资源来运行系统进程。因此,以下一系列问题就出现了:

  1. 一个任务占用多长时间的时间片?
  2. CPU如何进行任务切换?当一个任务正在执行时被切换,资源如何处理?
  3. CPU如何找到下一个要执行的任务的位置?

进程的状态

五状态模型

image

当我们的程序启动后就会变成这种状态,关联如下:

就绪->运行:当任务获得时间片后,使用CPU执行操作,进入运行状态。

运行->阻塞:进程调用系统服务时,无法立即获取返回值(如IO操作),进入阻塞状态。

运行->就绪:如果占用的时间片已经结束了,但任务未完成,回到就绪状态。

阻塞->就绪:阻塞结束后,进程回到就绪状态。

运行->结束:进程自行完成任务后,那么会被系统终止;

以上便是对于单个进程的5状态描述,从上面可以看出由于系统通常同时运行多个进程,因此就绪和阻塞状态的进程可能会有多个,那么这么多进行都在就绪态和阻塞态怎么办?一般来说就是使用队列,这不跟你写java是一样的解决方案吗?排队就行了

七状态模型

image

队列是可以解决排队了问题了,但是这么长的队列放到哪里呢?我们的内存是很宝贵的,所以这里面就有上一节说的内存交换的问题了,可以使用内存交换机制将部分进程交换到磁盘中,这时候就是一个挂起的状态;

挂起的状态分两种:

  1. 就绪状态的挂起:一旦进程重新加载到内存中,就会立即运行。
  2. 阻塞状态的挂起:等待特定事件发生后才会运行。

这时候你就知道为什么你可以运行很多个程序,但是有时候你打开的太多了,你正打开某一个软件的同时,另一个软件自己退了,你就可以看下你的内存是不是满了,这是因为已经被交换到磁盘中的进程不容易重新加载回内存。一旦内存已满,重新加载进程就变得困难。

总结

进程是指正在运行的程序,可以包含一个或多个线程。在早期,CPU只有一个核心,多个任务需要排队等待执行。后来,引入了多任务的概念,将时间划分为多个时间片,每个任务占用一个时间片执行,实现了伪并行。现代CPU拥有多核处理器,可以并行处理多个任务。高并发的服务器系统中,除了运行业务,还要占用一定的CPU资源运行系统进程。进程的状态通过队列进行管理。同时还讨论了内存交换和进程挂起的问题。

与深入理解操作系统中进程与线程的区别及切换机制(上)相似的内容:

深入理解操作系统中进程与线程的区别及切换机制(下)

本文首先介绍了进程的控制结构,即进程控制块(PCB),它是表示进程的数据结构,包含了进程的相关信息和资源。PCB之间通过链表连接,形成就绪队列和阻塞队列,用于进程调度和资源管理。接着,文章详细探讨了进程的切换过程。进程切换是为了保证公平分配CPU时间片,涉及保存和恢复进程的执行上下文、更新进程状态和调度算法选择等步骤。文中还提到了进程上下文切换的场景,如时间片用完、内存不足、高优先级进程需求等。最

深入理解操作系统中进程与线程的区别及切换机制(上)

进程是正在运行的程序的实例,它可以包含一个或多个线程。我们了解了进程的执行方式,包括早期单核处理器上的顺序执行以及引入多任务概念实现的伪并行。我们还探讨了进程的状态模型。进程可以处于就绪、运行、阻塞和结束等不同的状态。就绪状态表示进程已经准备好运行,但还没有被调度执行。运行状态表示进程正在执行。阻塞状态表示进程被阻塞,需要等待某些事件的发生才能继续执行。结束状态表示进程已经完成执行。

Go通道机制与应用详解

本文深入探讨了Go语言中通道(Channel)的各个方面,从基础概念到高级应用。文章详细解析了通道的类型、操作方法以及垃圾回收机制,更进一步通过具体代码示例展示了通道在数据流处理、任务调度和状态监控等多个实际应用场景中的作用。本文旨在为读者提供一个全面而深入的理解,以更有效地使用Go中的通道进行并发

Django ORM:最全面的数据库处理指南

**深度探讨Django ORM的概念、基础使用、进阶操作以及详细解析在实际使用中如何处理数据库操作。同时,我们还讨论了模型深入理解,如何进行CRUD操作,并且深化理解到数据库迁移等高级主题。为了全面解读Django ORM,我们也讨论了其存在的不足,并对其未来发展进行了展望。这篇文章旨在帮助读者全

操作系统中文件系统的实现和分配方式探析(上)

本文主要讨论了操作系统中文件系统的实现和分配方式。首先介绍了虚拟文件系统(VFS)作为中间层,统一了不同文件系统的接口。然后介绍了文件的物理结构,包括文件块和逻辑块之间的映射关系。接着详细讨论了连续分配方式的特点和优缺点,包括顺序访问和随机访问的效率,以及磁盘空间碎片和文件长度扩展不方便的问题。最后提到了非连续分配方式来解决连续分配方式的问题,并留下了下次讨论的悬念。文件系统的实现和分配方式对于操作系统的性能和可靠性都有重要影响,因此深入理解和研究文件系统的原理和机制是非常有价值的。

【转帖】Linux查看二进制文件:一招制敌(linux二进制查看文件)

https://www.dbs724.com/146055.html 一招制敌:学会Linux查看二进制文件 在Linux操作系统中,二进制文件是一种常见的文件类型。如果你想深入了解一个二进制文件,可能需要查看其内容。但是,二进制文件是一种机器可读的文件,可能很难直接理解,因此需要特殊的工具来解析和

深入理解 C++ 中的多态与文件操作

C++ 多态 多态(Polymorphism)是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为。在 C++ 中,多态通常通过继承和虚函数来实现。 理解多态 想象一个场景,你有一个动物园,里面有各种动物,如猫、狗、鸟等。每个动物都有自己的叫声。使用面向对象编程,我们可以创

GO数组解密:从基础到高阶全解

在本文中,我们深入探讨了Go语言中数组的各个方面。从基础概念、常规操作,到高级技巧和特殊操作,我们通过清晰的解释和具体的Go代码示例为读者提供了全面的指南。无论您是初学者还是经验丰富的开发者,这篇文章都将助您更深入地理解和掌握Go数组的实际应用。 关注公众号【TechLeadCloud】,分享互联网

< Python全景系列-6 > 掌握Python面向对象编程的关键:深度探索类与对象

Python全景系列的第六篇,本文将深入探讨Python语言中的核心概念:类(Class)和对象(Object)。我们将介绍这些基本概念,然后通过示例代码详细展示Python中的类和对象如何工作,包括定义、实例化和修改等操作。本文将帮助您更深入地理解Python中的面向对象编程(OOP),并从中提出一些不常见但很有用的技术观点。

10个方法提高产品的使用价值

提高产品使用价值的方法有: 1. 深入用户研究,理解用户核心需求和痛点。设计出确切解决用户问题的产品。 2. 关注用户感知价值,确保产品提供平稳流畅的用户体验。 3. 适时获取用户反馈,持续优化产品,解决用户在使用中的问题。 4. 注重产品的可用性,简化操作流程,降低用户学习成本。 5. 加强产品功