tìm hiểu về cấu trúc lưu trữ của ổ đĩa CD
Trang 1Các nhà phát triển hệ thống đã điều chỉnh các ổ đĩa cứng với các phần mềm phù hợp để chạy trên đĩa CD Các ứng dụng thấy đợc sự tiện lợi khi sử dụng đĩa CD cũng nh thấy đợc khối lợng dữ liệu khổng lồ mà CD có khả năng
lu trữ
Trong phần báo cáo này của chúng em, phần đầu chúng em trình bày
về cơ sở lý thuyết về cấu trúc lu trữ của ổ đĩa CD Phần sau trên cơ sở những
lý thuyết đó chúng em xây dựng chơng trình để truy cập vào cấu trúc điều khiển của đĩa CD
Trang 2Báo cáo đề tài CDROM.
Khuôn dạng vật lý:
- CD-ROM đợc tổ chức nh thế nào:Bề mặt có thể ghi của CD-ROM có thể
đợc chia thành 3 phần:
+ Lead in: 4mm đầu tiên, chứa các bảng nội dung
+ Data Area: có thể đạt tới 33 mm tuỳ thuộc vào số lợng dữ liệu
+ Lead out: đánh dấu sự kết thúc của vùng dữ liệu, rộng khoảng 1mm
Cấu trúc của đĩa CD
Thông tin đợc lu trữ trên CD dới dạng các pit (vết lõm) và các lands;CD
đ-ợc lu trữ từ trong ra ngoài
Vị trí của các pit và land trên CD-ROM
Trang 3luôn không đổi Để đảm bảo tốc độ tuyến tính không đổi đĩa phải quay chậm hơn khi đọc hoặc ghi ở gần trục tâm
Sự thay đổi tốc độ quay liên tục của đĩa CD là một trong những lý do làm cho thời gian truy cập trên CD ROM chậm hơn trên ổ cứng
Các phơng pháp lu trữ thông tin trên đĩa từ
Lu trữ các bit và các byte:
Bởi sự giới hạn về kỹ thuật, mỗi land (hoặc pit) có độ dài tối thiểu là 3 bit,
và lớn nhất là 11 bit Với giới hạn này ta không thể biểu diễn hai bit 1 liền nhau, cho nên không diễn tả hết đợc các hoán vị của 0 và 1, dẫn đến phải dùng lợc đồ EFM (Eight-to-Fourteen Modulation)
Trang 4Bảng EFM
Mỗi byte 8 bit thông thờng giờ đây đợc chuyển thành byte với 14 chanel bit, và sự chuyển đổi này dựa vào một bảng là một phần của đơn vị
điều khiển trên mọi ổ CD-ROM
Nhng còn vấn đề nữa đặt ra là nếu kết thúc của một byte là một chanel
1 và bắt đầu của byte tiếp theo là chanel 1 thì không thể thể hiện đợc, cho nên phải chèn thêm 3 bit đợc gọi là 3 bit trộn để tách biệt giữa các byte, dẫn đến một byte có 17 chanel bit
Các frames:
Khối thông tin nhỏ nhất trên một CD đợc gọi là một frame
Một frame bao gồm 24 byte
Các sector:
CD Audio có thể đọc 75 sector/second
Địa chỉ dữ liệu trên CD dựa trên cơ sở các đơn vị thời gian có dạng: minutes/seconds /sector
Trang 5Một sector đợc định dạng trên CD
Các subchannel:
Một subchannel là sự kết hợp của tất cả các bit trong cùng một vị trí củâ các byte điều khiển của các frame kế tiếp
Luồng dữ liệu bao gồm các bit dữ liệu của 98 byte điều khiển trong một sector đợc gọi là P-channel, và tơng tự các luồng dữ liệu đợc thiết lập từ bit thứ hai là Q-channel Sáu bit tiếp theo lập nên sau kênh từ R đến W
Minh hoạ một Subchannel
Subchannel P chỉ ra rằng music hay dữ liệu máy tính đợc tìm thấy trong một sector
Trang 6 Subchannel Q chứa đựng các thông tin thời gian, nó có thể là thời gian tuyệt đối tính từ sự khởi đầu của CD (ATime ) hay là thời gian tính theo track
Trong vùng Lead in, 72 bit của subchannel Q chứa đựng bảng nội dung 26 bit sử dụng cho đồng bộ và sửa lỗi
Subchannel RW chứa đựng dữ liệu đồng bộ và sữa lỗi
Sửa Lỗi:
Có 2 x 39 Byte thông tin sửa lỗi trên mỗi Sector
Với CD Audio sử dụng kỹ thuật - Reed - Solomon - Code
Với CD - ROM sử dụng - Cross Interleaved Reed Solomon Code
CIRC:
Sử dụng CIRC, với khuôn dạng CD - DA ta có tỷ lệ mắc lỗi là 1/108
tỷ lệ vẫn cao đối với các dữ liệu quan trọng có một khuôn dạng mới
Các khuôn dạng CD – ROM:
Xét mode 1: với việc giảm vùng data (2352 -> 2048 byte) và tăng
thông tin sửa lỗi -> khả năng sinh lỗi giảm
Làm việc với 2k data là dễ dàng nhất đối với lập trình viên -> dùng để lu các thông tin quan trọng
Xét mode 2: không thêm vào các tín hiệu sửa lỗi -> dùng lu các
thông tin không quan trọng (ví dụ ảnh)
Ưu điểm: tỷ lệ chuyển giao dữ liệu nhanh, ví dụ trong 1 giây
chế độ 1: 75 x 2048 = 150 K
chế độ 2: 75 x 236 = 171 K
Mode 0: Sector rỗng, lấp đầy bởi 0
Trang 7
Khuôn dạng XA (Extended Architecture):
o Chuẩn XA đợc phát triển để giải quyết một vấn đề đặc biệt cho các ứng dụng Multimedia Ví dụ hiển thị văn bản trên màn hình trong khi đang chạy video và có nền của một bản nhạc, một ứng dụng phải đồng thời
sử lý 3 luồng dữ liệu từ 3 file riêng biệt Hơn nữa, ứng dụng phải thực hiện trong thời gian thực Tuy nhiên với một CPU thì nó phải lặp đi lặp lại các công việc với các số lợng nhỏ dữ liệu của văn bản, video và music Điều đó có nghĩa là CPU phải tải một phần file văn bản sau đó
là một phần video, và cuối cùng là một phần của file music Với khả năng truy cập chậm của CD - ROM thì thế giới muôn màu của Multimedia sẽ bị đổ sập nhanh chóng, video sẽ giật âm thanh bị méo
và văn bản hiển thị không phù hợp
o Nét đặc trng quan trọng của XA đó là khả năng chèn các Sector Bởi kỹ thuật này mà CPU đọc cả 3 loại dữ liệu mà không phải di chuyển đầu dọc Với kỹ thuật này, các Sector đợc lồng vào một file, ví dụ nh 3 Sector văn bản bắt đầu một dãy tiếp theo là 4 Sectors video và tiếp theo là 3 Sector Audio Bớc này cứ lặp đi lặp lại cho tới khi cả 3 luồng dữ liệu đều hết
XA flag trong Subheader của một Sector trong CD-ROM XA
Trang 8
High Sierra diễn tả khuôn dạng logic
o Bây giờ ta sẽ đi tìm hiểu về các khuôn dạng logic - files và directorys
o Khuôn dạng HSG (High Sierra Group) nói về - Volume and File structure of compact Read only Optical Disk for Information Interchange
o ISO 9660 chấp nhận 99.5% sự đề xuất của HSG, điều khác biệt đó là cấu trúc các phần tử directory
Logical Sectors
- Kích thớc của Sector logic HSG là 2048 byte (2k)
- Mỗi Sector có một số duy nhất đợc gọi là Logical Sector Number (LSN)
- Địa chỉ đầu tiên của LSN là 0 tơng ứng với Sector vật lý tại địa chỉ 00:02:00, vì thế một số Sector vật lý đầu tiên hình thành 2s đầu tiên của
CD không thể truy cập tại mức logic
- Công thức chuyển đổi
LSN ( mm : ss : ff) = (mm*60 +ss)*75 - 150
Logical Blocks (LBN)
- Đế dễ dàng cho việc xử lý các Sector logic có thể đợc chia thành các logical blocks (LBN)
- LBN có thể là 512 byte, 1024 byte, hay 2048 byte
- LBN cũng đợc đánh số, ta lấy ví dụ với LBN = 512 byte
Trang 9 File và tên file
- Các file HSG đợc lu trữ dới dạng một dãy liên tiếp các Logical blocks và
đợc gọi là ‘extent’, vì thế ta sẽ không tìm thấy một bảng FAT trên CD-ROM, thay vào đó ta chỉ cần biết vị trí bắt đầu và độ dài của file là đủ
- Tên file HSG: 8 byte cho tên (chỉ chứa các ký tự hoa A-Z, các số 0-9 và dấu gạch dới “_”) và 3 fbyte cho đuôi mở rộng
- Tên file ISO: 1 tên file có 32 ký tự có hoặc không có dấu chem
Directory và SubDirectory
- Cd có một th mục gốc cho cấu trúc các file lu trữ, th mục gốc có thể có
th mục con, th mục con có thể có th mục con của nó, cấp cao nhất
là 8
- Th mục gốc và tất cả các th mục con của nó đợc lu trữ nh một file Các file th mục có thể đợc sắp xếp giữa các th mục khác ở bất kỳ vị trí nào trên đĩa
Offset HSG
00h Len-dr 1 Byte Độ dài các phần tử Direction (Byte) =
01h XAR-len 1Byte Số lợng Sector logic dự trữ cho
02h
Loc-ExtendI
1Word Block logical đầu tiên của file tính
theo Intel
= 06h
Loc-ExtendM
1Word Block logical đầu tiên của file tính
theo Motorola
= 0Ah Data-len I 1Word Độ dài file (Byte) tính theo Intel =
0Eh Data-len
M
1Word Độ dài file (Byte) tính theo
Motorola
=
12h Record
time 6Byte Ngày và thời gian của file Recordtime 7Byte 18h File flag
HSG
1Byte Các cờ của file HSG
ISO
1Byte 1Ah Il-Size 1Byte Số các sector liên tiếp trong việc
1Bh Il-Skip 1Byte
1Ch VSSN 1 1Word Số Volume theo định dạng Intel
1Eh VSSN M 1Word Số Volume theo định dạng
Motorola
20h Len-fi 1Byte Độ dài tên file
21h File-Id nByte Tên file, độ dài đợc xác định trong
len-fi (32byte) 21h+n Padding 1Byte Fill Byte, khi trờng kế tiếp không
bắt đầu tại địa chỉ bộ nhớ even
Trang 10Sys-data nByte Mọi thông tin ghi vào, từ chiều dài
tên file (len-fi), chiều dài của trờng fixed fiedls và toàn bộ chiều dài của th mục vào (len-dr) có thể đợc tính toán
- Không có nhiều hơn 40 file trong một th mục cho ta tìm kiếm một file nhanh chóng
- Vì có nhiều phần tử Directory nằm trong một sector logic nên chỉ cần
đọc sector đầu tiên của một th mục để tìm file mong muốn
Bảng đờng dẫn:
- Cho ta tìm ra vị trí file một cách nhanh nhất
- Bảng đờng dẫn chứa đựng tên của tất cả các th mục và các th mục con trên CD, nó cũng chứa chỉ số sector đầu tiên của file th mục
- Có hai bản sao đờng dẫn cho Intel và Motorola
Extended Attribute Records (XAR):
- Có bản ghi XAR cho ngời tạo ra file có khả năng lựa chọn các thông tin
về file mà ta muốn, hình thành một kiểu hệ thống file hớng đối tợng
- Bên cạnh những thuộc tính đợc định nghĩa bởi ngời dùng, HSG có thể cung cấp một vài thuộc tính XAR nh: Thẩm định quyền
Trang 11- Volume đợc hình thành bởi tất cả các file và các Directory lu trữ trên CD
- HSG diễn tả Volume dựa trên hai thành phần: vùng hệ thống và vùng dữ liệu
- Vùng hệ thống chiếm giữ 16 Sector logic đầu tiên của CD (LSNO LSN 15)
- Standard Volume Descriptor: lu giữ địa chỉ file directory với th mục gốc
và địa chỉ của Path table Các tên của file CopyRight và Abstract file cũng đợc liệt kê ở đây, chúng nằm trong th mục gốc CopyRight cho biết thông tin về tác giả, Abstract file cho biết thông tin về nội dung của CD
- BootSector: bạn có thể đặt một boot sector ở đây nếu muốn đĩa CD trở thành một đĩa khởi động hệ thống
- Volume Sequential Terminal: chỉ ra lệnh kết thúc của CD
Giới thiệu về ngắt 2Fh truy cập ổ đĩa CDROM:
Bảng liệt kê các chức năng của ngắt 2Fh truy cập CDROM:
AH AL Chức năng
15h 00h Lấy số ổ đĩa CDROM trong hệ thống
15h 01h Lấy danh sách ổ đĩa CDROM
15h 02h Lấy tên file CopyRight
15h 03h Lấy tên file Abstract
Trang 1215h 04h Lấy tên file Biblioghapic
15h 05h Đọc nội dung bảng Volume
15h 06h Để dành (cha dùng đến)
15h 0Bh Kiểm tra ổ đĩa CDROM
15h 0Ch Lấy số hiệu phiên bản MSCDEX
15h 0Dh Lấy các đơn vị của CD
15h 0E/00h Lấy mô tả tham chiếu Volume
15h 0E/01h Thiết lập mô tả tham chiếu Volume
15h 10h Gửi truy vấn thiết bị
ý nghĩa của các thanh ghi sử dụng trong lời gọi ngăt 2Fh:
o AH: Số hiệu chức năng của ngắt
o AL: Số hiệu hàm ngắt
o CX: Dùng cho các hàm chờ nhãn ổ đĩa CDROM đợc truy cập
(0= A, 1 = B )
o ES:BX: Hàm chờ một con trỏ trỏ tới vùng đệm ES chứa 8 bit cao, BX chứa 8 bit thấp
o DX: Với các hàm yêu cầu chính xác số lợng sector
o DI:SI: Với các hàm yêu cầu số sector,
o CF: chỉ ra lỗi sau lời gọi ngắt (Nếu có)
o AL: Mã lỗi trả về khi CF khác 0
Một số hàm truy cập CDROM quan trọng:
1 Kiểm tra ổ đĩa CD-ROM (ngắt 2fh, hàm 15h, chức năng 00h):
(Trả về số lợng ổ CD mà MSCDEX có thể địa chỉ hoá trong thanh ghi BX)
Đầu vào:
- AH=15H
- AL=00H
Đầu ra:
- BX= Số lợng ổ đĩa CDROM đợc quản lý
- CX = Nhãn ổ đĩa CDROM đầu tiên
2 Lấy thông tin version của trình điều khiển MSCDEX đang sử dụng (ngắt 2fh, hàm 15h, chức năng 0Ch):
Đầu vào:
- AH=15H
- AL=0CH
Đầu ra:
- BH= Giá trị phần nguyên của số hiệu phiên bản (ví dụ: version = 2.1 thì BH = 2 )
- BL = Giá trị phần thập phân của số hiệu phiên bản (BL = 1)
Trang 134 Truy vấn ổ CDROM (ngắt 2fh, hàm 15h, chức năng 0Bh):
Đầu vào:
- AH=15H
- AL=0BH
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
Đầu ra:
- AX = 0: Lỗi, đấy không phải là một ổ đĩa CDROM
- AX <> 0: Lỗi, đấy không phải là một ổ đĩa CDROM
5 Đọc nội dung một Sector (ngắt 2fh, hàm 15h, chức năng 08h):
Đầu vào:
- AH=15H
- AL=08H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
- DX: Số sector cần đọc
- ES:BX= Con trỏ FAR trỏ tới vùng sector cần đọc
Đầu ra:
- CF = 0: Đọc thành công
- CF = 1: Có lỗi.(nếu AL=15:Nhãn ổ CD không hợp lệ, AL=21: ổ cha sẵn sàng)
6 Ghi Sector (ngắt 2fh, hàm 15h, chức năng 09h):
Đầu vào:
- AH=15H
- AL=09H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
- DX= Số sector cần ghi
- ES:BX= FAR trỏ tới vùng đệm chứa các sector cần ghi
Đầu ra:
- CF = 0: Đọc thành công
- CF = 1: Có lỗi.(nếu AL=15:Nhãn ổ CD không hợp lệ, AL=21: ổ cha sẵn sàng)
L
u ý: Mỗi Sector có 2048 byte nên vùng nhớ (buffer) phải đáp ứng đủ số bộ
nhớ cho việc đọc ít nhất là 2048 byte để thực hiện thao tác đọc hoặc ghi sector
7 Lấy thông tin về tên file CopyRight, Abstract, Bibliogragh :
a Lấy tên file CopyRight (ngắt 2fh, hàm 15h, chức năng 02h):
CopyRight cho biết thông tin về tác giả của đĩa đang đợc quản lý
Đầu vào:
- AH=15H
- AL=02H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
Trang 14- ES:BX= FAR trỏ tới vùng đệm chứa tên file đọc đợc.
Đầu ra:
- CF = 0: Đọc thành công
- CF = 1: Có lỗi.(nếu AL=15:Nhãn ổ CD không hợp lệ)
b Lấy tên file Abstract (ngắt 2fh, hàm 15h, chức năng 03h):
Abstract file cho biết tổng quan về nội dung dữ liệu ghi trên đĩa
Đầu vào:
- AH=15H
- AL=03H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
- ES:BX= FAR trỏ tới vùng đệm chứa tên file đọc đợc
Đầu ra:
- CF = 0: Đọc thành công
CF = 1: Có lỗi.(nếu AL=15:Nhãn ổ CD không hợp lệ)
c Lấy tên file tài liệu Biblioghraphic (ngắt 2fh, hàm 15h, chức năng 04h):
File Biblioghraphic cho ta biết thông tin về nguồn thông tin ghi trên
đĩa
Đầu vào:
- AH=15H
- AL=04H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
- ES:BX= FAR trỏ tới vùng đệm chứa tên file đọc đợc
Đầu ra:
- CF = 0: Đọc thành công
- CF = 1: Có lỗi.(nếu AL=15:Nhãn ổ CD không hợp lệ)
8 Đọc VTOC (ngắt 2fh, hàm 15h, chức năng 05h):
Đầu vào:
- AH=15H
- AL=05H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
- ES:BX= FAR trỏ tới vùng đệm chứa tên file đọc đợc
Đầu ra:
- CF = 0: Đọc thành công
- CF = 1: Có lỗi.(nếu AL=15:Nhãn ổ CD không hợp lệ)
9 Gửu yêu cầu đến trình điều khiển thiết bị (ngắt 2fh, hàm 15h, chức năng 10h):
Đầu vào:
- AH=15H
- AL=10H
- CX=Nhãn ổ CDROM đợc truy cập (ví dụ: 0 = A; 1 = B etc.)
- ES:BX= FAR trỏ tới vùng đệm chứa yêu cầu cho thiết bị
Đầu ra: (Không có)
10 Lấy thông tin của trình điều khiển ổ đĩa CDROM (ngắt 2fh,
Trang 15CDROM sau:
1 Lấy số lợng ổ đĩa CDROM trên máy:
2 Lấy tên file CopyRight:
3 Lấy tên file Abstract:
4 Lấy tên file Bibliographic:
5 Đẩy ổ đĩa CD (Eject CDROM):
6 Đọc nội dung bảng Volume:
7 Đọc nội dung sector:
8 Hiển thị Directory:
9 Hiển thị Directory Entry:
10 Chạy Audio track:
const DevError=(1 shr 15);
Dev_readlong=128;
Devcmd_Seek=131;
Type
Requestheader = record
blength,bsubunit,bcommand:Byte;
Wstatus:Word;
bReserved:array[0 7] of Byte;
end;
ReadWriteL = record
reqhdr: requestHeader;
bAdressingMode:Byte;
lpTransferAdress:pointer;
wNumsec:word;
lStartingSector:longint;
bdataReadWritemode,binterleaveSize,
binterleaveskipfactor:Byte;
end;
SeekReq=record
Reqhdr:requestheader;
bAdressingMode:byte;
lpTranferAdress:Pointer;
WNumSec:Word;
LstartingSector:longint;
end;
IOCTLIO =record
reqhdr :requestheader;
bmediadescriptor:Byte;