Manajemen memori DOS

Manajemen memori DOS merupakan mekanisme pengaturan memori pada sistem operasi DOS. Sistem operasi berjalan dalam mode real dengan arsitektur berbasis prosesor intel x86. Dalam mode real, hanya 20-bit pertama dari bus alamat yang akan digunakan oleh sistem operasi untuk mengakses memori, sehingga menjadikan jumlah memori yang dapat diakses hanya mencapai 220=1048576 bytes (1 MB) saja, dari yang seharusnya 32-bit/40-bit pada prosesor-prosesor modern.

Jenis-jenis ruang alamat memori MS-DOS 

DOS akan membagi area memori yang hanya 1 MB tersebut menjadi dua buah ruang alamat, yakni sebagai berikut:
 Conventional Memory (memori konvensional)
 Upper Memory, atau Upper Memory Block, atau High Memory

Jika manajer memori diinstalasikan di dalam CONFIG.SYS (sebagai contoh, saat HIMEM.SYS dan EMM386.EXE diinstalasikan), maka jumlah ruang alamat pun dapat bertambah. Selain duajenis di atas, DOS juga menawarkan dua jenis memori lagi, yakni:
 Extended Memory
 Expanded Memory

Conventional Memory 
Ruang alamat ini merupakan ruang alamat yang digunakan oleh program agar dapat dieksekusi. Ukurannya hanya 640 Kilobytes saja, yang diambil dari ruang alamat 1 MB pertama. Semua program komputer yang berjalan (baik itu berjalan di latar depan atau latar belakang) menggunakan ruang area ini.

Upper Memory 
Upper memory adalah ruang alamat yang dapat digunakan untuk tujuan khusus, seperti halnya untuk mengatur memori video. Ukurannya adalah sisa dari 1 MB memori pertama yang tidak digunakan oleh conventional memory, yakni 384 KB.

Extended Memory 
Extended memory adalah memori tambahan setelah 1 Megabyte pertama di mana kombinasi antara upper memory block dan conventional memory berakhir. Pengguna dapat menambahkan banyak memori ke sebuah komputer, tetapi MS-DOS tidak akan menggunakannya, kecuali beberapa program yang didesain agar dapat mengakses ruang alamat Extended memory, seperti Windows.

Extended memory membutuhkan sebuah driver untuk dapat digunakan, yang disebut sebagai Extended Memory Manager, seperti halnya HIMEM.SYS. Manajer-manajer memori tersebut akan mengatur ruang alamat memori ini agar dapat digunakan oleh aplikasi yang membutuhkannya, selain tentunya mencegah agar dua aplikasi tidak menggunakan alamat memori yang sama pada satu waktu (yang dapat menyebabkan terjadinya crash/tabrakan antara dua aplikasi).

Expanded Memory 
Expanded Memory merupakan sebuah jenis memori yang, seperti halnya Extended memory, dapat ditambahkan ke dalam komputer IBM PC. Penggunaanya didefinisikan di dalam spesifikasi EMS (Expanded Memory Specification). Perbedaannya terletak pada ukurannya, di mana Expanded Memory dibatasi ukurannya hingga 8 MB saja (spesifikasi EMS versi 3.2) atau 32 MB (Spesifikasi EMS versi 4.0).

Sama seperti halnya Extended memory yang tidak dapat diakses oleh program DOS. Agar dapat diakses, sebuah perangkat mutlak dibutuhkan, yang disebut dengan Expanded Memory Manager seperti halnya EMM386.EXE, yang dapat memetakan beberapa blok (disebut sebagai page) dari expanded memory ke dalam frame yang berada di dalam conventional memory (yang tentunya dapat diakses).

Bagaimana DOS mengalamati memori 
DOS mengalamati memori dengan sebuah cara yang disebut dengan segmentation (segmentasi). Dalam segmentasi, ruang alamat memori akan dibagi ke dalam beberapa bagian yang disebut dengan segmen. Untuk mengalamati sebuah lokasi yang diperlukan, sebuah program harus menentukan alamat mutlak (absolute address) dengan format xxxx:yyyy di mana xxxx adalah alamat segmen dan yyyy merupakan alamat offset (ofset merupakan alamat lokasi ke berapa dari segmen tersebut yang dimulai dari permulaan segmen). Kedua bilangan tersebut direpresentasikan dalam bilangan heksadesimal. Nilai absolute address dapat dihitung dengan menggunakan perhitungan sederhana: dengan melakukan pemangkatan dengan bilangan 16 (karena memang basis yang digunakan adalah basis 16/heksadesimal) dari segmen dan menjumlahkannya dengan alamat offset. Melakukan pemangkatan alamat segmen dapat dengan mudah dilakukan, yaitu dengan menambahkan angka 0 (nol) di samping angka segmen, sehingga yang tadinya hanya berjumlah empat digit akan bernilai lima digit. Hasil dari pemangkatan ini ditambahkan dengan alamat offset, dan jadilah alamat mutlak sebuah memori.

Karena dalam real mode, memori komputer hanya dapat diakses hingga 1 MB saja, maka alamat segmen pun dibuat sedemikian rupa. DOS akan membagi 1 MB alamat ke dalam 16 segmen berukuran 65536 bita (64K), yang diberi alamat dari 0x0000 hingga 0x10000. Memori konvensional dialamatkan oleh DOS pada alamat segmen 0x0000 hingga 0xA000 (10 segmen); Upper memory dialamatkan oleh DOS pada alamat segmen 0xA000 hingga 0x10000 (6 segmen). Beberapa segmen di dalam upper memory dialokasikan untuk beberapa keperluan (tapi tidak harus begitu), yakni segmen 0xA000 dan 0xB000 disediakan untuk Video Memory; segmen 0xC000 dan 0xD000 dialokasikan untuk pengendali cakram (seperti SCSI) dan beberapa kartu lainnya; sementara segmen 0xE000 dan 0xF000 dialokasikan untuk ROM BIOS. Alokasi segmen-segmen dalam upper memory tersebut hanyalah sebuah panduan umum, dan tidak berlaku dalam setiap kasus.

Pranala luar 
 Microsoft support: Overview of Memory-Management Functionality in MS-DOS
 Computer Chronicles (1990). "High Memory Management". From the Internet Archive.

DOS
Manajemen memori
Memori komputer
Teknologi sistem operasi