当前位置: 首页 > news >正文

操作系统-浅谈CPU与内存

目录

  • 计算机的基本组成
  • CPU
  • 内存
    • 虚拟内存
      • 内存分段
      • 内存分页
  • CPU与内存的交互过程
  • 高速缓存cache

所有图片均来自:小林coding

计算机的基本组成

计算机由软件和硬件组成
硬件由CPU(中央处理器)存储器(内存+外存)外部设备组成。
软件由应用软件和系统软件组成(操作系统,编译器).

CPU

CPU也叫中央处理器
分为运算器 ,控制器 ,寄存器组三部分
其中运算器和控制器又分别有好多小的单元组成


运算器,主要处理所有的算术运算和逻辑运算
算数逻辑单元ALU
累加寄存器AC
数据缓冲寄存器DR
状态条件寄存器PSW

控制器,控制整个CPU的工作,决定计算机运行过程的自动化
程序计数器PC
指令寄存器IR
指令编码器ID
地址寄存器AR

寄存器组
寄存器组可以分为两类,一类是专用寄存器,另外一类是通用寄存器。运算器和控制器里面的寄存器都是专用寄存器组,而通用寄存器的用途广泛可以由程序员规定其用途

内存

内存是用来直接跟CPU进行交互的

虚拟内存

为什么要引入虚拟内存?
:如果所有的程序都是直接操作物理内存,那么当多个程序同时运行时,就可能会对同一个物理地址进行操作,这样就可能会出现错误,所以为了避免这种情况,引入了虚拟内存的概念,程序直接访问的是虚拟内存,虚拟内存经过CPU中的内存管理单元(MMU) 可以转化成对应且不同的物理地址,这样就规避掉了多个程序运行访问同一个物理地址的情况.

CPU将虚拟地址交给MMU,经由MMU转化成物理地址.
虚拟地址和物理地址主要有两种转化关系,分别是内存分段和内存分页.

内存分段

在这里插入图片描述
内存分段的情况下,虚拟内存分成两部分,分别是段选择因子段内偏移量
段选择因子里边最重要的是段号,段号是段表的索引,如下图:
在这里插入图片描述
段表由基地址,段界限,特权等级组成

段的基地址+段内偏移量 = 物理地址

内存分段的缺点:
1.会产生大量的外部内存碎片,虽然空闲的内存很多,但都是不连续的,这样就会导致即使空闲内存大小 > 所需要占用的内存大小,但是因为内存不连续就无法使用.

2.内存交换效率低,当交换一大段连续的内存时(将内存数据写入外存),会非常占用时间.

内存分页

内存分页主要解决了内存分段情况下产生的外部内存碎片以及内存交换效率低两个问题.

内存分页情况下,虚拟内存和物理内存之前是通过页表来映射的,而页表也是存放在内存管理单元(MMU)里的. 如果想要访问的虚拟内存在页表中查不到,那么便会返回一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。

如何解决产生的外部内存碎片:
页和页之间是紧密排列的,只会产生内部内存碎片(即使程序大小不足一页,也至少需要分配一页内存),而不会产生外部内存碎片

如何解决内存交换速度慢:
当内存不够时或者说是缺页中断时(所需要的页面不在物理内存中),会触发内存交换,把不常用的内存页面释放掉(换出,写入磁盘)然后把需要的内存页面从磁盘写入内存(换入),所以内存分页下的内存交换只需要交换一个或少数几个页就行了,内存交换的效率就比较高.
在这里插入图片描述

这里涉及到5中内存页面置换算法,分别是:

1.最佳页面置换算法
2.先进先出页面置换算法
3.最近最久未使用页面置换算法
4.时钟页面置换算法
5.最不常用页面置换算法

这里就不多讲解了,但是这部分也是比较重点的内容,


虚拟内存是怎么通过页表跟物理内存映射的?
在这里插入图片描述
虚拟内存分为页号页内偏移量两部分

页号是页表的索引,通过查找页表可以获得物理页号,物理页号+页内偏移量就可以得到物理地址了!
在这里插入图片描述

多级页表:

为什么要出现多级页表(摘自小林)

在 32 位的环境下,虚拟地址空间共有 4GB,假设一个页的大小是 4KB(2^12),那么就需要大约 100 万 (2^20) 个页,每个「页表项」需要 4 个字节大小来存储,那么整个 4GB 空间的映射就需要有 4MB 的内存来存储页表。

这 4MB 大小的页表,看起来也不是很大。但是要知道每个进程都是有自己的虚拟地址空间的,也就说都有自己的页表。

那么,100 个进程的话,就需要 400MB 的内存来存储页表,这是非常大的内存了,更别说 64 位的环境了。

所以说引入了多级页表,如图:
在这里插入图片描述
如图,一级页表有1024个页表项,每一个页表项对应着一个二级页表,每一个二级页表又有1024个页表项,一级页表和二级做乘法10241024(2的10次方2的10次方)所以刚好可以覆盖掉4G的虚拟内存

