《C语言开发从入门到精通》一1.4 揭开存储器的层次

简介:

本节书摘来自异步社区《C语言开发从入门到精通》一书中的第1章,第1.4节,作者王长青 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 揭开存储器的层次

知识点讲解:光盘:视频PPT讲解(知识点)第1章揭开存储器的层次.mp4

当C语言被编译后,编译的中间语言会在CPU中进行处理。按照与CPU的接近程度,存储器分为内存储器与外存储器,简称内存与外存。内存储器又常称为主存储器(简称主存),属于主机的组成部分;外存储器又称为辅助存储器(简称辅存),属于外部设备。访问CPU不能像访问内存那样直接访问外存,外存要与CPU或I/O设备进行数据传输,必须通过内存进行。现在的PC中还配置了高速缓冲存储器(chache),这时内存包括主存与高速缓存两部分。

为了兼顾存储容量和存储速度,当前计算机几乎毫无例外地采用了图1-3所示的层次式存储结构。

80%


77ac94140684f49ccc812c7cbbbf0633b59d3c99

图1-3 存储器层次结构

在图1-3中,以处理器为中心,计算机系统的存储依次为寄存器、高速缓存、主存储器、磁盘缓存、磁盘和可移动存储介质等7个层次。距离处理器越近的存储工作速度越高,容量越小。其中,寄存器、高速缓存、主存储器为操作系统存储管理的管辖范围,磁盘和可移动存储介质属于操作系统设备管理的管辖范围。

凡是属于操作系统存储管理范围的存储装置,其共同特点是在系统掉电之后,它们所存储的信息会丢失殆尽,属于可挥发性存储装置。而属于操作系统管理范围的存储装置,则可以永久保存存储的信息,属于非挥发性存储装置。

磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,主要用来提供对主存储器的扩充。

寄存器在物理上与处理器的运算控制部分同在一个芯片上,它们与运算部分的距离最近,访问速度也最高,但其容量也因此不会太大。所以,它们主要被用来暂存一些中间数据或控制用的特殊数据,而不能存放像程序之类的大批数据。

主存储器用来存放程序和程序运行所需的数据。一个计算机系统必须有足够大的主存储器,其容量是衡量一个计算机系统性能的指标之一。由于主存储器的访问速度远低于寄存器,所以,为了加快访问速度,计算机系统常常在主存储器和寄存器之间配置高速缓存,以存放处理器当前常用的程序模块和数据。

之所以把存储器分为几个层次,主要是基于如下三点原因。

(1)合理解决速度与成本的矛盾,以得到较高的性能价格比。半导体存储器速度快,但价格高,容量不宜做得很大,因此,仅用作与CPU频繁交流信息的内存储器。磁盘存储器价格较便宜,可以把容量做得很大,但存取速度较慢,因此,用作存取次数较少,且需存放大量程序、原始数据(许多程序和数据是暂时不参加运算的)和运行结果的外存储器。计算机在执行某项任务时,仅将与此有关的程序和原始数据从磁盘上调入容量较小的内存,通过CPU与内存进行高速的数据处理,然后将最终结果通过内存再写入磁盘。这样的配置价格适中,综合存取速度较快。

(2)为解决高速的CPU与速度相对较慢的主存的矛盾,还可使用高速缓存。它采用速度快、价格更高的半导体静态存储器,甚至与微处理器做在一起,存放当前使用最频繁的指令和数据。当CPU从内存中读取指令与数据时,将同时访问高速缓存与主存。如果所需内容在高速缓存中,就能立即获取;如没有,再从主存中读取。高速缓存中的内容是根据实际情况及时更换的。这样,通过增加少量成本即可获得很高的速度。

(3)使用磁盘作为外存,不仅价格便宜,可以把存储容量做得很大,而且在断电时它所存放的信息也不丢失,可以长久保存,且复制、携带都很方便。

相关文章
|
1月前
|
自然语言处理 中间件 编译器
C语言的编译器和中间件开发
C语言的编译器和中间件开发
|
1月前
|
存储 安全 程序员
C语言的存储器
C语言的存储器
12 1
|
1月前
|
存储 程序员 C语言
“探索C语言操作符的神秘世界:从入门到精通的全方位解析“
“探索C语言操作符的神秘世界:从入门到精通的全方位解析“
|
3月前
|
存储 编译器 C语言
一篇带你玩转C语言指针:从入门到精通
一篇带你玩转C语言指针:从入门到精通
|
3月前
|
编译器 C语言
C语言-代码开发
C语言-代码开发
21 0
|
6月前
|
存储 小程序 Linux
【Linux从入门到精通】C语言模拟实现进度条小程序
在Linux下,我们安装软件时会经常看到进度条,来告知我们安装的进度。我们不妨自己模拟实现一个进度条,看看其中的细节。模拟实现进度条并不困难,但其中的细节我们又不可忽视。本篇文章会对模拟实现进度条进行详解。
238 1
|
8月前
|
C语言 Windows
C语言驱动开发之内核解锁与强删文件
在某些时候我们的系统中会出现一些无法被正常删除的文件,如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉,而所谓的解锁其实就是释放掉文件描述符(句柄表)占用,文件解锁的核心原理是通过调用ObSetHandleAttributes函数将特定句柄设置为可关闭状态,然后在调用ZwClose将其文件关闭,强制删除则是通过ObReferenceObjectByHandle在对象上提供相应的权限后直接调用ZwDeleteFile将其删除,虽此类代码较为普遍,但作为揭秘ARK工具来说也必须要将其分析并讲解一下。
51 0
|
10月前
|
自然语言处理 IDE Unix
【C语言】C语言从入门到精通第1章C语言概述
【C语言】C语言从入门到精通第1章C语言概述
|
10月前
|
存储 C语言
【C语言进阶】最常用的库函数大全——从入门到精通 下
【C语言进阶】最常用的库函数大全——从入门到精通 下
97 0
|
10月前
|
算法 安全 C语言
【C语言进阶】最常用的库函数大全——从入门到精通 中
【C语言进阶】最常用的库函数大全——从入门到精通 中
102 0