进程概述

文章目录

  • 计算机算机组成
  • 因特尔CPU型号
  • 摩尔定律
  • 衡量CPU的指标
  • 指令(Instruction)
  • 操作系统(Operating System)
  • 虚拟地址空间(Virtual Address Space)
  • 进程(Process/task)
  • 进程管理(PCB - 进程控制块)
  • 进程控制块(Process Control Blob)
  • 进程间通信

本节介绍进程和计算机相关概念,为后面介绍多线程铺垫一下

计算机算机组成

在这里插入图片描述

  • CPU(Central Processing Unit)中央处理单元,计算机最核心的部分,相当于计算机的大脑。
  • 存储器
    • 内存(主存):速度快快、空间小、成本更高、掉电后数据丢失。
    • 外村:速度慢、空间大、成本低、掉点后数据丢失。
  • 输入设备
    • 键盘、鼠标、网卡等。
  • 输出设备
    • 显示器、音箱等。

可怕的是CPU虽然制造极其困难,但是它的价格却不高,几年前的CPU已经成为白菜价了,问什么会出现这种情况呢?

  1. CPU通过大规模量产,可以降低成本。
  2. CPU迭代速度非常快,并且每一代CPU相较于上一代的提升都很大,这就使得前代CPU的价格大幅度降低

因特尔CPU型号

英特尔CPU型号首先是分哪个系列的,然后一个产品线和代数

  • 服务器 - 至强
  • 家庭 - 酷睿
    • I3 - 入门级
    • i5 - 普通级
    • i7 - 高端级
    • i9 - 旗舰级
  • 嵌入式、低耗设备 - 赛扬。我们这里所说的什么I3、I5、I7、I9,这个是针对酷睿。

    由于CPU技术迭代快,所以CPU的代数是一个非常重要的指标,一般来说,13代i5的性能会大于12代i7。那么为什么会出现i3、i5、i7、i9呢?是由于CPU加工有一个良品率的问题。CPU的体积虽然小巧,但是其内部包含了非常精密的大规模集成电路,存在着大量的计算单元(ALU - Algorithm Logic Unit),每个计算单元体积都极小,这就给加工加工制造带来了非常大的难度。在制造时是使用激光刻蚀去构建集成电路的。所以制造出的CPU中的计算单元会有的无法完成计算任务,有的计算单元是不可用的。那么厂家使用一定的技术屏蔽不可用的计算单元,只保留功能完好的计算单元,所以计算单元的数量就对应了各个级别的CPU

摩尔定律

    摩尔定律是有因特尔联合创始人兼副总裁摩尔,在长期从事CPU制造后,总结出来的一个定律,内容大致是:芯片每隔18个月,集成程度提高一倍,计算效率提高一倍,成本下降一半。这个定律在CPU发展的50多年中一直被印证。

衡量CPU的指标

主频和核心数是衡量CPU性能的核心指标.

主频即CPU的时钟频率,计算机的操作在时钟信号的控制下分步执行,每个时钟信号周期完成一步操作,时钟频率的高低在很大程度上反映了CPU速度的快慢

  • 主频 - 3.20GHZ

    • 指的是CPU每个时钟周期所指向的指令条数
    • 可以简单的理解为CPU每秒钟可以执行32亿条指令
  • 核心数

    • 核心就是一个能完成完整计算功能的整体
    • CPU最初都是单个核心的,只能执行单个程序,后来发展出现了多进程、多线程技术,厂家为了支持这样的技术,就研发处理多核心的CPU
    • 多核CPU的到来,又一步极大地提高了CPU的性能

指令(Instruction)

指令时CPU上能够执行任务的最小单元。高级语言中一条语句可能就对应了CPU中的多条指令,比如高级语言中的加法操作,在CPU指令层面可能就要执行load(读取数据到寄存器),add(加法器完成加法操作),store(写回内存)。在CPU设计是就会支持一些指令,让CPU可以正常的工作,CPU的工作就是由一条条指令组成的。

操作系统(Operating System)

操作系统很多,比如我们最常用的Windows,Mac OS,服务器使用的Linux/Unix ,移动端的Android、Ios等,虽然这些操作系统来自于不同的厂商,功能也各有侧重,但是这些操作系统的核心机制是相通的。

操作系统本质上是用来管理计算机软硬件资源的软件,对下管理所有的硬件设备,对上给软件(应用层)提供一个稳定的运行环境,这一点是由进程的隔离性保证的(后面会介绍到),可以保证各个程序在运行时(进程)不会相互干扰。
在这里插入图片描述

操作系统分为内核态和用户态两种模式,一个程序在运行过程中,可能是在用户态工作,也可能是在内核态工作。首先介绍一下什么叫做内核。内核其实顾名思义,它就属于是一个操系统,最核心的功能模块。简单理解 操作系统 = 内核 + 配套的应用程序一些核心的程序都是直接在内核中运行的,如一些驱动程序等。内核只有一份但是却要给很多的上层软件提供支持,一般内核都会给上层提供API供上层使用。