疑问点:
如果一个页表项占用4个字节,那么一级页表此时占(1024*4)=4K
二级页表占用 (1024 * 1024 * 4)=4M
4K + 4M > 4M
所以说如果所有的页表项都被使用的话,二级页表比一级页表还要耗内存
但是计算机存在局部性原理,如果一级页表没有被用到的话,就不会创建对应的二级页表,这也是二级页表省内存的原因.

TLB
把最常访问的几个页表项存放入CPU中的Cache高速缓存里,这个Cache就叫TLB
在这里插入图片描述
下文会详细说一下CPU中的Cache.

CPU与内存的交互过程

在这里插入图片描述
CPU无论是跟内存交换数据,还是跟外设交换数据,都是依赖总线
分别是,控制总线,数据总线,地址总线

地址总线,用于指定 CPU 将要操作的内存地址;
数据总线,用于读写内存的数据;
控制总线,用于发送和接收信号,比如中断、设备复位等信号,CPU 收到信号后自然进行响应,这时也需要控制总线;
在这里插入图片描述

执行程序的过程就是执行一条一条指令的过程

  1. 首先CPU会访问自己的【程序计数器(PC)】,程序计数器里存放的是指令的地址,然后它会通过【控制器】操作【地址总线】来访问内存地址,通知内存要访问的地址,并等待内存把数据准备好,然后接受内存的数据,然后将指令数据存放入【指令寄存器(IR)里】

  2. 程序计数器(PC)自增,自增的程度取决于CPU的位宽,如果是32位CPU,代表一次能处理4个字节的数据,所以PC自增4

  3. 检查【指令寄存器(IR)】中指令的类型,如果是运算类型,则交给算术逻辑单元(ALU)如果是存储类型则交给控制单元

高速缓存cache

Cache是位于CPU和内存之间的临时存储器,它的容量比内存小但数据交换速率却快很多。

CPU Cache 用的是一种叫 SRAM(Static Random-Access Memory,静态随机存储器) 的芯片。

内存用的芯片和 CPU Cache 有所不同,它使用的是一种叫作 DRAM (Dynamic Random Access Memory,动态随机存取存储器) 的芯片。

在 SRAM 里面,一个 bit 的数据,通常需要 6 个晶体管,所以 SRAM 的存储密度不高,同样的物理空间下,能存储的数据是有限的,不过也因为 SRAM 的电路简单,所以访问速度非常快。DRAM 的数据访问电路和刷新电路都比 SRAM 更复杂,所以访问的速度会更慢,内存速度大概在 200~300 个 时钟周期之间。
在这里插入图片描述
当CPU需要读取数据时,它会首先从Cache中查找。如果数据已经在Cache中(即高速缓存命中),CPU可以直接从Cache中读取数据并处理。这大大减少了从内存中读取数据的延迟,提高了CPU的执行效率。

如果数据不在Cache中(即高速缓存未命中),CPU会从内存中读取数据,并同时把这个数据所在的数据块调入Cache中。这样,如果CPU后续还要读取这个数据块中的其他数据,就可以直接从Cache中获取,而不需要再次访问内存。这种方式有效地减少了CPU访问内存的次数,提高了程序的执行效率。

此外,除了读取本次要访问的数据,CPU还会预取本次数据的周边数据到Cache中。这是基于程序运行的局部性和时间局部性原理,即当一条指令正在被执行时,在很短的时间内,这条指令周围的指令也会有很大的概率被执行。因此,预取周边数据到Cache中可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。

总之,Cache的出现是为了解决CPU处理速率和主存访问速率差异过大的问题。通过把数据暂时存放在Cache中,CPU可以更快地获取需要的数据,减少了访问内存的延迟,提高了程序的执行效率。

相关文章:

操作系统-浅谈CPU与内存

目录 计算机的基本组成CPU内存虚拟内存内存分段内存分页 CPU与内存的交互过程高速缓存cache 所有图片均来自:小林coding 计算机的基本组成 计算机由软件和硬件组成 硬件由CPU(中央处理器)存储器(内存外存)外部设备组成。 软件由应用软件和系…...

K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡

------------------------------ 部署 CNI 网络组件 ------------------------------ ---------- 部署 flannel ---------- K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一…...

若依微服务上传图片文件代理配置

在使用若依微服务文件上传时候,文件上传成功会上传到D:/ruoyi/uploadPath目录下。默认使用9300端口进行访问图片文件,现在我想把它代理到80端口应该怎么做呢? 配置前:http://localhost:9300/statics/2023/09/24/test.jpg 配置后:http://localhost/statics/2023/09/24/test…...

物联网与 Linux 的相爱相生

Linux 无疑将在物联网中扮演一个关键角色,但是其光彩将与其它的一些分享。 随着 Canonical 重新关注于赢利和新技术,我们中的一些人发现我们正在思考 Linux 未来将走向何方,IoT(物联网)是否是 Linux 的未来&#xff1…...

