?? 大硬盤物理參數(shù)與邏輯參數(shù)的區(qū)別.htm
字號(hào):
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>計(jì)算機(jī)考試</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>關(guān)于站長(zhǎng)</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>大硬盤物理參數(shù)與邏輯參數(shù)的區(qū)別<BR>及在TURBO
C程序中的查詢方法<BR><BR> 目前的硬盤容量已經(jīng)相當(dāng)大,
從以前的20M、40M等發(fā)展到500M、800M甚至更大, 擁有1G以上硬盤的用戶也非常普遍, 使用大硬盤過程中有一個(gè)特殊的問題,
就是硬盤參數(shù)的設(shè)置與以前的小硬盤存在很大差別, 也就是說CMOS中的硬盤類型已經(jīng)不是硬盤的真正物理參數(shù), 這里可引入一個(gè)邏輯參數(shù)的概念,
同一個(gè)硬盤可能有多種邏輯參數(shù)設(shè)置方法,
并且不同的設(shè)置會(huì)得到不同的硬盤可用空間。<BR>一、硬盤管理機(jī)制的限制:<BR>硬盤的物理扇區(qū)由中斷INT
13H進(jìn)行讀寫或其它操作,在硬盤容量很小時(shí)入口參數(shù)規(guī)定如下:<BR>DH:磁頭號(hào),規(guī)定為0-15即最大值16;<BR>CH:柱面號(hào)低位取值范圍0-1024;<BR>CL高兩位:柱面號(hào)高兩位<BR>CL低六位:扇區(qū)號(hào),取值范圍0-63;<BR>此時(shí)硬盤的最大容量為
16*1024*63=504M, 所以一般的用戶購(gòu)置540M的硬盤只能使用其中的504M;
一般來說硬盤容量的增加都是靠增加柱面數(shù)來實(shí)現(xiàn)的, 目前的500M以上硬盤的柱面都超出1024,
如果按以上的硬盤讀寫方法無論硬盤多大只能對(duì)前1024個(gè)柱面進(jìn)行操作,即只能使用其前504M<BR>空間;<BR>二、硬盤模式與邏輯參數(shù):<BR>為了使計(jì)算機(jī)系統(tǒng)能夠使用超出1024柱面的硬盤,
新型IDE 硬盤控制器的BIOS系統(tǒng)采用了邏輯地址與物理地址的映射技術(shù), 用邏輯參數(shù)代替真正的硬盤物理參數(shù),
以保證系統(tǒng)正常使用所有的硬盤空間, 其方法可簡(jiǎn)單的描述為減小柱面數(shù)而增加磁頭數(shù),
當(dāng)對(duì)硬盤進(jìn)行操作時(shí)由硬盤控制器自動(dòng)判斷參數(shù)的正確性并完成邏輯地址與物理地址的映射工作; 對(duì)于一個(gè)IDE 硬盤來說,
可以有多種邏輯參數(shù)來合成真正的物理容量, 只要硬盤控制器支持邏輯參數(shù)方式, 這些參數(shù)組合都可以正常使用硬盤;
基于以上原理,近期出廠的機(jī)器BIOS
定義了三種固定的硬盤工作模式,即三種固定的邏輯參數(shù)形成方法:<BR>NORMAL:普通模式,即原始的IDE 硬盤工作模式,
此時(shí)CMOS參數(shù)為真正的硬盤物理參數(shù), 最大柱面數(shù)為
1024,即使在CMOS硬盤參數(shù)中的柱面位置輸入了大于1024的數(shù)值,但只要使用此模式, 只能使用前1024柱面的空間,
此時(shí)硬盤最大容量:<BR>1024*16*63*512=528482304字節(jié), 即504MB;<BR>LBA:邏輯塊模式,
此模式下硬盤的磁頭數(shù)可設(shè)置為0-255,這是克服504M瓶頸的一種優(yōu)秀的硬盤設(shè)置方式,
此時(shí)硬盤最大容量:<BR>1024*255*63*512=8.4GB;<BR>LARGE:巨大模式,
這是在一些不支持LBA模式的IDE控制器上使用的一種模式, 當(dāng)然在支持LBA 的控制器上也可使用此模式,
此模式的邏輯參數(shù)設(shè)置方法是把真正的柱面數(shù)除以2, 而把磁頭數(shù)乘以2,
以保證硬盤的總?cè)萘坎蛔?<BR>此時(shí)硬盤最大容量:<BR>512*32*63*512=1GB;<BR>三、合理選擇最佳參數(shù)<BR>
正如上面所說, 對(duì)于一個(gè)固定容量的硬盤來說, 可能有多個(gè)邏輯參數(shù)適用于此硬盤, 即使使用上面的三種固定模式,
各個(gè)不同邏輯參數(shù)所合成的硬盤容量并不完全相同,只是不同程度的接近硬盤的實(shí)際容量, 找出其中最優(yōu)的參數(shù)配置是用戶需要完成的工作;
在現(xiàn)在的CMOS設(shè)置程序中<BR>具有"IDE HDD AUTO DETECTION"項(xiàng), 此項(xiàng)可以自動(dòng)查找硬盤參數(shù),
顯示出可用的硬盤模式, 并推薦其中一種最優(yōu)的模式, 比如筆者在一個(gè)配有1G硬盤的586
機(jī)器上選擇此項(xiàng)時(shí)顯示如下信息:<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>此時(shí)直接回車或按Y 鍵將使用缺省的模式即 LBA,
否則可按1或3使用其它模式;<BR>筆者對(duì)上述三種模式進(jìn)行逐一試驗(yàn), 得到如下結(jié)果:<BR>使用NORMAL模式:磁頭16 柱面1024
扇區(qū)63 容量504MB;<BR>使用LBA模式:磁頭64 柱面524 扇區(qū)63 容量1031MB;<BR>使用LARGE模式:磁頭32
柱面1023 扇區(qū)63 容量1008MB;<BR>此盤的物理結(jié)構(gòu)為:磁頭16 柱面2097 扇區(qū)63
實(shí)際容<BR>量:1032MB;可見使用LBA 模式最為合理;<BR>在某些CMOS設(shè)置程序中, 可以把硬盤的模式置為AUTO
DETECT,此時(shí)BIOS將自動(dòng)檢測(cè)硬盤并選擇最佳的模式, 本人在此機(jī)器上選擇 AUTO DETECT模式時(shí),
機(jī)器啟動(dòng)后顯示硬盤使用<BR>LBA模式;<BR>四、在程序中檢測(cè)硬盤邏輯參數(shù)及物理參數(shù)<BR>目前的程序編制工作中,
為了使程序具有良好的適應(yīng)性, 往往需要獲得硬盤的當(dāng)前物理及邏輯參數(shù), 獲得邏輯參數(shù)的方法是使用硬盤BIOS的08H號(hào)(INT
13H)功能, 此調(diào)用在以前是獲得驅(qū)動(dòng)器的真正參數(shù), 但在邏輯參數(shù)模式下所得到的則是硬盤當(dāng)前使用的邏輯參數(shù):<BR>入口:
AH=08H,DL=驅(qū)動(dòng)器號(hào)(0:A驅(qū) 1:B驅(qū) 80H第一硬盤...)<BR>出口:
AH=狀態(tài)碼<BR>DL=驅(qū)動(dòng)器數(shù)<BR>DH=最大磁頭號(hào)<BR>CL(6-7)=最大柱面號(hào)<BR>CL(0-1)=最大柱面號(hào)高兩位<BR>CH=最大柱面號(hào)低位<BR>獲取硬盤物理參數(shù)的方法是通過IDE
硬盤控制器地址口的直接命令操作, 其命令碼為為ECH,輸入此命令后,IDE控制器將返回256個(gè)字的信息數(shù)據(jù),
其中常用的數(shù)據(jù)為(從0開始):<BR>第1個(gè)字:硬盤柱面數(shù)<BR>第3個(gè)字:硬盤磁頭數(shù)<BR>第6個(gè)字:硬盤每磁道扇區(qū)數(shù)<BR>另外還有一些有關(guān)硬盤的其它數(shù)據(jù),
具體請(qǐng)見有關(guān)資料;下面給出了查找第一硬盤物理參數(shù)及邏輯參數(shù)的程序?qū)嵗? 程序用TURBO
C++1.0寫成,經(jīng)編譯為EXE或執(zhí)行文件后即可在DOS 下運(yùn)行,
運(yùn)行之后將分別顯示出第一硬盤的物理參數(shù)、當(dāng)前使用的邏輯參數(shù)及合成的容量值;<BR><BR>遼寧省鐵嶺市委辦公室(112000)
金永濤<BR><BR>//硬盤參數(shù)檢測(cè)<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);//硬盤控制器是否準(zhǔn)備好<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);
//發(fā)讀驅(qū)動(dòng)器參數(shù)命令<BR>while(inportb(0x1f7)!=0x58);//等待回送信號(hào)<BR>for(i=0;i<256;i++)
//讀參數(shù)數(shù)據(jù)<BR>buff[i]=inport(0x1f0);<BR>printf("\nNumber[%u] \nIDE
INFO:",num);<BR>printf("\nCylinder:%u",cyl=buff[1]);
//顯示柱面數(shù)<BR>printf("\nHead:%u",head=buff[3]);
//顯示磁頭數(shù)<BR>printf("\nSector:%u",sec=buff[6]);
//每磁道扇區(qū)數(shù)<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);
//取硬盤參數(shù)<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);
//顯示柱面數(shù)<BR>printf("\nHead:%u",hdsid+1);
//顯示磁頭數(shù)<BR>printf("\nSector:%u",hdsec);
//每磁道扇區(qū)數(shù)<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=大硬盤物理參數(shù)與邏輯參數(shù)的區(qū)別.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,>樂知網(wǎng)絡(luò)</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>未經(jīng)授權(quán)禁止復(fù)制或建立鏡像。謝謝!</P></DIV></TD></TR></TBODY></TABLE>
<SCRIPT src=""></SCRIPT>
</BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -