III. QuảnlývùngnhớvàTổchức,thihànhFile dới DOS. 1. Sơ đồ vùngnhớ dới DOS. Vùng RAM nằm trong quyền điều khiển của DOS đợc chia thành hai phần chính: - Phần hệ điều hành: Bắt đầu từ địa chỉ thấp nhất 00000, nghĩa là nó bao gồm cả bảng vector ngắt, hệ điều hành (bao gồm các file hệ thống IO.SYS, MSDOS.SYS, các device driver đợc khai báo trong config.sys và phần th- ờng trú của COMMAND.COM. Phần vùngnhớ của hệ điều hành này có kích thớc thay đổi tuỳ theo Version và tuỳ theo số lợng các Device Driver. - Phần chơng trình tạm thời: Phần nhớ này còn đợc gọi là vùngnhớ hoạt động, là vùngnhớ ngay sau vùng hệ điều hànhvà đạt đến địa chỉ cao nhất có thể. Vùngnhớ này đ- ợc tổ chức thành các khối tạo thành chuỗi. Các file đợc tải lên vàthihành trong vùngnhớ này, cho nên vùngnhớ này chỉ mang tính tạm thời. Sơ đồ sau tóm tắt cấu trúc vùng nhớ: Địa chỉ Mô tả chức năng vùngnhớ 0000:000 0 Bảng vector ngắt: 256 * 4 byte. 0040:000 0 Vùng dữ liệu của ROM BIOS. 0050:000 0 Vùng dữ liệu của DOS. xxxx:000 0 Đoạn mã BIOS ở mức thấp của DOS. xxxx:000 0 Bộ xử lý ngắt của DOS (Int 21h) xxxx:000 Buffer DOS, các vùng dữ liệu, các bộ ĐKTB đã cài 0 đặt xxxx:000 0 Phần thờng trú của COMMAND.COM (khoảng 4K) gồm các bộ xử lý ngắt Int 22h, Int 23h, Int 24h. xxxx:000 0 Dữ liệu và các chơng trình thờng trú (TSR). xxxx:000 0 Chơng trình ứng dụng hiện đang thực hiện. xxxx:000 0 Phần tạm trú của COMMAND.COM bao gồm bộ thông dịch lệnh, các lệnh nội trú, . Phần này sẽ đ- ợc nạp lại nếu có chơng trình nào ghi lên vùng này. A000:000 0 Vùngnhớ EGA-VGA cho một số Mode màn hình nhất định. B000:000 0 Vùngnhớ cho bộ điều hợp màn hình đơn sắc. B800:000 0 Vùngnhớ màn hình CGA. C800:000 0 Bắt đầu từ đây là vùngnhớ ROM (ngoại trú và nội trú) 2. Một số chức năng liên quan đến vùngnhớ của DOS. a. Cấp phát vùng nhớ. Vào: AH = 48h BX = Kích thớc vùngnhớ cần cấp phát (tính theo paragraph). Gọi Int 21h Ra: Nếu CF = 1, thì AX chứa mã lỗi và BX là số vùngnhớ tối đa còn lại còn dùng đợc. Ngợc lại, nếu CF = 0 thì việc cấp phát thành công và AX chính là segment của vùngnhớ mà DOS đã cấp phát theo yêu cầu. b. Giải phóng vùng nhớ. Chức năng này dùng để yêu cầu DOS giải phóng vùngnhớ đã cấp phát trớc đây mà bây giờ không còn sử dụng đến chúng. Khi chấm dứt một ch- ơng trình do DOS tải vàthi hành, quyền điều khiển đợc trả lại cho DOS, khi đó chính DOS cũng dùng chức năng này để giải phóng vùngnhớ trớc đây đã cấp phát cho chơng trình. Vào: AH = 49h ES = Segment của vùngnhớ cần giải phóng Ra: Nếu cờ CF = 1 là có lỗi, khi đó AX chứa mã lỗi. c. Điều chỉnh kích thớc vùng nhớ. Vào: AH = 4Ah ES = Segment của khối vùngnhớ cần điều chỉnh BX = Kích thớc yêu cầu điều chỉnh Ra: AX là mã lỗi nếu cờ CF =1, lúc đó BX là khối lớn nhất còn dùng đợc. 3. Cấu trúc của MCB (Memory Control Block). Nh chúng ta đã nói ở trên, phần vùngnhớ tạm thời đợc chia thành các khối tạo thành chuỗi, mỗi khối đợc quảnlý bằng một cấu trúc đầu khối gọi là MCB. MCB có kích thớc 16 byte, đặt ngay ở đầu vùngnhớ mà nó quản lý, cấu trúc của MCB nh sau: Offse t Siz e Item Nội dung +0 1 ID Byte nhận diện loại của MCB +1 2 PSP PSP của MCB. +3 2 Size Kích thớc vùngnhớ mà MCB quản lý. +5 0B h Reseve d Dành riêng +10h Khối vùngnhớ bắt đầu từ đây và chấm dứt ở byte (Size*10h) tính từ đây. Giá trị của các trờng trong cấu trúc trên có ý nghĩa nh sau: - ID: Là byte nhận diện xem MCB này có phải là MCB cuối cùng của chuỗi hay cha. nếu cha là cuối chuỗi, byte này có giá trị 4Dh, ngợc lại sẽ có giá trị 5Ah. - PSP: Cho biết vùngnhớ do MCB này quảnlý hiện còn trống hay đang đợc dùng cho chơng trình nào. Nếu giá trị là 0 thì cha có chơng trình nào sử dụng, ngợc lại noc là giá trị PSP của chơng trình đã xin cấp phát vùngnhớ này. Căn cứ vào giá trị trong PSP mà DOS biết đợc vùngnhớ nào là của chơng trình vừa chấm dứt để giải phóng vùngnhớ đó. - Size: Là kích thớc theo đoạn của khối vùngnhớ mà MCB quản lý. Để xác định đợc MCB đầu tiên, dùng chức năng 52h của ngắt 21h. Sau khi thực hiện chức năng này, ES:BX trỏ tới khối tham biến của DOS mà trớc đó 2 byte (ở ES:[BX-2]) là giá trị segment của MCB đầu tiên. Các MCB tiếp theo sẽ đợc tính bằng cách cộng kích thớc của khối MCB trớc nó với 1. Đoạn chơng trình sau minh họa cách duyệt qua các MCB: mov ah,52h int 21h sub bx,2 mov ax,word ptr es:[bx] mov es,ax ; es = đoạn của MCB đầu tiên Next: mov al,byte ptr es:[0] ; Lấy ID của MCB cmp al,5Ah ; Là phần tử cuối? je OK ; đúng, kết thúc mov bx,word ptr es:[1] ; bx = PSP mov ax,word ptr es:[3] ; ax = Size call Print_MCB mov dx,ax mov ax,es add ax,dx inc ax mov es,ax jmp Next OK: call Print_MCB int 20h 4. Quản lývàtổ chức thi hànhFile dới DOS. a. Phân loại File. File là một cách tổ chức dữ liệu trên đĩa để DOSquản lý. Căn cứ vào mục đích và nội dung, File đợc phân ra thành hai loại chính: - File dữ liệu: Dùng để chứa thông tin về một đối tợng. Dữ liệu có thể ở dạng Text hoặc dạng nhị phân. Để truy xuất các thông tin nh vậy cần có các chơng trình thihành đợc truy xuất đến nó. - Filethi hành: Nội dung của nó là tập mã lệnh máy nhằm thihành một nhiệm vụ nào đó. Khi thi hành, đánh tên chơng trình tại dấu đợi lệnh của DOS, hoặc dùng chức năng 4Bh của Int 21h. Filethihành có đuôi .COM hoặc .EXE b. Cách tổ chức thihànhFile khả thi của DOS. Để tổ chức thihành một File khả thi, DOS tiến hành các bớc sau đây: - DOS tiến hành chọn một segment, địa chỉ segment này thờng là địa chỉ thấp nhất còn dùng đợc. Segment đợc chọn gọi là PSP (Program Segment Prefix), là cơ sở để tải chơng trình vào. - DOS tạo ra bản sao môi trờng của DOS cho chơng trình đợc nạp. - DOS điền vào PSP những nội dung cần thiết nh: tổng số vùngnhớ còn lại, địa chỉ Segment của môi trờng, 2 FCB, tham số dòng lệnh và DTA, nội dung hiện thời của các ngắt 22h, 23h, 24h. - Tạo DTA ngầm định tại PSP:80h - Đọc 1Ch byte đầu của file vào để xác định xem file thuộc loại COM/EXE. Dấu hiệu để nhận dạng file .EXE là giá trị của hai byte đầu tiên là 4D5Ah hay 5A4Dh. Tùy theo loại file, tổ chức thihànhfile sẽ đợc thực hiện tơng ứng. c. PSP (Program Segment Prefix). Nh chúng ta đã nói ở trên, PSP là cấu trúc do DOS tạo ra trớc khi tải file cần thihành vào vùng nhớ. Cấu trúc PSP gồm 256 byte (100h), mô tả về cấu trúc này nh sau: Offse t Siz e Item Nội dung +0 2 Int 20h Ngắt chấm dứt chơng trình +2 2 MemTop Segment vùngnhớ kế còn dùng đợc +4 1 Reseved Dành riêng, thờng là 0 +5 5 CALL offset seg Lệnh gọi đến trình điều phối hàm của DOS +0Ah 4 Địa chỉ kết thúc chơng trình (Int 22h) +0Eh 4 Địa chỉ xử lý CtrlBreak (Int 23h) +12h 4 Địa chỉ xử lý lỗi nghiêm trọng (Int 24h) +16h 16h Reseved Vùng dành riêng cho DOS +2Ch 2 Địa chỉ đoạn các xâu môi trờng của DOS +2Eh 2E h Reseved Vùng dành riêng cho DOS +55h 7 FCB mở rộng 1 +5Ch 9 FCB 1 +65h 7 FCB mở rộng 2 +6Ch 20 FCB 2 +80h 1 Chiều dài tham số nhập từ dấu nhắc của DOS +81h 127 Các tham số nhập từ dấu nhắc của DOS +80h 128 Vùng DTA mặc định d. Thihànhfile .COM Sau khi nhận diện file dạng .COM, file đợc tải ngay vào sau PSP mà không cần định vị lại, do đó kích thớc của nó bị giới hạn trong một phân đoạn 64K. DOS tiến hànhthihànhfile .COM nh sau: - Tất cả các thanh ghi đoạn CS, DS, SS, ES đều trỏ tới PSP. - SP đợc định vị để trỏ tới cuối segment PSP. - Tất cả mọi vùngnhớ đều đợc phân phối cho chơng trình. - Một giá trị 0 đợc đẩy vào stack, điều này đảm bảo sự kết thúc chắc chắn của chơng trình nếu cối chơng trình là lênh RET thay cho lệnh Int 20h. - Trao quyền điều khiển cho chơng trình (CS:IP) ngay tại đầu vào PSP:100h. e. Thihànhfile EXE. Khác với file .COM, file .EXE không bị giới hạn trong một phân đoạn mà có thể mở rộng trong nhiều phân đoạn. Vì vậy, khi đợc nạp vào vùng nhớ, nó phải đợc định vị lại (Reallocate) theo các tham số trong một cấu trúc đầu file đợc gọi là Exe Header. Cấu trúc này nh sau: Offse t Siz e Item Nội dung +0 2 4D5Ah Ký hiệu nhận dạng file .EXE +2 2 PartPag Chiều dài của phần trang cuối +4 2 PageCnt Số trang (512 byte/trang) kể cả Header +6 2 ReloCnt Số mục trong bảng tái định vị +8 2 HdrSize Kích thớc của Header (theo paragraph) +0Ah 2 MinMe m Vùngnhớ tối thiểu cần trên chơng trình (theo paragraph) +0Ch 2 MaxMe m Vùngnhớ tối đa cần trên chơng trình (theo paragraph) +0Eh 2 ReloSS Giá trị để khởi tạo SS +10h 2 ExeSP Giá trị của thanh ghi SP khi bắt đầu. +12h 2 ChkSu m File CheckSum Offse t Siz e Item Nội dung +14h 2 ExeIP Giá trị của thanh ghi IP khi bắt đầu. +16h 2 ReloCS Giá trị để khởi tạo CS +18h 2 TablOff File-Offset của Item đầu tiên +1Ah 2 Overlay Số Overlay (0 cho module cơ sở) Sau khi DOS đã xác định file cần thihành là file dạng .EXE, nó sẽ tiến hành tiếp các bớc nh sau: - Căn cứ vào thông tin trên 1Ch byte đầu tiên, xác định module phải tải vào. Module là phần chơng trình thực tế, không tính phần Exe Header, trong thực tế, phần này chính bằng kích thớc của file trừ đi kích thớc của Exe Header. Nh vậy, điểm bắt đầu tải của module là ngay sau Exe Header (kích thớc Header * 10h), modul đợc tải vào địa chỉ START_SEG: 0000, trong đó START_SEG = PSP + 10h. - Đặt con trỏ file đến điểm vào của bảng tái định vị, ứng với mỗi mục (Item) của bảng này, tiến hành các bớc định vị lại nh sau: + Đọc Item này vào 2 từ 16 bit (I_OFF và I_SEG) + Xác định phân đoạn RELO_SEG = START_SEG + I_SEG + Đọc giá trị tại RELO_SEG:I_OFF + Định vị lại bằng cách cộng giá trị vừa có đợc với START_SEG + Trả lại giá trị đã đợc định vị lại vào chỗ cũ RELO_SEG:I_OFF - Sau khi tái định vị xong, DOS phân phối vùngnhớ cho chơng trình t- ơng ứng với vùngnhớ tối đa và tối thiểu trong Exe Header. - Khởi tạo giá trị các thanh ghi: + DS và ES đợc trỏ tới PSP + Khởi tạo Stack nh sau: SS = ReloSS + START_SEG SP = ExeSP + Đầu vào của chơng trình: CS = START_SEG + ReloCS IP = ExeIP - Trao quyền điều khiển cho file. . III. Quản lý vùng nhớ và Tổ chức, thi hành File dới DOS. 1. Sơ đồ vùng nhớ dới DOS. Vùng RAM nằm trong quyền điều khiển của DOS đợc chia thành hai. 20h 4. Quản lý và tổ chức thi hành File dới DOS. a. Phân loại File. File là một cách tổ chức dữ liệu trên đĩa để DOS quản lý. Căn cứ vào mục đích và nội