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

进程

所谓进程,大家可以理解为我们打开的应用程序,如微信、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资源运行系统进程。进程的状态通过队列进行管理。同时还讨论了内存交换和进程挂起的问题。

相关推荐
踏浪无痕11 小时前
JobFlow 实战:无锁调度是怎么做到的
后端·面试·架构
学海_无涯_苦作舟12 小时前
MySQL面试题
数据库·mysql·面试
小熊哥72215 小时前
HTTP一些问题的解答(接上篇)
面试
LYFlied17 小时前
【每日算法】LeetCode124. 二叉树中的最大路径和
数据结构·算法·leetcode·面试·职场和发展
摇滚侠17 小时前
面试实战 问题三十四 对称加密 和 非对称加密 spring 拦截器 spring 过滤器
java·spring·面试
于是我说18 小时前
一份Python 面试常见问题清单 覆盖从初级到高级
开发语言·python·面试
王中阳Go19 小时前
我辅导400+学员拿Go Offer后发现:突破年薪50W,常离不开这10个实战技巧
后端·面试·go
无知的前端19 小时前
一文精通-Mixin特性
flutter·面试·dart
yaoh.wang20 小时前
力扣(LeetCode) 94: 二叉树的中序遍历 - 解法思路
python·算法·leetcode·面试·职场和发展·二叉树·跳槽
1024肥宅20 小时前
现代 JavaScript 特性:ES6+ 新特性深度解析与实践
前端·javascript·面试