Wednesday, December 26, 2012

Algoritma Dalam Memori


Algoritma penggantian page acak
Setiap terjadi page fault, page yang diganti dipilih secara acak. Teknik ini tidak memakai informasi apapun dalam menentukan page yang diganti. Semua page di memori utama mempunyai bobot sama untuk dipilih. Teknik ini dapat memilih sembarang page, termasuk page yang sedang diacu ( page yang seharusnya tidak diganti, pilihan terburuk). Teknik ini sangat buruk, percobaan membuktikan algoritma acak menimbulkan rate terjadinya page fault yang sangat tiggi.

Algoritma penggantian page optimal
Algoritma ini adalah algoritma yang paling optimal sesuai dengan namanya. Prinsip dari algoritma ini adalah dengan mengganti halaman yang tidak akan terpakai lagi dalam waktu lama, sehingga efisiensi pergantian halaman meningkat (page fault yang terjadi berkurang) dan terbebas dari anomaly Belady. Strategi ini akan menghasilkan jumlah page-fault paling sedikit. Algoritma ini memiliki page fault rate paling rendah di antara semua algoritma di semua kasus. Akan tetapi, optimal belum berarti sempurna karena algoritma ini ternyata sangat sulit untuk diterapkan. System tidak dapat mengetahui halaman-halaman mana saja yang akan digunakan berikutnya. Pendekatan ini dapat dilakukan dengan simulasi. Algoritma penggantian page diusahakan kinerjanya mendekati optimal. Tiap algoritma penggantian page mengumpulkan dan memakai informasi untuk menentukan page yang diganti sehingga mendekati optimal.




Algoritma FIFO (First In First Out)
Algoritma ini adalah algoritma yang paling sederhana. Prinsip dari algoritma ini adalah seperti prinsip antrian (antrian tak berprioritas), halaman yang masuk lebih dulu maka akan keluar lebih dulu juga. Algoritma ini menggunakan struktur data stack. Apabila tidak ada frame kosong saat terjadi page fault, maka korban yang dipilih adalah frame yang berada di stack paling bawah, yaitu halaman yang berada paling lama berada di memori.



Pada awalnya, algoritma ini dianggap cukup mengatasi masalah tentang pergantian halaman, sampai pada tahun 70-an, Belady menemukan keanehan pada algoritma ini yang dikenal kemudian dengan anomali Belady. Anomali Belady adalah keadaan di mana page fault rate meningkat seiring dengan pertambahan jumlah frame , seperti yang bisa dilihat pada contoh di bawah ini.



Ketika jumlah frame ditambah dari 3 frame menjadi 4 frame, jumlah page fault yang terjadi malah bertambah (dari 14 page fault menjadi 15 page fault ). Hal ini biasanya terjadi pada kasus yang menginginkan halaman yang baru saja di-swap-out sebelumnya.

Algoritma LRU (Least Recently Used)
Dikarenakan algoritma optimal sangat sulit dalam pengimplementasiannya, maka dibuatlah algoritma lain yang performance-nya mendekati algoritma optimal dengan sedikit cost yang lebih besar. Algoritma ini mengganti halaman yang paling lama tidak dibutuhkan. Asumsinya, halaman yang sudah lama tidak digunakan sudah tidak dibutuhkan lagi dan kemungkinan besar, halaman yang baru di-load akan digunakan kembali.
Sama seperti algoritma optimal, algoritma LRU tidak mengalami anomali Belady. Algoritma ini memakai linked list untuk mendata halaman mana yang paling lama tidak terpakai. Linked list inilah yang membuat cost membesar, karena harus meng-update linked list tiap saat ada halaman yang di akses. Halaman yang berada di linked list paling depan adalah halaman yang baru saja digunakan. Semakin lama tidak dipakai, halaman akan berada semakin belakang dan di posisi terakhir adalah halaman yang paling lama tidak digunakan dan siap untuk di-swap.


Ada beberapa cara untuk mengimplementasikan algoritma LRU. Tetapi, yang cukup terkenal ada 2, yaitu counter dan stack. Contoh algoritma di atas menggunakan stack.

