磁盘存储器

磁盘存储器

硬盘存储器的存出结构

如下图所示,磁介质均匀分布在一些同心圆上,形成一个盘面的磁道。为了方便地查找数据在磁道中的位置,同时还把每张磁盘分成很多扇区。磁道从外到内依次为0号磁道、1号磁道、2号磁道…在这里插入图片描述通常每个磁道,每个扇区存放一定的数据块(规定是512B)。一个硬盘存储器由一个或多个盘片组成。在这里插入图片描述
磁头从上到下依次是0号读写头、1号读写头、2号读写头… 盘面从上到下依次是0号面、1号面、2号面…一个硬盘的多个盘片固定在同一个轴上;每个盘片有两个面,都可以存放数据,并且个盘面的磁道数相同;所有盘面中同一半径的磁道形成一个圆柱面,圆柱面的总数等于一个盘面的磁道数。硬盘中数据地址由硬盘的台号、柱面(磁道)号、盘面号、扇区号表示。

如上图所示,一个磁道上的扇区由一个一个前导区和4096b(512B)的数据区组成。硬盘存储器在工作时,磁盘由柱轴带动,可以做任意角度的旋转,而读写头由磁盘臂延径向做任意距离的位移。这样,就能很快的找到所有盘面上的任意位置。由于在读写过程中,各个盘面的磁头总在同一个圆柱面上。存取信息时,可按圆柱面的顺序进行,从而减少了磁头径向的移动次数,提高存取速度。

在这里插入图片描述

磁盘格式化

刚生产出来的硬盘不能直接用于存储数据。为了能存储数据,必须经过低级格式化、分区与高级格式化三个处理。

硬磁盘的低级格式化

低级格式化就是将空白的磁盘
划分出柱面和磁道,再将磁道化分为若干个扇区,确定扇区交错因子,并给扇区加上标记,以便驱动器能识别指定的扇区。
交错因子是使扇区的呈交错编排。如图所示:
在这里插入图片描述
扇区的不连续编排的目的是为了让读写头读写某一扇区后,在读写下一扇区之前,给主机一段处理刚读入数据的时间,而无须让驱动器停转或多转一圈。所以,扇区交错因子与主机的处理速度有关。

硬盘分区

分区是将硬盘分为几个不同的存储区域。安装操作系统和软件之前,首先需要对硬盘进行分区。分区后,硬盘空间分为如下图所示两个大部分:主引导扇区和1~4个分区。每个分区可供不同的操作系统使用的区域。通常一个分区包括活动、非活动(即“无”状态)和隐藏3种状态,其中活动区域就是指当前系统所在的分区。在这里插入图片描述
(1)主引导扇区
主引导扇区也称为主引导记录(MBR),位于硬盘的0磁道0柱面第一个扇区(即0区),他只占一个扇区,即有固定的512B,包括下图所示的三个部分内容:主引导程序、分区表DPT(Disk Partition Table)和2个字节的结束标志“55 AA”。
在这里插入图片描述
DPT用于记录硬盘各分区的如下信息:

  1. 引导标志,即该分区的状态:活动(80H)、非活动(00H)或隐藏。
  2. 该分区起始头(第2个字节)(磁头号)
  3. 该分区起始扇区(第3字节)和起始柱面(第4字节)
  4. 该分区类型(第5字节),如82——Linux Native分区,83——Linux Swap分区。
  5. 该分区终止磁头(第6字节),扇区号(第7字节)和终止柱面(第8字节)。
  6. 该分区分区之前已经使用的扇区数(第9、10、11、12字节)。
  7. 该分区之后的总扇区数(第13、14、15、16字节)

主引导区的作用如下;

  1. 检查硬盘分区表是否完好
  2. 在分区表中寻找可引导的“活动”分区
  3. 将活动分区的第一逻辑扇区装入内存(将整个系统的控制权交给“活动”分区上的操作系统,然后这个操作系统被调入至内存)
  4. 执行引导扇区的运行代码

需要注意的是MBR由分区程序产生,但他不依赖于哪一种操作系统。
最后的两个字节是分区表的结束标志“55 AA”,如果这两个标志被修改(有些病毒就会修改这两个标志),则系统引导时将报告找不到有效的分区表。

(2)主分区、扩展分区与逻辑分区
每个分区的信息(BPT)需要16字节。BPT的总长度是64B,所以最多只能记录这四个主分区的信息,即一块硬盘最多可以分为4个分区,通常以C~F作为盘符表示。4个分区有时不能满足使用需求,所以磁盘分区命令允许用户在4个分区中指定一个分区作为扩张分区。再有扩展分区的情况下,还应进行逻辑分区可以使用。扩展分区可以分区为一个逻辑分区或多达32个逻辑分区,每个逻辑分区都单独分配一个盘符(如D到Z),可以作为计算机单独的物理设备使用。扩展分区仅能用于存放数据。为了与扩展分区相区别,把能安装操作系统的磁盘分区称为磁盘主分区,也称为基本分区或系统分区。

