文档章节

CPU、内存、硬盘、指令之间的关系

zoakerc
 zoakerc
发布于 2017/02/27 10:29
字数 647
阅读 157
收藏 0

  日常生活中,我们经常会在电脑磁盘之间的复制粘粘文件,是怎么实现的呢?粗读《程序是怎么跑起来的》,这里简单描述下这个过程,仅自己思考之言,错误之处欢迎指正。

  当我们按下 Ctrl + C 时,CPU 执行 “复制指令” 将硬盘文件的起止地址临时放到内存中,这时内存并没有读取磁盘的所有文件数据。

  当我们按下 Ctrl + V 时,CPU 执行 “粘粘指令” 才会真正去拷贝文件,将文件起止地址取出,读取硬盘起止地址的数据到内存中,将内存中的数据,写入到硬盘新的起止地址里。

  这个过程看似简单,但是却有几个地方需要仔细去思考的,下面是我自己的几个自问自答。

如果文件有 100GB,而内存只有 8GB,内存会不会爆掉?

  不会,CPU “复制指令”执行时,总是会先将磁盘的文件读取到内存的缓存区,再从缓存区写入到硬盘中。因为内存的读写速度,是硬盘的好几十万倍(内存读写速率毫微秒级别,硬盘读写速率毫秒级别)所以不会出现硬盘等待内存读取数据再写入硬盘的情况,看到的进度条,也只是反映硬盘的写入速率。

既然内存读写速率这么快,那硬盘是不是可以被内存替代?

  不会,硬盘读写速率慢,但数据写入到硬盘后,是持久化存在的,不会因为关机而导致数据丢失,再次开机时硬盘数据还在。 但是,内存是带电存储的,虽然读写速率快,但是一旦关机失去电荷,内存中所有的数据将会丢失,内存也不会被硬盘所替代。 同时,内存容量的造价,也比硬盘要昂贵的多。单个硬盘容量超过 1TB 的很常见,但是单个内存容量超过 64GB 的,生活中是很少见的。

“复制指令” 和 “拷贝指令” 在 CPU 内部是真实存在的吗?

  显然不是,这里描述的这两个 “指令”,其实是 CPU 内部多种指令集协同工作完成的,并不存在这样的单独指令,指令一般对应着一条或几条汇编语言。

© 著作权归作者所有

zoakerc
粉丝 20
博文 9
码字总数 8273
作品 0
海淀
程序员
编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga
06/25
0
0
浅谈CPU、内存、虚拟内存、硬盘之间的关系

大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语言,为大家介绍其中的关系! CPU CPU即中央处理器,是英语“...

问题终结者
04/02
0
0
【操作系统】计算机中内存、cache和寄存器之间的关系及区别

1. 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在...

HaoDaWang
2017/12/13
0
0
计算机基础学习总结

1.编程语言的作用: 编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的桥梁 2.操作系统和硬件的关系: 操作系统通过控制器调用驱动程序让硬件工作。 3.应用程序,操作系统,...

ganzhoulin123
2017/11/11
0
0
CPU、内存、硬盘的关系、物理内存以及虚拟内存的关系

1. CPU即中央处理器,是英语“Central Processing Unit”的缩写。CPU从内存或缓存中取出指令,放入指令寄存器,并对指令译码分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从...

Li_思华年
2017/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
11
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
4
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部