Counter . Cara ini dilakukan dengan menggunakan counter atau logical clock. Setiap halaman memiliki nilai yang pada awalnya diinisialisasi dengan 0. Ketika mengakses ke suatu halaman baru, nilai pada clock di halaman tersebut akan bertambah 1. Semakin sering halaman itu diakses, semakin besar pula nilaicounter-nya dan sebaliknya. Untuk melakukan hal itu dibutuhkan extra write ke memori. Selain berisi halaman-halaman yang sedang di-load, memori juga berisi tentang counter masing-masing halaman. Halaman yang diganti adalah halaman yang memiliki nilai clock terkecil, yaitu halaman yang paling jarang diakses. Kekurangan dari cara ini adalah memerlukan dukungan tambahan counter pada hardware.

Stack. Cara ini dilakukan dengan menggunakan stack yang menandakan halaman-halaman yang berada di memori. Setiap kali suatu halaman diakses, akan diletakkan di bagian paling atas stack. Apabila ada halaman yang perlu diganti, maka halaman yang berada di bagian paling bawah stack akan diganti sehingga setiap kali halaman baru diakses tidak perlu mencari kembali halaman yang akan diganti. Dibandingkan pengimplementasian dengan counter, cost untuk mengimplementasikan algoritma LRU dengan menggunakan stack akan lebih mahal karena seluruh isi stack harus di-update setiap kali mengakses halaman, sedangkan dengan counter, yang dirubah hanya counter halaman yang sedang diakses, tidak perlu mengubah counter dari semua halaman yang ada.

Algoritma Scond Chance
Algoritma second chance. Algoritma second chance berdasarkan pada algoritma FIFO yang disempurnakan. Algoritma ini menggunakan tambahan berupa reference bit yang nilainya 0 atau 1. Jika dalam FIFO menggunakan stack , maka second chance menggunakan circular queue . Halaman yang baru di-load atau baru digunakan akan diberikan nilai 1 pada reference bit-nya. Halaman yang reference bit-nya bernilai 1 tidak akan langsung diganti walaupun dia berada di antrian paling bawah (berbeda dengan FIFO).
Urutan langkah kerja algoritma second chance adalah sebagai berikut:
Apabila terjadi page fault dan tidak ada frame yang kosong, maka akan dilakukan razia (pencarian korban) halaman yang reference bit-nya bernilai 0 dimulai dari bawah antrian (seperti FIFO).
Setiap halaman yang tidak di- swap (karena reference bit-nya bernilai 1), setiap dilewati saat razia reference bit-nya akan diset menjadi 0.
Apabila ditemukan halaman yang reference bit-nya bernilai 0, maka halaman itu yang di-swap.
Apabila sampai di ujung antrian tidak ditemukan halaman yang reference bit-nya bernilai 0, maka razia dilakukan lagi dari awal.

Pada gambar di bawah ini, akan diilustrasikan algoritma second chance dan algoritma FIFO sebagai pembanding.



Teknologi USB 3.0


Saat ini mayoritas perangkat elektronik masih menggunakan teknologi USB 2.0, lalu bagaimana jika nanti sudah mulai berganti dengan USB 3.0 ?. Hal ini tidak perlu dikhawatirkan, USB 3.0 juga memperhatikan teknologi sebelumnya.
Beberapa perubahan telah di implementasikan di USB 3.0 seiring dengan peningkatan penggunaan perangkat eksternal dan kebutuhan kecepatan lebih tinggi. Berikut penjelasan singkat teknologinya.

Transfer Rate
Kecepatan transfer data USB 3.0 sekitar 3200 MBits/s ( 3.2 GBits/s atau 400 MBytes/s), dan secara teori dapat mencapat 4.8 GBit/s. Kecepatan ini 6 sampai 10x lebih cepat dari maksimal kecepatan USB 2.0.
Data Transfer
USB 3.0 mengenalkan teknologi transfer data dua arah ( full duplex), sehingga dapat membaca dan menulis data secara bersamaan (simultan). USB 2.0 dan sebelumnya belum mendukung teknologi bi-directional ini .

Power
Tegangan listrik diturunkan dari 4.4 V menjadi 4V, kemudian arus juga ditingkatkan ( menjadi 150mA), sehingga selain lebih hemat energi, sebuah port USB 3.0 dapat digunakan 4-6 perangkat serta meningkatkan recharging.

Power Management
Power managemen yang lebih baik dibanding USB 2.0, sehingga mendukung idle, sleep dan suspend

