Tổ chức bộ nhớ DOS

5 413 0
Tổ chức bộ nhớ DOS

Đang tải... (xem toàn văn)

Thông tin tài liệu

110 CHƯƠNG 18 : TỔ CHỨC BỘ NHỚ CỦA DOS. Bộ nhớ thuộc về DOS bắt đầu từ đòa chỉ 0050:0000 trở đi. Trong bộ nhớ, DOS được chia thành các phần chính như sau: - Phần lõi của DOS (DOS Kernel) - Các device driver (code) - Các table, stack, buffer . (data) Từ đòa chỉ 0050:0000 đến 0070:0000 là vùng communication của DOS. Trong đó DOS thiết lập một số các cấu trúc riêng dùng lưu giữ các thông tin về hệ thống. DOS kernel và các internal device của DOS được nạp bắt đầu từ 0070:0000. Bộ nhớ kế tiếp được chia thành nhiều khối nối tiếp nhau (Memory block). Các memory block được quản lý bằng hệ thống các MCB (Memory Control Block). . | |---------------- | MCB | |---------------- Memory | Block | |---------------- | MCB | |---------------- Memory | Block | |---------------- . | 18.1 MEMORY CONTROL BLOCK: Đứng trước mỗi memory block là một MCB (không thuộc về memory block). Mỗi MCB chiếm 16 bytes (hay một paragraph) có cấu trúc như sau: Offset Size Description 00h BYTE block type: 5Ah nếu là MCB cuối, 4Dh cho các MCB khác 01h WORD 0000h --> chưa sử dụng 0008h --> thuộc về DOS Khác --> PSP của chương trình đang quản lý (owner) 03h WORD Kích thước của memory block tính bằng paragraph 05h 3 BYTEs Không sử dụng ---DOS 2.x,3.x--- 08h 8 BYTEs Không sử dụng ---DOS 4+ --- 08h 8 BYTEs Tên chương trình (nếu là PSP memory block) ---DOS 5+ --- 08h 2 BYTEs Nếu block thuộc về DOS (Block type = 0008) thì mang một trong hai giá trò: “SC” --> System code, locked-out inter-UMB memory “SD” --> System data, device driver 111 Các MCB liên kết các memory block lại thành một dây xích (chain). Quá trình quản lý bộ nhớ của DOS dựa hoàn toàn trên các thông tin lưu chứa trong các MCB. Nếu thông tin trong một MCB không đúng dẫn đến chuỗi các MCB rối loạn, để bảo đảm an toàn, DOS sẽ thông báo Memory Alocation Error và yêu cầu khởi động lại hệ thống. Dưới DOS 3.1+, memory block đầu tiên là DOS data segment,chứa các device, table, buffer . được chỉ đònh trong config.sys Dưới DOS 4+ memory block đầu tiên được chia thành nhiều khối con, mỗi khối có riêng một Control Block với cấu trúc như sau: Offset Size Description ====== ==== ==================================================== 00h BYTE Kiểu của khối con “D” device driver “E” device driver appendage “I” IFS (Installable File System) driver “F” FILES= (File system table) “X” FCBS= (FCB table) “C” BUFFERS EMS (Buffers EMS block) “B” BUFFERS= (Buffer block) “L” LASTDRIVE= (LASTDRIVE entry) “S” STACKS= (STACK code segment) “T” INSTALL= 01h WORD Segment bắt đầu 03h WORD Kích thước của khối con 05h 3 BYTEs Không sử dụng 08h 8 BYTEs Tên của file chứa device (nếu kiểu là D hay I) 18.2HIMEM HIMEM.SYS là trình quản lý bộ nhớ mở rộng (extended memory) của DOS. Với các CPU 286 trở lên bộ nhớ có thể lớn hơn 1MB. HIMEM cho phép một số ứng dụng của DOS như RAMDRIVE,SMARTDRV .dùng phần mở rộng này. Trên các PC dùng CPU 286 trở lên, address bus là 24 hoặc 32 bit. Các đòa chỉ được tạo thành từ segment và offset giới hạn trong 20 bit đầu (0-19) của address bus. Nếu bit 20 của address bus được sử dụng, đòa chỉ tạo thành từ segment FFFFh và các offset từ 0-FFFFh sẽ cho phép truy nhập thêm 64KB tính từ đòa chỉ 100000h (trên 1MB). Từ DOS 5.0, sau khi nạp HIMEM, với chỉ đònh DOS=HIGH trong CONFIG.SYS, bit A20 của address bus (A20) sẽ được đưa vào sử dụng. DOS sẽ cố gắng dùng tất cả vùng nhớ này cho các internal device, system table, buffer . Bằng cách này, DOS sẽ chỉ chiếm khoảng 15 KB trong vùng nhớ tiêu chuẩn. 18.3UPPER MEMORY CONTROL BLOCK Từ DOS 5.0, với các CPU 80386 trở lên, driver EMM386.EXE cho phép khai thác bộ nhớ một cách hữu hiệu hơn: vùng nhớ mở rộng (extend memory) có thể được dùng để giả lập cho bộ nhớ bành trướng (expand memory), đồng thời cũng cho cho phép tạo ra các UMB làm tăng thêm số lượng bộ nhớ dành cho các chương trình ứng dụng của DOS. Upper Memory Block là các khối nhớ thuộc vùng nhớ mở rộng trên PC (Ngoài 1MB quy ước, từ 100000h trở đi). Trên các CPU 80386 trở đi, EMM386 cho phép đònh vò lại đòa chỉ các khối nhớ đó vào các “khoảng trống” thuộc A0000-100000. Để sử dụng UMB cần : Chỉ đònh DEVICE=EMM386.EXE NOEMS trong CONFIG.SYS 112 ( hoặc DEVICE=EMM386.EXE RAM ) Chỉ đònh DOS=UMB trong CONFIG.SYS Các UMB cũng được DOS quản lý giống như các memory block. Mỗi UMB có một UMCB đứng trước với cấu trúc như sau: Upper Memory Control Block (DOS 5+): Offset Size Description ====== ==== ===================================================== 00h BYTE 5Ah nếu là UMCB cuối, 4Dh cho các UMCB khác 01h WORD 0000h --> UMB chưa sử dụng 0008h --> UMB thuộc về DOS Khác --> PSP của chương trình sở hữu (owner) 03h WORD Kích thước của memory block tính bằng paragraph 05h 3 BYTEs Không sử dụng 08h 8 BYTEs block type: “UMB” nếu là khối đầu tiên “SM” nếu là khối cuối Để tránh các vùng nhớ dành riêng như video buffer, video bios .,DOS tạo ra các UMCB ngay trước các vùng ấy và đánh dấu là thuộc về DOS. (Coi các vùng này như là các UMB đã dùng rồi). 18.4DOS SYSVAR Chức năng 52h của interrupt 21h cung cấp rất nhiều thông tin quan trọng bên trong DOS. Tuy nhiên đây là một chức năng nội (không công bố) do đó các cấu trúc đã cho có thể thay đổi trong các version kế tiếp của DOS. Input : AH = 52h Output : ES:BX -> Pointer to DOS SYSVAR TABLE (ES = DOS data segment) *DOS SYSVAR TABLE Offset Size Description ====== ===== ========================================================== 2 WORD segment của MCB đầu tiên 00h DWORD đòa chỉ của Drive Parameter Block đầu tiên 04h DWORD đòa chỉ của System File Table đầu tiên 08h DWORD đòa chỉ của CLOCK$ device’s header hiện hành (device được load lên sau cùng có CLOCK bit được set) 0Ch DWORD đòa chỉ của CON device’s header hiện hành (device được load lên sau cùng có STDIN bit được set) ---DOS 2.x--- 10h BYTE số lượng ổ đóa (logic) trong hệ thống 11h WORD số byte tối đa trong một block của các block device 13h DWORD đòa chỉ của disk buffer đầu tiên 17h 18 BYTEs NUL device driver header NUL luôn luôn là device đầu tiên trong chuỗi các device của DOS ---DOS 3.0--- 10h BYTE số lượng block device 11h WORD số byte tối đa trong một block của các block device 13h DWORD đòa chỉ của disk buffer đầu tiên 17h DWORD đòa chỉ của bảng thông tin các thư mục hiện hành 113 1Bh BYTE giá trò của LASTDRIVE (trong CONFIG.SYS) 1Ch DWORD đòa chỉ của STRING= 20h WORD kích thước của vùng STRING (giá trò x trong STRING=x) 22h DWORD đòa chỉ của FCB table 26h WORD giá trò y trong FCBS=x,y 28h 18 BYTEs NUL device driver header ---DOS 3.1-3.3--- 10h WORD số bytes tối đa trong một sector của block device 12h DWORD đòa chỉ của disk buffer đầu tiên 16h DWORD đòa chỉ của bảng thông tin các thư mục hiện hành 1Ah DWORD đòa chỉ của FCB tables 1Eh WORD giá trò y trong FCBS=x,y 20h BYTE số lượng block device đã được cài đặt 21h BYTE số ổ đóa logic (Cũng là số phần tử của bảng thông tin các thư mục hiện hành) 22h 18 BYTEs NUL device driver header 34h BYTE số lượng các ổ đóa JOIN ---DOS 4.x--- 35h WORD 0 37h DWORD đòa chỉ đầu vào của resident IFS utility functions 3Bh DWORD đòa chỉ của chuỗi các IFS (installable file system) drivers 3Fh WORD giá trò x trong BUFFERS x,y 41h WORD giá trò y trong BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE flag: 01h to use DWORD moves (80386+), 00h otherwise 45h WORD kích thước extended memory (KB) ---DOS 5.0-6.0--- 37h DWORD đòa chỉ của danh sách chương trình trong SETVER 3Bh WORD ?? 3Dh WORD segment của PSP của chương trình vừa được gọi (EXEC) (nếu DOS được nạp ở vùng nhớ cao HMA) 3Fh WORD giá trò x trong BUFFERS x,y 41h WORD giá trò y trong BUFFERS x,y 43h BYTE boot drive (1=A:) 44h BYTE 01h --> cho phép dùng DWORD moves (80386+) 45h WORD kích thước extended memory (KB) Cấu trúc đầu vào của STACKS code segment: Offset Size Description ====== ==== ==================================================== 00h WORD ??? 02h WORD Số lượng stack (giá trò x trong STACKS=x,y) 04h WORD Kích thước của stack control block array 06h WORD Kích thước của mỗi stack (giá trò y trong STACKS=x,y) 08h DWORD Đòa chỉ của STACKS data segment Cấu trúc đầu vào của system file table và FCB table: 114 Offset Size Description ====== ==== ==================================================== 00h DWORD đòa chỉ của file table kế tiếp (FFFFh nếu không có) 04h WORD số file handle hay FCB trong bảng 06h 36h bytes DOS 3.0 35h bytes DOS 3.1 - 3.3x 3Bh bytes DOS 4.0 - 6.0 Offset Size Description ====== ==== ============================================= 00h WORD số lượng file handle cùng tham chiếu đến file 02h WORD file open mode (see AH=3Dh) bit 15 set if this file opened via FCB 04h BYTE file attribute (see AX=4301h) 05h WORD device info word (see also AX=4400h) bit 15 set if remote file bit 14 set means do not set file date/time on closing bit 13 set if named pipe bit 12 set if no inherit bit 11 set if network spooler bit 7 set if device, clear if file (only if local) bits 6-0 as for AX=4400h 07h DWORD đòa chỉ của device driver header (character device) hoặc DOS Drive Parameter Block 0Bh WORD cluster bắt đầu của file 0Dh WORD file time 0Fh WORD file date 11h DWORD file size 15h DWORD file pointer 19h ?? Cấu trúc đầu vào của bảng thông tin thư mục hiện hành (LASTDRIVE entries) Offset Size Description ====== ==== ==================================================== 00h 67 BYTEs Chuỗi ASCIZ dạng X:\PATH (Với X: là lastdrive) 43h ?? CHƯƠNG 19 : CHƯƠNG TRÌNH THƯỜNG TRÚ. CHƯƠNG 20 : TẬP TIN .BAT CỦA MSDOS CHƯƠNG 21 : THIẾT LẬP CẤU HÌNH CHO MSDOS 21.1 Tập tin CONFIG.SYS . 110 CHƯƠNG 18 : TỔ CHỨC BỘ NHỚ CỦA DOS. Bộ nhớ thuộc về DOS bắt đầu từ đòa chỉ 0050:0000 trở đi. Trong bộ nhớ, DOS được chia thành các phần. trình quản lý bộ nhớ mở rộng (extended memory) của DOS. Với các CPU 286 trở lên bộ nhớ có thể lớn hơn 1MB. HIMEM cho phép một số ứng dụng của DOS như RAMDRIVE,SMARTDRV

Ngày đăng: 29/09/2013, 11:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan