CHS

什么是CHS寻址

很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的CSH 3D参数 (Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应CHS寻址方式。

CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。

磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。

柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。

扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。

下面的图可能能更好的帮助理解:

CHS寻址的最大容量

CHS寻址方式的容量由CHS三个参数决定:

1.磁头数最大为255 (用 8 个二进制位存储)。从0开始编号。

2.柱面数最大为1023(用 10 个二进制位存储)。从0开始编号。

3.扇区数最大数 63(用 6个二进制位存储)。从1始编号。

所以CHS寻址方式的最大寻址范围为:

255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )

或硬盘厂商常用的单位:

255 * 1023 * 63 * 512 / 1000000 = 8.414 GB ( 1M =1000000 Bytes )

为什么引入LBA概念

首先,由于INT13的限制,三维地址C/H/S的最大值只能为1024/16/63,容量最大只能到1024X16X63 Byte=528482304 Byte=504 M。其次,在系统管理文件时记录繁琐的C/H/S也很吃力,效率较低,使用逻辑扇区后,可在硬盘读写操作时脱离柱面,磁头等硬件参数的制约。

在LBA模式下,系统把所有的物理扇区都按照某种方式或规则看做是一线性编号的扇区,即从0到某个最大值方式排列,并连成一条线,把LBA作为一个整体来对待,而不再是具体到实际的C/H/S值,这样只用一个序数就能确定一个唯一的物理扇区,这就是线性地址的由来,显然线性地址是物理扇区的逻辑地址。

LBA简介

磁盘读取发展

IO操作读取硬盘的三种方式:

  • chs方式 :小于8G (8064MB)

  • LBA28方式:小于137GB

  • LBA48方式:小于144,000,000 GB

LBA方式访问使用了data寄存器,LBA寄存器(总共3个),device寄存器,command寄存器来完成的。

LBA28和LBA48方式:
LBA28方式使用28位来描述一个扇区地址,最大支持128GB的硬磁盘容量。

LBA28的寄存器

寄存器 端口 作用
data寄存器 0x1F0 已经读取或写入的数据,大小为两个字节(16位数据)
每次读取1个word,反复循环,直到读完所有数据
features寄存器 0x1F1 读取时的错误信息
写入时的额外参数
sector count寄存器 0x1F2 指定读取或写入的扇区数
LBA low寄存器 0x1F3 lba地址的低8位
LBA mid寄存器 0x1F4 lba地址的中8位
LBA high寄存器 0x1F5 lba地址的高8位
device寄存器 0x1F6 lba地址的前4位(占用device寄存器的低4位)
主盘值为0(占用device寄存器的第5位)
第6位值为1
LBA模式为1,CHS模式为0(占用device寄存器的第7位)
第8位值为1
command寄存器 0x1F7 读取,写入的命令,返回磁盘状态 
1 读取扇区:0x20 写入扇区:0x30 
磁盘识别:0xEC

IDE通道1,读写0x1f0-0x1f7号端口

IDE通道2,读写0x170-0x17f号端口

CHS方式:

写0x1f1: 0

写0x1f2: 要读的扇区数

写0x1f3: 扇区号W

写0x1f4: 柱面的低8位

写0x1f5: 柱面的高8位

写0x1f6: 7~5位,101,第4位0表示主盘,1表示从盘,3~0位,磁头号

写0x1f7: 0x20为读, 0x30为写

读0x1f7: 第4位为0表示读写完成,否则要一直循环等待

读0x1f0: 每次读取1个word,反复循环,直到读完所有数据

24-bit LBA方式:

写0x1f1: 0

写0x1f2: 要读的扇区数

写0x1f3: LBA参数的0~7位

写0x1f4: LBA参数的8~15位

写0x1f5: LBA参数的16~23位

写0x1f6: 7~5位,111,第4位0表示主盘,1表示从盘,3~0位,LBA参数的24~27位

写0x1f7: 0x20为读, 0x30为写

