操作系统-浅谈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可以更快地获取需要的数据,减少了访问内存的延迟,提高了程序的执行效率。

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

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

相关文章

【算法】模拟退火算法(SAA,Simulated Annealing Algorithm)

模拟退火算法(SAA)简介 模拟退火算法(SAA,Simulated Annealing Algorithm)的灵感来源于工艺铸造流程中的退火处理,随着铸造温度升高,分子运动趋于无序,徐徐冷却后,分子运…

ES6初步了解Symbol的用法

ES6中为我们新增了一个原始数据类型Symbol,让我为大家介绍一下吧! Symbol它表示是独一无二的值 Symbol要如何创建 第一种创建方式: let sy Symbol()第二种创建方式: let sy Symbol.for()具体独一无二在哪呢?它们的地…

开源思维导图白板工具

https://okso.app https://drawio.com https://tldraw.com https://excalidraw.com

18 Transformer 的动态流程

博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html 机…

npm install 报node-sass command failed

一、前言 最近在前端项目Vue项目install时会出现node-sass command failed的错误,原因是NodeJS和node-sass的版本不对应导致的,本文将给出解决方案。 二、解决方案 以下是NodeJS和node-sass版本的对照关系:

C++前缀和算法的应用:摘水果 原理源码测试用例

本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 在一个无限的 x 坐标轴上,有许多水果分布在其中某些位置。给你一个二维整数数组 fruits ,其中 fruits[i] [positioni, amounti] 表示共…

1221. 四平方和--(暴力,二分)

题目&#xff1a; 1221. 四平方和 - AcWing题库 思路1&#xff1a;暴力 暴力枚举 1.枚举顺序为从a到c&#xff0c;依次增大。 2.tn-a*a-b*b-c*c&#xff0c;求得dsqrt(t) 3.判断求出的d是否成立。d要求&#xff1a;d*dt&&d>c #include<iostream> #include&…

pytorch实战---IMDB情感分析

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

原始航片匀色调色方法

使用PhotoRC 2.0软件&#xff0c;对原始航片进行批量匀色&#xff0c;可以自动处理和人机交互&#xff0c;保留exif信息。 软件下载链接&#xff1a; https://pan.baidu.com/s/1Jj4cMpq8xzYvSa1hhozH-g?pwdndfm 提取码&#xff1a;ndfm

知识点滴 - Email地址不区分大小写

电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址&#xff0c;如 "exampleemail.com"&#xff0c;并不区分字母的大小写。无论你输入的是大写字母还是小写字母&#xff0c;它仍然会到达同一个电子邮件账户。例如&#xff0c;如果您的电子邮件地址是 …

Linux 用户必备的 Git 图形化工具

Git 是一个免费的开源分布式版本控制系统&#xff0c;用于软件开发和其他几个版本控制任务。它旨在根据速度、效率和数据完整性来处理从小到大的项目。 Linux 用户主要可以通过命令行管理 Git&#xff0c;但是&#xff0c;有几个图形用户界面 (GUI) Git 客户端可以促进在 Linux…

DevOps持续集成-Jenkins(3)

文章目录 DevOpsDevOps概述Jenkins实战3&#xff1a;实战1和实战2的加强版&#xff08;新增SonarQube和Harbor&#xff09;⭐环境准备⭐项目架构图对比Jenkins实战1和实战2&#xff0c;新增内容有哪些&#xff1f;SonarQube教程采用Docker安装SonarQube &#xff08;在Jenkins所…

linux-防火墙

目录 一、防火墙概念 1.软件防火墙 2.iptables默认规则 3.iptables的五链 4.iptables动作 5.四表五链 6.iptables实例 一、防火墙概念 linux下防火墙一般分为软件防火墙、硬件防火墙 硬件防火墙&#xff1a;在硬件的级别实现防火墙过滤功能&#xff0c;性能高&#xf…

centos服务器搭建安装Gitlab教程使用教程

1、更新服务器&#xff1a; sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例&#xff0c;在服务器中&#xff0c;下载centos8的…

基于Android 10系统的瑞芯微RK3399K烧写镜像实录

基于Android 10系统的瑞芯微RK3399K烧写镜像实录 1. 前言2. 官网及相关资料3. 烧写固件所需软件4. 直接烧写单一固件步骤5. 固件文件6. Windows下烧写准备6.1 安装 RK USB 驱动6.2 连接设备 7. 烧写固件7.1 烧写统一固件 update.img7.2 烧写分区映像 8. Linux下烧写8.1 upgrade…

STM32 HAL库串口使用printf

STM32 HAL库串口使用printf 背景配置说明在usart.h中添加在usart.c中添加在工程中选中微库&#xff1a; 测试 背景 在我们使用CubeMX生成好STM32 HAL库工程之后&#xff0c;我们想使用printf函数来打印一些信息&#xff0c;配置如下&#xff1a; 配置说明 在usart.h中添加 …

水电站与数据可视化:洞察未来能源趋势的窗口

在信息时代的浪潮中&#xff0c;数据可视化正成为推动能源领域发展的重要工具。今天&#xff0c;我们将带您一起探索水电站与数据可视化的结合&#xff0c;如何成为洞察未来能源趋势的窗口。水电站作为传统能源领域的重要组成部分&#xff0c;它的运行与管理涉及大量的数据。然…

03 vi编辑器

vi编辑器的三种模式: 不同的模式下机键动作解释的意义是不一样的 编辑模式 插入模式 末行模式 文件的打开和关闭保存 移动光标

【强烈推荐】视频转gif、图片拼gif,嘎嘎好用,免费免费真的免费,亲测有效,无效过来打我

问题描述 最近遇到一个需求是需要将视频生成gif&#xff0c;这个看上去不是很难&#xff0c;所以有了以下的解决办法 解决办法 首先想到的当然是自己写一个&#xff0c;用了两套代码&#xff1a; from moviepy.editor import *# 读取视频文件 video_clip VideoFileClip(&quo…

Kafka - 3.x Kafka命令行操作

文章目录 OverViewTopic主题命令行操作重要参数帮助文档实操 生产者命令行操作重要参数帮助文档实操 消费者命令行操作重要参数帮助文档实操 OverView Topic主题命令行操作 重要参数 参数描述--bootstrap-server连接Kafka Broker的主机名和端口号--topic操作的主题名称--crea…