操作系统之进程的初步认识(1)
进程
- 1. 进程的相关概念
- 1.1 进程的定义
- 1.2 进程的概念(1)
- 1.3 进程的概念(2)
- 2. 进程和程序的区别
- 3. 进程管理:
- 3.1 进程的结构体有哪些属性
- (1) Pid(操作系统里指进程识别号)
- (2) 内存指针
- (3) 文件描述符表
- 4. 进程调度:
- (1) 并行
- (2) 并发
- 5. 进程调度需要的属性
- (1) 进程状态
- (2) 进程优先级
- (3) 进程上下文
- (4) 进程的记账信息
- 6.操作系统的常用数据结构
1. 进程的相关概念
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。
1.1 进程的定义
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
1.2 进程的概念(1)
进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。
1.3 进程的概念(2)
进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行时),它才能成为一个活动的实体,我们称其为 进程(下面讲到为什么进程是活动的实体)。
通俗一点理解,我们可以将 运行中的程序 看做是 进程,比如我们平时经常使用到的QQ,当我们打开qq这个app时就相当于启动了一个进程,操作系统就会为该进程分配内存空间.
我们看下图:

2. 进程和程序的区别
首先我们要明白程序是什么?程序是我们写下来的一段代码,而进程的产生是因为代码开始执行了。
就像下图:

此时我们便可以通过这个图片来理解程序和进程的区别:
一、 进程是动态的,程序是静态的:程序是有序代码的集合,进程是程序的执行。进程有核心态/用户态。
程序是静态的很好理解,那自己写的代码当然是静态的。进程是动态的也好理解,代码开始执行,那肯定会执行完毕,执行完毕了,进程也就消亡了,所以进程是动态的。
二、 进程是暂时的,程序是永久的;进程是一个状态变化的过程,程序可以长久保存
基于一的解释,二这个也是相同的理解。
三、进程和程序的组成不同,进程的组成包括程序、数据和进程控制块(即进程状态信息)
由于进程是动态的,并且需要间断的执行,那么就需要保存进程的状态信息。
3. 进程管理:
操作系统本身是一个大话题,是一个非常发杂的软件.它本身的功能有很多,其中有一个和咱们密切相关的功能模块, 进程管理!
为什么我们需要进程管理呢?
大家看图:

可以看到,由于我们的进程很多,才需要管理,如果进程只有几个的话当然涉及不到进程管理.
如何进行进程管理呢?
- 描述一个进程,使用结构体/类,把一个进程有那些信息表示出来.
- 组织这个进程,使用一定的数据结构,把这些结构体对象放到一起,(通常是使用双链表这个数据结构)
3.1 进程的结构体有哪些属性
关于进程的结构体我们还有一个别称,就是 PCB(进程控制块)
(1) Pid(操作系统里指进程识别号)
PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。
只要运行一程序,系统会自动分配一个标识
是暂时唯一:进程中止后,这个号码就会被回收,并可能被分配给另一个新进程。
只要没有成功运行其他程序,这个PID会继续分配给当前要运行的程序。
如果成功运行一个程序,然后再运行别的程序时,系统会自动分配另一个PID。
(2) 内存指针
当前这个进程使用的内存是哪一部分.(进程运行的时候,使用了哪些内存上的资源)
(3) 文件描述符表
如下图:

上图红色框中的都是文件,
文件: 比如硬盘上存储的数据,往往就是以文件为单位进行整理的.
进程每打开一个文件就会产生一个 ‘文件描述符’(标识这个文件被打开) .由于一个进程可能会打开很多文件,自然对应了一组文件描述符,把这些文件描述符放到了类似于顺序表这样的一个数据结构中,就构成了文件描述符表!
文件描述符表描述了:你这个进程使用了那些文件,或者是使用了哪些硬盘资源.
此时:我们结合内存指针和文件描述符表可以知道,进程的运行需要从操作系统这里申请资源,此时也可以理解为进程是操作系统进行资源分配的基本单位!
下面的属性都是描述个cpu资源相关的属性.这些属性都是辅助进行.
4. 进程调度:
咱们的程序能够运行,全依仗cpu,每个程序相当于一组’二进制指令’的集合,这些指令靠cpu运行.
cpu有一个概念(核心数)
以小鱼这个电脑举例:

