Pages

Subscribe:

Ads 468x60px

♪ ♥ Get Paid Daily - The Best Sites PTC ♥ ♪
DonkeyMails.com: No Minimum Payout
AyuWage Services - Get Paid to Visits Sites and Complete Surveys

Jumat, 10 Agustus 2012

Contoh Program FCFS(FIRST COME FIRST SERVED)


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class   fcfs  extends JFrame implements ActionListener
{
   JButton jb[] = new JButton[3];
   JTextField  jt1[],jt2[];
   JLabel  jl[],jl1,jl2,jl3;
   JPanel  jp,jp1;
   Container con;
   int  k,p;
   String str[] = {"SUBMIT","RESET","EXIT"};
   String str1[] = {"Process","   AT","ST","WT","FT","TAT","NTAT"};


   public fcfs()
{
       super("fcfs scheduling algoritham");
  con = getContentPane();

  k= Integer.parseInt(JOptionPane.showInputDialog("Enter number of
process"));

  jl1 = new JLabel("Process");
  jl2 = new JLabel("Arival Time");
  jl3 = new JLabel("Service Time");

  jl = new JLabel[k];
       jt1 = new JTextField[k];
  jt2 = new JTextField[k];


       for(int i=0;i<k;i++)
{
  jl[i] = new JLabel("process"+(i+1));
  jt1[i]  = new JTextField(10);
           jt2[i]  = new JTextField(10);
  }

 for(int i=0;i<3;i++)
{
 jb[i] = new JButton(str[i]);
 }

 con.setLayout(new  GridLayout(k+2,3));
 con.add(jl1);
 con.add(jl2);
 con.add(jl3);

 int l=0;

 for(int i=0;i<k;i++)
{
            con.add(jl[l]);
con.add(jt1[l]);
con.add(jt2[l]);
l++;
 }
 l=0;
 for(int i=0;i<3;i++)
{
 con.add(jb[l]);
 jb[l].addActionListener(this);
 l++;
        }
}//end of constructor

public void actionPerformed(ActionEvent ae)
{
int FT[] = new int[k];
  int WT[] = new int[k];
int TAT[] = new int[k];
float NTAT[] = new float[k];
float sum=0;
        float avg;
JPanel main = new JPanel();
main.setLayout(new BorderLayout());
jp = new JPanel();
jp1 = new JPanel();
jp.setLayout(new GridLayout(k+1,7));
jp1.setLayout(new FlowLayout());

if(ae.getSource() == jb[2])
        {
System.exit(0);
   }
 else if(ae.getSource() == jb[0])
        {
 FT[0] = Integer.parseInt(jt1[0].getText()) +
Integer.parseInt(jt2[0].getText());

 for(int i=0;i<k;i++)
{
 if(i==0)
{
 WT[i] = 0;
}
 else
{
 if(FT[i-1] < Integer.parseInt(jt1[i].getText()))
{
 FT[i] =
Integer.parseInt(jt1[i].getText())+Integer.parseInt(jt2[i].getText());
 WT[i] = 0;
}
else
{
FT[i] = FT[i-1] + Integer.parseInt(jt2[i].getText());
WT[i] = FT[i-1] - Integer.parseInt(jt1[i].getText());
}

                }
TAT[i] = WT[i]+Integer.parseInt(jt2[i].getText());
NTAT[i] = TAT[i]/(Integer.parseInt(jt2[i].getText()));
sum = sum+WT[i];


}//end for loop
            for (int i=0;i<7;i++ )
            {
 jp.add(new JLabel(str1[i]));
            }
for (int i=0;i<k;i++)
{
 jp.add(new JLabel("process"+(i+1)));
 jp.add(new JLabel("   "+Integer.parseInt(jt1[i].getText())));
 jp.add(new JLabel(""+Integer.parseInt(jt2[i].getText())));
 jp.add(new JLabel(""+WT[i]));
 jp.add(new JLabel(""+FT[i]));
 jp.add(new JLabel(""+TAT[i]));
      jp.add(new JLabel(""+NTAT[i]));


}
avg = sum/k;
String str2 = "Average Waiting Time is "+ avg;
             jp1.add(new JLabel(str2));
main.add(jp,BorderLayout.NORTH);
main.add(jp1,BorderLayout.SOUTH);

JOptionPane.showMessageDialog(null,main,"output",JOptionPane.PLAIN_MESSAGE
);

        }
else if(ae.getSource() == jb[1])
{
setVisible(false);
fcfs  window = new fcfs();
window.setSize(400,300);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}//END ACTION PERFORMED

public static void main(String[] args)
{
            fcfs  window = new fcfs();
window.setSize(400,300);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//end main
}//end class

Aplikasi Thread dalam Java


Aplikasi Thread dalam Java

Dalam ilustrasi program yang ada pada subbab “Pembatalan Thread, kita tidak dapat mengetahui thread yang mana yang akan terlebih dahulu mengerjakan tugasnya. Hal ini terjadi karena ada dua thread yang berjalan secara paralel, yaitu thread utama dan thread t1. Artinya, keluaran dari program ini bisa bervariasi. Salah satu kemungkinan keluaran program ini adalah sebagai berikut:
      
Thread UTAMA
Ini CobaThread1
Ini CobaThread2
Thread UTAMA
Ini CobaThread2
Thread UTAMA
Ini CobaThread1
Ini CobaThread2
Thread UTAMA
Thread UTAMA
Ini CobaThread2
Ini CobaThread1
Thread UTAMA
Thread UTAMA
Ini CobaThread1
Thread UTAMA

JVM

JVM

Setiap program Java dijalankan oleh Java Virtual Machine(JVM). Artinya, program Java dapat dijalankan di platform manapun selama platform tersebut mendukung JVM. Umumnya JVM diimplementasikan di bagian atas suatu host operating system, hal ini memungkinkan JVM untuk menyembunyikan detail implementasi dari sistem operasi tersebut.
Pemetaan thread Java ke suatu sistem operasi tergantung pada implementasi JVM pada sistem operasi itu. Misalnya, Windows 2000 menggunakan model one-to-one, Solaris dulunya menggunakan model many-to-one, sedangkan Tru64 UNIX menggunakan model many-to-many.

Pembatalan Thread


Pembatalan Thread

Pembatalan thread adalah menterminasi sebuah thread sebelum tugasnya selesai. Thread yang akan dibatalkan, atau biasa disebut target thread, dapat dibatalkan dengan dua cara, yaitu asynchronous cancellation dandeferred cancellation. Pada asynchoronous cancellation, sebuah thread langsung menterminasi target thread, sedangkan pada deferred cancellationtarget thread secara berkala memeriksa apakah ia harusterminate sehingga dapat memilih saat yang aman untuk terminate.
Pada thread Java, asynchronous cancellation dilakukan dengan pemanggilan method stop(). Akan tetapi, method ini sudah di- deprecated karena terbukti tidak aman. Stop() dapat mengakibatkan terjadinyaexception ThreadDeath, yang mematikan thread-thread secara diam-diam, sehingga user mungkin saja tidak mendapat peringatan bahwa programnya tidak berjalan dengan benar.
Cara yang lebih aman untuk membatalkan thread Java adalah dengan deferred cancellation. Pembatalan ini dapat dilakukan dengan pemanggilan method interrupt(), yang akan mengeset status interupsi pada target thread. Sementara itu, target thread dapat memeriksa status interupsi-nya dengan method isInterrupted().
      
class CobaThread3 implements Runnable
{
   public void run(){
      while (true){
         System.out.println("saya thread CobaThread3");
         if (Thread.currentThread.isInterrupted())       //cek status
      break;
      }
   }
}

Suatu thread dari kelas CobaThread3 dapat diinterupsi dengan kode berikut:
      
Thread targetThread = new Thread (new CobaThread3());
targetThread.start();
targetThread.interrupt();     //set status interupsi

Ketika thread targetThread berada pada start()thread tersebut akan terus me- loop pada method run() dan melakukan pengecekan status interupsi melalui method isInterrupted(). Status interupsinya sendiri baru di-set ketika pemanggilan method interrupt(), yang ditunjukkan dengan statement targetThread.interrupt();. Setelah status interupsi di-set, ketika pengecekan status interupsi selanjutnya pada methodrun()isInterrupted() akan mengembalikan nilai boolean true, sehingga targetThread akan keluar dari method run()-nya melalui statement break dan terminate.
Selain melalui isInterrupted(), pengecekan status interupsi dapat dilakukan dengan method interrupted(). Perbedaan kedua method ini adalah isInterrupted() akan mempertahankan status interupsi, sedangkan pada interrupted(), status interupsi akan di- clear.
Thread yang statusnya sedang blocked karena melakukan operasi M/K menggunakan package java.io tidak dapat memeriksa status interupsinya sebelum operasi M/K itu selesai. Namun, melalui Java 1.4 diperkenalkanpackage java.nio yang mendukung interupsi thread yang sedang melakukan operasi M/K.

Penggabungan Thread


Penggabungan Thread


Tujuan multithreading adalah agar thread-thread melakukan pekerjaan secara paralel sehingga program dapat berjalan dengan lebih baik. Thread tambahan yang dibuat akan berjalan secara terpisah dari thread yang membuatnya. Namun, ada keadaan tertentu di mana thread utama perlu menunggu sampai thread yang dibuatnya itu menyelesaikan tugasnya. Misalnya saja, untuk bisa mengerjakan instruksi selanjutnya, thread utama membutuhkan hasil penghitungan yang dilakukan oleh thread anak. Pada keadaan seperti ini, thread utama bisa menunggu selesainya pekerjaan thread anak dengan pemanggilan method join().
Contohnya, dalam suatu program, thread utama membuat sebuah thread tambahan bernama t1.
      
try{
   t1.join();
   } catch (InterruptedException ie) {};

Kode di atas menunjukkan bahwa thread utama akan menunggu sampai thread t1 menyelesaikan tugasnya, yaitu sampai method run() dari t1 terminate, baru melanjutkan tugasnya sendiri. Pemanggilan method join()harus diletakkan dalam suatu blok try-catch karena jika pemanggilan tersebut terjadi ketika thread utama sedang diinterupsi oleh thread lain, maka join() akan melempar InterruptedException.InterruptedException akan mengakibatkan terminasi thread yang sedang berada dalam status blocked.

Pembentukan Thread

Pembentukan Thread

Ada dua cara untuk membuat thread di program Java, yaitu:
  1. Extends kelas Thread
  2. Implements interface Runnable.
Interface Runnable didefinisikan sebagai berikut:
      
public interface Runnable
   {
        public abstract void run();
   }

Kelas Thread secara implisit juga meng- implements interface Runnable. Oleh karena itu, setiap kelas yang diturunkan dari kelas Thread juga harus mendefinisikan method run(). Berikut ini adalah contoh kelas yang menggunakan cara pertama untuk membuat thread, yaitu dengan meng- extends kelas Thread.
      
class CobaThread1 extends Thread
{
   public void run()
   {
         for (int ii = 0; ii&lt;4; ii++){
         System.out.println("Ini CobaThread1");
         Test.istirohat(11);
         }
   }
}

Konsep pewarisan dalam Java tidak mendukung multiple inheritance. Jika sebuah kelas sudah meng- extends suatu kelas lain, maka kelas tersebut tidak lagi bisa meng- extends kelas Thread. Oleh karena itu, cara kedua, yaitu meng- implements interface Runnable, lebih umum digunakan, karena kita bisa meng- implements dari banyak kelas sekaligus.
      
class CobaThread2 implements Runnable
{
   public void run()
   {
        for(int ii = 0; ii&lt;4; ii++){
        System.out.println("Ini CobaThread2");
        Test.istirohat(7);
   }
}

public class Test
{
   public static void main (String[] args)
   {
      Thread t1 = new CobaThread1();
      Thread t2 = new Thread (new CobaThread2());
      t1.start();
      t2.start();

      for (int ii = 0; ii&lt;8; ii++){
        System.out.println("Thread UTAMA");
        istirohat(5);
        }
   }

   public static void istirohat(int tunda)
   {
        try{
           Thread.sleep(tunda*100);
           } catch(InterruptedException e) {}
   }
}

Pada bagian awal main(), terjadi instansiasi objek dari kelas CobaThread1 dan CobaThread2, yaitu t1 dan t2. Perbedaan cara penginstansian objek ini terletak pada perbedaan akses yang dimiliki oleh kelas-kelas tersebut. Supaya thread bisa bekerja, method start() dari kelas Thread harus dipanggil. Kelas CobaThread1 memiliki akses ke method-method yang ada di kelas Thread karena merupakan kelas yang diturunkan langsung dari kelas Thread. Namun, tidak demikian halnya dengan kelas CobaThread2. Oleh karena itu, kita harus tetap membuat objek dari kelas Thread yang menerima argumen objek CobaThread2 padaconstructor-nya, barulah start() bisa diakses. Hal ini ditunjukkan dengan statement Thread t2 = new Thread (new CobaThread2()).
Jadi, ketika terjadi pemanggilan method start()thread yang dibuat akan langsung mengerjakan baris-baris perintah yang ada di method run(). Jika run() dipanggil secara langsung tanpa melalui start(), perintah yang ada di dalam method run() tersebut akan tetap dikerjakan, hanya saja yang mengerjakannya bukanlah thread yang dibuat tadi, melainkan thread utama.

Status Thread

Status Thread


Gambar 12.1. Status Thread
Status Thread

Suatu thread bisa berada pada salah satu dari status berikut:
  • New .  Thread yang berada di status ini adalah objek dari kelas Thread yang baru dibuat, yaitu saat instansiasi objek dengan statement new. Saat thread berada di status new, belum ada sumber daya yang dialokasikan, sehingga thread belum bisa menjalankan perintah apapun.
  • Runnable . Agar thread bisa menjalankan tugasnya, method start() dari kelas Thread harus dipanggil. Ada dua hal yang terjadi saat pemanggilan method start(), yaitu alokasi memori untuk thread yang dibuat dan pemanggilan method run(). Saat method run() dipanggil, status thread berubah menjadi runnable, artinya thread tersebut sudah memenuhi syarat untuk dijalankan oleh JVM. Thread yang sedang berjalan juga berada di status runnable.
  • Blocked . Sebuah thread dikatakan berstatus blocked atau terhalang jika terjadi blocking statement, misalnya pemanggilan method sleep()sleep() adalah suatu method yang menerima argumen bertipeinteger dalam bentuk milisekon. Argumen tersebut menunjukkan seberapa lama thread akan "tidur". Selain sleep(), dulunya dikenal method suspend(), tetapi sudah disarankan untuk tidak digunakan lagi karena mengakibatkan terjadinya deadlock. Di samping blocking statement, adanya interupsi M/K juga dapat menyebabkan thread menjadi blockedThread akan menjadi runnable kembali jika interval methodsleep()-nya sudah berakhir, atau pemanggilan method resume() jika untuk menghalangi thread tadi digunakan method suspend() atau M/K sudah tersedia lagi.
  • Dead . Sebuah thread berada di status dead bila telah keluar dari method run(). Hal ini bisa terjadi karena thread tersebut memang telah menyelesaikan pekerjaannya di method run(), maupun karena adanya pembatalan thread. Status jelas dari sebuah thread tidak dapat diketahui, tetapi method isAlive() mengembalikan nilai boolean untuk mengetahui apakah thread tersebut dead atau tidak.

Thread Java

Thread Java

Pendahuluan

Suatu proses dikontrol oleh paling sedikit satu thread. Namun, sebagian besar proses yang ada sekarang biasanya dijalankan oleh beberapa buah threadMultithreading adalah sebuah mekanisme di mana dalam suatu proses, ada beberapa thread yang mengerjakan tugasnya masing-masing pada waktu yang bersamaan. Contohnya, sebuah web browser harus menampilkan sebuah halaman yang memuat banyak gambar. Pada program yang single-threaded, hanya ada satu thread untuk mengatur suatu gambar, lalu jika gambar itu telah ditampilkan, barulah gambar lain bisa diproses. Dengan multithreading, proses bisa dilakukan lebih cepat jika adathread yang menampilkan gambar pertama, lalu thread lain untuk menampilkan gambar kedua, dan seterusnya, di mana thread-thread tersebut berjalan secara paralel.
Saat sebuah program Java dieksekusi, yaitu saat main() dijalankan, ada sebuah thread utama yang bekerja. Java adalah bahasa pemrograman yang mendukung adanya pembentukan thread tambahan selain thread utama tersebut. Thread dalam Java diatur oleh Java Virtual Machine(JVM) sehingga sulit untuk menentukan apakah thread Java berada di user-level atau kernel-level.

Rujukan

[Lewis1998John Lewis dan William Loftus1998 . Java Software Solutions Foundation Of Program DesignFirst Edition. Addison Wesley.
[Silberschatz2005Avi SilberschatzPeter Galvin, dan Grag Gagne2005 . Operating Systems ConceptsSeventh Edition. John Wiley & Sons.
[Tanenbaum1997Andrew Tanenbaum dan Albert Woodhull1997 . Operating Systems Design and ImplementationSecond Edition. Prentice-Hall.
[WEBJava2007Java 2 Platform SE v1.3.12007 . Java 2 Platform SE v1.3.1: Class Thread – http://java.sun.com/j2se/1.3/docs/api/java/lang/Thread.htmlDiakses 27 Februari 2007.
[WEBJTPD2007Java Thread Primitive Deprecation2007 . Java Thread Primitive Deprecation – http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecatio n.htmlDiakses 27 Februari 2007.

Bus


Bus

Pada sistem komputer yang lebih maju, arsitekturnya lebih kompleks. Untuk meningkatkan kinerja, digunakan beberapa buah bus. Tiap bus merupakan jalur data antara beberapa device yang berbeda. Dengan cara iniRAM, Prosesor, GPU (VGA AGP) dihubungkan oleh bus utama berkecepatan tinggi yang lebih dikenal dengan nama FSB (Front Side Bus). Sementara perangkat lain yang lebih lambat dihubungkan oleh bus yang berkecepatan lebih rendah yang terhubung dengan bus lain yang lebih cepat sampai ke bus utama. Untuk komunikasi antar bus ini digunakan sebuah bridge.

Tanggung-jawab sinkronisasi bus yang secara tak langsung juga mempengaruhi sinkronisasi memori dilakukan oleh sebuah bus controller atau dikenal sebagai bus masterBus master akan mengendalikan aliran data hingga pada satu waktu, bus hanya berisi data dari satu buah device. Pada prakteknya bridge dan bus master ini disatukan dalam sebuah chipset.

Suatu jalur transfer data yang menghubungkan setiap device pada komputer. Hanya ada satu buah device yang boleh mengirimkan data melewati sebuah bus, akan tetapi boleh lebih dari satu device yang membaca data bus tersebut. Terdiri dari dua buah model: Synchronous bus di mana digunakan dengan bantuan clock tetapi berkecepatan tinggi, tapi hanya untuk device berkecepatan tinggi juga; Asynchronous bus digunakan dengan sistem handshake tetapi berkecepatan rendah, dapat digunakan untuk berbagai macam device.
Kejadian ini pada komputer modern biasanya ditandai dengan munculnya interupsi dari software atau hardware, sehingga Sistem Operasi ini disebut Interrupt-driven. Interrupt dari hardware biasanya dikirimkan melalui suatu signal tertentu, sedangkan software mengirim interupsi dengan cara menjalankan system call atau juga dikenal dengan istilah monitor callSystem/Monitor call ini akan menyebabkan trapyaitu interupsi khusus yang dihasilkan oleh software karena adanya masalah atau permintaan terhadap layanan sistem operasi.

Trap ini juga sering disebut sebagai exception.
Setiap interupsi terjadi, sekumpulan kode yang dikenal sebagai ISR (Interrupt Service Routine) akan menentukan tindakan yang akan diambil. Untuk menentukan tindakan yang harus dilakukan, dapat dilakukan dengan dua cara yaitu polling yang membuat komputer memeriksa satu demi satu perangkat yang ada untuk menyelidiki sumber interupsi dan dengan cara menggunakan alamat-alamat ISR yang disimpan dalam array yang dikenal sebagai interrupt vector di mana sistem akan memeriksa Interrupt Vector setiap kali interupsi terjadi.

Arsitektur interupsi harus mampu untuk menyimpan alamat instruksi yang di-interupsi Pada komputer lama, alamat ini disimpan di tempat tertentu yang tetap, sedangkan pada komputer baru, alamat itu disimpan di stackbersama-sama dengan informasi state saat itu.


Boot

Pada saat pertama CPU aktif, program pertama yang di eksekusi berada di ROM. Langkah berikutnya dijalankan sebuah program untuk memasukkan sistem operasi ke dalam komputer. Proses ini disebut Boot Strap.


Komputer Personal

Berikut merupakan bagan sebuah komputer personal.
Gambar 3.3. Bagan Sebuah Komputer Personal
Bagan Sebuah Komputer Personal


Masukan/Keluaran ~SO~


Masukan/Keluaran



Gambar 3.2. Struktur M/K
Struktur M/K

Ada dua macam tindakan jika ada operasi M/K. Kedua macam tindakan itu adalah:
  1. Setelah proses M/K dimulai, kendali akan kembali ke user program saat proses M/K selesai (Synchronous). Instruksi wait menyebabkan CPU idle sampai interupsi berikutnya. Akan terjadi Wait loop (untuk menunggu akses berikutnya). Paling banyak satu proses M/K yang berjalan dalam satu waktu.
  2. Setelah proses M/K dimulai, kendali akan kembali ke user program tanpa menunggu proses M/K selesai (Asynchronous). System call permintaan pada sistem operasi untuk mengizinkan user menunggu sampai M/K selesai. Device-status table mengandung data masukkan untuk tiap M/K device yang menjelaskan tipe, alamat, dan keadaannya. Sistem operasi memeriksa M/K device untuk mengetahui keadaan device dan mengubah tabel untuk memasukkan interupsi. Jika M/K device mengirim/mengambil data ke/dari memori hal ini dikenal dengan nama Direct Memory Access (DMA).

Prosesor dan Penyimpan Data


Prosesor


Secara umum, sistem komputer terdiri atas CPU dan sejumlah perangkat pengendali yang terhubung melalui sebuah bus yang menyediakan akses ke memori. Umumnya, setiap device controller bertanggung-jawab atas sebuah hardware spesifik. Setiap device dan CPU dapat beroperasi secara konkuren untuk mendapatkan akses ke memori. Adanya beberapa hardware ini dapat menyebabkan masalah sinkronisasi. Karena itu untuk mencegahnya sebuah memory controller ditambahkan untuk sinkronisasi akses memori.

Penyimpan Data

Dasar susunan media penyimpanan ialah kecepatan, biaya, sifat volatilitas. Caching menyalin informasi ke media penyimpanan yang lebih cepat; Memori utama dapat dilihat sebagai cache terakhir untuk media penyimpanan sekunder. Menggunakan memori berkecepatan tinggi untuk memegang data yang diakses terakhir. Dibutuhkan cache management policy. Cache juga memperkenalkan tingkat lain di hirarki penyimpanan. Hal ini memerlukan data untuk disimpan bersama-sama di lebih dari satu level agar tetap konsisten.

Gambar 3.1. Penyimpanan Hirarkis
Penyimpanan Hirarkis

Register

Tempat penyimpanan beberapa buah data volatile yang akan diolah langsung di prosesor yang berkecepatan sangat tinggi. Register ini berada di dalam prosesor dengan jumlah yang sangat terbatas karena fungsinya sebagai tempat perhitungan/komputasi data.

Cache Memory

Tempat penyimpanan sementara (volatile) sejumlah kecil data untuk meningkatkan kecepatan pengambilan atau penyimpanan data di memori oleh prosesor yang berkecepatan tinggi. Dahulu cache disimpan di luar prosesor dan dapat ditambahkan. Misalnya pipeline burst cache yang biasa ada di komputer awal tahun 90-an. Akan tetapi seiring menurunnya biaya produksi die atau wafer dan untuk meningkatkan kinerja, cacheditanamkan di prosesor. Memori ini biasanya dibuat berdasarkan desain memori statik.

Random Access Memory

Tempat penyimpanan sementara sejumlah data volatile yang dapat diakses langsung oleh prosesor. Pengertian langsung di sini berarti prosesor dapat mengetahui alamat data yang ada di memori secara langsung. Sekarang,RAM dapat diperoleh dengan harga yang cukup murah dangan kinerja yang bahkan dapat melewati cache pada komputer yang lebih lama.

Memori Ekstensi

Tambahan memori yang digunakan untuk membantu proses-proses dalam komputer, biasanya berupa buffer. Peranan tambahan memori ini sering dilupakan akan tetapi sangat penting artinya untuk efisiensi. Biasanya tambahan memori ini memberi gambaran kasar kemampuan dari perangkat tersebut, sebagai contoh misalnya jumlah memori VGA, memori soundcard.

Direct Memory Access

Perangkat DMA digunakan agar perangkat M/K (I/O device) yang dapat memindahkan data dengan kecepatan tinggi (mendekati frekuensi bus memori). Perangkat pengendali memindahkan data dalam blok-blok dari buffer langsung ke memory utama atau sebaliknya tanpa campur tangan prosesor. Interupsi hanya terjadi tiap blok bukan tiap word atau byte data. Seluruh proses DMA dikendalikan oleh sebuah controller bernama DMA Controller (DMAC)DMA Controller mengirimkan atau menerima signal dari memori dan I/O device. Prosesor hanya mengirimkan alamat awal data, tujuan data, panjang data ke pengendali DMA. Interupsi pada prosesor hanya terjadi saat proses transfer selesai. Hak terhadap penggunaan bus memory yang diperlukan pengendali DMA didapatkan dengan bantuan bus arbiter yang dalam PC sekarang berupa chipset Northbridge.
Media penyimpanan data yang non-volatile yang dapat berupa Flash DriveOptical DiscMagnetic DiskMagnetic Tape. Media ini biasanya daya tampungnya cukup besar dengan harga yang relatif murah. Portability-nya juga relatif lebih tinggi.
Pada standar arsitektur sequential komputer ada tiga tingkatan utama penyimpanan: primer, sekunder, and tersier. Memori tersier menyimpan data dalam jumlah yang besar (terabytes, atau 10 12bytes), tapi waktu yang dibutuhkan untuk mengakses data biasanya dalam hitungan menit sampai jam. Saat ini, memori tersiser membutuhkan instalasi yang besar berdasarkan/bergantung pada disk atau tapes. Memori tersier tidak butuh banyak operasi menulis tapi memori tersier tipikal-nya write ones atau read many. Meskipun per-megabites-nya pada harga terendah, memory tersier umumnya yang paling mahal, elemen tunggal pada modern supercomputer installations.
Ciri-ciri lain: non-volatile, penyimpanan off-line , umumnya dibangun pada removable media contoh optical disk, flash memory.

Organisasi Sistem Komputer ~ Pendahuluan ~


Pendahuluan

Pada awalnya semua operasi pada sebuah sistem komputer ditangani oleh hanya seorang pengguna. Sehingga semua pengaturan terhadap perangkat keras maupun perangkat lunak dilakukan oleh pengguna tersebut. Namun seiring dengan berkembangnya Sistem Operasi pada sebuah sistem komputer, pengaturan ini pun diserahkan kepada Sistem Operasi tersebut. Segala macam manajemen sumber daya diatur oleh Sistem Operasi.

Pengaturan perangkat keras dan perangkat lunak ini berkaitan erat dengan proteksi dari perangkat keras maupun perangkat lunak itu sendiri. Sehingga, apabila dahulu segala macam proteksi terhadap perangkat keras dan perangkat lunak agar sistem dapat berjalan stabil dilakukan langsung oleh pengguna maka sekarang Sistem Operasi-lah yang banyak bertanggung jawab terhadap hal tersebut. Sistem Operasi harus dapat mengatur penggunaan segala macam sumber daya perangkat keras yang dibutuhkan oleh sistem agar tidak terjadi hal-hal yang tidak diinginkan. Seiring dengan maraknya berbagi sumberdaya yang terjadi pada sebuah sistem, maka Sistem Operasi harus dapat secara pintar mengatur mana yang harus didahulukan. Hal ini dikarenakan, apabila pengaturan ini tidak dapat berjalan lancar maka dapat dipastikan akan terjadi kegagalan proteksi perangkat keras.

Dengan hadirnya multiprogramming yang memungkinkan adanya utilisasi beberapa program di memori pada saat bersamaan, maka utilisasi dapat ditingkatkan dengan penggunaan sumberdaya secara bersamaan tersebut, akan tetapi di sisi lain akan menimbulkan masalah karena sebenarnya hanya ada satu program yang dapat berjalan pada satuan waktu yang sama. Akan banyak proses yang terpengaruh hanya akibat adanya gangguan pada satu program.

Sebagai contoh saja apabila sebuah harddisk menjadi sebuah sumberdaya yang dibutuhkan oleh berbagai macam program yang dijalankan, maka bisa-bisa terjadi kerusakan harddisk akibat suhu yang terlalu panas akibat terjadinya sebuah situasi kemacetan penggunaan sumber daya secara bersamaan akibat begitu banyak program yang mengirimkan request akan penggunaan harddisk tersebut.
Di sinilah proteksi perangkat keras berperan. Sistem Operasi yang baik harus menyediakan proteksi yang maksimal, sehingga apabila ada satu program yang tidak bekerja maka tidak akan menggangu kinerja Sistem Operasi tersebut maupun program-program yang sedang berjalan lainnya.
Tidak ada suatu ketentuan khusus tentang bagaimana seharusnya struktur sistem sebuah komputer. Para ahli serta perancang arsitektur komputer memiliki pandangannya masing-masing. Akan tetapi, untuk mempermudah pemahaman rincian dari sistem operasi di bab-bab berikutnya, kita perlu memiliki pengetahuan umum tentang struktur sistem komputer.

    GPU= Graphics Processing Unit;
    AGP= Accelerated Graphics Port;
    HDD= Hard Disk Drive;
    FDD= Floppy Disk Drive;
    FSB= Front Side Bus;
    USB= Universal Serial Bus;
    PCI= Peripheral Component
    Interconnect;
    RTC= Real Time Clock;
    PATA= Pararel Advanced Technology
    Attachment;
    SATA= Serial Advanced Technology
    Attachment;
    ISA= Industry Standard
    Architecture;
    IDE= Intelligent Drive
    Electronics/Integrated Drive Electronics;
    MCA= Micro Channel Architecture;
    PS/2= Sebuah
    portyang dibangun IBM untuk
    menghubungkan mouse ke
    PC;

Rujukan

[Silberschatz2005Avi SilberschatzPeter Galvin, dan Grag Gagne2005 . Operating Systems ConceptsSeventh Edition. John Wiley & Sons.

Karakteristik, Keunggulan dan Kelemahan Algoritma


Karakteristik, Keunggulan dan Kelemahan Algoritma

Algoritma diperlukan untuk mengatur giliran proses-proses yang ada di ready queue yang mengantri untuk dialokasikan ke CPU. Terdapat berbagai macam algoritma, antara lain:
  1. First Come First Serve. Algoritma ini mendahulukan proses yang lebih dulu datang. Kelemahannya, waiting time rata-rata cukup lama.
  2. Shortest Job First. Algoritma ini mendahulukan proses dengan CPU burst terkecil sehingga akan mengurangi waiting time rata-rata.
  3. Priority Scheduling. Algoritma ini mendahulukan prioritas terbesar. Kelemahannya, prioritas kecil tidak mendapat jatah CPU Hal ini dapat diatasi dengan aging yaitu semakin lama lama menunggu, prioritas semakin tinggi.
  4. Round Robin. Algoritma ini menggilir proses-proses yang ada diantrian dengan jatah time quantum yang sama. Jika waktu habis, CPU dialokasikan ke proses selanjutnya.
  5. Multilevel Queue. Algoritma ini membagi beberapa antrian yang akan diberi prioritas berdasarkan tingkatan. Tingkatan lebih tinggi menjadi prioritas utama.
  6. Multilevel Feedback Queue. Pada dasarnya sama dengan Multilevel Queue, yang membedakannya adalah pada algoritma ini diizinkan untuk pindah antrian.
Keenam algoritma penjadwalan memiliki karakteristik beserta keunggulan dan kelemahannya masing-masing. Namun, Multilevel Feedback Queue Scheduling sebagai algoritma yang paling kompleks, adalah algoritma yang paling banyak digunakan saat ini.

Multilevel Feedback Queue


Multilevel Feedback Queue

Algoritma ini mirip sekali dengan algoritma multilevel queue. Perbedaannya ialah algoritma ini mengizinkan proses untuk pindah antrian. Jika suatu proses menyita CPU terlalu lama, maka proses itu akan dipindahkan ke antrian yang lebih rendah. Hal ini menguntungkan proses interaksi karena proses ini hanya memakai waktu CPU yang sedikit. Demikian pula dengan proses yang menunggu terlalu lama. Proses ini akan dinaikkan tingkatannya. Biasanya prioritas tertinggi diberikan kepada proses dengan CPU burst terkecil, dengan begitu CPU akan terutilisasi penuh dan M/K dapat terus sibuk. Semakin rendah tingkatannya, panjang CPU burst proses juga semakin besar.
Gambar 14.7. Multilevel Feedback Queue
Multilevel Feedback Queue

Algoritma ini didefinisikan melalui beberapa parameter, antara lain:
  1. Jumlah antrian.
  2. Algoritma penjadwalan tiap antrian.
  3. Kapan menaikkan proses ke antrian yang lebih tinggi.
  4. Kapan menurunkan proses ke antrian yang lebih rendah.
  5. Antrian mana yang akan dimasuki proses yang membutuhkan.
Dengan pendefinisian seperti tadi membuat algoritma ini sering dipakai, karena algoritma ini mudah dikonfigurasi ulang supaya cocok dengan sistem. Tapi untuk mengatahui mana penjadwal terbaik, kita harus mengetahui nilai parameter tersebut.
Multilevel feedback queue adalah salah satu algoritma yang berdasar pada algoritma multilevel queue. Perbedaan mendasar yang membedakan multilevel feedback queue dengan multilevel queue biasa adalah terletak pada adanya kemungkinan suatu proses berpindah dari satu antrian ke antrian lainnya, entah dengan prioritas yang lebih rendah ataupun lebih tinggi, misalnya pada contoh berikut.
  1. Semua proses yang baru datang akan diletakkan pada queue 0 ( quantum= 8 ms).
  2. Jika suatu proses tidak dapat diselesaikan dalam 8 ms, maka proses tersebut akan dihentikan dan dipindahkan ke queue 1 ( quantum= 16 ms).
  3. Queue 1 hanya akan dikerjakan jika tidak ada lagi proses di queue 0, dan jika suatu proses di queue 1 tidak selesai dalam 16 ms, maka proses tersebut akan dipindahkan ke queue 2.
  4. Queue 2 akan dikerjakan bila queue 0 dan 1 kosong, dan akan berjalan dengan algoritma FCFS.
Disini terlihat bahwa ada kemungkinan terjadinya perpindahan proses antar queue, dalam hal ini ditentukan oleh time quantum, namun dalam prakteknya penerapan algoritma multilevel feedback queue akan diterapkan dengan mendefinisikan terlebih dahulu parameter-parameternya, yaitu:
  1. Jumlah antrian.
  2. Algoritma internal tiap queue.
  3. Aturan sebuah proses naik ke antrian yang lebih tinggi.
  4. Aturan sebuah proses turun ke antrian yang lebih rendah.
  5. Antrian yang akan dimasuki tiap proses yang baru datang.
Contoh: Terdapat tiga antrian; Q1=10 ms, FCFS Q2=40 ms, FCFS Q3=FCFS proses yang masuk, masuk ke antrian Q1. Jika dalam 10 ms tidak selesai, maka proses tersebut dipindahkan ke Q2. Jika dalam 40 ms tidak selesai, maka dipindahkan lagi ke Q3. Berdasarkan hal-hal di atas maka algoritma ini dapat digunakan secara fleksibel dan diterapkan sesuai dengan kebutuhan sistem. Pada zaman sekarang ini algoritma multilevel feedback queue adalah salah satu yang paling banyak digunakan.

Multilevel Queue


Multilevel Queue

Ide dasar dari algoritma ini berdasarkan pada sistem prioritas proses. Prinsipnya, jika setiap proses dapat dikelompokkan berdasarkan prioritasnya, maka akan didapati queue seperti pada gambar berikut:
Gambar 14.6. Multilevel Queue
Multilevel Queue

Dari gambar tersebut terlihat bahwa akan terjadi pengelompokan proses-proses berdasarkan prioritasnya. Kemudian muncul ide untuk menganggap kelompok-kelompok tersbut sebagai sebuah antrian-antrian kecil yang merupakan bagian dari antrian keseluruhan proses, yang sering disebut dengan algoritma multilevel queue.

Dalam hal ini, dapat dilihat bahwa seolah-olah algoritma dengan prioritas yang dasar adalah algoritma multilevel queue dimana setiap queue akan berjalan dengan algoritma FCFS yang memiliki banyak kelemahan. Oleh karena itu, dalam prakteknya, algoritma multilevel queue memungkinkan adanya penerapan algoritma internal dalam masing-masing sub-antriannya yang bisa memiliki algoritma internal yang berbeda untuk meningkatkan kinerjanya.

Berawal dari priority scheduling, algoritma ini pun memiliki kelemahan yang sama dengan priority scheduling, yaitu sangat mungkin bahwa suatu proses pada queue dengan prioritas rendah bisa saja tidak mendapat jatah CPU. Untuk mengatasi hal tersebut, salah satu caranya adalah dengan memodifikasi algoritma ini dengan adanya jatah waktu maksimal untuk tiap antrian, sehingga jika suatu antrian memakan terlalu banyak waktu, maka prosesnya akan dihentikan dan digantikan oleh antrian dibawahnya, dan tentu saja batas waktu untuk tiap antrian bisa saja sangat berbeda tergantung pada prioritas masing-masing antrian.

Round Robin Schedule


Round Robin

Algoritma ini menggilir proses yang ada di antrian. Proses akan mendapat jatah sebesar time quantum. Jika time quantum-nya habis atau proses sudah selesai, CPU akan dialokasikan ke proses berikutnya. Tentu proses ini cukup adil karena tak ada proses yang diprioritaskan, semua proses mendapat jatah waktu yang sama dari CPU yaitu (1/n), dan tak akan menunggu lebih lama dari (n-1)q dengan q adalah lama 1 quantum.
Algoritma ini sepenuhnya bergantung besarnya time quantum. Jika terlalu besar, algoritma ini akan sama saja dengan algoritma first come first served. Jika terlalu kecil, akan semakin banyak peralihan proses sehingga banyak waktu terbuang.
Permasalahan utama pada Round Robin adalah menentukan besarnya time quantum. Jika time quantum yang ditentukan terlalu kecil, maka sebagian besar proses tidak akan selesai dalam 1 quantum. Hal ini tidak baik karena akan terjadi banyak switch, padahal CPU memerlukan waktu untuk beralih dari suatu proses ke proses lain (disebut dengan context switches time). Sebaliknya, jika time quantum terlalu besar, algoritma Round Robin akan berjalan seperti algoritma first come first servedTime quantum yang ideal adalah jika 80% dari total proses memiliki CPU burst time yang lebih kecil dari 1 time quantum.
Gambar 14.4. Urutan Kejadian Algoritma Round Robin
Urutan Kejadian Algoritma Round Robin

Gambar 14.5. Penggunaan Waktu Quantum
Penggunaan Waktu Quantum
Unique 1:1 Traffic Exchange

♪ ♥ Ma liste de blogs ♥ ♪

♪ ♥ Please Votes! Thanks. ♪ ♥
×