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

本文深入探讨了硬盘的CHS寻址方式,包括磁头、柱面和扇区的概念,以及其最大容量限制。同时介绍了LBA寻址模式,解释了它是如何解决CHS寻址的局限性,并提供了LBA与CHS之间的转换公式。

什么是CHS寻址

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

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

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

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

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

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

CHS寻址的最大容量

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

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

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

扇区数最大数 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 )

CHS寻址的缺点

显然,由于要求每个磁道的扇区数相等,而外道的周长要大于内道,所以外道的记录密度要远低于内道,不仅造成了硬盘空间的浪费,也限制了硬盘的容量。为了解决这一问题,进一步提高硬盘容量,人们改用等密度结构生产硬盘。也就是说,外圈磁道的扇区比内圈磁道多,采用这种结构后,硬盘不再具有实际的CHS参数,寻址方式也改为线性寻址,即以扇区为单位进行寻址。

但一些古老的软件仍然使用CHS寻址方式(如使用BIOSInt13H接口的软件),为了兼容这样的程序,在硬盘控制器内部安装了一个地址翻译器,可以通过它将老式CHS参数翻译成新的线性参数。

 

LBA(Logical Block Addressing)逻辑块寻址模式。在 LBA 模式下,我们知道硬盘上的一个数据区域由它所在的磁头、柱面(也就是磁道)和扇区所唯一确定。早期系统就是直接使用磁头柱面和扇区来对硬盘进行寻址(这称 为CHS寻址),这需要分别存储每个区域的三个参数(这称为3D参数),使用时再分别读取三个参数,然后在送到磁盘控制器去执行。由于系统用8b来存储磁 头地址,用10b来存储柱面地址,用6b来存储扇区地址,而一个扇区共有512B,这样使用CHS寻址一块硬盘最大容量为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)。随着硬盘技术的进步,硬盘容量越来越大,CHS模式无法管理超过8064 MB的硬盘,因此工程师们发明了更加简便的LBA寻址方式。在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将 CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了 烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再这种逻辑地址转换为实际硬盘的物理地址。

  LARGE 大硬盘模式,在硬盘的柱面超过 1024 而又不为 LBA 支持时采用。LARGE 模式采用的方法是把柱面数除以 2,把磁头数乘以 2,其结果总容量不变。

  在这三种硬盘模式中,现在 LBA 模式使用最多。

  LBA与C/H/S 之间的转换:

  设NS为每磁道扇区数,NH为磁头数,C、H、S分别表示磁盘的柱面、磁头和扇区编号,LBA表示逻辑扇区号,div为整除计算,mod为求余计算,则:

  LBA=NH×NS×C+NS×H+S-1;

  C=(LBA div NS)div NH;

  H=(LBA div NS)mod NH;

  S=(LBA mod NS)+1

  例如 LBA = 0 则 CHS = 0/0/1

  从C/H/S到LBA的计算公式:

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

03-19
<think>好的,我现在需要帮助用户解决关于CHS编码中文语言设置的问题。用户提到可能涉及到字符编码或语言设置,引用了三个资料,其中引用[1]讲的是GBK编码,引用[2]关于log4cplus保存UTF-8的问题,引用[3]关于WinSCPPuTTY的语言设置。 首先,用户的问题可能是在使用某些软件(比如WinSCP或log4cplus)时遇到中文显示或保存的问题,可能与编码设置有关。需要明确CHS编码具体指什么。根据引用[1],GBK是双字节汉字编码,而CHS可能是指中文简体(Chinese Simplified)的区域设置,比如在WinSCP中选择语言为中文简体,对应的语言文件是WinSCP.chs。 接下来,用户提到可能与字符编码或语言设置有关,需要分情况讨论。比如,在log4cplus中处理UTF-8中文的问题,引用[2]指出需要自定义编码转换器。而在WinSCP中,语言设置需要下载对应的语言文件并配置,如引用[3]所述。同时,如果文件传输或显示出现乱码,可能涉及文件编码(如GBK vs UTF-8)或终端设置(如PuTTY的编码配置)。 需要将问题拆解为CHS编码中文语言设置两部分。CHS可能指编码或区域,但通常CHS是语言代码,而编码是GBK或UTF-8。用户可能在配置软件时遇到编码不匹配的问题,比如文件保存为GBK但软件期望UTF-8,或者终端使用的编码不一致导致乱码。 最后,根据引用内容,给出解决方案:检查软件的语言设置是否正确安装语言包,确认文件编码与软件配置一致,必要时自定义编码转换器。同时,确保相关工具(如PuTTY)的编码设置与文件编码一致,避免乱码。</think>[用户可见层] 关于CHS编码中文语言设置的问题,可以从以下两个层面分析: ### 一、CHS编码解析 1. **CHS本质是语言标识符**,表示中文简体(Chinese Simplified),而非具体编码格式。实际编码需要结合具体标准: - 在Windows系统中,中文默认使用GBK编码(双字节字符集)[^1] - 现代Web应用推荐使用UTF-8编码(如HTML5默认字符集) 2. **编码冲突的典型表现**: ```text 当程序使用GBK编码读取UTF-8文件时,会出现"鐢辨湀鍏夋媺闀�"类乱码 反之则会显示"æ��å��"等乱码形式 ``` ### 二、中文语言设置实践方案 #### (1)开发场景设置(以C++的log4cplus为例) ```cpp // 自定义UTF-8编码转换器 log4cplus::tstring customEncodingConverter(const std::string& input) { std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; return converter.from_bytes(input); } // 注册自定义编码器 log4cplus::getLocaleRegistry().insert( log4cplus::tstring("zh_CN.UTF-8"), customEncodingConverter); ``` 通过注册自定义编码转换器,实现UTF-8中文日志输出[^2] #### (2)运维工具设置(以WinSCP+PuTTY为例) $$ \text{正确配置链} = \begin{cases} \text{WinSCP语言文件路径} \Rightarrow \text{安装目录}/WinSCP.chs \\ \text{PuTTY编码设置} \Rightarrow \text{Window/Translation/UTF-8} \\ \text{文件传输模式} \Rightarrow \text{二进制模式(避免自动转码)} \end{cases} $$ 配置完成后需重启工具使设置生效[^3] ### 三、故障排查流程图 ```mermaid graph TD A[出现乱码] --> B{环境类型} B -->|开发环境| C[检查std::locale设置] B -->|运维工具| D[核对传输编码一致性] C --> E[验证编码转换器注册] D --> F[同步客户端/服务端编码] E --> G[测试多语言样例] F --> G G --> H{是否解决} H -->|是| I[流程结束] H -->|否| J[启用十六进制比对] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值