Tải bản đầy đủ (.pdf) (5 trang)

Tổ chức bộ nhớ DOS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (53.57 KB, 5 trang )

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 bò 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 bò 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ể bò 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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×