读0x1f7: 第4位为0表示读写完成,否则要一直循环等待

读0x1f0: 每次读取1个word,反复循环,直到读完所有数据

48-bit LBA方式:

写两次0x1f1端口: 0

写两次0x1f2端口: 第一次要读的扇区数的高8位,第二次低8位

写0x1f3: LBA参数的24~31位

写0x1f3: LBA参数的0~7位

写0x1f4: LBA参数的32~39位

写0x1f4: LBA参数的8~15位

写0x1f5: LBA参数的40~47位

写0x1f5: LBA参数的16~23位

写0x1f6: 7~5位,010,第4位0表示主盘,1表示从盘,3~0位,0

写0x1f7: 0x24为读, 0x34为写

LBA和CHS的的对应关系

虽然LBA和CHS的两种定位方式不同,但其实两者间还是有一个转换关系的。

首先要了解线性地址的编码规则:把第一柱面(0柱面)第一磁头(0面)第一扇区(1扇区)编为逻辑“0”扇区。。。。。。直到第一柱面(0柱面)第一磁头(0面)的第63扇区(63扇区),将其编为第“63”扇区,这样编码。

(1)从C/H/S到LBA

用C表示当前柱面号,H表示当前磁头号,S表示当前扇区号,CS表示起始柱面号,HS表示起始磁头号,SS表示起始扇区号,PS表示每磁道有多少个扇区,PH表示每柱面有多少个磁道,计算公式如下:

LBA = ( C – CS ) * PH * PS + ( H – HS ) * PS + ( S – SS )

例如:

C/H/S=0/01 则 LBA = 0

C/H/S=0/0/63 则 LBA = 62

C/H/S=0/1/1 则 LBA = 63

C/H/S=0/5/1 则 LBA = 315

C/H/S=100/0/1 则 LBA = 1606500

C/H/S=100/1/1 则 LBA = 1606563

C/H/S=139/52/48 则 LBA = 2236358

C/H/S=220/156/18则 LBA = 3544145

(2)从LBA到C/H/S

变量命名依然同上,则计算公式如下

       C = LBA DIV ( PH * PS ) + CS

       H = ( LBA DIV PS ) MOD PH + HS

       S = LBA MOD PS + SS

如果不运行MOD运算符,只用DIV运算符,则:

       C = LBA DIV ( PH * PS ) + CS

       H = LBA DIV PS – ( C – CS ) * PH + HS

       S = LBA – ( C – CS ) * PH * PS – H – HS)* PS + SS

例如:

LBA=0 则 C/H/S = 0/0/1

LBA=62 则 C/H/S = 0/0/63

LBA=63 则 C/H/S = 0/1/1

LBA=315 则 C/H/S = 0/5/1

LBA=1606500 则 C/H/S = 100/0/1

LBA=2236358 则 C/H/S = 139/52/48

LBA=3544145 则 C/H/S = 220/156/18