我的电脑只有8个核心,其中每个核心相当于一个员工,并且每个员工可以同时进行两个人的工作,也就可以理解为我的这八个核心可以同时运行16个进程,当时大家刚才已经看到了,我们的任务管理器里面有不小于100个进程正在运行,那我这个小小的8个核心就是累屁了也不能同时运行100多个进程啊.
那么下面就涉及到了计算机为什么可以同时运行这么多的进程了.
(1) 并行
并行性是指系统具有同时进行运算或操作的特性,在同一时刻能完成两种或两种以上担任工作,并行性需要相关硬件的支持,例如流水线或多处理硬件环境。
举个例子:
假设我是一个长的好看,有才华的女生,我有一个择偶标准,就是需要(1)有钱(2)长得帅(3)会舔我(会哄我开心,帮我排解压力).
但是呢,放眼望去,并没有找到符合这三种条件的男生(我们称为ABC),有钱的不帅( A ),帅的没钱( B ),会舔的不帅也没钱( C ).但是我呢,是一个追求完美的女生,我就是想要找到符合我择偶标准的男生,此时呢~我就打算,同时和三个男生交往,因为是同时和他们一起交往,此时就是并行.
(2) 并发
并发指两个或多个事件在同一时间间隔内发生。操作系统的并发性是指计算机系统中’同时’存在多个运行的程序,因此具有处理和调度多个程序同时执行的能力。在操作系统中引进程序的目的是使程序能够并发执行。在多道程序环境下,一段时间内,宏观上有多道程序在"同时"执行,而在每一个时刻,单处理机环境下 实际仅能有一道程序执行,因此 微观上这些程序是分时交替执行的。操作系统的并发性是通过分时得以实现的。
依旧是通过上面的例子举例:
因为我是在同时和三个男生交往,那么对于我的名誉来说,我一定是不想让他们碰见的.
所以呢,我就规划了一个时间表:
| 周一,周三,周五 | 周二,周四 | 周六 | 周日 |
|---|---|---|---|
| 有钱的( A ) | 帅的( B ) | 会舔的( C ) | 给自己放个假 |
为什么有钱的可以一礼拜陪他三天,当然是因为金钱的力量啦!!!
于是呢,我就按照上述的表来进行每周的时间分配,当我们把时间的长度调整为1周时,会发现我在不同的时间陪着他们不同的人,但是当我把时间的长度调为1年,2年时,我们就可以认为,我是在"同时"和ABC在一起.此时涉及到的性质就是我们所讲到的"并发"
5. 进程调度需要的属性
(1) 进程状态
简单的认为进程的状态主要是这两个:
就绪态: 该进程已经准备好,可以随时上cpu执行
阻塞态:该进程暂时无法上cpu执行
我们依旧通过上述的例子演示:
有一天呢,A说我需要出差一个月,那么在他出差的这一个月期间,我都无法跟他在一起,此时A就是"阻塞态",但是虽然A出差了,但是我还有B,C,此时我可以随时去找这两个男友,陪他们在一起,此时这两位男友就是"就绪态".
(2) 进程优先级
进程之间的调度不一定是公平的,有的需要优先调度~~
例如:
为什么我会给A分配更多的时间来陪我,是因为A有钱,有钱就体现了他的重要性,当然要A优先了,那么为什么只让C一礼拜陪我一次,当然是因为,他除了能把我舔的开心,没有其他用途了,一没钱二不帅,优先级自然就是最后的了.
(3) 进程上下文
上下文就是描述当前的进程执行到了哪里,这样的一个"存档记录".
进程在离开ccpu的时候要把当前运行的中间结果进行"存档",等下次进程回来cpu上,再回复之前的"存档",从上次的结果继续往后执行.
所谓上下文具体指的就是进程运行过程中,cpu内部的一系列寄存器的值.
寄存器:
寄存器有很多种,其中最典型的作用就是保存当前进程执行的中间结果,包括执行到了哪一条指令.
存档: 进程离开cpu就需要将寄存器的值保存在PCB上下文字段中~~
读档: 进程下次回来,cpu再把PCB中的值恢复到寄存器中.
举例:
有一天A跟我说,你准备准备咱们下个月去三亚旅游,那么此时我需要准备的就是性感泳衣啦!之后,在我陪着B的时候,他对我说下个月我妈妈过生日,你记得准备下生日礼物啊!那么我就想,阿姨的生日礼物就买个手机吧.
后来A问我东西准备好了吗,但是由于我一时间记不清,便说了手机已经买好了,B问我准备好了吗?我又回答说性感泳衣已经买好了.此时不就是穿帮了嘛,所以我们需要进程的上下文来记录我们的事情进行到了哪里!
(4) 进程的记账信息
统计了每个进程在cpu上执行了多久~~
可以作为调度的参考依据.
例如: 我一礼拜只陪C一天,导致C舔我舔的不是那么用心了,此时我一看陪伴C的天数,发现是陪伴他的次数太少了,于是我需要一礼拜多抽出几天陪他,这样他就会又很用心的舔我了~当然,这样的情况也只是暂时的,等他又用心舔我之后,我依旧是一礼拜只陪他一天…
6.操作系统的常用数据结构
操作系统往往使用双向链表这样的结构来组织PCB~~
1.创建一个进程就是创建一个链表的结点
2.销毁一个进程就是把链表中的结点给删除了
3.遍历进程就是遍历双向链表
相关文章:
操作系统之进程的初步认识(1)
进程1. 进程的相关概念1.1 进程的定义1.2 进程的概念(1)1.3 进程的概念(2)2. 进程和程序的区别3. 进程管理:3.1 进程的结构体有哪些属性(1) Pid(操作系统里指进程识别号)(2) 内存指针(3) 文件描述符表4. 进程调度:(1) 并行(2) 并发5. 进程调度需要的属性(1) 进程状态(2) 进程优…...
【Java】你真的懂封装吗?一文读懂封装-----建议收藏
博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 write in the front: 如何理解封装? 试想:我们使用微波炉的时候,只用设置好时间,按下“开始”…...
使用MobaXterm ssh远程登录Ubuntu 20.04
使用MobaXterm 远程登录Ubuntu 20.04 首先需要到官网下载一个MobaXterm 准备一台Ubuntu20.04的虚拟机。使用ifconfig查看IP 我这里的虚拟机是新安装的,所以会提示命令不存在,只要按照提示输入: sudo apt install net-tools接着等待安装完成…...
蓝桥杯历年真题训练
2012年第四届全国电子专业人才设计与技能大赛“自动售水机”设计任务书1. 系统框图接下来我们将任务分块: 1. 按键控制单元 设定按键 S7 为出水控制按键,当 S7 按下后,售水机持续出水(继电器接通,指示 灯 L10 点亮&…...
Spring事务报错: org.springframework.transaction.UnexpectedRollbackException
异常信息:支持当前事务,如果不存在则抛出异常。事务被回滚,因为它被标记为仅回滚 org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-onlyat org.springframe…...
Spring:IOC和AOP
Spring:IOC和AOP一. IOC(1) 引入(2) 定义(3) 作用(4) 实现(5) DI依赖注入二. AOP(1) 概念(2) Spring中的AOP(3) 入门案例0. 准备:1. 定义通知类和通知方法;2. 在通知类中描述和定义切入点 pointcut3. 用注释绑定切入点和通知方法4. 通知类&am…...
【笔记】效率之门——Python中的函数式编程技巧
文章目录Python函数式编程1. 数据2. 推导式3. 函数式编程3.1. Lambda函数3.2. python内置函数3.3. 高阶函数4. 函数式编程的应用Python函数式编程 我的AI Studio项目:【笔记】LearnDL第三课:Python高级编程——抽象与封装 - 飞桨AI Studio (baidu.com) p…...
Java【多线程基础2】 Thread类 及其常用方法
文章目录前言一、Thread类1, 构造方法2, 常用成员属性3, 常用成员方法3.1, start 启动线程3.2, interrupt 中断线程 (重点)3.2.1, 手动设置标记位3.2.2, 使用内置标记位3.3.3, interrupt 方法 的作用3.3 sleep 休眠线程3.4, jion 等待线程3.5 获取当前线程的引用总结前言 各位读…...
JVM调优实战及常量池详解
目录 阿里巴巴Arthas详解 Arthas使用场景 Arthas使用 GC日志详解 如何分析GC日志 CMS G1...
ChatGPT研究分析:GPT-4做了什么
前脚刚研究了一轮GPT3.5,OpenAI很快就升级了GPT-4,整体表现有进一步提升。追赶一下潮流,研究研究GPT-4干了啥。本文内容全部源于对OpenAI公开的技术报告的解读,通篇以PR效果为主,实际内容不多。主要强调的工作…...
我为什么要写博客,写博客的意义是什么??
曾经何时我也不知道,怎样才能变成我自己所羡慕的大佬!!在一次次的CSDN阅读的过程中,结实了许多志同道合的人!!包过凉哥,擦姐……大佬,但是,很遗憾,与这些人只…...
ssm框架之spring:浅聊AOP
AOP(Aspect Oriented Programming),是一种设计思想。先看一下百度百科的解释: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态…...
k8s详解
一、k8s中的yaml文件 JSON格式:主要用于api接口之间信息的传递YAML格式:主要用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化 YAML格式: 大小写敏感使用缩进代表层级关系,不支持TAB制表符缩…...
计算机操作系统(第四版)第一章操作系统引论 1.1操作系统的目标和作用
第一章操作系统引论 1.1操作系统的目标和作用 什么是操作系统OS? 配置在计算机硬件上的第一层软件是对硬件的首次扩充。 是最重要的系统软件,其他系统软件应用软件都依赖于操作系统的支持。 操作系统主要作用? 管理计算机系统所有硬件设…...
git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)
项目经理远程创建了一个空项目,无任何内容,给我赋予的developer账号权限,本地改为后提交代码试了很多次都上传不上去,报错如下: ! [remote rejected] master -> master (pre-receive hook declined)先说结果&#x…...
jQuery 遍历方法总结
遍历方法有:1、add(),用于把元素添加到匹配元素的集合中;2、children(),用于返回被选元素的所有直接子元素;3、closest(),用于返回被选元素的第一个祖先元素;4、contents(),用于返回…...
OKHttp 源码解析(二)拦截器
游戏SDK架构设计之代码实现——网络框架 OKHttp 源码解析(一) OKHttp 源码解析(二)拦截器 前言 上一篇解读了OKHttp 的基本框架源码,其中 OKHttp 发送请求的核心是调用 getResponseWithInterceptorChain 构建拦截器链…...
如何修改设置浏览器内核模式
优先级: 强制锁定极速模式 >手动切换(用户)>meta指定(开发者)>浏览器兼容列表(浏览器) 需要用360安全浏览器14,chromium108内核,下载地址https://bbs.360.cn/t…...
30个Python常用小技巧
1、原地交换两个数字 1 2 3 4 x, y 10, 20 print(x, y) y, x x, y print(x, y) 10 20 20 10 2、链状比较操作符 1 2 3 n 10 print(1 < n < 20) print(1 > n < 9) True False 3、使用三元操作符来实现条件赋值 [表达式为真的返回值] if [表达式] else [表达式…...
ubuntu解决中文乱码
1、查看当前系统使用的字符编码 ~$ locale LANGen_US LANGUAGEen_US: LC_CTYPE"en_US" LC_NUMERIC"en_US" LC_TIME"en_US" LC_COLLATE"en_US" LC_MONETARY"en_US" LC_MESSAGES"en_US" LC_PAPER"en_US" …...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
