CPU管理 多进程图像

news/2024/7/6 6:24:12/文章来源:https://www.cnblogs.com/Elysiaiii/p/18278813

CPU管理 && 多进程图像

要管理CPU,先要学会使用CPU

CPU的工作方式在操作系统学习之初就已经提过:

  • 取值执行
    • 程序存放在内存中,每段指令对应一个地址
    • CPU发出取指命令,将想取地址通过地址总线传到PC
    • 内存根据地址取出对应地址的指令
    • 从总线传回,CPU解释执行

总之,就是自动的取指--执行

所以,管理CPU最直观的方法就是,设置PC的初值,CPU就能根据取指执行依次执行下去

好了现在CPU执行起来了,但这样的管理方式是否有什么问题?看下面一段程序:

int main(int argc,char* argv[]){int i,to,*fp,sum=0;to = atoi(agv[1]);for(i = 1; i <=to; i++){sum = sum + i;fprintf(fp,"%d",sum);}
}
  • 注意fprintf(),这是一条IO指令。如果将其替换成一条计算语句,整段程序运行时长前后比值约为10^6:1
  • 也就是说,IO指令特别特别慢

如果一段程序中IO指令的占比又很大,那么整个程序执行所耗时间中,IO指令会占非常大的比例。

  • 换句话说,CPU很多时间都在摸鱼,等待IO指令完成在继续干活,这样CPU利用率就太低了。这样管理就出现了问题

怎么压榨CPU?

CPU管理的核心:并发

并发概念

让CPU不再一次局限于单段程序,而是多道程序,交替执行

由此得出一个重要的概念:并发

  • 并发:一个CPU上交替地执行多个程序

注意并发与并行概念的不同:

并发(Concurrency):并发指的是一个系统能够同时处理多个任务。在一个单处理器系统中,多个任务交替执行,因为处理器实际上在一段时间内只能执行一个任务。这种情况下,因为多个任务交替执行的效果,看起来好像同时在运行。在一个多处理器系统中,多个任务可以真正同时执行,但是在并发系统中,即使没有多个处理器也能实现同时执行的效果。

并行(Parallelism):并行是指系统同时执行多个任务,每个任务都在不同的处理器核心上执行,因此它们真正同时进行。在一个拥有多核心处理器的系统中,可以实现真正的并行执行,每个核心处理器同时处理不同的任务。

并发与并行的区别:并发强调的是在单位时间内有多个任务同时进行,但是这些任务可能是交替执行的。而并行强调的是在同一时刻有多个任务同时进行。

通俗一点,一个系统可以同时处理多个任务,但这些任务可能只是交替执行,这是并发;而如果多个任务确实同时执行,那么这是并行。

这样,执行到像IO这样慢的步骤时,CPU就可以切换到另一个程序继续执行

如何实现并发?

要实现不同程序间的切换执行,首先想到修改寄存器PC。但只修改寄存器P C就可以实现吗?

很显然,还需要用栈来记录当前程序的一些信息。这和汇编模块化设计中用data段存数据一样。

  • 由此,每个程序有了一个存放信息的结构:PCB,Process Control Block,进程控制块

就像我们正在看书,突然被人叫走做别的事,我们就应当停下来,记录当前页码以及故事情节,然后离开,这样回来后才能继续阅读。

这样,这些运行的程序就和静态的程序不同了。具体不同就体现在PCB表中。

由此引出一个概念:进程

进程描述了运行中的程序,如上图中程序1和程序2就是两个进程。

进程的名字十分形象

  • 进程有开始、结束。程序没有;
  • 进程会走走停停,是动态的,有状态的。程序没有
  • 进程需要记录ax,bx......程序不用;

总结

由此,我们描述了CPU的管理:

  • 使用CPU:启动进程,执行进程
  • 更高效压榨使用CPU:启动多个进程,交替执行多个进程
  • 所谓多进程图像,便是CPU执行多个进程的过程,也是CPU执行的核心

多进程图像

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

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

相关文章

电子显微镜对生物的观察

某黄色小虫,大概 \(100μm \times 400μm\) 的样子。

ARM Cortex-A 与 STM32 F107

ARM Cortex-A 和 STM32 F107 是两种不同的微控制器架构,它们在性能、应用场景和硬件支持方面有很大的差异。以下是它们的详细比较和分析: 1. 基本特性比较ARM Cortex-A 系列ARM Cortex-A 是 ARM 架构中的高级应用处理器系列,专为复杂的计算任务和高级应用设计。它广泛用于智…

前端开发 | Node 版本管理器选择

一、Nvm nvm 是一款 Node.js 版本管理工具,允许用户通过命令行快速安装、切换和管理不同的 Node.js 版本。nvm 只适用于 macOS 和 Linux 用户的项目,如果是 Windows 用户,可以使用 nvm-windows 、nodist或 nvs 替换。 安装方式 macOS 下载方式: brew install nvm # or sh 命…

示波器基本使用方法

示波器 示波器的基本使用方法首先检查示波器包装中是否有下列物品:• 示波器。 • 电源线。 • N2841A 10:1 10 MΩ 无源探头,数量= 2连接电源和信号源:将示波器的电源插入电源插座,并确保电源适配器或电池充足。 将需要测量的信号源(例如电路板、信号发生器等)连接到示波…

ros - Adafruit ESP32 Feather与树莓派(Raspberry Pi)比较

