首页 > 系统相关 >探秘磁盘的奥秘:物理结构、缓存和虚拟内存的作用

探秘磁盘的奥秘:物理结构、缓存和虚拟内存的作用

时间:2023-10-24 15:37:36浏览次数:33  
标签:缓存 读取 扇区 内存 磁盘 探秘 虚拟内存

引言

在我们之前的讲解中,我们已经详细介绍了CPU和内存的物理结构,这是计算机系统中至关重要的组成部分。然而,除了CPU和内存之外,磁盘也扮演着非常重要的角色,它在数据存储方面起着至关重要的作用。因此,我们将继续向大家介绍磁盘的物理结构,以便更全面地了解计算机系统的工作原理。通过深入了解磁盘的物理结构,我们可以更好地理解数据的存储和访问过程,从而帮助我们更好地进行系统优化和性能提升。让我们一起深入研究磁盘的组成部分和工作原理,为进一步的学习打下坚实的基础。

磁盘

磁盘的物理结构

磁盘的物理结构指的是磁盘存储数据的特定形式。一块机械硬盘由三个关键部件组成,它们分别是盘面、磁头和悬臂。这些部件共同协作,以实现数据的读取和写入。盘面是磁盘的主要组成部分,它是一个平坦的圆盘,上面覆盖着磁性材料。磁头则是位于盘面上方和下方的装置,它们负责读取和写入数据。而悬臂则起到支撑和定位磁头的作用。这三个部件的协同工作使得磁盘能够高效地存储和访问数据。

image

image

在磁盘的物理结构中,磁盘表面被划分成了若干个同心圆的空间,这些空间被称为磁道。而磁道又按照固定大小的存储空间被划分成了扇区。

扇区是磁盘进行物理读写的最小单位。在Windows系统中,一般一个扇区的大小为512个字节。然而,在逻辑层面上,Windows对磁盘进行读写的单位是扇区整数倍的簇。根据磁盘容量和功能的不同,一个簇可以是512字节(即1个扇区)、1KB(2个扇区)、2KB、4KB、8KB、16KB、32KB(64个扇区)。因此,簇和扇区的大小是相等的。

硬盘的基本存储单位是扇区(Sector),每个扇区通常为512字节。一个硬盘通常由多个磁盘片组成,每个磁盘片上划分了若干个同心圆的磁道,每个磁道又被划分为若干个扇区。

一般情况下,一个盘面上会有两个磁头,分别位于盘面的正面和背面。盘面的正面和背面都被涂有磁性材料,用于存储数据。此外,一块硬盘通常不只有一个盘面,而是由多个盘面堆叠而成,这些盘面是平行排列的。每个盘面的正面和背面都有对应的磁头,用于读取和写入数据。

image

在数据存取的过程中,我们不能直接从磁盘盘面上将数据传输到总线上,而是需要通过磁头进行中转。首先,磁头将从盘面上读取数据,然后通过电路信号传输给控制电路和接口,最终传送到总线上。

读取数据实际上包含两个主要步骤。首先,我们需要将盘面旋转到特定位置。在这个位置上,悬臂能够准确定位到整个盘面的一个特定子区间。这个子区间的形状类似于一块披萨饼,通常被称为几何扇区(Geometrical Sector),意味着在“几何位置上”,所有这些扇区都可以被悬臂访问到。

其次,我们需要将悬臂移动到特定磁道的特定扇区,也就是在几何扇区内部定位到我们实际需要的扇区。一旦找到目标扇区,磁头会降下来,从正对着扇区的位置读取数据。

综上所述,数据的读取过程包括将盘面旋转到目标位置和将悬臂移动到目标扇区的过程。通过这两个步骤,我们可以成功读取到所需的数据。

image

磁盘缓存

正如我们之前提到的,磁盘和内存之间通常是互利共生的关系,彼此协作并保持良好的合作关系。每次内存需要读取数据时,往往会读取相同的内容,因此必然会有一个角色负责存储我们经常需要读取的内容。就像在软件开发中经常使用缓存技术一样,在硬件层面也存在磁盘缓存。

磁盘缓存指的是将从磁盘读取的数据存储到内存中的一种方式。这样,在接下来需要读取相同内容时,就不再需要通过实际的磁盘访问,而是可以直接从磁盘缓存中读取。磁盘缓存的出现大大改善了磁盘访问的速度,类似于某种技术或框架的出现,解决了特定问题。

通过磁盘缓存,我们能够提高数据的读取速度,减少对实际磁盘的频繁访问,从而提升系统的整体性能。磁盘缓存的存在使得数据的读取更加高效和快速,为我们的计算机系统带来了许多便利。

image

虚拟内存是计算机系统内存管理的一种技术,它通过将磁盘的一部分作为假想内存来使用,成为内存和磁盘交互的第二个媒介。与假想的磁盘(实际上是内存)相对的是磁盘缓存,而与假想的内存(实际上是磁盘)相对的是虚拟内存。

虚拟内存的主要作用是使应用程序认为它拥有连续可用的内存,即一个完整的地址空间。然而实际上,这个地址空间通常被分割成多个物理碎片,并且其中的一部分存储在外部磁盘管理器上,需要时进行数据交换。

