Sin título de diapositiva - Universidad Tecnológica Nacional

Anuncio
Dispositivos de almacenamiento
Masivo de Información
Universidad Tecnológica Nacional - FRBA
Técnicas Digitales III
Autor: Alejandro Furfaro
1
Estructura de un Disco Flexible
Capacidad = Sides * tracks_per_side * Sectors_per_track * 512 [bytes per sector]
Autor: Alejandro Furfaro
2
Geometría de un Disco Rígido
3600 RPM
Autor: Alejandro Furfaro
3
Grabación de la Información en Disco
“To understand how information is written on a hard drive, you must first
forget the concept of binary coding. Zeros and ones aren't stored on the
magnetic surface of a hard drive. It's impossible to represent these two
states as "magnetized” and "not magnetized".”
- PC Interno - Michael Tischer
Método de grabación FM
Emplea
Emplea12
12Flux
Fluxreversal
reversalpara
para
codificar
codificarelelNº
Nºbinario
binario10110010
10110010
Autor: Alejandro Furfaro
4
Grabación de la Información en Disco
Método de grabación MFM
Toma
Toma55Flux
Fluxreversal
reversalpara
paracodificar
codificarelel
Nº
Nºbinario
binario10110010
10110010
Autor: Alejandro Furfaro
5
Grabación de la Información en Disco
Método de grabación RLL
Bit pattern
Código RLL 2.7
000
10
010
0010
11
011
001
000100
0100
100100
00100100
1000
001000
00001000
Autor: Alejandro Furfaro
Toma
Toma44Flux
Fluxreversal
reversalpara
para
codificar
codificarelelNº
Nºbinario
binario10110010
10110010
Tabla de códigos para RLL 2.7
6
Estructura Lógica
Vista desde el BIOS y los servicios de
bajo nivel del Sistema Operativo
Autor: Alejandro Furfaro
7
Estructura de un sector de Disco
Autor: Alejandro Furfaro
8
Discos Rígidos: Master Boot Record
Se trata del primer sector físico del Disco Rígido
OFFSET
000000
000010
000020
000030
000040
000050
000060
000070
000080
000090
0000a0
0000b0
0000c0
0000d0
0000e0
0000f0
0001b0
0001c0
0001d0
0001e0
0001f0
0 1 2 3 4 5 6 7 8 9 A B C D E F
fa33c08e d0bc007c 8bf45007 501ffbfc
bf0006b9 0001f2a5 ea1d0600 00bebe07
b304803c 80740e80 3c00751c 83c610fe
cb75efcd 188b148b 4c028bee 83c610fe
cb741a80 3c0074f4 be8b06ac 3c00740b
56bb0700 b40ecd10 5eebf0eb febf0500
bb007cb8 010257cd 135f730c 33c0cd13
4f75edbe a306ebd3 bec206bf fe7d813d
55aa75c7 8bf5ea00 7c000049 6e76616c
69642070 61727469 74696f6e 20746162
6c650045 72726f72 206c6f61 64696e67
206f7065 72617469 6e672073 79737465
6d004d69 7373696e 67206f70 65726174
696e6720 73797374 656d0000 00000000
00000000 00000000 00000000 00000000
TO 0001af ídem línea anterior
00000000 00000000 00000000 00008001
0100060d fef83e00 00000678 0d000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 000055aa
Autor: Alejandro Furfaro
*0123456789ABCDEF*
*.3.....|..P.P...*
*................*
*.....t....u.....*
*.u......L.......*
*.t....t.......t.*
*V.......^.......*
*..|...W.._s.3...*
*Ou...........}.=*
*U.u.....|..Inval*
*id partition tab*
*le.Error loading*
* operating syste*
*m.Missing operat*
*ing system......*
*................*
*................*
*...........x....*
*................*
*................*
*..............U.*
9
Discos Rígidos: Master Boot Record
Bit
Bit77es
eselelflag
flagde
departición
particiónactiva.
activa.Los
Losbits
bits6-0
6-0
son
cero
(caso
contrario
este
byte
contiene
son cero (caso contrario este byte contieneelel
número
númerode
dedrive
drivedesde
desdedonde
dondebootear
bootearde
de
modo
que
la
partición
activa
por
default
modo que la partición activa por defaultse
se
encuentra
siempre
en
drive
80H,
es
decir,
encuentra siempre en drive 80H, es decir,elel
primer
primerdicso
dicsoduro).
duro).
CHS
CHSde
deinicio
iniciode
delalapartición
particiónen
enformato
formatoINT
INT
13
13
Byte
Bytede
detipo
tipode
dePartición
Partición
CHS
CHSde
definal
finalde
delalapartición
particiónen
enformato
formatoINT
INT13
13
Cant.
Cant.de
deSectores
Sectoresen
enparticiones
particiones
precedentes.
precedentes.
0 1 2 3 4 5
DL DH CL CH TB DH
80 01 01 00 06 0e
00 00 81 95 05 0e
00 00 00 00 00 00
00 Autor:
00 Alejandro
00 00Furfaro
00 00
6
CL
be
fe
00
00
7
CH
94
7d
00
00
8 9 A B
LBA.....
3e000000
4a610900
00000000
00000000
C D E F
SIZE....
0c610900
724e0300
00000000
00000000
1st
2nd
3rd
4th
entry
entry
entry
entry
10
Programa maestro de arranque
Desensamblado del código: (1 / 4)
BEGIN:
NOW AT 0000:7C00, RELOCATE
0000:7C00
0000:7C01
0000:7C03
0000:7C05
0000:7C08
0000:7C0A
0000:7C0B
0000:7C0C
0000:7C0D
0000:7C0E
0000:7C0F
0000:7C10
0000:7C13
0000:7C16
0000:7C17
0000:7C18
FA
33C0
8ED0
BC007C
8BF4
50
07
50
1F
FB
FC
BF0006
B90001
F2
A5
EA1D060000
CLI
XOR
MOV
MOV
MOV
PUSH
POP
PUSH
POP
STI
CLD
MOV
MOV
REPNZ
MOVSW
JMP
AX,AX
SS,AX
SP,7C00
SI,SP
AX
ES
AX
DS
DI,0600
CX,0100
0000:061D
NEW_LOCATION:
0000:061D BEBE07
0000:0620 B304
SEARCH_LOOP1:
Autor: Alejandro Furfaro
disable int's
set stack seg to 0000
set stack ptr to 7c00
SI now 7c00
ES now 0000:7c00
DS now 0000:7c00
allow int's
clear direction
DI now 0600
move 256 words (512 bytes)
move MBR from 0000:7c00
to 0000:0600
jmp to NEW_LOCATION
NOW AT 0000:0600
MOV
MOV
SI,07BE
BL,04
point to first table entry
there are 4 table entries
SEARCH FOR AN ACTIVE ENTRY
11
Programa maestro de arranque
Desensamblado del código: (2 / 4)
0000:0622
0000:0625
0000:0627
0000:062A
0000:062C
0000:062F
0000:0631
0000:0633
803C80
740E
803C00
751C
83C610
FECB
75EF
CD18
CMP
JZ
CMP
JNZ
ADD
DEC
JNZ
INT
BYTE PTR [SI],80
FOUND_ACTIVE
BYTE PTR [SI],00
NOT_ACTIVE
SI,+10
BL
SEARCH_LOOP1
18
FOUND_ACTIVE:
0000:0635 8B14
0000:0637 8B4C02
0000:063A 8BEE
FOUND THE ACTIVE ENTRY
MOV
MOV
MOV
SEARCH_LOOP2:
0000:063C
0000:063F
0000:0641
0000:0643
0000:0646
83C610
FECB
741A
803C00
74F4
NOT_ACTIVE:
Autor: Alejandro Furfaro
is this the active entry?
yes
is this an inactive entry?
no
incr table ptr by 16
decr count
jmp if not end of table
GO TO ROM BASIC
DX,[SI]
CX,[SI+02]
BP,SI
set DH/DL for INT 13 call
set CH/CL for INT 13 call
save table ptr
MAKE SURE ONLY ONE ACTIVE ENTRY
ADD
DEC
JZ
CMP
JZ
SI,+10
BL
READ_BOOT
BYTE PTR [SI],00
SEARCH_LOOP2
incr table ptr by 16
decr count
jmp if end of table
is this an inactive entry?
yes
MORE THAN ONE ACTIVE ENTRY FOUND
12
Programa maestro de arranque
Desensamblado del código: (3 / 4)
0000:0648 BE8B06
MOV
SI,068B
DISPLAY_MSG:
0000:064B
0000:064C
0000:064E
0000:0650
0000:0651
0000:0654
0000:0656
0000:0658
0000:0659
AC
3C00
740B
56
BB0700
B40E
CD10
5E
EBF0
DISPLAY MESSAGE LOOP
LODSB
CMP
JZ
PUSH
MOV
MOV
INT
POP
JMP
AL,00
HANG
SI
BX,0007
AH,0E
10
SI
DISPLAY_MSG
HANG:
0000:065B EBFE
INT13RTRY:
Autor: Alejandro Furfaro
get char of message
end of message
yes
save SI
screen attributes
output 1 char of message
to the display
restore SI
do it again
HANG THE SYSTEM LOOP
JMP
HANG
READ_BOOT:
0000:065D BF0500
display "Invld prttn tbl"
sit and stay!
READ ACTIVE PARITION BOOT RECORD
MOV
DI,0005
INT 13 retry count
INT 13 RETRY LOOP
13
Programa maestro de arranque
Desensamblado del código: (4 / 4)
0000:0660
0000:0663
0000:0666
0000:0667
0000:0669
0000:066A
0000:066C
0000:066E
0000:0670
0000:0671
0000:0673
0000:0676
BB007C
B80102
57
CD13
5F
730C
33C0
CD13
4F
75ED
BEA306
EBD3
MOV
MOV
PUSH
INT
POP
JNB
XOR
INT
DEC
JNZ
MOV
JMP
INT13OK:
0000:0678
0000:067B
0000:067E
0000:0682
0000:0684
0000:0686
BEC206
BFFE7D
813D55AA
75C7
8BF5
EA007C0000
Autor: Alejandro Furfaro
BX,7C00
AX,0201
DI
13
DI
INT13OK
AX,AX
13
DI
INT13RTRY
SI,06A3
DISPLAY_MSG
read 1 sector
save DI
read sector into 0000:7c00
restore DI
jmp if no INT 13
call INT 13 and
do disk reset
decr DI
if not zero, try again
display "Errr ldng systm"
jmp to display loop
INT 13 ERROR
MOV
MOV
CMP
JNZ
MOV
JMP
SI,06C2
DI,7DFE
WORD PTR [DI],AA55
DISPLAY_MSG
SI,BP
0000:7C00
"missing op sys"
point to signature
is signature correct?
no
set SI
JUMP TO THE BOOT SECTOR
WITH SI POINTING TO
PART TABLE ENTRY
14
Boot: Vuelco para DOS (1/2)
OFFSET
000000
000010
000020
000030
000040
000050
000060
000070
000080
000090
0000a0
0000b0
0000c0
0000d0
0000e0
0000f0
0 1 2 3
eb3c904d
02e00040
00000000
4d452020
c08ed0bc
1653bf3e
0f8b0e18
cd137279
890e207c
161e7c03
7ca3497c
1e0b7c03
00bb0005
b001e8ac
a6750a8d
e85f0033
Autor: Alejandro Furfaro
4 5 6 7
53444f53
0bf00900
0000295a
20204641
007c1607
7cb90b00
7c884df9
33c03906
a0107cf7
060e7c83
89164b7c
c348f7f3
8b16527c
0072168b
7f20b90b
c0cd165e
8 9 A B
352e3000
12000200
5418264e
54313220
bb780036
fcf3a406
894702c7
137c7408
26167c03
d200a350
b82000f7
0106497c
a1507ce8
fbb90b00
00f3a674
1f8f048f
C D E F
02010100
00000000
4f204e41
2020fa33
c5371e56
1fc645fe
073e7cfb
8b0e137c
061c7c13
7c891652
26117c8b
83164b7c
9200721d
bee67df3
18be9e7d
4402cd19
*0123456789ABCDEF*
*...MSDOS5.0.....*
*...@............*
*......)ZT..NO NA*
*ME
FAT12
.3*
*.....|...x.6.7.V*
*.S..|.........E.*
*....|.M..G....|.*
*..ry3.9..|t....|*
*.. |..|...|...|.*
*..|...|....P|..R*
*|.I|..K|. ....|.*
*..|..H....I|..K|*
*......R|.P|...r.*
*.....r........}.*
*.u... .....t...}*
*._.3...^....D...*
15
Boot: Vuelco para DOS (2/2)
OFFSET
000100
000110
000120
000130
000140
000150
000160
000170
000180
000190
0001a0
0001b0
0001c0
0001d0
0001e0
0001f0
0 1 2 3
585858eb
f7e30306
505251e8
72bb0501
157c8a16
7000ac0a
3b16187c
33d2f736
c3b4028b
ca86e98a
4e6f6e2d
6f722064
65706c61
20616e79
6164790d
534d5344
Autor: Alejandro Furfaro
4 5 6 7
e88b471a
497c1316
3a0072d8
0083d200
247c8b1e
c07429b4
7319f736
1a7c8816
164d7cb1
16247c8a
53797374
69736b20
63652061
206b6579
0a00494f
4f532020
8 9 A B
48488a1e
4b7cbb00
b001e854
031e0b7c
497ca14b
0ebb0700
187cfec2
257ca34d
06d2e60a
36257ccd
656d2064
6572726f
6e642070
20776865
20202020
20535953
C D E F
0d7c32ff
07b90300
00595a58
e2e28a2e
7cea0000
cd10ebf2
88164f7c
7cf8c3f9
364f7c8b
13c30d0a
69736b20
720d0a52
72657373
6e207265
20205359
000055aa
*0123456789ABCDEF*
*XXX...G.HH...|2.*
*....I|..K|......*
*PRQ.:.r....T.YZX*
*r..........|....*
*.|..$|..I|.K|...*
*p....t).........*
*;..|s..6.|....O|*
*3..6.|..%|.M|...*
*.....M|.....6O|.*
*.....$|.6%|.....*
*Non-System disk *
*or disk error..R*
*eplace and press*
* any key when re*
*ady...IO
SY*
*SMSDOS
SYS..U.*
16
Boot Sector: BIOS Parameter Block
Los primeros 62 bytes del boot sector se conocen como BIOS Parameter Block
(BPB). Su layout se muestra a continuación.
db
db
db
dw
db
dw
db
dw
dw
db
dw
dw
dw
dd
dd
db
db
db
dd
db
db
JMP instruction
NOP instruction
OEMname
bytesPerSector
sectPerCluster
reservedSectors
numFAT
numRootDirEntries
numSectors
mediaType
numFATsectors
sectorsPerTrack
numHeads
numHiddenSectors
numSectorsHuge
driveNum
reserved
signature
volumeID
volumeLabel
fileSysType
Autor: Alejandro Furfaro
at 7c00 size 2 = eb3c
7c02
1
90
7c03
8
'MSDOS5.0'
7c0b
2
0200
7c0d
1
01
7c0e
2
0001
7c10
1
02
7c11
2
00e0
7c13
2
0b40(ignore numSectorsHuge)
7c15
1
f0
7c16
2
0009
7c18
2
0012
7c1a
2
0002
7c1c
4
00000000
7c20
4
00000000
7c24
1
00
7c25
1
00
7c26
1
29
7c27
4
5a541826
7c2b
11
'NO NAME
'
7c36
8
'FAT12
'
17
Programa de arranque para DOS.
Desensamblado del código: (1 / 8).
START:
START OF BOOT SECTOR PROGRAM
0000:7C3E
0000:7C3F
0000:7C41
0000:7C43
0000:7C46
0000:7C47
FA
33C0
8ED0
BC007C
16
07
CLI
XOR
MOV
MOV
PUSH
POP
0000:7C48
0000:7C4B
0000:7C4C
0000:7C4E
0000:7C4F
0000:7C50
0000:7C51
BB7800
36
C537
1E
56
16
53
MOV
SS:
LDS
PUSH
PUSH
PUSH
PUSH
0000:7C52 BF3E7C
0000:7C55 B90B00
0000:7C58 FC
0000:7C59 F3
0000:7C5A A4
0000:7C5B 06
0000:7C5C 1F
Autor: Alejandro Furfaro
MOV
MOV
CLD
REPZ
MOVSB
PUSH
POP
interrupts off
AX,AX
set AX to zero
SS,AX
SS is now zero
SP,7C00
SP is now 7c00
SS
also set ES
ES
to zero
The INT 1E vector is at 0000:0078.
Get the address that the vector points to
into the DS:SI registers.
BX,0078
BX is now 78
SI,[BX]
DS:SI is now [0:78]
DS
save DS:SI -SI
saves param tbl addr
SS
save SS:BX -BX
saves INT 1E address
Move the diskette param table to 0000:7c3e.
DI,7C3E
DI is address of START
CX,000B
count is 11
clear direction
move the diskette param
table to 0000:7c3e
ES
also set DS
DS
to zero
18
Programa de arranque para DOS.
Desensamblado del código: (2 / 8).
Alter some of the diskette param table data.
0000:7C5D C645FE0F
MOV
BYTE PTR [DI-02],0F
0000:7C61 8B0E187C
0000:7C65 884DF9
MOV
MOV
CX,[7C18]
[DI-07],CL
change head settle time
at 0000:7c47
sectors per track
save at 0000:7c42
Change INT 1E so that it points to the
altered Diskette param table at 0000:7c3e.
0000:7C68 894702
0000:7C6B C7073E7C
MOV
MOV
[BX+02],AX
WORD PTR [BX],7C3E
change INT 1E segment
change INT 1E offset
Call INT 13 with AX=0000, disk reset, so
that the new diskette param table is used.
0000:7C6F FB
0000:7C70 CD13
0000:7C72 7279
STI
INT
JB
13
TALK
interrupts on
do diskette reset call
jmp if any error
Detemine the starting sector address of
the root directory as an LBA.
0000:7C74
0000:7C76
0000:7C7A
0000:7C7C
0000:7C80
33C0
3906137C
7408
8B0E137C
890E207C
Autor: Alejandro Furfaro
XOR
CMP
JZ
MOV
MOV
AX,AX
[7C13],AX
SMALL_DISK
CX,[7C13]
[7C20],CX
AX is now zero
number sectros zero?
yes
number of sectors
save in huge num sects
19
Programa de arranque para DOS.
Desensamblado del código: (3 / 8).
SMALL_DISK:
0000:7C84
0000:7C87
0000:7C8B
0000:7C8F
0000:7C93
0000:7C97
0000:7C9A
0000:7C9D
0000:7CA1
0000:7CA4
A0107C
F726167C
03061C7C
13161E7C
03060E7C
83D200
A3507C
8916527C
A3497C
89164B7C
MOV
MUL
ADD
ADC
ADD
ADC
MOV
MOV
MOV
MOV
AL,[7C10]
WORD PTR [7C16]
AX,[7C1C]
DX,[7C1E]
AX,[7C0E]
DX,+00
[7C50],AX
[7C52],DX
[7C49],AX
[7C4B],DX
number of FAT tables
number of fat sectors
number of hidden sectors
number of hidden sectors
number of reserved sectors
number of reserved sectors
save start addr
of root dir (as LBA)
save start addr
of root dir (as LBA)
Determine sector address of first sector
in the data area as an LBA.
0000:7CA8
0000:7CAB
0000:7CAF
0000:7CB3
0000:7CB5
0000:7CB6
0000:7CB8
0000:7CBC
B82000
F726117C
8B1E0B7C
03C3
48
F7F3
0106497C
83164B7C00
Autor: Alejandro Furfaro
MOV
MUL
MOV
ADD
DEC
DIV
ADD
ADC
AX,0020
WORD PTR [7C11]
BX,[7C0B]
AX,BX
AX
BX
[7C49],AX
WORD PTR [7C4B],+00
size of a dir entry (32)
number of root dir entries
bytes per sector
add to start addr
of root dir (as LBA)
20
Programa de arranque para DOS.
Desensamblado del código: (4 / 8).
Read the first root dir sector into 0000:0500.
0000:7CC1
0000:7CC4
0000:7CC8
0000:7CCB
0000:7CCE
0000:7CD0
0000:7CD2
0000:7CD5
0000:7CD7
0000:7CD9
0000:7CDC
0000:7CDF
0000:7CE0
0000:7CE1
0000:7CE3
0000:7CE6
0000:7CE9
0000:7CEA
0000:7CEB
BB0005
8B16527C
A1507C
E89200
721D
B001
E8AC00
7216
8BFB
B90B00
BEE67D
F3
A6
750A
8D7F20
B90B00
F3
A6
7418
TALK:
MOV
MOV
MOV
CALL
JB
MOV
CALL
JB
MOV
MOV
MOV
REPZ
CMPSB
JNZ
LEA
MOV
REPZ
CMPSB
JZ
BX,0500
DX,[7C52]
AX,[7C50]
CONVERT
TALK
AL,01
READ_SECTORS
TALK
DI,BX
CX,000B
SI,7DE6
addr to read into
get start of address
of root dir (as LBA)
call conversion routine
jmp is any error
read 1 sector
read 1st root dir sector
jmp if any error
addr of 1st dir entry
count is 11
addr of file names
is this "IO.SYS"?
TALK
DI,[BX+20]
CX,000B
no
addr of next dir entry
count is 11
is this "MSDOS.SYS"?
FOUND_FILES
they are equal
Display "Non-System disk..." message, wait for user
to hit a key, restore the INT 1E vector and then call
INT 19 to start boot processing all over again.
Autor: Alejandro Furfaro
21
Programa de arranque para DOS.
Desensamblado del código: (5 / 8).
0000:7CED BE9E7D
0000:7CF0 E85F00
0000:7CF3 33C0
0000:7CF5 CD16
0000:7CF7 5E
0000:7CF8 1F
0000:7CF9 8F04
0000:7CFB 8F4402
0000:7CFE CD19
SETUP_TALK:
0000:7D00 58
0000:7D01 58
0000:7D02 58
0000:7D03 EBE8
FOUND_FILES:
0000:7D05
0000:7D08
0000:7D09
0000:7D0A
0000:7D0E
0000:7D10
0000:7D12
0000:7D16
8B471A
48
48
8A1E0D7C
32FF
F7E3
0306497C
13164B7C
Autor: Alejandro Furfaro
MOV
CALL
XOR
INT
POP
POP
POP
POP
INT
SI,7D9E
MSG_LOOP
AX,AX
16
SI
DS
[SI]
[SI+02]
19
"Non-System disk..."
display message
INT 16 function
read keyboard
get INT 1E vector's
address
restore the INT 1E
vector's data
CALL INT 19 to try again
POP
POP
POP
JMP
AX
AX
AX
TALK
pop
pop
pop
now
junk
junk
junk
talk
off stack
off stack
off stack
to the user
Compute the sector address of the first
sector of IO.SYS.
MOV
DEC
DEC
MOV
XOR
MUL
ADD
ADC
AX,[BX+1A]
AX
AX
BL,[7C0D]
BH,BH
BX
AX,[7C49]
DX,[7C4B]
get starting cluster num
subtract 1
subtract 1
sectors per cluster
multiply
add start addr of
root dir (as LBA)
22
Programa de arranque para DOS.
Desensamblado del código: (6 / 8).
Read IO.SYS into memory at 0000:0700. IO.SYS
is 3 sectors long.
0000:7D1A BB0007
MOV
BX,0700
0000:7D1D B90300
MOV
CX,0003
address to read into
read 3 sectors
READ_LOOP:
Read the first 3 sectors of IO.SYS
(IO.SYS is much longer than 3 sectors).
0000:7D20
0000:7D21
0000:7D22
0000:7D23
0000:7D26
0000:7D28
0000:7D2A
0000:7D2D
0000:7D2E
0000:7D2F
0000:7D30
0000:7D32
0000:7D35
0000:7D38
0000:7D3C
50
52
51
E83A00
72D8
B001
E85400
59
5A
58
72BB
050100
83D200
031E0B7C
E2E2
Autor: Alejandro Furfaro
PUSH
PUSH
PUSH
CALL
JB
MOV
CALL
POP
POP
POP
JB
ADD
ADC
ADD
LOOP
AX
DX
CX
CONVERT
SETUP_TALK
AL,01
READ_SECTORS
CX
DX
AX
TALK
AX,0001
DX,+00
BX,[7C0B]
READ_LOOP
save AX
save DX
save CX
call conversion routine
jmp if error
read one sector
read one sector
restore CX
restore DX
restore AX
jmp if any INT 13 error
add one to the sector addr
add one to the sector addr
incr mem addr by sect size
read next sector
23
Programa de arranque para DOS.
Desensamblado del código: (7 / 8).
0000:7D3E
0000:7D42
0000:7D46
0000:7D4A
0000:7D4D
0000:7D52
0000:7D53
0000:7D55
0000:7D57
0000:7D59
0000:7D5C
0000:7D5E
8A2E157C
MOV
8A16247C
MOV
8B1E497C
MOV
A14B7C
MOV
EA00007000 JMP
MSG_LOOP:
AC
0AC0
7429
B40E
BB0700
CD10
EBF2
CONVERT:
0000:7D60 3B16187C
0000:7D64 7319
0000:7D66 F736187C
Autor: Alejandro Furfaro
Leave information in the AX, BX, CX and DX
registers for IO.SYS to use. Finally,
jump to IO.SYS at 0070:0000.
CH,[7C15]
media type
DL,[7C24]
drive number
BX,[7C49]
get start addr of
AX,[7C4B]
root dir (as LBA)
0070:0000
JUMP TO 0070:0000
LODSB
OR
JZ
MOV
MOV
INT
JMP
This routine displays a message using
INT 10 one character at a time.
The message address is in DS:SI.
get message character
AL,AL
end of message?
RETURN
jmp if yes
AH,0E
display one character
BX,0007
video attrbiutes
10
display one character
MSG_LOOP
do again
CMP
JNB
DIV
This routine
converts a sector address (an LBA) to
a CHS address. The LBA is in DX:AX.
DX,[7C18]
hi part of LBA > sectPerTrk?
SET_CARRY
jmp if yes
WORD PTR [7C18]
div by sectors per track
24
Programa de arranque para DOS.
Desensamblado del código: (8 / 8).
0000:7D6A
0000:7D6C
0000:7D70
0000:7D72
0000:7D76
0000:7D7A
0000:7D7D
0000:7D7E
FEC2
INC
DL
add 1 to sector number
88164F7C
MOV
[7C4F],DL
save sector number
33D2
XOR
DX,DX
zero DX
F7361A7C
DIV
WORD PTR [7C1A]
div number of heads
8816257C
MOV
[7C25],DL
save head number
A34D7C
MOV
[7C4D],AX
save cylinder number
F8
CLC
clear carry
C3
RET
return
SET_CARRY:
0000:7D7F F9
STC
set carry
RETURN:
0000:7D80 C3
RET
return
READ_SECTORS:
The caller of this routine supplies: AL = number of sectors to read
ES:BX = memory location to read into and CHS address to read from in
memory locations 7c25 and 7C4d-7c4f.
0000:7D81 B402
MOV
AH,02
INT 13 read sectors
0000:7D83 8B164D7C
MOV
DX,[7C4D]
get cylinder number
0000:7D87 B106
MOV
CL,06
shift count
0000:7D89 D2E6
SHL
DH,CL
shift upper cyl left 6 bits
0000:7D8B 0A364F7C
OR
DH,[7C4F]
or in sector number
0000:7D8F 8BCA
MOV
CX,DX
move to CX
0000:7D91 86E9
XCHG
CH,CL
CH=cyl lo, CL=cyl hi + sect
0000:7D93 8A16247C
MOV
DL,[7C24]
drive number
0000:7D97 8A36257C
MOV
DH,[7C25]
head number
0000:7D9B CD13
INT
13
read sectors
0000:7D9D C3
RET
return
Autor: Alejandro Furfaro
25
Manejo desde el BIOS o desde
los Devices Drivers
Autor: Alejandro Furfaro
26
Conector IDE ATAPI - 40 Pines
Autor: Alejandro Furfaro
27
Interfaz IDE ATAPI: Direcciones de
E/S
HEX
1FX
3FX
17X
37X
BINARY
0001 1111
0011 1111
0001 0111
0011 0111
XXXX
XXXX
XXXX
XXXX
DESCRIPTION
Primary Command Registers
Primary Control Registers
Alternate Command Registers
Alternate Control Registers
Address bit A7
Autor: Alejandro Furfaro
28
Interfaz IDE ATAPI: Registros
Autor: Alejandro Furfaro
29
Interfaz IDE ATAPI: Registros
Autor: Alejandro Furfaro
30
Interfaz IDE ATAPI: Comandos
Autor: Alejandro Furfaro
31
Interfaz IDE ATAPI: Comandos
Autor: Alejandro Furfaro
32
Manejo desde el Sistema
Operativo
Caso Práctico Linux EXT3
Autor: Alejandro Furfaro
33
File System
1
Política aplicada por el Sistema Operativo para la
organización de la información en el medio magnético de
modo que resulte transparente a su geometría y a cualquier
otra característica física. Ejemplos:
FAT 12, 16 o 32 (Microsoft Windows)
2 NTFS (Windows NT y 2000)
2 Extension 2 y Extension 3 (Linux)
Algunos sistemas
operativos como Linux
tratan de manejar
todos los File Systems
posibles.
El Método que
Emplean se conoce
como Virtual
File System (VFS)
2
Autor: Alejandro Furfaro
34
Virtual File System
1
1
Los filesystems agrupados en VFS se dividen en tres
clases:
Disk Filesystems
2
2
2
2
2
1
Network File Systems
2
1
Linux: Ext 2, Ext 3
Unix like: SYSV, UFS, MINIX, VxFS
NTFS, VFAT,
ISO9660 CD-ROM, Universal Disk Format (UDF) DVD
Otros proprietarios: HPFS (OS/2), HFS (Apple), AFFS (Amiga), y
ADFS (Acorn )
SMB, NFS, Coda, Lan Manager
File Systems especiales
2
/proc
Autor: Alejandro Furfaro
35
Common File Model
1superblock
object
Almacena la información concerniente al file system montado. Para file systems basados en disco, este objeto normalmente
corresponde a un filesystem control block almacenado en el disco.
1inode
object
Almacena información general de un archivo específico. Para filesystems basados en disco, este objeto normalmente
corresponde a un file control block almacenado en disco. Cada inode object está asociado con un número de inode, que
identifica unívocamente a un archivo en el filesystem.
1file
object
Almacena información acerca de la interacción entre un archivo abierto y un proceso. Esta informacion existe solo en la
memoria del kernel durante el período en el que el proceso accede al archivo.
1dentry
object
Almacena informacion acerca del enlace entre una entrada de directorio con el correspondiente archivo. Cada filesystem
basado en disco almacena esta información en disco de manera propia.
inode
inode object
object
Proceso 1
file object
Proceso 2
file object
Proceso 3
file object
Autor: Alejandro Furfaro
superbolck
superbolck
object
object
Archivo
dentry cache
dentry
object
dentry
object
36
Estructura de un File Object
Campo
Tipo
struct list_head
f_list
struct dentry *
f_dentry
struct vfsmount *
f_vfsmnt
struct file_operations * f_op
atomic_t
f_count
unsigned int
f_flags
mode_t
f_mode
loff_t
f_pos
unsigned long
f_reada
unsigned long
f_ramax
unsigned long
f_raend
unsigned long
f_ralen
unsigned long
f_rawin
struct fown_struct
f_owner
unsigned int
f_uid
unsigned int
f_gid
int
f_error
unsigned long
f_version
void *
private_data
struct kiobuf *
f_iobuf
long
f_iobuf_lock
Descripción
Punteros a una lista de file object genéricos
dentry object asociado con el archivo
filesystem montado que contiene al archivo
Puntero a la tabla file operation
Contador de uso del file object
Flags especificados al abrir el archivo
Modo de acceso del proceso
Offset actual del archivo (file pointer)
flag Read-ahead
Número máximo de páginas por operación de read-ahead
File pointer luego del último read-ahead
Número de bytes read-ahead
Número de páginas read-ahead
Datos para E/S asincrónica vía señales
UID del usuario
GID del usuario
Código de error para operaciones de escritura a red
Número de versión, incrementado automáticamente luego
Necesario para el driver de tty
Descriptor para acceso directo al buffer.
Lock para transferencia directa de E/S.
de cada uso
Strcut file
Definida en /linux/fs.h
Autor: Alejandro Furfaro
37
Estructura de un Dentry Object
Tipo
Campo
atomic_t
d_count
unsigned int
d_flags
struct inode *
d_inode
struct dentry *
d_parent
struct list_head
d_hash
struct list_head
d_lru
struct list_head
d_child
struct list_head
d_subdirs
struct list_head
d_alias
int
d_mounted
struct qstr
d_name
unsigned long
d_time
struct dentry_operations* d_op
struct super_block *
d_sb
unsigned long
d_vfs_flags
void *
d_fsdata
unsigned char *
d_iname
Descripción
Contador de uso del Dentry object
Dentry flags
i-nodo asociado con el nombre de archivo
Dentry object del directorio padre
Punteros a una lista en la hash table entry
Punteros a una lista de no utilizados
Punteros a una lista de dentry objects incluidos en el directorio padre
Para directorios, lista de dentry objects de subdirectorios
Lista de i-nodos asociados (alias)
Flag seteado a 1 solo si el dentry es el punto de montaje del filesystem
Nombre del archivo
Usado por el método d_revalidate
Métodos del dentry
superblock object del archivo
Dentry cache flags
Datos dependientes del Filesystem
Espacio para nombres de archivo cortos
Strcut dentry
Definida en /linux/dcache.h
Autor: Alejandro Furfaro
38
Strcut inode
Definida en /linux/fs.h
Estructura de un inode object
Type
struct list_head
struct list_head
struct list_head
struct list_head
struct list_head
unsigned long
unsigned int
kdev_t
umode_t
nlink_t
uid_t
gid_t
kdev_t
off_t
time_t
time_t
time_t
unsigned int
unsigned long
unsigned long
unsigned long
struct semaphore
struct semaphore
struct inode_operations *
struct file_operations *
struct super_block *
wait_queue_head_t
struct file_lock *
struct address_space *
struct address_space
struct dquot **
struct list_head
struct pipe_inode_info *
struct block_device *
struct char_device *
unsigned long
struct dnotify_struct *
unsigned long
unsigned int
unsigned char
atomic_t
unsigned int
__u32
union
Autor: Alejandro Furfaro
Field
i_hash
i_list
i_dentry
i_dirty_buffers
i_dirty_data_buffers
i_ino
i_count
i_dev
i_mode
i_nlink
i_uid
i_gid
i_rdev
i_size
i_atime
i_mtime
i_ctime
i_blkbits
i_blksize
i_blocks
i_version
i_sem
i_zombie
i_op
i_fop
i_sb
i_wait
i_flock
i_mapping
i_data
i_dquot
i_devices
i_pipe
i_bdev
i_cdev
i_dnotify_mask
i_dnotify
i_state
i_flags
i_sock
i_writecount
i_attr_flags
i_generation
u
Description
Punteros a la hash list
Punteros a la lista de i-nodos
Punteros a la lista dentry
Punteros a la lista de buffers modificados
Punteros a la lista de buffers de datos modificados
Número de i-nodo
Contador de uso
Identificador de dispositivo
Tipo de archivo y derechos de acceso.
Número de hard links
Identificador de Owner
Identificador de Group
Identificador de Real device
Longitud del archivo en bytes
Hora del último acceso al archivo
Hora de la última escritura en el archivo
Hora del último cambio en el i-nodd
Tamaño de bloque en Número de bits
Tamaño de bloque en bytes
Número de bvloques en el archivo
Número de versión, incrementado aurtomaticamente luego de cada uso.
Semáforo de i-nodo
Semáforo secundario del i-nodo usado cuando se reubica o renombra el i-nodo
Operaciones del i-nodo
Default file operations
Puntero al superblock object
Cola de espera del i-nodo
Puntero a la lista de locks del archivo.
Puntero al address_space object
address_space object para archivo de block device
Cuotas de disco del i-nodo
Punteros a listas de i–nodos de archivo block device
Se usa si el archivo es un pipe
Puntero al driver de block device
Puntero al driver de character device
Máscara de bit de notificación de eventos del directorio
Usado para notificaciones de directorio
Flags de estado del i-node
Flags de montaje de filesystem
No cero si el archivo es un socket
Contador de uso para procesos que escriban
Flag de creación del archivo
Número de versión del i-nodo (usado por algunos filesystems)
Información específica del filesystem
39
Estructura de un Superblock
Tipo de dato
struct list_head
kdev_t
unsigned long
unsigned char
unsigned char
unsigned long long
struct file_system_type *
struct super_operations *
struct dquot_operations *
unsigned long
unsigned long
struct dentry *
struct rw_semaphore
struct semaphore
int
atomic_t
struct list_head
struct list_head
struct list_head
struct block_device *
struct list_head
struct quota_mount_options
union
Campo
s_list
s_dev
s_blocksize
s_blocksize_bits
s_dirt
s_maxbytes
s_type
s_op
dq_op
s_flags
s_magic
s_root
s_umount
s_lock
s_count
s_active
s_dirty
s_locked_inodes
s_files
s_bdev
s_instances
s_dquot
u
Descripción
Puntero para lista de superblocks
Identificador de dispositivo (que hostea al FS)
Tamaño del Block en bytes
Tamaño del Block en número de bits
Flag de Modificación (dirty flag).
Tamaño máximo de los archivos
Tipo de Filesystem
Métodos de Superblock
Métodos de quota de disco
Mount flags
Filesystem magic number
Dentry object del directorio montado
Semáforo usado para desmontar
Semáforo del Superblock
Contador de referencias
Contador secundario de referencias
Lista de i-nodos modificados en el superblock
Lista de i-nodos involucrados en E/S
Lista de file objects asignados al superblock
Puntero al descriptor de block device driver
Punteros a una lista de superblock objects de un tipo dado de filesystem.
Opciones para quota de Disco
Información específica del filesystem
Strcut super_block
Definida en /linux/fs.h
Autor: Alejandro Furfaro
40
Extension 3 File System
Boot
Block Group 0
Block
Block Group n
Super
Group Data Block i-node i-node
Block Descriptor Bitmap Bitmap Table
Tipo
__u32
__u32
__u32
__u16
__u16
__u16
__u16
__u32 [3]
Autor: Alejandro Furfaro
Campo
bg_block_bitmap
bg_inode_bitmap
bg_inode_table
bg_free_blocks_count
bg_free_inodes_count
bg_used_dirs_count
bg_pad
bg_reserved
Data Blocks
Descripción
Block number of block bitmap
Block number of inode bitmap
Block number of first inode table block
Number of free blocks in the group
Number of free inodes in the group
Number of directories in the group
Alignment to word
Nulls to pad out 24 bytes
41
Superblock
Autor: Alejandro Furfaro
Tipo
__u32
__u32
__u32
__u32
__u32
__u32
__u32
__s32
__u32
__u32
__u32
__u32
__u32
__u16
__u16
__u16
__u16
__u16
__u16
__u32
__u32
__u32
__u32
__u16
__u16
__u32
__u16
__u16
__u32
__u32
__u32
__u8 [16]
char [16]
char [64]
__u32
__u8
__u8
__u16
__u32 [204]
Campo
s_inodes_count
s_blocks_count
s_r_blocks_count
s_free_blocks_count
s_free_inodes_count
s_first_data_block
s_log_block_size
s_log_frag_size
s_blocks_per_group
s_frags_per_group
s_inodes_per_group
s_mtime
s_wtime
s_mnt_count
s_max_mnt_count
s_magic
s_state
s_errors
s_minor_rev_level
s_lastcheck
s_checkinterval
s_creator_os
s_rev_level
s_def_resuid
s_def_resgid
s_first_ino
s_inode_size
s_block_group_nr
s_feature_compat
s_feature_incompat
s_feature_ro_compat
s_uuid
s_volume_name
s_last_mounted
s_algorithm_usage_bitmap
s_prealloc_blocks
s_prealloc_dir_blocks
s_padding1
s_reserved
Descripción
Total number of inodes
Filesystem size in blocks
Number of reserved blocks
Free blocks counter
Free inodes counter
Number of first useful block (always 1)
Block size
Fragment size
Number of blocks per group
Number of fragments per group
Number of inodes per group
Time of last mount operation
Time of last write operation
Mount operations counter
Number of mount operations before check
Magic signature
Status flag
Behavior when detecting errors
Minor revision level
Time of last check
Time between checks
OS where filesystem was created
Revision level
Default UID for reserved blocks
Default GID for reserved blocks
Number of first nonreserved inode
Size of on-disk inode structure
Block group number of this superblock
Compatible features bitmap
Incompatible features bitmap
Read-only compatible features bitmap
128-bit filesystem identifier
Volume name
Pathname of last mount point
Used for compression
Number of blocks to preallocate
Number of blocks to preallocate for directories
Alignment to word
Nulls to pad out 1,024 bytes
42
Ext3 i-nodo
Type
Field
__u16
i_mode
__u16
i_uid
__u32
i_size
__u32
i_atime
__u32
i_ctime
__u32
i_mtime
__u32
i_dtime
__u16
i_gid
__u16
i_links_count
__u32
i_blocks
__u32
i_flags
union
osd1
__u32 [EXT2_N_BLOCKS] i_block
__u32
i_generation
__u32
i_file_acl
__u32
i_dir_acl
__u32
i_faddr
union
osd2
Autor: Alejandro Furfaro
Description
File type and access rights
Owner identifier
File length in bytes
Time of last file access
Time that inode last changed
Time that file contents last changed
Time of file deletion
Group identifier
Hard links counter
Number of data blocks of the file
File flags
Specific operating system information
Pointers to data blocks
File version (used when the file is accessed by a network filesystem)
File access control list
Directory access control list
Fragment address
Specific operating system information
43
Ext3 i-nodo
Autor: Alejandro Furfaro
44
Descargar