Adafruit ESP32 Feather 和树莓派(Raspberry Pi)都是广泛使用的硬件平台,分别在嵌入式系统和单板计算机领域具有各自的优势。以下是它们的详细比较,以及它们对机器人操作系统(ROS)的支持程度的分析。 1. 基本特性比较Adafruit ESP32 Feather核心处理器: 双核 Xtensa LX6(…

【App Service】解决 .NET Profiler 报告打开后无数据加载的问题

问题描述 App Service上可以收.NET 应用的Profile Trace文件,并且可以自动分析报告。 Collect a Profiler Trace If your app is down or performing slow, you can collect a profiling trace to identify the root cause of the issue. Profiling is light weight and is de…

1. Docker快速起步

Docker先安装Docker,再讲课没有Docker的日子里在以前的开发时代,开发人员把自己开发好的war交付给运维人员,运维人员为了把war部署到服务器上且保证能运行,就必须由运维人员在服务器上搭建好运行环境! 可这样带来的问题是,如果开发环境与部署环境不一致(比如版本),则会…

6. Idea集成docker

第一步:配置Docker远程访问修改 /lib/systemd/system/docker.service# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock重启docker服务systemctl daemon…

MOS管的作用和原理

目录 目录什么是MOS管作用和应用工作原理其他类型什么是MOS管 MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor,金属氧化物半导体场效应晶体管)是另一种重要的半导体器件,其作用和工作原理如下: 以下为MOS管的原理图:作用和应用放大作用: MOSFET可以用作信号放…

图论最短路径问题与matlab实现

上一次我们讨论了如何进行图论可视化,这一次我们通过matlab来找出图论中距离最小路径 目录一、迪杰斯特拉算法(Dijkstra)二、shortestpath函数用法1.基本语法2.参数设计3.应用实例(1)输入图论信息(2)输入参数进行求解(3)最短路径可视化三、distances函数————求出任意…

2024年全球最好的低代码开发平台有哪些

低码开发平台是一个应用程序,提供图形用户界面编程,从而以非常快的速度开发代码,减少了传统的编程工作。这些工具有助于快速开发代码,最大限度地减少手工编码的努力。这些平台不仅有助于编码,而且还能快速安装和部署。 由frevvo调研显示,提升交付率从40%-69%,并且能减少对于较…

工业除尘自动化中的Profibus转Modbus网关应用解析

Profibus协议转Modbus协议网关(XD-MDPB100)在工业除尘自动化中起关键作用,实现不同通信协议设备间的数据共享和通信,Profibus转Modbus网关(XD-MDPB100)可以用于连接使用不同通信协议的控制设备,如PLC、DCS等。一、背景 在工业生产过程中,除尘系统扮演着至关重要的角色,…

Vue 中的Ajax

Vue 中的Ajax 配置代理 发送ajax请求的方式: 1.xhr new XMLHttpRequest() xhr.open() 配置请求信息xhr.send() 发送请求虽是鼻祖,但很麻烦,一般对其进行二次封装2.jQuery$.get$.postjQuery的核心是 DOM操作,在vue等框架中不常使用3.axios与jQuery相比的优势是 promise风格支…

用于模糊测试的工具

用于模糊测试的工具 Wfuzz Wfuzz通过将占位符 FUZZ 替换为 wordlist 值来工作。为了更清楚地理解这一点,让我们考虑一个例子: $ wfuzz -w userIDs.txt https://example.com/view_photo?userId=FUZZ在上面的命令中,userIds.txt 是一个包含数字 ID 值的 worldlist 文件。在这…

springboot+vue项目如何集成企业微信

本文以springboot+vue技术开发的低代码平台为案例,介绍应用系统如何集成企业微信,包括同步企业微信组织用户、单点登录、消息发送等。本文以springboot+vue技术开发的低代码平台为案例,介绍应用系统如何集成企业微信,包括同步企业微信组织用户、单点登录、消息发送等。 在线…

win11添加开机自启动

方法1win + R 打开运行,输入 shell:startup会打开一个文件夹将想要启动的程序快捷方式放进文件夹在设置里面搜索“启动”,可以看到开机启动项,确认已经打开。以上,针对不用管理员权限启动的程序,有效。 方法2 下面看需要管理员权限的:按Win+R,输入regedit,打开注册表编…

使用 Amazon Bedrock Converse API 简化大语言模型交互

本文将介绍如何使用 Amazon Bedrock 最新推出的 Converse API,来简化与各种大型语言模型的交互。该 API 提供了一致的接口,可以无缝调用各种大型模型,从而消除了需要自己编写复杂辅助功能函数的重复性工作。文中示例将展示它相比于以前针对每个模型进行独立集成的方式,具有…

MyBatis中Where标签:揭秘高效SQL构建的秘密

哈喽,大家好,我是木头左!理解Where标签的基础概念 在MyBatis中,<where>标签是用于构建SQL查询语句中的一个非常重要的元素。它允许你在一个动态的SQL语句中添加WHERE子句,而不需要担心SQL语法错误或额外的逗号和AND/OR关键字。使用<where>标签可以让的SQL语句…

用Python pynput库捕捉每一次组合键的优雅舞步

哈喽,大家好,我是木头左!一、初识pynput:键盘与鼠标的监控利器 当谈论计算机交互时,键盘和鼠标无疑是最常用的设备。无论是编写代码、浏览网页还是玩游戏,都依赖于这些输入设备与机器沟通。但在一些特殊的场景中,可能需要知道用户具体按下了哪些键,甚至是以何种顺序、何…