📄 大硬盘物理参数与逻辑参数的区别.htm
字号:
href="http://www.ugpr.com/"><FONT color=#ffffff>首页</FONT></A><FONT
color=#ffffff> </FONT><FONT color=#ffffff>|<A
href="http://www.ugpr.com/jsjks/c/shili/jsjks.htm"> </A></FONT><A
href="http://www.ugpr.com/jsjks/c/shili/jsjks.htm"><FONT
color=#ffffff>计算机考试</FONT></A><FONT color=#ffffff> |<A
href="http://www.ugpr.com/jsjks/c/proe/proe.htm"> </A></FONT><A
href="http://www.ugpr.com/jsjks/c/proe/proe.htm"><FONT
color=#ffffff>Pro/ENGINEER</FONT><FONT color=#ffffff> </FONT></A><FONT
color=#ffffff>| <A
href="http://www.ugpr.com/jsjks/c/ug/ug.htm"></A></FONT><A
href="http://www.ugpr.com/jsjks/c/ug/ug.htm"><FONT
color=#ffffff>Unigraphics</FONT></A><FONT color=#ffffff> | <A
href="http://www.ugpr.com/ansys/ansys.htm"><FONT
color=#ffffff>ANSYS</FONT></A> | </FONT><A
href="http://www.ugpr.com/jsjks/c/shoucang/shoucang.htm"><FONT
color=#ffffff>本站收藏</FONT></A><FONT color=#ffffff> | </FONT><A
href="http://www.ugpr.com/jsjks/c/aboutme/aboutme.htm"><FONT
color=#ffffff>关于站长</FONT></A><FONT color=#ffffff>|</FONT></TD></FORM></TR>
<TR>
<TD width=768 bgColor=#efefef>
<TABLE id=table1 cellSpacing=0 cellPadding=0 width=767 align=center
border=0>
<TBODY>
<TR style="FONT-SIZE: 12px">
<TD style="FONT-SIZE: 12px" vAlign=bottom width=107
bgColor=#008000>
<P> </P>
<P> </P>
<P> </P>
<P> </P>
<P>
<P><B><A href="http://www.ugpr.com/jsjks/c/shili/c.htm"><FONT
color=#ffffff><回上页</FONT></A></B></P></TD>
<TD style="FONT-SIZE: 12px" vAlign=top width=42>
<P> </P>
<P> </P>
<P> </P></TD>
<TD style="FONT-SIZE: 12px" vAlign=top width=515> <BR>
<BR><BR><BR><BR>大硬盘物理参数与逻辑参数的区别<BR>及在TURBO
C程序中的查询方法<BR><BR> 目前的硬盘容量已经相当大,
从以前的20M、40M等发展到500M、800M甚至更大, 拥有1G以上硬盘的用户也非常普遍, 使用大硬盘过程中有一个特殊的问题,
就是硬盘参数的设置与以前的小硬盘存在很大差别, 也就是说CMOS中的硬盘类型已经不是硬盘的真正物理参数, 这里可引入一个逻辑参数的概念,
同一个硬盘可能有多种逻辑参数设置方法,
并且不同的设置会得到不同的硬盘可用空间。<BR>一、硬盘管理机制的限制:<BR>硬盘的物理扇区由中断INT
13H进行读写或其它操作,在硬盘容量很小时入口参数规定如下:<BR>DH:磁头号,规定为0-15即最大值16;<BR>CH:柱面号低位取值范围0-1024;<BR>CL高两位:柱面号高两位<BR>CL低六位:扇区号,取值范围0-63;<BR>此时硬盘的最大容量为
16*1024*63=504M, 所以一般的用户购置540M的硬盘只能使用其中的504M;
一般来说硬盘容量的增加都是靠增加柱面数来实现的, 目前的500M以上硬盘的柱面都超出1024,
如果按以上的硬盘读写方法无论硬盘多大只能对前1024个柱面进行操作,即只能使用其前504M<BR>空间;<BR>二、硬盘模式与逻辑参数:<BR>为了使计算机系统能够使用超出1024柱面的硬盘,
新型IDE 硬盘控制器的BIOS系统采用了逻辑地址与物理地址的映射技术, 用逻辑参数代替真正的硬盘物理参数,
以保证系统正常使用所有的硬盘空间, 其方法可简单的描述为减小柱面数而增加磁头数,
当对硬盘进行操作时由硬盘控制器自动判断参数的正确性并完成逻辑地址与物理地址的映射工作; 对于一个IDE 硬盘来说,
可以有多种逻辑参数来合成真正的物理容量, 只要硬盘控制器支持逻辑参数方式, 这些参数组合都可以正常使用硬盘;
基于以上原理,近期出厂的机器BIOS
定义了三种固定的硬盘工作模式,即三种固定的逻辑参数形成方法:<BR>NORMAL:普通模式,即原始的IDE 硬盘工作模式,
此时CMOS参数为真正的硬盘物理参数, 最大柱面数为
1024,即使在CMOS硬盘参数中的柱面位置输入了大于1024的数值,但只要使用此模式, 只能使用前1024柱面的空间,
此时硬盘最大容量:<BR>1024*16*63*512=528482304字节, 即504MB;<BR>LBA:逻辑块模式,
此模式下硬盘的磁头数可设置为0-255,这是克服504M瓶颈的一种优秀的硬盘设置方式,
此时硬盘最大容量:<BR>1024*255*63*512=8.4GB;<BR>LARGE:巨大模式,
这是在一些不支持LBA模式的IDE控制器上使用的一种模式, 当然在支持LBA 的控制器上也可使用此模式,
此模式的逻辑参数设置方法是把真正的柱面数除以2, 而把磁头数乘以2,
以保证硬盘的总容量不变,<BR>此时硬盘最大容量:<BR>512*32*63*512=1GB;<BR>三、合理选择最佳参数<BR>
正如上面所说, 对于一个固定容量的硬盘来说, 可能有多个逻辑参数适用于此硬盘, 即使使用上面的三种固定模式,
各个不同逻辑参数所合成的硬盘容量并不完全相同,只是不同程度的接近硬盘的实际容量, 找出其中最优的参数配置是用户需要完成的工作;
在现在的CMOS设置程序中<BR>具有"IDE HDD AUTO DETECTION"项, 此项可以自动查找硬盘参数,
显示出可用的硬盘模式, 并推荐其中一种最优的模式, 比如笔者在一个配有1G硬盘的586
机器上选择此项时显示如下信息:<BR>OPTIONS SIZE CYLS HEAD SECTOR MODE<BR>2(Y) 1081
524 64 63 LBA<BR>1 1082 2097 16 63 NORMAL<BR>3 1081 1048 32 63
LARGE<BR>此时直接回车或按Y 键将使用缺省的模式即 LBA,
否则可按1或3使用其它模式;<BR>笔者对上述三种模式进行逐一试验, 得到如下结果:<BR>使用NORMAL模式:磁头16 柱面1024
扇区63 容量504MB;<BR>使用LBA模式:磁头64 柱面524 扇区63 容量1031MB;<BR>使用LARGE模式:磁头32
柱面1023 扇区63 容量1008MB;<BR>此盘的物理结构为:磁头16 柱面2097 扇区63
实际容<BR>量:1032MB;可见使用LBA 模式最为合理;<BR>在某些CMOS设置程序中, 可以把硬盘的模式置为AUTO
DETECT,此时BIOS将自动检测硬盘并选择最佳的模式, 本人在此机器上选择 AUTO DETECT模式时,
机器启动后显示硬盘使用<BR>LBA模式;<BR>四、在程序中检测硬盘逻辑参数及物理参数<BR>目前的程序编制工作中,
为了使程序具有良好的适应性, 往往需要获得硬盘的当前物理及逻辑参数, 获得逻辑参数的方法是使用硬盘BIOS的08H号(INT
13H)功能, 此调用在以前是获得驱动器的真正参数, 但在逻辑参数模式下所得到的则是硬盘当前使用的逻辑参数:<BR>入口:
AH=08H,DL=驱动器号(0:A驱 1:B驱 80H第一硬盘...)<BR>出口:
AH=状态码<BR>DL=驱动器数<BR>DH=最大磁头号<BR>CL(6-7)=最大柱面号<BR>CL(0-1)=最大柱面号高两位<BR>CH=最大柱面号低位<BR>获取硬盘物理参数的方法是通过IDE
硬盘控制器地址口的直接命令操作, 其命令码为为ECH,输入此命令后,IDE控制器将返回256个字的信息数据,
其中常用的数据为(从0开始):<BR>第1个字:硬盘柱面数<BR>第3个字:硬盘磁头数<BR>第6个字:硬盘每磁道扇区数<BR>另外还有一些有关硬盘的其它数据,
具体请见有关资料;下面给出了查找第一硬盘物理参数及逻辑参数的程序实例, 程序用TURBO
C++1.0写成,经编译为EXE或执行文件后即可在DOS 下运行,
运行之后将分别显示出第一硬盘的物理参数、当前使用的逻辑参数及合成的容量值;<BR><BR>辽宁省铁岭市委办公室(112000)
金永涛<BR><BR>//硬盘参数检测<BR>//TURBO C++1.0<BR>#include
<dos.h><BR>#include <stdio.h><BR>#include
<conio.h><BR>void disphd(int num);<BR>void disp13(int
num);<BR>unsigned int i,cyl,head,sec,size;<BR>unsigned int
buff[256];<BR>union REGS r;<BR>void
main(void)<BR>{<BR>window(1,1,80,25);<BR>textbackground(3);<BR>textcolor(15);<BR>clrscr();<BR>printf("\nIDE
HDISK INFO TEST");<BR>disphd(1);<BR>disp13(1);}<BR>void disphd(int
num){<BR>int
j;<BR>j=(num-1)*16;<BR>while(inportb(0x1f7)>=0x80);//硬盘控制器是否准备好<BR>outportb(0x1f6,j);
//查一硬盘<BR>outportb(0x1f7,0x10);
//磁头回到0道<BR>while(inportb(0x1f7)>=0x80);<BR>if(inportb(0x1f7)==0x50)
//是否存在硬盘 <BR>printf("\nFound a IDE Hdisk!");else{<BR>printf("\nno
found IDE
hdisk");<BR>exit(0);}<BR>outportb(0x1f6,j);<BR>outportb(0x1f7,0xec);
//发读驱动器参数命令<BR>while(inportb(0x1f7)!=0x58);//等待回送信号<BR>for(i=0;i<256;i++)
//读参数数据<BR>buff[i]=inport(0x1f0);<BR>printf("\nNumber[%u] \nIDE
INFO:",num);<BR>printf("\nCylinder:%u",cyl=buff[1]);
//显示柱面数<BR>printf("\nHead:%u",head=buff[3]);
//显示磁头数<BR>printf("\nSector:%u",sec=buff[6]);
//每磁道扇区数<BR>size=(int)(long)cyl*(long)head*(long)sec/2048;
//硬盘容量<BR>printf("\nsize:%uM",size); }<BR>void disp13(int
num){<BR>unsigned int
hdsid,hdcyl,hdsec,dev,size;<BR>dev=(num-1)+0x80;<BR>r.h.dl=dev;<BR>r.h.ah=8;<BR>int86(0x13,&r,&r);
//取硬盘参数<BR>hdsid=r.h.dh;<BR>hdsec=r.h.cl&0x3f;<BR>r.h.dh=r.h.cl>>6;<BR>r.h.dl=r.h.ch;<BR>hdcyl=r.x.dx;<BR>printf("\n\nBIOS
INFO:");<BR>printf("\nCylinder:%u",hdcyl+2);
//显示柱面数<BR>printf("\nHead:%u",hdsid+1);
//显示磁头数<BR>printf("\nSector:%u",hdsec);
//每磁道扇区数<BR>size=(int)(long)(hdcyl+2)*(long)(hdsid+1)*(long)hdsec/2048;
//硬盘容量<BR>printf("\nSize:%uM",size);}<BR><BR><BR><BR> </TD>
<TD style="FONT-SIZE: 12px" vAlign=top width=102
bgColor=#008000> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<TABLE height=65 cellSpacing=0 cellPadding=0 width=770 align=center
background=大硬盘物理参数与逻辑参数的区别.files/bottom_line.gif border=0>
<TBODY>
<TR>
<TD height=5> </TD></TR>
<TR>
<TD align=middle>
<SCRIPT src=""></SCRIPT>
<SCRIPT>var tc_user="adu520";var tc_class="2";</SCRIPT>
<SCRIPT src=""></SCRIPT>
<SCRIPT src=""></SCRIPT>
</TD></TR>
<TR>
<TD align=middle>
<DIV align=center><FONT face=Verdana, size=2 sans-serif Helvetica,
Arial,>CopyRight© </FONT><FONT size=2 sans-serif helvetica, arial,>2003
</FONT><A href="http://adu520.yeah.net/"><STRONG><FONT color=#000000
size=2 sans-serif helvetica, arial,>乐知网络</FONT></STRONG></A><FONT
face=Verdana, size=2 sans-serif Helvetica, Arial,>All Rights
Reserved</FONT></DIV></TD></TR>
<TR>
<TD align=middle>
<DIV align=center>
<P align=center>未经授权禁止复制或建立镜像。谢谢!</P></DIV></TD></TR></TBODY></TABLE>
<SCRIPT src=""></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -