磁盘概述、磁盘缓存、虚拟内存及虚拟内存与内存的交换方式

简介: 磁盘概述、磁盘缓存、虚拟内存及虚拟内存与内存的交换方式

一、认识磁盘


       磁盘和内存都具有存储功能,它们都是存储设备。区别在于,内存是通过 电流 来实现存储;磁盘则是通过 磁记录技术 来实现存储。内存是一种高速,造价昂贵的存储设备;而磁盘则是速度较慢、造价低廉的存储设备;电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。内存是属于 内部存储设备 ,硬盘是属于 外部存储设备 。一般在计算机中,磁盘和内存是相互配合共同作业的


       一般内存指的是主存(负责存储CPU中运行的程序和数据);早起的磁盘指的是软磁盘(soft disk,简称软盘),如下图:



如今常用的磁盘是硬磁盘(hard disk,简称硬盘),如下图:



程序不读入内存就无法运行


       内存的运行机制就是把程序保存在存储设备中,通过使用CPU读入来实现程序指令的执行。这种机制称为 存储程序方式,现在看来这种方式是理所当然,但在以前程序的运行都是通过改变计算机的布线来读写指令的


       计算机注意的存储部件是内存和磁盘。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容的CPU是需要通过程序计数器来指定内存地址从而读出程序指令的


程序运行示意图:



二、磁盘缓存


       磁盘往往和内存是互利共生的关系,相互协作,彼此有良好的合作关系。每次内存都需要从磁盘中读取数据,比如会读到相同的内存,所以一定会有一个角色负责存储我们经常需要读到的内容。我们在做软件的时候经常会用到 缓存技术,那么硬件层面也不例外,磁盘也有缓存,磁盘的缓冲叫做 磁盘缓存


       磁盘缓存指的是把从磁盘中读出的数据存储到内存的方式,这样一来,当接下来需要读取相同内容时,就不会再通过实际的磁盘,而是通过磁盘缓存来读取。某一技术或者框架的出现势必要解决某种问题,那么磁盘缓存就大大改善了磁盘访问的速度


使用磁盘存储读取数据:



   Windows操作系统提供了磁盘缓存技术,不过,对于大部分用户来说是感受不到磁盘缓存的,并且随着计算机的演进,对硬盘的访问速度也在不断演进,实际上磁盘缓存到Windows 95/98 就已经不怎么使用了


       把低速设备的数据保存在高速设备中,需要时可以直接将其从高速设备中读出,这种缓存方式在web中应用比较广泛,web浏览器是通过网络来获取远程web服务器的数据并将其显示出来。因此在读取较大图片的时候,会耗费不少时间,这时web浏览器可以把获取的数据保存在磁盘中,然后根据需要显示数据,再次读取的时候就不同重新加载了


三、虚拟内存


       虚拟内存 是内存和磁盘交互的第二个媒介。虚拟内存是指把磁盘的一部分作为 假想内存 来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是磁盘)


       虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有 连续可用 的内存(一个完整的地址空间),但是实际上,它通常被分割成多个物理碎片,还有部分存储在外部磁盘管理器上,必要时进行数据交换。


       计算机中的程序都要通过内存来运行,如果程序占用内存很大,就会将内存空间消耗殆尽。为了解决这个问题,WINDOWS操作系统运用了虚拟内存技术,通过拿出一部分硬盘来当作内存使用,来保证程序耗尽内存仍然有可以存储的空间。虚拟内存在硬盘上的存在形式就是 PAGEFILE. SYS 这个页面文件。


       通过借助虚拟内存,在内存不足时仍然可以运行程序。例如,在只剩5MB 内存空间的情况下仍然可以运行10MB的程序。由于CPU只能执行加载到内存中的程序,因此,虚拟内存的空间就需要和内存中的空间进行 置换(swap),然后运行程序。


四、虚拟内存与内存的交换方式


       刚才我们提到虚拟内存需要和内存中的部分内容做置换才可让CPU继续执行程序,那么做置换的方式是怎样的呢?又分为哪几种方式呢?


       虚拟内存的方法有 分页式分段式 两种。Windows采用的是分页式。该方式是指在不考虑程序构造的情况下,把运行的程序按照一定大小的页进行分割,并以 为单位进行置换。在分页式中,我们把磁盘的内容读到内存中称为 Page In,把内存的内容写入磁盘称为 Page Out 。Windows 计算机的页大小为4KB,也就是说,需要把应用程序按照 4KB 的页来进行切分,以页(page)为单位放到磁盘中,然后进行置换。


程序中Page In 和 Page Out:



为了实现内存功能,Windows在磁盘上提供了虚拟内存使用的文件(Page file ,页文件)。该文件由Windows 生成和管理,文件的大小和虚拟内存大小相同,通常大小是内存的1 - 2 倍

目录
相关文章
|
2月前
|
运维 监控 网络协议
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC
74 0
|
2月前
|
存储 监控 算法
【C++ 软件设计思路】高效管理历史任务记录:内存与磁盘结合的策略解析
【C++ 软件设计思路】高效管理历史任务记录:内存与磁盘结合的策略解析
62 0
|
2月前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
40 0
|
21天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
4天前
|
运维 Linux Docker
Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置
Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置
14 1
|
12天前
|
内存技术
深入理解操作系统:内存管理与虚拟内存
【4月更文挑战第30天】本文深入探讨了操作系统中的关键组成部分——内存管理,并详细解析了虚拟内存的概念、实现机制及其在现代计算系统中的重要性。我们将从物理内存的分配和回收讲起,逐步引入分页、分段以及虚拟地址空间等概念。文章旨在为读者提供一个清晰的框架,以理解内存管理背后的原理,并通过具体示例加深对虚拟内存技术的理解。
|
12天前
|
存储 算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第30天】 在现代操作系统中,内存管理是一个复杂而关键的功能。它不仅确保了系统资源的有效利用,还为每个运行的程序提供了独立的地址空间,保障了程序之间的隔离性和安全性。本文将探讨操作系统如何通过分页机制和虚拟内存技术实现内存的抽象化,以及这些技术是如何影响应用程序性能的。我们将详细解析虚拟地址到物理地址的转换过程,并讨论操作系统在此过程中扮演的角色。文章的目的是为读者提供一个清晰的框架,以便更好地理解内存管理的工作原理及其对系统稳定性和效率的影响。
|
1月前
|
人工智能 缓存 算法
深入理解操作系统内存管理:从虚拟内存到物理内存的映射
【4月更文挑战第8天】 在现代操作系统中,内存管理是核心功能之一,它负责协调和管理计算机的内存资源,确保系统稳定高效地运行。本文深入探讨了操作系统内存管理的关键概念——虚拟内存和物理内存的映射机制。通过剖析分页系统、分段机制和虚拟内存地址转换过程,文章旨在为读者提供一个清晰的理解框架,同时讨论了内存管理的优化技术及其对系统性能的影响。此外,还简要介绍了内存碎片问题以及垃圾回收机制的重要性,并展望了未来内存管理技术的发展趋势。
|
2月前
|
存储 程序员 编译器
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
36 0
|
2月前
|
存储 算法 内存技术
深入理解操作系统内存管理:从虚拟内存到物理内存
【2月更文挑战第30天】 在现代计算机系统中,操作系统的内存管理是确保系统高效稳定运行的关键组成部分。本文将深入探讨操作系统内存管理的复杂世界,特别是虚拟内存和物理内存之间的关联与转换机制。通过分析分页系统的工作原理、虚拟地址空间的结构以及页面置换算法,文章旨在为读者提供一个清晰的框架,以理解内存管理在操作系统中的重要性和实现细节。