python自动化测试(一):操作浏览器

通过Python的代码去操作浏览器的操作 目录 目录 1、导入自动化模块 2、定义打开的浏览器驱动、声明一个url变量保存打开的地址 3、使用函数:driver.get(url)打开浏览器的指定页面 4、最大化浏览器窗口:driver.maximize_window() 5、添加全局的等待…...

NReco.LambdaParser使用案例

使用案例集合: private async void RuleEngine_Click(object sender, EventArgs e){#region 获取变量string expression this.Rule.Text.Trim();string pattern "\$(.*?)\$";MatchCollection matches Regex.Matches(expression, pattern);foreach (Ma…...

苹果IOS安装IPA, plist形式 Safari 浏览器点击安装

快速链接 苹果开发者账号链接 网址: https://developer.apple.com/account 苹果应用上架链接 网址: https://appstoreconnect.apple.com/ 应用证书文件及打包 参考教程: 最新uniapp打包IOS详细步骤(2022) 证书在线制作工具 网址: https://app.121xuexi.…...

Django 注册及创建订单商品

注册功能的实现 user/views from rest_framework.generics import GenericAPIView from rest_framework.views import APIViewfrom apps.user.models import User from apps.user.serializers import UserSerializer from utils import ResponseMessage from utils.jwt_auth …...

15、Python -- 阶段总结:变量与流程控制

目录 变量变量没有类型,数据有类型 表达式程序流程 变量 变量:编程的本质就是处理数据,数据需要用变量保存 Python语言的特征: 所有变量无需声明,即可使用 变量没有类型 变量没有类型,数据有类型 已学过…...

信息检索与数据挖掘 | 【实验】排名检索模型

文章目录 📚实验内容📚相关概念📚实验步骤🐇分词预处理🐇构建倒排索引表🐇计算query和各个文档的相似度🐇queries预处理及检索函数🔥对输入的文本进行词法分析和标准化处理&#x1f…...

玩转AIGC:打造令人印象深刻的AI对话Prompt

玩转AIGC:打造令人印象深刻的AI对话Prompt 《玩转AIGC:打造令人印象深刻的AI对话Prompt》摘要引言正文良好的Prompt:引发AI深度交流的法宝 ✨探讨不同的提问方式1. 常规提问2. 创意提问 对话交流的艺术:倾听与引导的巧妙平衡 ⚖️…...

uniapp vue国际化 i18n

一、安装 vue-i18n npm i vue-i18n 二、新建i18n目录 1、en.json 内容 {"loginPage":{"namePh":"Please enter your login account","passwordPh":"Please enter password"} } 2、zh-CN.json 内容 {"loginPage&qu…...

Docker 启动远程服务访问不了

今天一下午在弄这个 1、防火墙是否关了 firewall-cmd --state2、ip转发开没开 sysctl net.ipv4.ip_forward3、service iptables是不是打开并拦截了 4、检查docker启动的端口号是否一致,或者启动时对不对 5、检查docker的服务是否起来了,比如你的端口号…...

[ACTF2020 新生赛]Exec

【解题过程】 1.打开链接 得到一个能ping 的网站,可以推测这个可以在终端运行的网站。 2.解题思路 在执行的时候我们可以想到命令执行的“;”分号的作用:命令用分号分隔开来,表示它们是两个独立的命令,需要依次执行。…...

Git(三).git 文件夹详解

目录 一、初始化新仓库二、.git 目录2.1 hooks 文件夹2.2 info 文件夹2.3 logs 文件夹2.4 objects 文件夹【重要】2.5 refs 文件夹【重要】2.6 COMMIT_EDITMSG2.7 config2.8 description2.9 FETCH_HEAD2.10 HEAD【重要】2.11 index【重要】2.12 ORIG_HEAD2.13 packed-refs 官网…...

esp32-S3 + visual studio code 开发环境搭建

一、首先在下面链接网页中下载esp-idf v5.1.1离线安装包 ,并安装到指定位置。dl.espressif.cn/dl/esp-idf/https://dl.espressif.cn/dl/esp-idf/ 安装过程中会提示需要长路径支持,所以windows系统需要开启长路径使能 Step 1: 打开运行&…...

4.1 网络基础之网络IO

一、编写基本服务程序流程 1、创建套接字 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, int type, int protocol);/* * 参数domain通讯协议族&#xff1a; * PF_INET IPv4互联网协议族&#xff08;常用&#xff09; * PF_INET6 …...

[100天算法】-和为 K 的子数组(day 39)

题目描述 给定一个整数数组和一个整数 k&#xff0c;你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 :数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] &#xff0c;且整…...

Leo赠书活动-02期 【信息科技风险管理:合规管理、技术防控与数字化】

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…...

L2-026 小字辈 - java

L2-026 小字辈 时间限制 400 ms 内存限制 64 MB 题目描述&#xff1a; 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...