Memory manager :
Salah satu bagian sistem operasi yang mempengaruhi dalam menentukan proses mana yang
diletakkan pada antrian.
Alamat Memori
– Alamat memori mutlak (alamat fisik)
– Alamat memori relatif (alamat logika)
– Hubungan antara alamat multak dan alamat relatif
– Jenis memori dan alamat memori
Isi Memori
– Sistem bahasa penataolahan
– Sistem Utilitas
– Inti Sistem Operasi
– Sistem Operasi
– Pengendali alat (device drivers) – File pemakai
=RAM
=ROM
Contoh : IBM PC menggunakan cara ketiga di mana device driver ROM
ditempatkan pada blok 8K tertinggi dari address space 1M. Program pada ROM
disebut BIOS (Basic Input Output System).
200 Kbyte
Partisi 4
150 Kbyte
Partisi 5
Sistem Operasi
Partisi 1 50 K byte
Partisi 2 75 K byte
Partisi 3
100Kbyte
200Kbyte
Partisi 4
150Kbyte
Partisi 5
100Kbyte
Jumlah , lokasi dan ukuran proses di memori dapat beragam sepanjang waktu secara dinamis.
Kelemahan:
- Dapat terjadi lubang-lubang kecil memori di antara partisipartisi yang dipakai.
- Merumitkan alokasi dan dealokasi memori
Solusi:
Lubang-lubang kecil di antara blok-blok memori yang digunakan dapat diatasi dengan
pemadatan memori yaitu menggabungkan semua lubang kecil menjadi satu lubang besar
dengan memindahkan semua proses agar saling
berdekatan.
Bebas Proses 2
Proses 2 Proses 4
Bebas
Proses 6
Proses 4
Bebas
Bebas
Proses 6
Gambar 4. Lubang-lubang Memori dan Pemadatan Memori
(Bambang Hariyanto, hlm. 165)
0 1 2 3 4 5 6 7
1 1 1 1 1 0 0 0
1 1 1 1 1 1 1 1
1 1 0 0 1 1 1 1
. . . . . . . .
A 7 B 15 C
0
P 0 5 H 5 3 P 8 8 P 16 2
H 18 2 P 20 4
Sistem Buddy
Memori di susun dalm senari blok-blok bebas berukuran 1,2,4,8,16 byte dst, sampai kapasitas
memori.
(Tanenbaum, Bab 3, hlm 86)
Dari berbagai cara alokasi tsb. Di atas, sebuah hole yg ditempati proses akan terbagi menjadi bagian
yang dipakai proses dan memori yang tidak terpakai (fragmen).
Timbulnya memori yang tidak terpakai disebut fragmentasi. Ada dua macam fragmen :
• Internal : sisa hole yang tidak terpakai setelah terisi proses.
• Eksternal : hole yang secara utuh terlalu kecil untuk dipakai oleh proses manapun.
Alokasi Ruang Swap pada Disk
(Penempatan proses pada disk setelah di-swap-out dari memori) - Ruang disk tempat swap
dialokasikan begitu diperlukan - Ruang disk tempat swap dialokasikan lebih dahulu.
Algoritma untuk pengaturan ruang swap pada disk sama dengan untuk memori utama.
Perbedaannya adalah ruang pada disk harus dialokasikan sebagai kelipatan bilangan bulat dari
disk block.
Dan ini implementasi dengan bahasa C
#include<stdio.h>
#include<stdlib.h>
int main()
{
int npr,nh=0,i,j,k,pr[10],hol[10],ch,temp[10];
do{
printf("\n\n----------MENU------------\n1.INPUT"
"\n2.FIRST-FIT \n3.BEST FIT\n4.NEXT FIT"
"\n5.WORST FIT\n6.KELUAR\n\nMASUKAN PILIHAN : ");
scanf("%d",&ch);
for(i=0;i<nh;i++)temp[i]=hol[i];
switch(ch)
{
case 1:
printf("\n Masukan jumlah pemrosesan: ");
scanf("%d",&npr);
printf("\n Masukan jumlah Lubang: ");
scanf("%d",&nh);
for(i=0;i<npr;i++)
{
printf("\n\tProses ke - %d:",i+1);
scanf("%d",&pr[i]);
}
for(i=0;i<nh;i++)
{
printf("\n\tLubang ke - %d:",i+1);
scanf("%d",&hol[i]);
temp[i]=hol[i];
}
break;
case 2:
firstfit(npr,temp,pr,nh);
break;
case 3: bestfit(npr,temp,pr,nh);
break;
case 4:nextfit(npr,temp,pr,nh);
break;
case 5:worstfit(npr,temp,pr,nh);
break;
case 6:exit (0);//break;
default:printf("\nPilihan Salah......!");
}
}while(ch!=6);
return 0;
}
//First Fit
void firstfit(int npr,int hol[10],int pr[10],int nh)
{
int i,j,k,flag=0;
for(i=0;i<npr;i++)
{
flag=0;
for(j=0;j<nh;j++)
{
if(pr[i]<hol[j])
{
hol[j]=hol[j]-pr[i];printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
flag=1;break;
}
else if(pr[i]==hol[j])
{
flag=1;printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
for(k=j;k<nh-1;k++)
{
hol[k]=hol[k+1];
} nh--;
break;
}
}
if(flag==0)
{printf("\n Lubang (Hole) tidak ditemukan.....");
break;}
display(nh,hol);
}
}
//Best fit
void bestfit(int npr,int hol[10],int pr[10],int nh){
int i,j,k,min,flag;
for(i=0;i<npr;i++)
{
flag=0;
for(j=0;j<nh;j++)
{
if(pr[i]<=hol[j])
{
flag=1; min=j;
for(k=j;k<nh;k++)
{
if((hol[min]>hol[k])&&(pr[i]<=hol[k]))min=k;
}
if(pr[i]<hol[min])
{printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
hol[min]=hol[min]-pr[i];
break;
}
else if(pr[i]==hol[min])
{printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
for(k=min;k<nh-1;k++)
hol[k]=hol[k+1];
nh--;
break;
}
}
}
if(flag==0)
{printf("\n Lubang (Hole) tidak ditemukan.....");
break;}
display(nh,hol);
}
}
//Next Fit
void nextfit(int npr,int hol[10],int pr[10],int nh){
int i,j=0,k,flag=0;
for(i=0;i<npr;i++)
{
flag=0;
for(;j<nh;)
{
if(pr[i]<hol[j])
{
hol[j]=hol[j]-pr[i];
flag=1;printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
break;
}
else if(pr[i]==hol[j])
{
flag=1;printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
for(k=j;k<nh-1;k++)
hol[k]=hol[k+1];
nh--;
break;
}
j=(j+1)%nh;
}
if(flag==0)
{printf("\n Lubang (Hole) tidak ditemukan.....");
break;}
display(nh,hol);
}
}
//worst fit
void worstfit(int npr,int hol[10],int pr[10],int nh)
{
int i,j,k,max,flag;
for(i=0;i<npr;i++)
{
flag=0;
for(j=0;j<nh;j++)
{
if(pr[i]<=hol[j])
{
printf("\nMemory dialokasikan untuk Proses %d :(%d)",i+1,pr[i]);
flag=1; max=j;
for(k=j;k<nh;k++)
{
if((hol[max]<hol[k])&&(pr[i]<=hol[k]))max=k;
}
if(pr[i]<hol[max])
{
hol[max]=hol[max]-pr[i];
break;
}
else if(pr[i]==hol[max])
{
for(k=max;k<nh-1;k++)
hol[k]=hol[k+1];
nh--;
break;
}
}
}
if(flag==0)
{printf("\n Lubang (Hole) tidak ditemukan.....");
break;}
display(nh,hol);
}
}
void display(int nh,int hol[10])
{
printf("\nLubang:");int i=0;
for(i=0;i<nh;i++){printf("%d\t",hol[i]);}
}