voiddo hd request(void){··.hd out(dev,nsect,sec,head,cyl,WIN WRITE,...)
port write(HD DATA,CURRENT->buffer,256);}void hd out(drive,nsect,sec,head,cyl,cmd...){
port=HD_DATA;//数据寄存器端口(0x1f0)outb_p(nsect,++port);outb_p(sect,++port);
outb p(cyl,++port);outb_port(cyl>>8,++port);outb_p(0xAOI(drive<<4)head,++port);
outb p(cmd,++port);}
可以看出,最后就是一堆out指令
就是通过这些out指令,把磁头,柱面,扇区都写到了某些端口上
并且这些柱面磁头扇区还要转变为他认的格式,所以要左移右移进行拼接,这些都是细节
SSD本来就不是磁盘(uh-oh),实际上它是一种闪存(
f
l
a
s
h
flash
flash),操作当然不一样。
上方的公式当中,第一项是一个完整的柱面包含的扇区数,第二项是前H个磁头包含的扇区数,最后加上
S
S
S个扇区就是
b
l
o
c
k
block
block了
所以说
b
l
o
c
k
block
block
%
\%
%
s
e
c
t
o
r
s
=
S
sectors = S
sectors=S,因为前面的
s
e
c
t
o
r
s
sectors
sectors都有公因数,所以直接消掉,只剩下一个
S
S
S了,这样就可以通过
b
l
o
c
k
block
block反推回
C
H
S
CHS
CHS了