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

这篇具有很好参考价值的文章主要介绍了深入理解操作系统中进程与线程的区别及切换机制(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

进程

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

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

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

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

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

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

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

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

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

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

进程的状态

五状态模型

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

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

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

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

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

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

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

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

七状态模型

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

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

挂起的状态分两种:

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

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

总结

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

到了这里,关于深入理解操作系统中进程与线程的区别及切换机制(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 操作系统进程线程(三)—进程状态、同步互斥、锁、死锁

    原子操作的概念 原子操作就是不可中断的一个或者一系列操作。 原子操作如何实现 总线锁定 使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号的时候,其他处理器的请求将被阻塞住,那么该处理器可以独占内存。 缓存锁 总线锁开销比较大,因为把CPU和内

    2024年02月04日
    浏览(52)
  • 操作系统-进程和线程-同步、互斥、死锁

    目录 一、同步互斥  二、互斥的实现方法 2.1软件实现 2.1.1单标志法 2.1.2双标志先检查 2.1.3双标志后检查 2.1.4Petersons算法 2.2硬件实现 2.2.1 TestAndSet指令 2.2.2 Swap指令   三、信号量机制 3.1整形变量  3.2 记录型变量  3.3用信号量实现进程互斥、同步、前驱关系 3.3.1互斥  3.3.2同步

    2024年02月08日
    浏览(52)
  • 【Linux】初步理解操作系统和进程概念

    操作系统是一款纯正的 “搞管理” 的文件 。 那操作系统为什么要管理文件? “管理” 又是什么? 它是怎么管理的? 1.操作系统帮助用户,管理好底层的软硬件资源; 2.为了给用户提供一个良好,安全的环境 即操作系统通过管理好底层的软硬件资源,为用户提供一个良好

    2024年02月15日
    浏览(43)
  • 理解冯.诺依曼体系结构(操作系统和进程)

    冯诺依曼体系结构特性: 冯诺依曼体系结构中的 存储器 指的是 内存 ——一种 硬件级别的缓存空间 (介于IO设备与CPU之间,只有 数据存储和读写功能 ,并且具有 较高的数据读写速度 的 独立单元 )(内存中存储二进制数据) CPU和IO设备之间 不能直接进行数据传输 ,CPU和IO设备之间的

    2024年02月16日
    浏览(42)
  • 深入理解Windows操作系统机制(二)

    我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。 我们每天都在用Windows操作系统,但是其实我们每天直接在打交道的并不是Windows操作系统的内核,而是Windows操作系统的人机交互界面,这个界面其实只是Window

    2024年02月17日
    浏览(55)
  • 【Linux操作系统】深入探索Linux进程:创建、共享与管理

    进程的创建是Linux系统编程中的重要概念之一。在本节中,我们将介绍进程的创建、获取进程ID和父进程ID、进程共享、exec函数族、wait和waitpid等相关内容。 在Linux系统中,进程的创建使用 fork() 系统调用。 fork() 系统调用会创建一个与当前进程相同的子进程,子进程会复制父进

    2024年02月12日
    浏览(57)
  • Linux--进程(一篇博客让你理解操作系统的底层)

    本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~   身为一个程序员,我们必须要了解冯诺依曼体系结构,比如我们常见的笔记本电脑,不常见的计算机,如云服务器等,绝大多数都遵循我们的冯诺

    2024年02月05日
    浏览(38)
  • 【操作系统和计网从入门到深入】(八)线程

    只要满足,比进程轻量化,cpu内所有线程资源共享,创建维护成 本更低等要求,就能叫线程。 不同的OS实现方式不同,下面这个是Linux特有的方案。Linux没有给线程重新设计数据结构! 什么叫做进程? pcb + 地址空间 + 页表 CPU调度的基本单位:线程! 性能损失 一个很少被外部

    2024年02月19日
    浏览(31)
  • 【Linux】深入理解系统文件操作(1w字超详解)

    ❓是不是只有CC++有文件操作呢?💡Python、Java、PHP、go也有,他们的文件操作的方法是不一样的啊 1.1对于文件操作的思考: 我们之前就说过了: 文件=内容+属性 针对文件的操作就变成了对内容的操作和对属性的操作 ❓当文件没有被操作的时候,文件一般会在什么位置?💡

    2024年02月07日
    浏览(48)
  • Java——Java选择题复习(1)(Java基础,进程,多线程,操作系统)

    1. 下面关于程序编译说法正确的是() A. java语言是编译型语言,会把java程序编译成二进制机器指令直接运行 B. java编译出来的目标文件与具体操作系统有关 C. java在运行时才进行翻译指令 D. java编译出来的目标文件,可以运行在任意jvm上 答案:C 题目解析: A. Java是半编译半

    2024年02月03日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包