进程切换及一些常见概念(面试必问)
目录
- 前言
- 一、竞争性
- 1、什么是进程的竞争性?
- 2、为什么进程间存在竞争性?
- 二、独立性
- #这里先简单了解
- 三、并行
- 四、并发
- 五、优先级队列
- 六、进程切换
- 寄存器
- 1. 函数返回值
- 2. 进程上下文数据
- 总结
前言
在不同的进程在处理机上切换的过程中,我们需要学习一些相关概念以便我们更好地理解进程间的切换,这些概念包括:进程的竞争性,独立性,并行性,并发性,时间片,抢占式调度算法,进程的上下文数据
一、竞争性
1、什么是进程的竞争性?
进程的竞争性指进程间为抢夺某种资源而出现的现象
2、为什么进程间存在竞争性?
一般情况下,进程的数量是非常多的,而系统中的资源总是有限的,所以就会出现资源供不应求的现象,因此,为了获得资源,进程间就必须进行竞争
二、独立性
#这里先简单了解
进程的独立性指进程之间在运行的时候互不干扰,相互独立,一个进程挂掉或者异常不会影响其他进程
比如:QQ和微信是两个不同的进程,这两个进程在运行的时候是互不干扰的,QQ 挂掉的话不会影响微信的正常运行
三、并行
并行指的是在多个CPU中,不同的进程同时运行的一种现象,一般情况指的是不同的CPU中同时运行多个进程的现象,在多CPU中任何时候都有可能出现同时在运行,这里以一个两个CPU的图进行理解
四、并发
并发指的是在一个CPU中多个,多个进程在CPU的运行队列中相继上CPU运行的现象,不会出现多个CPU同时运行的情况,因为一个CPU在同一时间内只能处理一个进程,但是由于CPU的运行速度过快,给我们宏观的感觉就是多个进程在同时运行
比如现在在我的电脑上看好像是四个进程在同时运行,其实实际上并不是的,这四个进程是相继以很快的速度上CPU不断轮流运行的,只是因为CPU的运行速度太快所以给我们的感觉是几个进程在同时运行
- 那么问题来了,多个进程在CPU上到底是如何进行切换的呢??CPU是死板地将一个进程处理完再运行下一个进程吗??
显然不是的,现在的大部分操作系统都是分时操作系统,也就是说,操作系统会给每一个进程在每一次调度周期内赋予一个时间片,在一个时间段内,多个进程都会通过切换交叉的方式让多个进程在一段时间内得到推进,这种现象叫做并发
时间片:指操作系统指定的一个进程在一次上CPU运行的时间间隔,通常是毫秒级别的
调度器:存在于CPU中,负责调度进程上CPU上运行
五、优先级队列
在系统中会存在很多的进程,那么通过上面我们已经知道,CPU并不是运行完一个进程之后才会运行下一个进程,而是操作系统会设置一个时间片,让每个上CPU运行的进程每次以该时间片的时间在CPU上运行之后才下CPU,那么此时如果一个在CPU上运行的进程如果还没达到运行的时间片,此时系统中又来了一个优先级比该进程还要高的进程,此时咋整?
显然,操作系统会强制性让原先在CPU上运行的进程下处理机,回到运行队列,让优先级高的进程上CPU上运行,这种现象叫抢占式算法
抢占式内核:当一个更高优先级的进程来的时候,会将一个正在CPU上运行的低优先级进程从CPU上剥离,放上更高优先级的进程上CPU运行
进程的优先级很多,那么此时操作系统如何处理呢??
操作系统会维护一个叫优先级队列的东西,其思想是:将不同优先级的进程分别放在一个哈希表中进程存储,这个哈希表是一个数组,数组中存放的是指向进程PCB的指针,比如说:有优先级为1、2、3、4、5、6的进程,那么哈希表中就必须存放指向优先级为1、2、3、4、5、6的进程控制块的指针,相同的优先级采取先到先得的方式排成一个队列,如图
需要知道的是,在操作系统中,允许不同优先级进程的存在,相同的优先级可能存在多个,因此,操作系统只需要维护一个task_struct* priority_queue[6];
的哈希表就行了但是在系统中,我们知道可能会有不同的进程源源不断地加入队列,此时应该怎么办呢?
操作系统会维护两个一模一样的哈希表来存储相应优先级的进程
这两个哈希表的作用:active:是用来运行当前队列中存在的进程
old:用于存储新加入的进程
当active中的进程运行完的时候,我们只需要调用swap函数将两个哈希表的地址交换一下就可以了,swap(active,old);
那么原先的old就变成active,原先的active就变成old
六、进程切换
寄存器
CPU中存在很多的寄存器,这些寄存器可以存储很多临时数据,存储的量比较少,但是很重要
1. 函数返回值
函数中的返回值在函数调用结束时会将返回值先写到CPU中的某个寄存器中,然后再move到对应的变量中,比如下面一个简单的例子
在Add函数调用结束之前会先将x+y的值写到CPU中的某个寄存器,然后再将这个值move给c
2. 进程上下文数据
进程被执行的过程中会产生很多临时数据,这些临时数据会被暂存到CPU中的某些寄存器中,我们把进程在运行的过程中产生的各种寄存器数据叫做进程的上下文数据,当进程从处理机被剥离时,要保存好上下文数据,当进程重新上处理机运行的时候,需要将上下文数据恢复到寄存器,这些数据在进程下处理机后会保存在进程的PCB中(Linux中叫task_struct)
注意:在进程离开CPU时保存进程的上下文数据,就是为了在进程重新上CPU运行的时候能够很好地告诉CPU上次执行到哪个地方,恢复回下CPU时的情况
总结
本文我们学习了进程中的一些概念,包括:竞争性,独立性,并行性,并发性,时间片,抢占式调度算法,还有进程间切换的上下文数据
进程切换及一些常见概念(面试必问)相关推荐
- 线程同步有几种方法_架构师面试必问的多线程状态切换及常用方法
架构师面试必问的多线程状态切换及常用方法 一.问题背景 Java架构师面试中,多线程状态切换及常用方法几乎是必问的,要掌握创建多线程的方式和方法. 二.创建多线程的几种方式 2.1方式一继承Threa ...
- linux驱动工程面试必问知识点
linux内核原理面试必问(由易到难) 简单型 1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? 2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化, ...
- 【Android面试】Android中高级开发面试必问,7年外包一飞冲天
Andorid 开发在前两年也非常火热,但随着客户端开发招聘回归理性,行业已经越来越成熟,岗位招聘也就自然而然地变"卷"了.这一点,身为程序员老鸟的我深有体会. 年初,我就开始投递 ...
- Android面试必问框架原理
Android面试必问框架原理 volatile的实现原理 synchronized的实现原理 join方法实现原理 CAS无锁编程的原理 ReentrantLock的实现原理 AQS的大致实现思路 ...
- 看完946页“JAVA高级架构面试必问”,金九银十社招全拿下
前言 我本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时 ...
- 互联网公司面试必问的Redis题目
https://juejin.im/post/5b99d4bce51d450e7a24b66e#heading-0 Redis是一个非常火的非关系型数据库,火到什么程度呢?只要是一个互联网公司都会使用 ...
- 互联网公司面试必问的mysql题目(上)
又到了招聘的旺季,被要求准备些社招.校招的题库. 介绍:MySQL是一个关系型数据库管理系统,目前属于 Oracle 旗下产品.虽然单机性能比不上oracle,但免费开源,单机成本低且借助于分布式集群 ...
- 计算机网络八股文-面试必问
搬运–面试必问计算机网络 原博客链接:https://www.nowcoder.com 每次面试问网络都还可以,整理了点资料,应付普通的问题没什么问题了. 除了字节的网络太为难人,其他公司都说回答的很 ...
- 99. 中高级开发面试必问的Redis,看这篇就够了
中高级开发面试必问的Redis,看这篇就够了! 一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会 ...
最新文章
- Go 知识点(01)— 主协程与子协程执行顺序
- html在线缓存视频,javascript – 如何为HTML视频添加缓冲
- cmd find 命令 多个 或者 关系 +windows_Chocolatey -Windows系统的yum||apt 软件安装工具...
- (转)mybatis常用jdbcType数据类型
- mysql 8.0 创建函数_MySQL 8.0 新增特性
- [Leetcode][第95题][JAVA][不同的二叉搜索树 II][递归]
- 结合中国古典文化取名 华为意在把传说化为现实奇迹
- 编译OpenJDK12:atomic.hpp: fatal error C1189: size_t is not WORD_SIZE(换了VS2017编译)
- 如何完全卸载MySQL
- xshell5 的账号密码搬家
- 各种格式视频,图片,音频免费下载
- 程序员职业规划:按照这规划,我年薪43万!
- 【亲自动手试验过的】硬盘免光驱安装Fedora5
- 图片转DATA:URI工具
- nginx配置文件结构1
- 申请邮箱需要什么,邮箱申请方法开通条件教程分享
- 【论文阅读】一些研究想法
- html5地区下拉菜单,JS特效:地区下拉菜单
- Python matplotlib 柱状图色卡
- Excel中使用VLOOKUP在多个sheet表中查询数据的公式