CHS和LBA逻辑块地址相关推荐

  1. 磁盘数据寻址方式(CHS与LBA相互转换)

    磁盘数据寻址方式 访问硬盘上的数据总是以扇区为单位进行的,即每次读或写至少是一个扇区的数据. 常用两种:物理寻址方式(CHS)和逻辑寻址方式(LBA) 物理寻址方式 物理寻址方式又称为CHS(Cyli ...

  2. 磁盘寻址方式--CHS和LBA寻址方式

    什么是CHS寻址 很久以前, 硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘.也就是硬盘盘片的每一条磁道都具有相同的扇区数.由此产生了所谓的CSH 3D参数 (Disk Geometry) ...

  3. 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree 日志结构合并树...

    LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...

  4. linux系统启动2——MBR

    MBR位于硬盘的0柱面,0磁头,1扇区,被称为主引导程序. MBR的全称是Master Boot Record(主引导记录),MBR早在1983年IBM PC DOS 2.0中就已经提出. MBR是位 ...

  5. 操作系统开发:编写开机引导

    操作系统是用来管理与协调硬件工作的,开发一款操作系统有利于理解底层的运转逻辑,本篇内容主要用来理解操作系统是如何启动的,又是如何加载磁盘中的内核的,该系列文章参考各类底层书籍,通过自己的理解并加以叙述 ...

  6. 【Linux】基础IO --- 内核级和用户级缓冲区、磁盘结构、磁盘的分治管理、block group块组剖析…

    出身寒微,不是耻辱.能屈能伸,方为丈夫. 文章目录 一.缓冲区(语言级:IO流缓冲,内核级:块缓冲) 1.观察一个现象 2.理解缓冲区存在的意义(节省进程IO数据的时间) 3.语言级缓冲区的刷新策略( ...

  7. 操作系统开发: 编写开机引导

    操作系统是用来管理与协调硬件工作的,开发一款操作系统有利于理解底层的运转逻辑,本篇内容主要用来理解操作系统是如何启动的,又是如何加载磁盘中的内核的,该系列文章参考各类底层书籍,通过自己的理解并加以叙述 ...

  8. 【Linux】[万字] 详析 Linux磁盘文件管理系统、文件inode以及 软硬连接

    Linux的文件操作, 都是从内存文件进行操作, 即都是对打开的文件进行操作的. 但是, 我们的操作系统中并不是只有内存文件的, 甚至可以说 内存文件只是操作系统中所有文件的一小部分, 绝大部分的文件 ...

  9. 【存储知识学习】第五章-5.4虚拟磁盘和5.5卷管理层-《大话存储》阅读笔记

    目录 5.4 虚拟磁盘 5.4.1 RAID组再划分 5.4.2同一通道存在多种类型的RAID组 5.4.3操作系统如何看待逻辑盘 5.4.4控制器如何管理逻辑磁盘 5.5卷管理层 5.5.1-5.5 ...

最新文章

  1. android xml png,android - 使用.png文件中的形状创建xml聊天气泡 - 堆栈内存溢出
  2. Java堆和栈的区别
  3. 小程序支付 PHP
  4. Oracle之to_char(值,'fm99990.00')
  5. 宝塔自助建站系统源码v8.0
  6. python语法基础题你好_Python基础要打牢,先学会基本语法
  7. 基础服务系列-Hyper-V 安装centos7
  8. 深度神经网络训练过程中为什么验证集上波动很大_一个值得深思的问题?为什么验证集的loss会小于训练集的loss...
  9. 空中照片:云层透过的阳光,双机同飞
  10. 计算机考研复试之计算机网络
  11. 15 年工龄的阿里P9职场历程自述
  12. 如何写一份优秀的投资计划书
  13. IE 浏览器 判断 增加 支持 IE8 IE9 IE10 IE11等 IE浏览器(是不是IE浏览器判断)
  14. jetson的学习资料总结
  15. 年仅28岁的程序员郭宇,宣布从字节跳动辞职,实现财富自由!
  16. PentestBOX教程
  17. 传国宝玺 第三部 巴山藏宝洞 第三十四章 千魂魈
  18. 学生上课睡觉班主任怎么处理_“佛系教师”语录:小孩是别人的,成绩是校长的,饭碗是自己的...
  19. win7与vmware实现文件共享
  20. 用按键精灵,写个简单的跳课脚本

热门文章

  1. 攻防世界【favorite_number】解题方法
  2. 2021年资料员-岗位技能(资料员)考试题及资料员-岗位技能(资料员)试题及解析
  3. 字节跳动笔试—抖音红人
  4. JS逆向 -- 分析某站aid、cid、w_rid和sid的加密过程
  5. scrapy 学习笔记
  6. quartz 取消任务的正确做法
  7. T225362 《山茶文具店》
  8. D-Map: Visual Analysis of Ego-centric Information Diffusion Patterns in Social Media
  9. python处理音频的库_python视频音频处理库
  10. foxmail的邮局和端口_pop3端口号详细介绍