Bentuk Fisik
Ujung USB 3.0 akan sama dengan USB 2.0 (standard), tetapi kabel didalamnya akan lebih banyak, ada tambahan 4 jalur kabel dibanding USB 2.0 ( total ada 9 jalur kabel).

Kompatibilitas
USB 3.0 kompatibel dengan USB 2.0, sehingga perangkat USB 2.0 tetap akan bisa digunakan di port USB 3.0 dan akan berjalan dengan kecepatan standard USB 2.0. Tetapi tidak bisa sebaliknya, perangkat USB 3.0 tidak bisa dipasang di port USB 2.0.

Dukungan Sistem Operasi
Windows Vista, Windows 7 dan Linux sudah mendukung USB 3.0, dan Mac akan segera mengikuti. Tetapi untuk Windows XP sampai saat ini belum ada kepastian apakah akan ada update untuk interface baru ini.

Kekurangan
Selain mempunyai berbagai kelebihan diatas, interface USB 3.0 juga mempunyai beberapa kekurangan, diantaranya sebagai berikut :
Panjang Kabel. Maksimum panjang kabel USB 3.0 berkurang menjadi 3 meter ( USB 2.0 maksimal 5 meter ). Meskipun hal ini bisa diatasi dengan menambahkan USB Hub.
Speed Limit, tidak semua perangkat bisa memanfaatkan penuh kecepatan USB 3.0, seperti misalnya Hardisk Magnetik yang terbatas pada kecepatan perputaran keping disk.






Tuesday, December 25, 2012

Polinom Lagrange Vs Polinom Newton

Materi silahkan di download disini

Pengantar bahasa C++

Materi pengantar bahasa pemrograman menggunakan c++ dapat di download....terima kasiiih

Sunday, December 23, 2012

PROGRAM DATA MAHASISWA


#include <conio.h>
#include <iostream.h>
#include <stdio.h>

//membuat struct mahasiswa
struct mahasiswa{
 char nim[13];
   char nama[30];
   char kelas[4];
   float nilai;
};

mahasiswa mhs[100];
int jmlMhs=1;

//Menu Utama
void menuUtama(){
 clrscr();
   cout<<"------------------\n";
   cout<<"    MENU UTAMA    \n";
 cout<<"------------------\n\n";
   cout<<"   [1] Input Data Mahasiswa\n";
 cout<<"   [2] Tampilkan Data Mahasiswa\n";
   cout<<"   [3] Keluar\n\n";
   cout<<"------------------\n";
 cout<<"Pilihan : ";
}

//input data mahasiswa
void inputData(){
   char pil;
 clrscr();
 cout<<"-------------------------------\n";
   cout<<" Input Data Mahasiswa ke ["<<jmlMhs<<"]    \n";
   cout<<"-------------------------------\n\n";
   cout<<" -> NIM   : ";
   gets(mhs[jmlMhs].nim);
   cout<<" -> Nama  : ";
   gets(mhs[jmlMhs].nama);
   cout<<" -> Kelas : ";
   gets(mhs[jmlMhs].kelas);
   cout<<" -> Nilai : ";
   cin>>mhs[jmlMhs].nilai;
   cout<<endl<<endl;
   jmlMhs++;
   cout<<"Input data lagi (Y/N)? :";
 cin>>pil;
   if (pil=='Y' || pil=='y')
    inputData();
   else
    menuUtama();
}

void tampilData(){
 clrscr();
 cout<<"-------------------------------\n";
   cout<<"     Tampil Data Mahasiswa     \n";
   cout<<"-------------------------------\n\n";
 cout<<"---------------------------------------------------------\n";
   gotoxy(1,6);
   cout<<"| NIM ";
   gotoxy(15,6);
   cout<<"| Nama ";
   gotoxy(40,6);
   cout<<"| Kelas ";
   gotoxy(49,6);
   cout<<"| Nilai ";
   gotoxy(57,6);
   cout<<"|";
   cout<<endl;
 cout<<"-----------------------------"
     <<"----------------------------\n";
   for (int i=1; i<jmlMhs; i++){
    gotoxy(1,i+7);
    cout<<"| "<<mhs[i].nim;
    gotoxy(15,i+7);
    cout<<"| "<<mhs[i].nama;
    gotoxy(40,i+7);
    cout<<"| "<<mhs[i].kelas;
    gotoxy(49,i+7);
    cout<<"| "<<mhs[i].nilai;
    gotoxy(57,i+7);
    cout<<"|";
    cout<<endl;
   }
 cout<<"------------------------------"
     <<"---------------------------\n\n";
   cout<<"Tekan sembarang tombol untuk "
       <<"kembali ke menu utama...";
   getch();
}

