【操作系统之进程了解】
进程
- 前言
- 一、进程的相关概念
- 1.进程与程序的区别
- 2.并发与并行的区别
- 二、进程管理
- 1.进程的描述(PCB(Process control black))
- 1.进程的结构体(PCB)的属性(与进程有关)
- 2.进程的状态(与CPU相关的属性)
- 3. 进程的优先级(与CPU相关的属性)
- 4.进程的上下级
- 5.进程的记账信息
- 2.PCB的组织
- 3.进程之间的通信
- 三.小知识:
- 总结
前言
对于一个后端程序员,在操作系统中,我们与之打交道最多的可能就是进程管理,而对于进程管理,我们首先最重要的就是去了解什么是进程,这篇博客将会仔细讲讲什么是进程,揭开进程的面纱
一、进程的相关概念
我们都知道,我们写的代码,只是一个存储在硬盘的静态文件,只有通过编译后才会变成可执行的二进制文件,当我们运行这个文件时,它会被加载到内存上,然后CPU就去执行每一条指令,那么这个运行中的程序就被称为"进程"
1.进程与程序的区别
- 在上面我们有说到,一个运行中的程序就被称为进程,所以从这点可知,程序是静态的观念,进程是动态的观念;
- 程序是永存的,进程是暂时的(有创建,销毁)
- 进程具有并发性,程序没有
- 进程是竞争计算机资源的基本单位,程序不是
- 进程和程序不是一 一对应的,多个进程可执行一个程序,当然一个进程也可以执行多个程序(比如网易双开)
2.并发与并行的区别
经过上面学习,我们知道了进程就是在内存上通过CPU去执行可执行文件中的每一条指令,每个指令都有不同的功能,当我们执行到的指令是去硬盘读取文件的时候,这个时候就涉及到了访问磁盘了,也就是IO操作,这个过程是非常慢的,这个时候难道我们就在这等着?当然不是,CPU那么伟大的发明,怎么可能傻傻的去等呢。这时候CPU就会去执行其他进程,当原本读取文件的进程读取结束,发送一个中断,然后CPU回来继续执行。因为这多个程序,交互执行,就产生了CPU管理多个进程的想法,进程交替速度很快,就像并行一样
并发:是一个处理器核交替处理多个进程,但交替很快,就像是多个进程同时执行(但不是并行)
并行:是两个处理器核分别处理一个进程,没有交替(两个进程同时运行)
所以他们的区别在于宏观上和微观上:宏观上并发就是并行,微观上却是不相同的
二、进程管理
所谓的进程管理,其实就分为两步
1.描述一个进程:使用结构体/类,把一个进程有哪些信息,表示出来
2.组织这些进程:使用一定的数据结构,把这些给构体/类,放到一起(双向链表)
1.进程的描述(PCB(Process control black))
1.进程的结构体(PCB)的属性(与进程有关)
- PID(Process Identification)每一个进程都需要一个唯一的身份标识(当这个进程终止后,这个标识码会被回收,然后可能赋值给下一个进程)
- 内存指针:当前这个进程使用的内存是哪一部分,进程要运行起来,就会消耗一定的硬件资源,比如内存,这个内存指针指代使用了哪些内存资源
- 文件描述符表:硬盘上存储的数据大多都是一文件格为单位进行整理的;进程每打开一个文件,就会产生一个“文件描述符”,一个进程可能会打开多个文件,也就产生了多个“文件描述符”,把这些组合起来放在一个表里保存下来,就形成了一个文件描述符表
2.进程的状态(与CPU相关的属性)
在上面讲到,当一个进程去访问磁盘的时候,会非常耗时,这时CPU就会去执行其他进程,但是在这之前,会保存这个进程的信息(进程的上下文),进程的状态。优先级等
- 运行状态:这个时刻这个进程占用CPU。
- 就绪状态:可以运行,但是CPU上有其他进程在运行,所以进入暂时等待
- 阻塞状态:因为某一原因进入阻塞状态(比如要拿的资源还没获取到)
此外还有另外4种状态
1.创建状态:顾名思义也就是进程创建的那一会儿的状态(准备资源)
2.结束状态:一个进程运行结束后的那一刻状态
3.就绪挂起等待:当内存中阻塞状态的进程很多时。会占用内存空间,于是会把它放入磁盘中等待(等待拿到资源),当拿到资源就会变成就绪挂起等待(等待从磁盘进入内存)
4.阻塞挂起等待:这个状态就是在磁盘中等待拿到资源
3. 进程的优先级(与CPU相关的属性)
进程之间的调度不一定是公平的,也会有优先级之分(即进程抢占 CPU 时的优先级)
比如有的进程比较重要,那么它的优先级会比较高,所以它在CPU上运行的时间占CPU总运行时间的百分比就会很高,而不是很重要的,只需要时不时让他上CPU运行一会就好了,毕竟该程序打开运行了,总得运行一下吧。
4.进程的上下级
上下文,就是描述了当前进程执行到哪里这样的“存档记录”,进程在离开CPU的时候就要把当前运行的中间结果“存档”,等到下次进程在回到CPU上时,再恢复之前的存档,从上次的执行结果继续执行
举例:身为一个居家好男人,做菜是必不可少的技能,当然作者也属于这一类人,于是暑假在家做饭就成了我的小任务,有一天,我在家炖鸡汤,当我把鸡洗干净之后,准备下锅的时候,我的老妈叫我去车库提一下菜,有点重,于是我就记录下现在炖鸡汤到了哪一步(已经洗干净),当我把菜提回来后,我们通过记录(上下文)可知现在鸡应该下锅了。这就是进程上下文的作用了。
然而进程中当然不是记录炖鸡,所谓上下文具体指的就是进程运行过程中,cpu内部的一系列寄存器的值.
寄存器:
存档: 进程离开cpu就需要将寄存器的值保存在PCB上下文字段中
读档: 进程下次回来,cpu再把PCB中的值恢复到寄存器中.
5.进程的记账信息
统计了每个进程在cpu上执行了多久
可以作为调度的参考依据.
2.PCB的组织
对于上面讲到的结构体(PCB),我们通常使用双向链表来组织这些PCB
根据进程的状态不同分类,
把所有就绪状态的进程连在一起,组成了就绪队列
把所有阻塞状态的进程连在一起,组成了阻塞队列
对于双向链表,这是我们组织PCB常用的组织结构,此外还有索引方式的组织,但是这种不太好,把所有相同状态的进程放入一个索引表。而进程有创建和销毁,即数据结构中的插入和删除,索引方式中的插入和删除很麻烦,但是对于链表就很方便,所以通常选用链表
3.进程之间的通信
(进程并不是直接操作物理内存地址,会产生大问题)
一个进程无法直接干预另一个进程的内容
“进程的独立性”
每个进程有自己的独立空间(大大提升了操作系统的稳定性)
但是有时候,需要进程之间进行交互,相互配合
如果每个进程可以直接访问物理内存,其实是没有隔离性的,也就不需要进程间的通信了,进程1直接把计算的结果写到进程2里就好了
所谓的进程间通信,就是在隔离性的前提下,找一个公共的区域,让两个进程借助这个区域来完成数据的交换
此外操作系统提供的进程之间的通信具体方式有很多种:管道,消息队列,共享内存,信号.....
三.小知识:
CPU寄存器:CPU 内部一个容量小,但是速度极快的内存;
程序计数器:存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。
总结
通过写这篇博客,我理解到了什么是进程,知道了进程与程序的区别,并发与并行的区别,知道了PCB的许多属性,且它们的作用,还对组织这些PCB的数据结构有了理解,知道了进程之间为什么
要有进程之间的通信。受益很大,加油!!!
【操作系统之进程了解】相关推荐
- 【操作系统】进程 与 线程 详解(以及二者的比较)
目录 1.CPU基本组成原理 2. 进程(process) 1.1 操作系统管理进程的方式 1.2 PCB中的属性 1.3 实现进程调度相关属性 1.3.1 状态 1.3.2 优先级 1.3.3 记账 ...
- linux六种进程状态,Linux操作系统中进程的七种状态
Linux操作系统中进程的七种状态 发布时间:2018-05-07 20:43, 浏览次数:741 , 标签: Linux 1 Linux中进程的七种状态(1)R运行状态(runing):并不意味着进 ...
- 我的操作系统复习——进程(下)
上一篇博客是复习操作系统进程篇的上篇,包括进程状态.PCB.进程控制等--我的操作系统复习--进程(上),本篇博文是进程篇的下篇,开始复习进程同步.进程通信,以及重要的线程概念. 一.进程同步 什么是 ...
- 失败的windows系统服务调用readfile():管道已结束?_操作系统之进程详解(一)
一.进程的概念和特征 进程知识拓扑图 进程的定义 1. 进程是程序的一次执行过程. 2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动. 3.进程是具有独立功能的程序在一个数据集合上运行的过 ...
- 『操作系统』 进程的描述与控制 Part 1 前驱图与程序执行
文章目录 2.1 前趋图和程序执行 2.1.1 程序的顺序执行及其特征 1. 程序的顺序执行 2.程序顺序执行时的特征 2.1.2 前趋图 2.1.3 程序的并发执行及其特征 1. 程序的并发执行 2 ...
- 操作系统(二): 进程与线程
操作系统(二): 进程与线程 本章解读 进程管理是操作系统重点中的重点,涵盖了操作系统中大部分的知识和考点.其主要包括四部分:进程与线程,处理器调度,同步与互斥,死锁.所以我准备分四个部分来解释这四个 ...
- 操作系统之进程和线程
操作系统也是软件,区别于应用软件的最大特点具有进程管理.内存管理等功能. 一 进程 1.1 什么是进程(process) 进程指的就是正在运行中的程序.进程也是有生命周期,当程序运行结束,则进程结束. ...
- 操作系统OS进程(一)初识
OS进程 什么是进程 进程状态 中断 信号 什么是进程 逻辑上,执行程序的过程 操作系统加载程序,执行程序,产生一个进程 物理上,操作系统分配的资源 程序执行过程中需要的程序,数据,以及内存.寄存器等 ...
- Linux操作系统下进程讲解(史上最强总结)
Linux操作系统下进程讲解 一.进程的基本概念: 1. 什么是进程 在传统的操作系统中,程序不可以独立的运行,作为资源分配和独立运行的基本单位都是进程.进程的定义是一个可执行中程序的实例,系统中每一 ...
- 【操作系统】—进程的状态与转换
[操作系统]-进程的状态与转换 一.进程的三种基本状态 进程的另外两种状态 三.进程状态的转换
最新文章
- Redis的主从复制与高可用搭建(哨兵模式)
- BCH区块链上启动新应用程序Chainfeed
- GridView中DropDownList联动
- tmp ubuntu 自动删除吗_Linux tmp目录自动清理总结
- NYOJ 257 郁闷的C小加(一)
- 如何利用 Myflash 解析 binlog ?
- 直接插入排序(C语言)实现
- Leecode刷题热题HOT100(3)——无重复字符最长子串
- python层次聚类_python中做层次聚类,使用scipy.cluster.hierarchy.fclusterdata方法 | 学步园...
- 1091.二进制矩阵中的最短路径(力扣leetcode) 博主可答疑该问题
- idea谷歌翻译插件translation失效问题(可行)
- 记忆训练 0-100的110个数字对应编码
- Python求解二元二次函数梯度
- 多维时序 | MATLAB实现CNN-LSTM多变量时序预测
- Android矩阵运算总结
- Android安卓——实现发短信功能的代码
- 网站服务器防御怎么查,如何查看服务器被攻击
- 客客威客系统,任务发布接受网站
- 爬取某电影网站(未写完)
- 高级架构师_Redis_第1章_缓存原理与设计
热门文章
- php libjpeg,Linux 安装php-5.2.17出现 libjpeg.(a|so) not found
- 安徽专升本计算机基础【柳青版】书后全部名词解释习题+部分课后答案
- visualGDB配合VS2015使用,出现函数内部局部变量无法跳转到定义的解决方法。
- opencv3_java 修改图像大小Resize Imgproc.resize
- JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
- 移动办公oa管理软件的五大选择要素有哪些?
- 小轮子 ios 获取语言
- navicat mysql视图_Navicat使用教程:了解关系数据库中的视图
- Clion 打包exe无法运行 且 cmd窗口中文乱码
- 平面设计中有哪些视觉引导的方法