虚拟内存的存在使得即使内存不足,仍然可以运行程序。例如,即使只剩下10MB的内存空间,仍然可以运行15MB的程序。然而,由于CPU只能执行加载到内存中的程序,因此虚拟内存的空间需要与内存中的空间进行置换(swap),然后才能运行程序。

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

image

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

至于为什么选择分页式而不是分段式,我们在之前的文章中已经详细讨论过,所以在这里就不再赘述了。

总结

本文介绍了磁盘的物理结构、磁盘缓存和虚拟内存三个方面。磁盘的物理结构由盘面、磁头和悬臂组成,盘面上划分了多个磁道和扇区,扇区是磁盘的最小读写单位。磁盘缓存是将磁盘读取的数据存储到内存中,提高了数据读取速度和系统整体性能。虚拟内存是通过将磁盘的一部分用作假想内存的技术,使应用程序能够认为拥有连续可用的内存。虚拟内存的存在使得即使内存不足,仍然可以运行程序。通过深入了解磁盘的物理结构、磁盘缓存和虚拟内存,我们可以更好地理解计算机系统的工作原理,为系统优化和性能提升提供基础。

标签:缓存,读取,扇区,内存,磁盘,探秘,虚拟内存
From: https://www.cnblogs.com/guoxiaoyu/p/17768485.html

相关文章

  • [20231013]为什么刷新缓存后输出记录顺序发生变化3.txt
    [20231013]为什么刷新缓存后输出记录顺序发生变化3.txt--//当年提的问题,链接http://blog.itpub.net/267265/viewspace-2763181/=>[20210316]为什么刷新缓存后输出记录顺序发生变化.txt,--//正好别人问我,顺便我重复看了一下,顺便解答这个问题,实际上也许解答不对,许多行为我仅仅是猜测......
  • [20231020]为什么刷新缓存后输出记录顺序发生变化5.txt
    [20231020]为什么刷新缓存后输出记录顺序发生变化5.txt--//前几天做了单表刷新缓存后输出记录顺序发生变化的情况,今天测试2个表的情况。--//我遇到一个奇怪的现象,做一个记录,我无法使用10046跟踪.1.环境:[email protected]:1521/orcl>@[email protected]:1521/orcl>@pr=======......
  • mybatis的一级缓存和事务注解失效导致的查询结果缺失
    事情是这样的,测试发现有个查询接口,第一次调的时候没能返回数据,第二次调就可以正常返回。这个接口的功能是查询用户的现有福利数据。具体点的逻辑是1,查询数据库,mybatis,xml里面写的关联查询,主表和子表关联。2,判断查询结果,如果没有子表部分的信息,则按照业务逻辑生成子表数......
  • 什么是缓存雪崩
    在同一时间大量请求同一个接口,接口就会不断的查询数据库,就会导致缓存的雪崩; 解决办法:在基础时间的基础上,再加上一个随机的过期时间比如10-15s; ps:不要使用newRandom生成随机数,因为大量的随机数使用newRandom可能会导致生成同一个数值;......
  • C#WebApi 对数据进行缓存加快前请求数据的速度
    usingClassLibrary1;usingClassLibrary2;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Caching.Memory;usingMicrosoft.Extensions.Logging;usingWebApplication1.IServices;usingWebApplication1.Utility.SwaggerExt;namespaceWebApplication1.......
  • celery包结构、celery延迟任务和定时任务、django中使用celery、接口缓存、双写一致性
    celery包结构project├──celery_task#celery包│├──__init__.py#包文件│├──celery.py#celery连接和配置相关文件,且名字必须叫celery.py│└──tasks.py#所有任务函数├──add_task.py#添加任务......
  • redis其他操作、redis管道、django中使用redis、django缓存、celery介绍、补充单例
    redis其他操作'''delete(*names)exists(name)keys(pattern='*')expire(name,time)rename(src,dst)move(name,db))randomkey()type(name)'''#redis的key值,最大可以是多少?最大不超过512M一般1KB#redis的value值,最大可以是多少?最大不超过512M......
  • celery包结构、celery延迟任务和定时任务、django中使用celery、接口缓存、双写一致性
    celery包结构project├──celery_task #celery包  这个包可以放在任意位置│├──__init__.py#包文件│├──celery.py#celery连接和配置相关文件,且名字必须叫celery.py│└──tasks.py#所有任务函数│├──add_task.p......
  • Canal实现缓存同步策略
    Canal介绍个人在学习Redis的过程中,遇到多级缓存的处理方法,我本人的多级缓存分类里面提到过个人学习中的项目构成。简单来说就是OpenResty集群负责缓存一些静态性比较强的数据,比如说这个网页上的分类信息等基本不变化的数据,而Redis和JVM进程缓存(使用Caffeine实现)负责缓存变化性......
  • 希捷推出Exos系列24TB硬盘:配备增强型缓存 性能提高三倍
    希捷推出了全新的Exos24TB硬盘。其基于传统的CMR构建,为3.5英寸规格,转速为7200RPM。同时,Exos系列24TB硬盘拥有10片磁盘,每片磁盘的容量为2.4TB,是希捷存储密度最高的硬盘,适用于超大规模企业和数据中心,提供业界领先的总拥有成本(TCO)。Exos24TB硬盘针对最大存储及最大机架空间设计,......