在Java中,一般不会直接使用系统API,由于不同操作系统提供的API是不相同的,Java对系统API进行了一层封装,保证跨平台特性,降低了学习和使用的成本。

虚拟地址空间(Virtual Address Space)

早期的操作系统它程序运行时,它分配的内存就直接从物理内存上进行分配。这样一旦某个程序越界访问/修改内存,就可能会导致其它程序异常崩溃

为了解决这个问题就引入了”虚拟内存空间“的概念,通过对物理内存的抽象,通过虚拟内存映射到物理内存,在访问到物理内存之前强行检查,防止出现未定义行为。保证了进程间的隔离性从而给进程提供一个稳定的运行环境。
在这里插入图片描述

假如你故意访问构造一个其他的一个地址,在应用程序这个层面看到的是异常,在系统内部,它是通过这个信号机制触发一个signal segment default(段错误)这样的一个信号。

进程(Process/task)

在Java语言生态下,并多进程编程使用的并不多,创建、销毁、调度进程是一个很大的开销。反而在C++中经常使用多进程编程,Java中经常使用多线程编程,要想清楚的了解线程,就要先对进程有一个大概的了解。
在这里插入图片描述

进程(Process),又叫做任务(task),进程本质上是一个正在运行的程序,exe文件只是一个可执行文件,是静态的,不是进程。进程运行时,CPU会分配给进程一定的系统资源(CPU资源,内存资源、硬盘资源…),每个进程要想执行就都需要消耗一定的系统资源,进程每个时刻消耗的资源都是动态变化的。 所以进程是操作系统资源分配的最小单位

进程管理(PCB - 进程控制块)

  1. 先描述:使用PCB结构表示出进程的各种属性
  2. 后组织:使用类似双向链表,把这些PCB给串起来
    进程控制块PCB

进程是系统分配资源的基本单位。进程的管理,想要对实体进行管理,首先在Linux操作系统中使用task_struct结构体描述和管理一个进程,task_struct又叫做PCB(Process Control Blob)进程控制块,这样我们就可以操作系统中的进程使用一定的数据结构来进行管理(增删改查)了。一个进程可能有一个PCB,也可能有多个,因为一个进程可能会有多个线程。

当我们创建一个进程,本质上就是创建出这样的一个结构体,再把它插到链表上面。销毁一个进程,那就是直接从这个列表上删掉一个节点。查看进程列表,其实就是在这个双向链表进行遍历。

进程控制块(Process Control Blob)

下面我们挑选一些PCB中比较重要的概念进行介绍。

  1. pid 每个进程(进程中的所有线程共享同一个进程的pid)都有唯一的pid,是一个进程的唯一身份标识。

  2. 内存指针 描述了进程所持有的内存资源。进程在运行时操作系统会分配一块儿内存空间,而这 块内存空间就是有一组内存指针来维护的。使用内存指针区分这块内存空间具体在哪里,有哪些部分,每个部分有什么作用。比如,进程的内存空间需要有专门的区域存储要执行的指令,以及指令依赖的数据。并且还需要存储一些运行时产生的临时数据,这些都属于是我们不同的一个内存空间所负责的一个作用,所负责的一个功能。(CPU 大概的工作流程 取指 - 译码 - 执行 - 写回)。

  3. 文件描述符表 描述了进程持有的硬盘资源。在操作系统中,硬盘上面的存储空间以文件的这种抽象的形式来去进行表示的,所以这个时候我们代码里面操作的是文件,实际上在硬件上操作就是硬盘。一个进程也会涉及到一些硬盘操作,比如说从硬盘读数据,或者往硬盘上写数据(IO),那这是我们就需要按照文件的方式来组织。进程它关联了哪些文件,都能操作哪些文件。

上面的三个字段描述了进程的id和进程持有的资源,那么下面我们介绍几个用于进程调度的字段,也就是CPU资源的分配的情况。

  • 并发:两个进程在一个CPU核心上"轮转调度","分时复用"执行
  • 并行:两个进程分别在在两个CPU核心上同时执行

进程在调度之下,会“同时”执行,轮转执行,只是这个速度非常快,肉眼无法感知到,这个过程叫做并发,或者分时复用。平时开发中, 会通统一使用做并发,来代指并行和并发。进程就是为了实现并发编程的效果,提高效率。

管理进程调度的字段:

  1. 状态
    简单介绍两个核心状态:

    1. 就绪状态正在CPU上执行或者随时准备到CPU上执行。
    2. 阻塞状态由于某些条件不具备,暂时无法到CPU上执行。
  2. 优先级

CPU会根据重要程度来划分优先级,从而在进程调度时让优先级更高的进程获得更多的调度机会。比如,游戏和QQ的优先级不同,游戏程序的优先级肯定会大于QQ,QQ只需要在后台收消息,而游戏会实时影响你的体验。

  1. 上下文

