进程概述

文章目录

  • 计算机算机组成
  • 因特尔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.rhkb.cn/news/197050.html

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

相关文章

基于SSM的古董拍卖系统

基于SSM的古董拍卖系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 拍卖界面 管理员界面 摘要 古董拍卖系统是一个基于SSM框架(Spring …

JRC Monthly Water History, v1.4数据集

简介: JRC Monthly Water History产品,是利用1984至2020年获取的landsat5、landsat7和landsat8的卫星影像,生成的一套30米分辨率的全球地表水覆盖的月度地表水监测地图集。该数据集共有442景数据,包含1984年3月至2020年12月间的月…

Kubernetes Dashboard部署ImagePullBackOff问题处理

通常,出现ImagePullBackOff问题是由于Kubernetes集群无法拉取所需的镜像导致的。解决这个问题的方法通常包括以下步骤: 1. 检查Pod的描述信息: kubectl describe pod/[pod名称] --namespacekubernetes-dashboard 查看Events部分是否有关于…

项目踩坑之面试遇到的问题及解决

第一点: 问题 遇到的问题之:在实现后台管理端-账户操作的时候,添加员工的时候如果重复添加同一个员工,会触发一个数据库唯一约束异常,但客户端无法清晰的理解这个错误,所以我们就对新增员工的代码进行try…

4.1 Windows驱动开发:内核中进程与句柄互转

在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。在Windows内核中,EProcess结构表示一个进程,而HANDLE是一个句柄。 为了实…

kubernetes 高可用集群

目录 一、haproxy负载均衡 二、pacemaker高可用 三、部署control-plane 四、部署worker node 实验环境 主机名 IP 角色 docker 192.168.67.10 harbor k8s1 192.168.67.11 control-plane k8s2 192.168.67.12 control-plane k8s3 192.168.67.13 control-plane k8s…

vscode文件夹折叠问题

今天发现一个vscode的文件夹显示的问题,首先是这样的,就是我的文件夹里又一个子文件夹,子文件夹里有一些文件,但是我发现无法折叠起这个子文件夹,总是显示全部的文件,这让我备份很难,具体参考 h…

邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站

活动简介 “阿里云云原生 Serverless 技术实践营 ” 是一场以 Serverless 为主题的开发者活动,活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主,活动形式为演讲、动手实操,让开发者通过一个下午的时间增进对 Ser…

Vue3-watchEffect函数

Vue3-watchEffect函数 功能&#xff1a;watchEffect 函数在一开始时就会执行一次&#xff0c;而当中的回调函数的属性发生变化&#xff0c;那么watchEffect 就会再执行一次&#xff0c;主要作用还是在于监视回调函数每次的变化。 // App.vue <template><h2>计数…

【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能

仿射变换是一种二维变换&#xff0c;它可以将一个二维图形映射到另一个二维图形上&#xff0c;保持了图形的“形状”和“大小”不变&#xff0c;但可能会改变图形的方向和位置。仿射变换可以用一个线性变换矩阵来表示&#xff0c;该矩阵包含了六个参数&#xff0c;可以进行平移…

获取虎牙直播源

为了今天得LOL总决赛 然后想着下午看看 但是网页看占用高 就想起来有个直播源 也不复杂看了大概一个小时 没啥问题 进入虎牙页面只有 直接F12 网络 然后 看这个长条 一直在获取 发送 那就选中这个区间 找到都是数字这一条 如果直接访问的话会一直下载 我这都取消了 然后 打开…

常见面试题-MySQL的Explain执行计划

了解 Explain 执行计划吗&#xff1f; 答&#xff1a; explain 语句可以帮助我们查看查询语句的具体执行计划。 explain 查出来的各列含义如下&#xff1a; id&#xff1a;在一个大的查询语句中&#xff0c;每个 select 关键字都对应一个唯一的 id select_type&#xff1a;…

八股文-面向对象的理解

近年来&#xff0c;IT行业的环境相较以往显得有些严峻&#xff0c;因此一直以来&#xff0c;我都怀有一个愿望&#xff0c;希望能够创建一个分享面试经验的网站。由于个人有些懒惰&#xff0c;也较为喜欢玩乐&#xff0c;导致计划迟迟未能实现。然而&#xff0c;随着年底的临近…

windows安装wsl2以及ubuntu

查看自己系统的版本 必须运行 Windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 Windows 11 才能使用以下命令 在设置&#xff0c;系统里面就能看到 开启windows功能 直接winQ搜 开启hyber-V、使用于Linux的Windows子系统、虚拟机平…

让文字在盒子中水平居中与垂直居中

简单方法&#xff1a; 1.先用text-align: center;将文字垂直居中。 2.再用line-height: Xpx;将元素的行高设置为与父元素同样的高度。&#xff08;这里的X代表父元素的高度&#xff09; 举例&#xff1a; 对于该网页的代码如下&#xff1a; <!DOCTYPE html> <html&…

wpf devexpress绑定grid到总计和分组统计

此主题描述了如何在gridcontrol中的视图模型和显示定义总计和分组统计 在视图模型中指定统计 1、创建 SummaryItemType 枚举你想要在GridControl中显示的统计类型&#xff1a; public enum SummaryItemType { Max, Count, None } 2、创建一个grid统计描述类 public class S…

电子病历编辑器源码(Springboot+原生HTML)

一、系统简介 本系统主要面向医院医生、护士&#xff0c;提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式&#xff0c;通过浏览器方式访问和使用系统功能&#xff0c;提供电子病历在线制作、管理和使用的一体化电子病历解决方案&#xff0c…

SDL2 播放音频(MP4)

1.简介 这里引入FFmpeg库&#xff0c;获取音频流数据&#xff0c;然后通过FFmpeg将视频流解码成pcm原始数据&#xff0c;再将pcm数据送入到SDL库中实现音频播放。 2.FFmpeg的操作流程 注册API&#xff1a;av_register_all()构建输入AVFormatContext上下文&#xff1a;avform…

Pytorch torch.dot、torch.mv、torch.mm、torch.norm的用法详解

torch.dot的用法&#xff1a; 使用numpy求点积&#xff0c;对于二维的且一个二维的维数为1 torch.mv的用法&#xff1a; torch.mm的用法 torch.norm 名词解释&#xff1a;L2范数也就是向量的模&#xff0c;L1范数就是各个元素的绝对值之和例如&#xff1a;

报道 | 2023年12月-2024年2月国际运筹优化会议汇总

2023年12月-2024年2月召开会议汇总&#xff1a; The 16th Annual International Conference on Combinatorial Optimization and Applications (COCOA 2023) Location: Virtual Important dates: Conference: December 11, 2023 (Start) - December 13, 2023 (End) Details…