Lược dịch từ một tài liệu cũ -lâu quá không nhớ rõ nguồn

Quản lý bộ nhớ và những vấn đề lien quan đến RAM

Trong topic này chúng ta sẽ tham khảo xem cách Dos quản lý và tổ chức bộ nhớ của máy tính ra sao và làm thế nào ta có thể thật sự sử dụng được nó một cách hiệu quả nhất.

Dos tổ chức và phân chia các vùng nhớ trên RAM ra thành 5 vùng nhớ chính sau:
+Conventional Memory hay based memory : bộ nhớ qui ước
+Upper Memory Area (UMA):vùng nhớ trên
+Hight Memory Area(HMA):vùng nhớ cao
+Extend Memory Specification (XMS):bộ nhớ mở rộng
+Expand Memory Specification(EMS):bộ nhớ bành trướng hay bộ nhớ phân trang
Mỗi vùng nhớ này sẽ có một chức năng riêng ,một nhiệm vụ riêng trên máy tính và bứoc đầu tiên ta sẽ đi khảo sát sơ qua về nhiệm vụ và chức năng của từng vùng nhớ này để có thể quản lý và sử dụng một cách hiệu quả nhất

1.Bộ nhớ qui ước:- là 640 KB đầu tiên của Ram (từ 0-640 KB)
-đây là vùng nhớ mà CPU có thể định vị trực tiếp được ở chế độ thực real mode
-là vùng nhớ dành riêng để chạy các chương trình ứng dụng ngoài Dos ,ngoài ra nó còn là vùng để chứa các device–driver (driver của các thiết bị ngoại vi ), các chương trình thừong trú TSR (Terminate and stay Resident Program ) và các file hệ thống của Dos (Dso kernel. Như vậy với 1 khoảng không gian RAM là 640 KB mà nó phải tải rất nhiều thành phần trên RAM, và nếu ta không quản lý tốt thì trường hợp xấu nhất có thể xảy ra, có thể là ta không con đủ bộ nhớ qui ước để chạy chương trình nữa.
-Khi ta bật điện để khởi động máy, sau khi CPU thực hiện giai đoạn POST để kiểm tra các thiết bị cơ bản trên hệ thống xong thì lúc này bộ nhớ qui ứoc của ta đã bị mất đi 512 bytes để làm bảng vector ngắt (vector Interrupt Table) - kế tiếp nó sẽ bị mất đi tiếp 1KB để làm 1 vùng mà Dos gọi là Rom Communication Area: Đây là vùng có nhiệm vụ lưu lại thông tin cơ bản nhất của Rom và chủ yếu nó sẽ lưu lại địa chỉ của các cổng nhập xuất và các thiết bị ngoại vi -Tiếp theo ta lại bị mất đi 512 bytes để tạo một vùng dành riêng cho Dos sử dụng Dos Communication Area, chủ yếu Dos dung vùng này để chứa các lệnh nội bộ của Dos, các lệnh nội bộ của Dos là các lệnh mà ta có thể khai báo hay chạy nó trong Config.sys mà không cần phải có them 1 file hổ trợ nào cả ,những lệnh này, ví dụ như Files, Buffers hay Stacks, Lastdrive…. Đến đây thì CPU sẽ đi đến các cluster đầu tiên trên đĩa để tải hệ điều hành hay Io.sys và Msdos.sys và thông thường nó sẽ tải một số chương trình điều khiển thiết bị đang được khai báo bằng lệnh Device lên Ram, sau đó nếu trong Config.sys không có lệnh Shell thì nó sẽ đi đọc Command.com và command.com sẽ đi đọc Autoexec.bat, và tải them một số chương trình đang được khai báo nơi đây lên RAM -hiện dâu nhắc C: và kết thúc quá trình khởi động.
-Như thế sau khi khởi động máy xong thì phần dung lượng bộ nhớ qui ước còn lại dung để chạy chương trình ứng dụng hay 1 game nữa thì lúc này có thể ta sẽ nhận được một trong các câu thông báo lỗi sau:
Not enough memory
Out of memory
Insufficient memory
This program too big to fit it in memory
This program required *** KB conventional memory

Ta nhớ là trong trường hợp gặp 1 trong các câu thông báo lỗi này thì lúc này ta chỉ bị thiếu bộ nhớ qui ước chứ không phải thiếu dung lượng tổng của RAM và nhiệm vụ của ta bây giờ là làm thế nào tổ chức, sắp xếp lại các chương trình trên RAM để cho dung lượng bộ nhớ qui ước tối ưu hơn chứ không phải mua them RAM bởi vì dung lượng RAM của ta dù có là bao nhiêu đi nữa thì dung lượng của bộ nhớ qui ước vẫn chỉ là 640 KB
2.Bộ nhớ mở rộng XMS
-Là các vùng nhớ trên 1Mb của RAM
-CPU không thể định vị trực tiếp được vùng nhớ này ở chế độ thực (real mode ) để định vị nó phải chuển sang chế độ bảo vệ (protect mode) và nhờ một driver để hổ trợ ,driver đó thông thường ngày nay đối với Dos là Himem.sys. Và bộ nhớ mở rộng XMS cũng là một cách mà người ta nghĩ ra để khắc phục giới hạn về dung lượng của bộ nhớ qui ước bởi vì chỉ với 640 KB thì người ta không thể nào viết ra một chương trình qui mô hoàn chỉnh có dung lượng lớn được
- Chỉ có các chương trỉnh được viết để chạy trên bộ nhớ mở rộng như windows và các chương trình cho windows mới có thể truy xuất được vùng ký ức này. Ngày nay, khi ta nâng cấp RAM thì thực chất là ta nâng cấp XMS , điều này hoàn toàn hợp lý, vì hầu hết tất cả các chương trình ngày nay đều được viết để chạy trên Win hay nói cách khác, chúng đuều được viết để chạy trên bộ nhớ mở rộng.
-Đây là 1 vùng nhớ không có gì đặc biệt cho lắm, nó chỉ có ảnh hưởng nhiều đến tốc độ truy xuất của hệ thống và tốc độ chạy chương trình trong Win, bởi vì nếu dung lượng XMS càng lớn thì các chương trình sẽ được thực thi càng nhanh
3.Vùng nhớ trên UMA(Upper Memory Area)-là 384 KB giữa 640 KB và 1MB
-Là vùng nhớ CPU có thể truy xuất được ở chế độ thực .
-Đối với các máy từ 286 trở về trứoc thì đây là vùng cấm, chỉ dành riêng cho các thiết bị phần cứng, không cho phép người dung hay các chương trình ứng dụng sử dụng. Nhưng bắt đầu từ các máy 386 trở lên để hợp lý hơn, người ta cho phép ta có thể xâm nhập vùng nhớ này và có thể tận dụng được các khối nhớ còn trống
-Để khảo sát ta có thể chia vùng nhớ trên này làm 3 phần sau :KHoảng 64 KB đầu tiên nó thường dành cho ROM và RAM màn hình, khoảng 64KB cuối thì nó thường dành cho ROM BIOS ,còn lại 256 KB giữa nó dành cho các con Rom của các Adapter card và chính 256 KB giữa này thông thường sẽ trống vì hầu hết ngày nay, thông thường khi ta đang sử dụng 1 máy tính đơn thì hình như chẳng có 1 card gắn them vào nào mà có Rom cả
-Để cho phép ta có thể tận dụng được các khối nhớ còn trống UMB trên vùng UMA, 3 hãng viết phần mềm lớn trên TG hiện nay là Lotus,Intel và Microsoft đã hợp lại với nhau và viết ra một chương trình driver, khi ta đã chạy hay đã nạp driver này lên RAM xong thì lúc này ta có thể sử dụng được các khối UMB trên một cách hoàn toàn. Diver đó ngày nay đối với Dos là Ẻmm386.exe .
-Có một số điều cần nói về driver này :
Emm386.exe của Dos có hai nhiệm vụ chính và ta có thể sử dụng cùng lúc cả hai nhiệm vụ đó của nó hoặc có thể bỏ 1 chức năng đi :-Một là nó cho phép ta có thể dung chính bộ nhớ mở rộng XMS để giả lập thành bộ nhớ phân trang EMS khi cần –hai là nó cho phép ta xâm nhập và sử dụng các khối UMB trên UMA

4.Vùng nhớ cao HMA (High Memory Area)-Là 64 KB đầu tiên của bộ nhớ mở rộng XMS.
-Đây là một trong các vùng nhớ rất đặc biệt của RAM vì CPU có thể định vị và truy xuất trực tiếp được vùng nhớ này ở chế độ thực mà không phải chuyển sang chế độ bảo vệ nhờ một đường địa chỉ Address thứ 20 –A 20. Đường địa chỉ này sẽ được kích hoạt lên khi ta chạy Himem.sys
-Vì dung lượng của vùng nhớ này gần bằng với dung lượng của Dos khi được tải lên RAM nên ngày nay người ta chỉ cho phép di chuyển Dos lên vùng nhớ này, lên cao để tiết kiệm bộ nhớ qui ước
5.Bộ nhớ phân trang
-CPU không thể định vị trực tiếp được vùng lý ức này ở chế độ thực. Để định vị nó, phải sử dụng kỹ thuật Memory Bank Switching, kỹ thuật này sẽ lấy đi 64KB của vùng UMB để tạo ra một nơi dung để giao tiếp dữ liệu gọi là khung trang (EMS page Frame )64KB này lại được chia ra thành 4 khối 16 KB gọi là trang và thực tế vùng nhớ phân trang của EMS cũng chỉ là tập hợp của các trang 16 KB này mà thôi. Như vậy khi CPU có nhu cầu đọc hoặc viết lên EMS, nó sẽ đọc hoặc viết lên page Frame trứoc, sau đó mới ánh xạ lên EMS
-Đối với các máy trong thời kỳ đầu tiên thì EMS là một vùng nhớ riêng và không dính dáng gì đến bộ nhớ chính của máy. Nhưng bắt đầu đối với các máy từ 386 trở lên sau này, để cho việc sử dụng EMS được thuận lợi hơn ,người ta đã viết ra một chương trình cho phép ta mô phỏng, giả lập bộ nhớ mở rộng XMS thành bộ nhớ phân trang khi cần, chương trình đó ngày nay là Emm386.exe
---bài viết chỉ để tham khảo ----
Theo HVA