什么是上下文?

上下文是保存在内存中的,在进程离开CPU之前,会把当前CPU中的各种寄存器,将寄存器中的数据打包,记录到内存中去,下次调度来到时,就可以把只写寄存器的值进行回复,还原场景,沿着上次执行的结果继续执行。类似于单机游戏存档和读档.

CPU某些寄存器属于没有特点含义,就只是用来保存计算的中间结果的,有些寄存器是有特点含义的,保存当前执行到那个指令(程序计数器),记录了下一条指令所在的位置,维护栈相关的寄存器,通过这一组寄存器,维护当前程序的调用栈(局部变量和方法参数),一般是一对寄存器,有了这个我们才知道下一步到哪儿执行

  1. 记账信息
    1. 记账信息中会对进程调度执行进行统计,从而为进程调度提供一个参考
    2. 如果某个进程长时间未被调度,那么下次调度它的概率就会增加
    3. 通过优先级机制对不同的进程分配了不同权重的资源

进程的状态、优先级、上下文、记账信息是用配合完成进程调度得,和进程持有的cpu资源密切相关。由于CPU核心数少,进程多,这是就需进程轮番在CPU上执行,只要轮转的速度够快,在用户眼中,看起来就像是在“同时“执行一样。

进程间通信

由于进程之间彼此独立,具有隔离性,虽然保证了进程的安全,进程之间不会相互影响,但是也出现了一个问题,就是进程之间如何通信。进程间通信的核心思想是借助共有空间,主要形式有以下两种。

  • 文件(IO)
  • 网络(socket)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/192641.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023亚太杯数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

UE 调整材质UV贴图长宽比例

首先,为什么要先减去0.5呢,因为缩放的贴图中心在0,0原点,以这个点缩放效果是这样: 它缩放的图案不会在正中间,因为是以0,0点进行缩放的 以这个图的箭头去缩放图片的,所以不能使得缩放后的图片放在正中心 那…

开源WIFI继电器之方案介绍

一、实物 1、外观 2、电路板 二、功能说明 输出一路继电器常开信号,最大负载电流10A输入一路开关量检测联网方式2.4G Wi-Fi通信协议MQTT配网方式AIrkiss,SmartConfig设备管理本地Web后台管理,可配置MQTT参数供电AC220V其它一个功能按键&…

java并发编程之基础与原理2

cpu缓存结构剖析 下面说一下概念与作用 CPU缓存即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储 器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中 保存着CPU刚用过或循环使用的一部…

二维码智慧门牌管理系统升级解决方案:高效运营,信息尽在掌握

文章目录 前言一、升级要点二、方案优势三、应用场景四、客户案例 前言 在这个日新月异的时代,二维码智慧门牌管理系统已经成为了各行各业的标配。为了更好地满足用户需求,提升运营效率,我们推出了全新的升级解决方案。这个方案将让你轻松掌…

【DevOps】Git 图文详解(四):Git 使用入门

Git 图文详解(四):Git 使用入门 1.创建仓库2.暂存区 add3.提交 commit 记录4.Git 的 “指针” 引用5.提交的唯一标识 id,HEAD~n 是什么意思?6.比较 diff 1.创建仓库 创建本地仓库的方法有两种: 一种是创建…

nodejs微信小程序-慢性胃炎健康管理系统的设计与实现-安卓-python-PHP-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

爱上C语言:操作符详解(下)

🚀 作者:阿辉不一般 🚀 你说呢:生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请…

【漏洞复现】泛微e-Weaver SQL注入

漏洞描述 泛微e-Weaver(FANWEI e-Weaver)是一款广泛应用于企业数字化转型领域的集成协同管理平台。作为中国知名的企业级软件解决方案提供商,泛微软件(广州)股份有限公司开发和推广了e-Weaver平台。 泛微e-Weaver旨在…

CAS源码工程搭建记录

CAS源码工程搭建 1.下载2.gradle下载源改为阿里云,解决下载慢的问题3.解决保存 1.下载 git clone -b 5.3.x https://gitee.com/mirrors/CAS.git如果下载的是压缩包,导入工程会保存,因为builder.gradle的第20行开始有取git信息,如…

wangEditor富文本编辑器使用

一、官网 开源 Web 富文本编辑器&#xff0c;开箱即用&#xff0c;配置简单 二、下载安装 npm install --save wangeditor/editor-for-vue 三、在vue中使用 3.1、抽离组件editor.vue 在工程的components目录下新建组件editor <template><div><Toolbar:edi…

【漏洞复现】通达oa 前台sql注入

漏洞描述 通达OA(Office Automation)是一款企业级协同办公软件,旨在为企业提供高效、便捷、安全、可控的办公环境。它涵盖了企业日常办公所需的各项功能,包括人事管理、财务管理、采购管理、销售管理、库存管理、生产管理、办公自动化等。通达OA支持PC端和移动端使用,可以…