void main(){
 int pil;
 do {
  menuUtama();
      cin>>pil;
      switch (pil){
       case 1 :
          inputData();
            break;
         case 2 :
          tampilData();
            break;
         case 3 :
          break;
      }
   }while(pil!=3);
}

Friday, December 21, 2012

Contoh Program menggunakan Function atau Fungsi Dalam C++


#include <conio.h>
#include <iostream.h>
#include <stdio.h>
//menu utama
void menuUtama(){
 clrscr();
  cout<<"--------------------------------------\n";
   cout<<"      Program Aplikasi Matematika\n";
   cout<<"--------------------------------------\n\n";
   cout<<" [1] Konversi Suhu\n";
   cout<<" [2] Luas Lingkaran\n";
   cout<<" [3] Cek Umur\n";
   cout<<" [4] Keluar\n\n";
   cout<<"--------------------------------------\n";
   cout<<" Silahkan Pilih 1/2/3/4 ?";
   }

//Konversi Suhu
void Konversisuhu(){
char pil;
   float suhu, kelvin, fahrenheit;
clrscr();
cout<<"------------------------------\n";
cout<<"   Konversi Suhu  \n";
cout<<"------------------------------\n";
cout<<" Masukkan Suhu dalam Celcius :";
cin>>suhu;
kelvin = suhu + 273,15;
fahrenheit = suhu * 1.8 + 32;
cout<<" Konversi Celcius ke Kelvin ="<<kelvin<<endl;
cout<<" Konversi Celcius ke Fahrenheit ="<<fahrenheit<<endl;
cout<<" Apa Ingin konversi lagi (Y/N) ? :";
cin>>pil;
if (pil=='Y' || pil=='y')
    Konversisuhu();
   else
    menuUtama();
}

//luas lingkaran
void luasLingkaran() {
float luas, jari2;
char pil;
clrscr();
cout<<"--------------------------\n";
cout<<" Luas Lingkaran        \n";
cout<<"--------------------------\n\n";
cout<<"Masukkan Jari-jari = ";
cin>>jari2;
luas = 3.14 * jari2 * jari2;
cout<<"Luas Lingkaran= "<<luas<<endl;
cout<<" Apa Ingin Menghitung Lagi (Y/N) ? :";
cin>>pil;
if (pil=='Y' || pil=='y')
    luasLingkaran();
   else
    menuUtama();
}

//cek umur
void cekUmur(){
int usia;
char pil;
clrscr();
cout<<"--------------------------\n";
cout<<"   Cek Umur           \n";
cout<<"--------------------------\n";
cout<<"Masukkan Usia = ";
cin>>usia;
cout<<"Manusia berumur = "<<usia;
if (usia <= 5)
cout<<"  Tergolong Massa Pertumbuhan Tulang Dan Gigi";
else
if (usia <=12)
cout<<"  Tergolong Massa Bermain";
else
if (usia <=26)
cout<<"  Tergolong Massa Pertumbuhan";
else
if (usia <=50)
cout<<"  Tergolong Manusia Produktif";
else
if (usia <=130)
cout<<"  Tergolong Manusia Lanjut Usia";
else
cout<<"  Tergolong Manusia Ajaib";
cout<<" Apa Ingin Cek Umur Lagi (Y/N ? :";
cin>>pil;
if (pil=='Y' || pil=='y')
    cekUmur();
   else
    menuUtama();
}

void main(){
 int pil;
 do {
  menuUtama();
      cin>>pil;
      switch (pil){
       case 1 :
          Konversisuhu();
            break;
         case 2 :
          luasLingkaran();
            break;
         case 3 :
          cekUmur();
          break;
         case 4 :
          break;
         }
   }while(pil!=4);
}




Tampilan Program yang dihasilkan 







Newer Posts Older Posts Home

Intense Debate Comments