Manajemen memori DOS
Manajemen memori DOS merupakan mekanisme pengaturan memori pada sistem operasi DOS. Sistem operasi berjalan dalam modus "real" dengan arsitektur berbasis pprosesor intel x86. Dalam modus 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 2=1048576 bytes (1 MB) saja, dari yang seharusnya 32-bit/40-bit pada prosesor-prosesor modern.
DOS akan membagi area memori yang hanya 1 MB tersebut menjadi dua buah ruang alamat, yakni sebagai berikut:
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:
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 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 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 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).
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 codice_1 di mana xxxx adalah alamat segmen dan codice_2 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 codice_3 hingga codice_4. Memori konvensional dialamatkan oleh DOS pada alamat segmen codice_3 hingga codice_6 (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 codice_6 dan codice_8 disediakan untuk "Video Memory"; segmen codice_9 dan codice_10 dialokasikan untuk pengendali cakram (seperti SCSI) dan beberapa kartu lainnya; sementara segmen codice_11 dan codice_12 dialokasikan untuk ROM BIOS. Alokasi segmen-segmen dalam "upper memory" tersebut hanyalah sebuah panduan umum, dan tidak berlaku dalam setiap kasus.