磁盘的高级格式化

硬磁盘的高级格式化是在分区的基础上对各个分区的磁道进行格式化,划分逻辑磁道,建立各分区的数据结构。(低级格式化是在物理上,高级格式化是在逻辑上)。具体内容如下:

  1. 清除硬盘上的数据
  2. 生成OBR引导区信息
  3. 为各逻辑盘建立文件分配表初始化FAT表
  4. 建立根目录相应的文件目录表(FDT)及数据区(DATA)
  5. 从各逻辑盘指定柱面开始,对扇区进行逻辑编号
  6. 标注逻辑坏道

(1)操作系统引导扇区OBR
OBR(OS Boot Record,操作系统启动目录)通常位于每个分区(partition)的第一个扇区,是操作系统可直接访问的位置,由高级格式化程序产生。OBR通常包括一个引导程序和一个被称为BPB参数块的本分区参数记录表,参数视分区大小、操作系统的类别而不同。

引导程序的主要作用是判断本区根目录前两个文件是否为操作系统的引导文件,如果是,就把第一个文件读入内存,并把控制权交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(也成为簇)的大小等重要参数。

(2)文件分配表FAT
在分区中,FAT处于OBR之后。为了说明FAT的概念,需要补充簇的概念。文件占用磁盘空间时,基本单位不是按照字节分配,而是按簇分配。簇的大小是扇区数,与硬盘的总容量大小有关,为2的n次方个扇区数。
当像磁盘中存写一个文件时,操作系统往往会根据磁盘中的空闲簇,将文件分布在不连续的段空间上,形成链式存储结构,并把段与段之间的连接信息保存在FAT中,以便操作系统读取文件时,能够正确的找到各段的位置并正确读出。
为了数据安全起见,FAT一般有两个一模一样的,第二个是第一个的备份,FAT区紧接在OBR之后,其大小由本区的大小及文件分配单元的大小决定。

(3)目录区DIR
DIR(目录)是文件组织结构的友谊重要组成部分,他紧接在第二FAT标志后,用于与FAT配合起来准确确定文件的位置上。
DIR分为两类:根目录和子目录。根目录有一个,子目录可以有多个。子目录下还可以有子目录,从而形成“树状”结构。文件目录系统为目录项分配32B。 目录项中有文件(或子目录,或卷标)的名字、扩展名、属性、生成或最后修改日期、时间、开始簇号及文件大小。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在磁盘中的具体位置及大小了。

### 计算机组成原理中的磁盘存储器 #### 磁盘存储器概述 磁盘存储器是一种非易失性的辅助存储设备,在计算机系统中用于长期保存数据。这类存储器具有大容量的特点,能够有效地支持操作系统文件、应用程序和个人文档的持久化存储[^1]。 #### 物理结构与工作原理 磁盘由多个圆形金属片或塑料片构成,这些圆盘被固定在一个旋转轴上形成一个整体,并可以在高速下转动。每一片称为碟面(platter),上面覆盖着一层可记录信息的材料。读写头安装于机械臂末端,通过移动到不同位置来访问特定扇区的数据。当磁盘旋转时,读/写头能够在指定轨道(track)上的各个扇区内执行操作。 #### 数据组织形式 为了提高效率并简化管理过程,磁盘上的空间通常按照一定规则划分为若干逻辑单元: - **柱面(Cylinder)**:所有位于相同半径处的一组同心环形带构成了一个柱面; - **磁道(Track)**:单个碟面上的一个闭合曲线即为一条磁道; - **扇区(Sector)**:每个磁道又被细分成更小的部分——扇区,这是最小地址单位; 这种层次化的分区方式使得定位更加精准快速,同时也便于文件系统的管理和维护。 #### 性能指标分析 衡量一块硬盘性能好坏可以从以下几个方面考虑: - **寻址时间(Access Time)**:指从发出指令至实际开始传输所需的时间间隔,主要包括寻找目标磁道所需的延迟时间和等待合适扇区转过的潜伏期两部分; - **传输速率(Data Transfer Rate)**:表示单位时间内所能传送的最大字节数量,反映了持续读取或写入的速度水平; - **缓存大小(Buffer Size)**:内置RAM芯片用来临时存放频繁使用的资料片段,有助于减少不必要的物理I/O次数从而提升响应速度; 综上所述,理解磁盘存储器的工作机制对于优化程序运行环境至关重要,合理配置参数可以显著改善整个计算平台的表现效果。 ```python # Python代码示例展示如何获取当前机器硬盘基本信息 import psutil disk_info = psutil.disk_partitions() for partition in disk_info: print(f"Device: {partition.device}") print(f"Mountpoint: {partition.mountpoint}") print(f"File system type: {partition.fstype}") try: usage = psutil.disk_usage(partition.mountpoint) except PermissionError: continue print(f"Total size: {usage.total / (2**30):.2f} GB") print(f"Used space: {usage.used / (2**30):.2f} GB") print(f"Free space: {usage.free / (2**30):.2f} GB") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值