Jumat, 26 Oktober 2018

Handheld

Handheld computer

      Handheld computer adalah komputer yang cukup kecil sehingga dapat digenggam. Komputer genggam ini dapat bekerja dengan fungsi yang hampir sama dengan komputer biasa. Meskipun sangat mudah untuk dibawa, komputer genggam tidak dapat menggantikan komputer biasa (PC) karena hanya memiliki keyboard dan layar yang kecil. Beberapa produsen mencoba untuk memecahkan masalah keyboard yang terlalu kecil. Keyboard tersebut diganti dengan electronic pen. Bagaimanapun, electronic pen ini masih bergantung pada teknologi pengenalan tulisan tangan yang masih dalam tahap pengembangan. 
      Kelebihan dari komputer genggam ini adalah pengguna dapat menyimpan serta mengatur data dengan lebih efisien dan akurat. Biasanya komputer genggam dilengkapi dengan teknologi Bluetooth. Bluetooth memang tepat untuk mencetak secara nirkabel, menghubungkan antara komputer genggam dengan mobile printer. Tidak hanya dengan printer tetapi komputer genggam juga dapat dihubungkan dengan alat-alat lain melalui koneksi Bluetooth.
      Komputer genggam dapat meningkatkan produktivitas pengguna dan memudahkan mereka untuk bekerja lebih efisien. Komputer genggam yang paling banyak digunakan adalah komputer yang khusus dirancang untuk menyediakan fungsi PIM (Personal Information Manager), seperti kalender, agenda, dan buku alamat.


Sumber:


Distributed Processing


Distributed Processing

     Pengolahan terdistribusi adalah frasa yang digunakan untuk merujuk ke berbagai sistem komputer yang menggunakan lebih dari satu komputer (atau prosesor ) untuk menjalankan aplikasi . Ini termasuk pemrosesan paralel di mana satu komputer menggunakan lebih dari satu CPU untuk menjalankan program .
Lebih sering, bagaimanapun, pemrosesan terdistribusi mengacu pada jaringan area lokal (LAN) yang dirancang sehingga satu program dapat berjalan secara bersamaan di berbagai situs. Kebanyakan sistem pemrosesan terdistribusi berisi perangkat lunak canggih yang mendeteksi CPU idle di jaringan dan memilah program untuk menggunakannya.
Bentuk lain dari pemrosesan terdistribusi melibatkan basis data terdistribusi . Ini adalah basisdata tempat data disimpan di dua atau lebih sistem komputer. Sistem basis data melacak di mana data berada sehingga sifat terdistribusi dari database tidak jelas bagi pengguna .
     Pengertian lain Dari Distributed Processing : Mengerjakan semua proses pengolahan data secara bersama antara komputer pusat dengan beberapa komputer yang lebih kecil dan saling dihubungkan melalui jalur komunikasi. Setiap komputer tersebut memiliki prosesor mandiri sehingga mampu mengolah sebagian data secara terpisah, kemudian hasil pengolahan tadi digabungkan menjadi satu penyelesaian total. Jika salah satu prosesor mengalami kegagalan atau masalah yang lain akan mengambil alih tugasnya.

Contoh Sistem Pengolahan Data terdistribusi

  1. Internet
  •   Jaringan komputer dan aplikasi yang heterogen.
  •    Mengimplementasikan protokol internet.
  1. Intranet
  •  Jaringan yang teradminitrasi secara lokal.
  •  Terhubung ke internet melalui feriwall.
  •  Menyediakan layanan internet dan eksternal.
  1. Mobile Computing ( Sistem Komunikasi telepon seluler)
  •  Menggunakan frekuensi radio sebagai media transmisi
  •  Perangkat dapat bergerak kemanapun asal masih terjangkau dengan frekuensinya
  •  Dapat menghandle/dihububngkan dengan perangkat lain
  1. Sistem Telepon
  • ISDN atau yang biasa disebut jaringan telpon tetap (dengan kabel).
  • PSTN jaringan telepon/telekomunikasi yang semuanya digital.
  1. Network File System (NTFS)
  •  WWW
  1. Arsitektur client server yang diterpakan dalam infrastruktur internet

Contoh Impementasi Distributed Data Processing System

      Aplikasi facebook.Com yang biasa anda gunakan untuk bersosialisai dengan saudara, kawan dan orang di seluruh dunia melalui internet. Bila kita lihat aplikasi tersebut, database tidak didistribusikan, tetapi proses sistem dan penggunaan fungsi-fungsi atau feature pada sistem terpisah-pisah prosesnya tidak satu proses saja dalam satu waktu. Pada waktu tertentu ada orang yang sedang isi status, dan mungkin di waktu yang sama ada sedang mencari teman, ada yang mengupload foto dan sebagainya.  Tampak disini beberapa proses pada sistem terdistribusi pada setiap client yang berbeda.
      Pada penggunaan aplikasi pembayaran / transaksi online pada suatu perusahaan, misalnya saja tiket pesawat terbang. Aplikasi tersebut juga contoh dari aplikasi pengolahan data terdistribusi, dimana data pembayaran ada tersimpan di database bank, sementara data tiketnya tersimpan di database server maskapai yang menyediakan aplikasi tiket online tersebut. Jadi dapat dikatakan bila aplikasi yang digunakan menggunakan database yang terpisah tidak satu database saja, maka dapat dikatakan itu adalah aplikasi pengolahan data terdistribusi atau dikenal juga dengan distributed  data processing system.

Sumber :




Kamis, 25 Oktober 2018

Procces Control Block (PCB)


Process Control Block

Blok Kontrol Proses ( PCB , juga disebut Blok Pengendalian Tugas , Masuknya Tabel Proses , Task Struct , atau Switchframe ) adalah struktur data dalam kernel sistem operasi yang berisi informasi yang diperlukan untuk mengelola penjadwalan suatu proses. PCB adalah "manifestasi proses dalam sistem operasi." 
Peran
Peran PCB adalah pusat dalam manajemen proses: mereka diakses dan / atau dimodifikasi oleh sebagian besar utilitas OS, termasuk yang terlibat dengan penjadwalan, memori dan akses sumber daya I / O dan pemantauan kinerja. Dapat dikatakan bahwa himpunan PCB mendefinisikan status sistem operasi saat ini. Penataan data untuk proses sering dilakukan dalam hal PCB. Sebagai contoh, pointer ke PCB lain di dalam PCB memungkinkan pembuatan antrean proses dalam berbagai status penjadwalan ("siap", "diblokir", dll.) Yang telah disebutkan sebelumnya.
Struktur
Dalam sistem multitasking modern yang canggih, PCB menyimpan banyak item data yang berbeda, semua diperlukan untuk manajemen proses yang benar dan efisien.  Meskipun detail struktur ini jelas tergantung pada sistem, kami dapat mengidentifikasi beberapa bagian yang sangat umum, dan mengklasifikasikannya dalam tiga kategori utama:
Data identifikasi proses
Memproses data negara
Data kontrol proses
Pendekatan yang biasa diikuti untuk merepresentasikan informasi ini adalah untuk membuat dan memperbarui tabel status untuk setiap entitas yang relevan, seperti memori, perangkat I / O, file dan proses.
Tabel memori, misalnya, mungkin berisi informasi tentang alokasi memori utama dan sekunder (virtual) untuk setiap proses, atribut otorisasi untuk mengakses area memori yang dibagikan di antara proses yang berbeda, dll. Tabel I / O mungkin memiliki entri yang menyatakan ketersediaan perangkat atau penugasannya ke suatu proses, status operasi I / O yang dijalankan, lokasi buffer memori yang digunakan untuk mereka, dll.
Tabel file memberikan info tentang lokasi dan status file. Akhirnya, tabel proses menyimpan data yang dibutuhkan OS untuk mengelola proses. Setidaknya sebagian dari struktur data kontrol proses selalu dipertahankan dalam memori utama, meskipun lokasi dan konfigurasi yang tepat bervariasi dengan OS dan teknik manajemen memori yang digunakannya.

Data identifikasi proses selalu menyertakan pengenal unik untuk proses (hampir selalu berupa bilangan bulat) dan, dalam sistem multi-pengguna-multitasking, data seperti pengenal proses induk, pengenal pengguna, pengenal kelompok pengguna, dll. Id proses sangat khusus relevan, karena sering digunakan untuk referensi silang tabel OS yang didefinisikan di atas, misalnya memungkinkan untuk mengidentifikasi proses mana yang menggunakan perangkat I / O mana, atau area memori.
Data status proses adalah potongan-potongan informasi yang menentukan status dari suatu proses ketika itu ditangguhkan, memungkinkan OS untuk memulai kembali nanti dan masih berjalan dengan benar. Ini selalu termasuk isi register umum-tujuan CPU, kata status proses CPU, stack dan frame pointer dll. Selama sakelar konteks , proses yang sedang berjalan dihentikan dan proses lain diberikan kesempatan untuk dijalankan. Kernel harus menghentikan eksekusi proses yang sedang berjalan, menyalin nilai-nilai dalam register perangkat keras ke PCB-nya, dan memperbarui register perangkat keras dengan nilai-nilai dari PCB proses baru.
Informasi kontrol proses digunakan oleh OS untuk mengelola proses itu sendiri. Ini termasuk:
Keadaan penjadwalan proses: Keadaan proses dalam hal "siap", "ditangguhkan", dll., Dan informasi penjadwalan lainnya juga, seperti nilai prioritas, jumlah waktu yang berlalu sejak proses mendapatkan kendali dari CPU atau sejak itu ditangguhkan. Juga, dalam kasus proses yang ditangguhkan, data identifikasi peristiwa harus dicatat untuk acara yang prosesnya tunggu.
Informasi penataan proses : proses anak-anak id, atau id proses lain yang terkait dengan yang sekarang dalam beberapa cara fungsional, yang dapat direpresentasikan sebagai antrian, cincin atau struktur data lainnya.
Informasi komunikasi antarproses: berbagai bendera, sinyal dan pesan yang terkait dengan komunikasi di antara proses independen dapat disimpan di PCB.
Proses Keistimewaan dalam hal akses yang diizinkan / tidak diizinkan ke sumber daya sistem.
Status Proses: Status dapat masuk ke dalam baru, siap, berjalan, menunggu, mati tergantung pada penjadwalan CPU.
Nomor Proses (PID): Nomor identifikasi unik untuk setiap proses dalam sistem operasi (juga dikenal sebagai ID Proses ).
Penghitung Program (PC): Penunjuk ke alamat instruksi berikutnya yang akan dieksekusi untuk proses ini.
CPU Register: Menunjukkan berbagai register set CPU di mana proses perlu disimpan untuk eksekusi untuk menjalankan status.
Informasi Penjadwalan CPU: menunjukkan informasi dari suatu proses yang menggunakan waktu CPU melalui penjadwalan.
Informasi Manajemen Memori: termasuk informasi dari tabel halaman, batas memori, tabel Segmen tergantung pada memori yang digunakan oleh sistem operasi.
Informasi Akuntansi: Termasuk jumlah CPU yang digunakan untuk eksekusi proses, batas waktu, ID pelaksanaan, dll.
Informasi Status I / O: Termasuk daftar perangkat I / O yang dialokasikan untuk proses.

Sumber:

Batch Sytem


BATCH SYSTEM 

Batch system adalah dimana job-job yang mirip dikumpulkan dan dijalankan secara kelompok kemudian setelah kelompok yang dijalankan tadi selesai maka secara otomatis kelompok lain dijalankan. jadi dengan kata lain adalah teknologi proses komputer dari generasi ke-2. yang jika suatu tugas sedang dikerjakan pada 1 rangkaian, akan di eksekusi secara berurutan. Pada komputer generasi ke-2 sistem komputer nya maasih blum dilengkapi oleh sebuah sistem operasi. Tapi, dalam beberapa fungsi sistem operasi, seperti os yang tengah berkembang pada jaman sekarang ini. Contohnya adlah FMS ( Fortarn Monitoring System ) dan IBSYS.

Definisi lain dari batch system adalah:
1. produk manufaktur atau memperlakukan bahan dalam batch, dengan melewati output dari satuproses ke proses selanjutnya. Bandingkan pemrosesan berkelanjutan
2. (Ilmu Komputer) sistem dimana program komputer dari sejumlah pengguna individu diserahkan kekomputer sebagai batch tunggal. Bandingkan pembagian waktu
Contoh sebuah Batch System adalah sebuah e-mail dan transaksi batch processing. Dalam suatu sistem batch processing, transaksi secara individual dientri melalui peralatan terminal, dilakukan validasi tertentu, dan ditambahkan ke transaction file yang berisi transaksi lain, dan kemudian dientri ke dalam sistem secara periodik. Di waktu kemudian, selama siklus pengolahan berikutnya, transaction file dapat divalidasi lebih lanjut dan kemudian digunakan untuk meng-up date master file yang berkaitan.

 BENTUK DARI BATCH SYSTEM
Ada 2 cara dalam Batch System yaitu :
Multi-programming adalah salah satu teknik penjadwalan dimana tugas (task) yang sedang  berjalan tetap berjalan sampai ia melakukan operasi yang membutuhkan waktu untuk menunggu respon dari luar (external event), misalnya membaca data dari disket/CD/dsb, atau sampai komputer memaksa untuk menukar tugas yang sedang berjalan dengan tugas lainnya. Sistem operasi yang yang menggunakan multi-program sebagai scheduler-nya bertujuan untuk memaksimalkan penggunaan CPU. 
Multiprocessing adalah istilah teknologi informasi dalam bahasa Inggris yang merujuk kepada kemampuan pemrosesan komputer yang dilakukan secara serentak. Hal ini dimungkinkan dengan menggunakan dua CPU atau lebih dalam sebuah sistem komputer. Istilah ini juga dapat merujuk kepada dukungan sebuah sistem untuk mendukung lebih dari satu prosesor dan mengalokasikan tugas kepada prosesor-prosesor tersebut.

Sistem operasi batch:
Dalam hal ini, pekerjaan yang memiliki tipe serupa dikelompokkan bersama dan diperlakukan sebagai batch. Sekarang, mereka disimpan pada kartu Punch (kertas kaku di mana data digital disimpan dan diwakili menggunakan beberapa urutan lubang tertentu) yang akan diserahkan ke sistem untuk diproses. Sistem kemudian akan melakukan semua operasi yang diperlukan secara berurutan. Jadi, kami menganggap ini sebagai jenis pemrosesan serial.
Misalnya: Laporan Bank

Keuntungan:
 1. Misalkan pekerjaan membutuhkan waktu yang sangat lama (1 hari atau lebih). Kemudian, proses semacam itu dapat dilakukan bahkan tanpa manusia.
 2. Mereka tidak memerlukan perangkat keras khusus dan dukungan sistem untuk memasukkan data.
Kekurangan:
 1. Sangat sulit untuk mendebug sistem batch.
 2. Kurangnya interaksi antara pengguna dan sistem operasi.
 3. Misalkan kesalahan terjadi di salah satu pekerjaan batch. Kemudian, semua pekerjaan yang tersisa akan terpengaruh, yaitu; mereka harus menunggu sampai kesalahan diselesaikan.



 Sumber :




Critical Section


Critical Section
Critical section adalah bagian dari program yang mengakses sumber daya bersama. Hanya ketika sebuah proses berada di Bagian Kritisnya dapat berada dalam posisi untuk mengganggu proses lain. Kita dapat menghindari kondisi balapan dengan memastikan bahwa tidak ada dua proses memasuki Bagian Kritis mereka pada saat yang bersamaan. Secara sederhana bagian kritis adalah sekelompok instruksi / pernyataan atau wilayah kode yang perlu dieksekusi secara atom, seperti mengakses sumber daya (file, input atau output port, data global, dll).
Dalam pemrograman konkuren, jika satu thread mencoba untuk mengubah nilai data bersama pada saat yang sama ketika thread lain mencoba untuk membaca nilai (mis., Data balas antar utas), hasilnya tidak dapat diprediksi.
Akses ke variabel bersama tersebut (memori bersama, file bersama, port bersama, dll ...) untuk disinkronkan. Beberapa bahasa pemrograman telah dibangun untuk mendukung sinkronisasi.
Sangat penting untuk memahami pentingnya kondisi balapan saat menulis pemograman mode kernel (driver perangkat, utas kernel, dll.). karena programmer dapat secara langsung mengakses dan memodifikasi struktur data kernel.
Solusi sederhana untuk bagian kritis dapat dipikirkan seperti yang ditunjukkan di bawah ini,
  acquirLock ();
 Bagian Proses Kritis
 releaseLock ();
Sebuah utas harus mendapatkan kunci sebelum mengeksekusi bagian kritis. Kunci dapat diperoleh hanya dengan satu utas. Ada berbagai cara untuk mengimplementasikan kunci dalam kode pseudo di atas. Mari kita bahas di artikel mendatang.

Solusi dari masalah critical section harus memenuhi tiga syarat berikut:
Mutual Exclusion.
Jika proses Pi sedang menjalankan critical section (dari proses Pi,) maka tidak ada proses-proses lain yang dapat menjalankan critical section dari proses-proses tersebut. Dengan kata lain, tidak ada dua proses yang berada di critical section pada saat yang bersamaan.

Terjadi kemajuan (progress).
Jika tidak ada proses yang sedang menjalankan critical sectionnya dan jika terdapat lebih dari satu proses lain yang ingin masuk ke critical section, maka hanya proses-proses yang tidak sedang menjalankan remainder sectionnya yang dapat berpartisipasi dalam memutuskan siapa yang berikutnya yang akan masuk ke critical section, dan pemilihan siapa yang berhak masuk ke critical sectionini tidak dapat ditunda secara tak terbatas (sehingga tidak terjadi deadlock).

Ada batas waktu tunggu (bounded waiting).
Jika seandainya ada proses yang sedang menjalankan critical section, maka terdapat batasan waktu berapa lama suatu proses lain harus menunggu giliran untuk mengakses critical section. Dengan adanya batas waktu tunggu akan menjamin proses dapat mengakses ke critical section (tidak mengalami starvation: proses seolah-olah berhenti, menunggu request akses ke critical section diperbolehkan).
Kita mengasumsikan bahwa setiap proses berjalan pada kecepatan yang bukan nol. Akan tetapi, tidak ada asumsi lain mengenai kecepatan relatif proses-proses tersebut ataupun jumlah CPU yang ada.

Ada dua jenis solusi masalah critical section, yaitu:
Solusi perangkat lunak
Dengan menggunakan algoritma-alogoritma yang nilai kebenarannya tidak tergantung pada asumsi-asumsi lain, selain bahwa setiap proses berjalan pada kecepatan yang bukan nol.

Solusi perangkat keras
Tergantung pada beberapa instruksi mesin tertentu, misalnya dengan me-non-aktifkan interupsi atau dengan mengunci suatu variabel tertentu

Untuk selanjutnya akan dibahas algoritma-algoritma untuk solusi masalah critical section yang memenuhi tiga syarat seperti yang telah disebutkan di atas. Solusi-solusi tersebut tidak tergantung pada asumsi mengenai instruksi-instruksi perangkat keras atau jumlah prosesor yang dapat didukung oleh perangkat keras. Namun, kita mengasumsikan bahwa insruksi bahasa mesin yang dasar (instruksi-instruksi primitif seperti load, store, dan test) dieksekusi secara atomik. Artinya, jika dua instruksi tersebut dieksekusi secara konkuren, hasilnya ekuivalen dengan eksekusi instruksi tersebut secara sekuensial dalam urutan tertentu. Jadi, jika load dan store dieksekusi secara konkuren, load akan mendapatkan salah satu dari nilai yang lama atau nilai yang baru, tetapi tidak kombinasi dari keduanya.

Pada bagian ini, kita membatasi pembahasan algoritma-algoritma untuk solusi critical section untuk dua proses saja. Proses-proses itu adalah P0 dan P1. Untuk memudahkan, ketika kita membahas Pi, kita menggunakan Pj untuk menyebut proses lainnya, sehingga j == 1-i.
Untuk mengilustrasikan proses-proses yang akan masuk ke critical section, kita mengimplementasikan thread dengan menggunakan class Worker dan abstract class MutualExclusion. Class TestAlgoritma akan digunakan untuk menjalankan ketiga algoritma tersebut.
  
   /**
    * Thread pekerja yang digunakan untuk mengsimulasikan masalah
    * critical section.
    * Disadur dari  buku Silberschatz dkk,
    * Applied Operating Systems Concepts, 2000.
    */

   public class Pekerja extends Thread
   {
      public Pekerja (String n, int i, MutualExclusion s) {
         nama = n;
         id = i;
         shared = s;
      }
  
      public void run() {
         while (true) {
            shared.masukCriticalSection(id);
            System.out.println("Pekerja " + nama +
               " masuk critical section");
            MutualExclusion.criticalSection();
            System.out.println("Pekerja " + nama +
               " keluar critical section");
            shared.keluarCriticalSection(id);
        
            MutualExclusion.nonCriticalSection();
         }
      }
 
      private String nama;
      private int id;
      private MutualExclusion shared;
   }
  

   /**
    * Mengsimulasi critical dan non-critical sections dengan
    * sleeping untuk sejumlah waktu antara 0 dan 3 detik (random).
    * Disadur dari  buku Silberschatz dkk,
    * Applied Operating Systems Concepts, 2000.
    */
  
   public abstract class MutualExclusion
   {
      public static void criticalSection() {
         try {
            Thread.sleep( (int) (Math.random() * 3000) );
         }
         catch (InterruptedException e) { }
      }
                 
      public static void nonCriticalSection() {
         try {
            Thread.sleep( (int) (Math.random() * 3000) );
         }
         catch (InterruptedException e) { }
      }

      public abstract void masukCriticalSection(int t);
      public abstract void keluarCriticalSection(int t);

      public static final int TURN_0 = 0;
      public static final int TURN_1 = 1;
   }
  

   /**
    * Program untuk test  solusi, akan create sebuah object untuk
    * Algoritma_1, Algoritma_2, or Algoritma_3.
    * Disadur dari  buku Silberschatz dkk,
    * Applied Operating Systems Concepts, 2000.
    */

   public class TestAlgoritma
   {
      public static void main(String args[]) {

         //sesuai algoritma yang mau ditest
         MutualExclusion alg = new Algoritma_1();
     
         Pekerja pertama = new Pekerja("Runner 0", 0, alg);
         Pekerja kedua = new Pekerja("Runner 1", 1, alg);
     
         pertama.start();
         kedua.start();
      }
   }
  
Pada algoritma 1, variabel yang digunakan bersama (shared variabel) adalah sebuah variabel integer turn, yang diinisialisasi awal nilai 0 (atau 1 di proses yang kedua). Jika turn == i, maka proses Pidiizinkan untuk mengeksekusi critical sectionnya. Algoritma ini menjamin bahwa hanya ada satu proses pada suatu saat yang berada di critical section. Namun, algoritma ini tidak memenuhi syarat terjadinya kemajuan, karena algoritma ini membutuhkan pergiliran proses di dalam menjalankan critical section. Misalnya, jika turn == 0 dan P1 ingin masuk ke critical section, P1 tidak dapat masuk, meskipun P0 sedang berada di remainder section. Hal ini dikarenakan P0 belum masuk ke critical section. dan oleh karenanya P0 belum mengubah nilai turn (menjadi turn == 1.)
  
   /**
    * Program ini sesuai dengan solusi critical section dengan
    * menggunakan algoritma 1.
    * Disadur dari  buku Silberschatz dkk,
    * Applied Operating Systems Concepts, 2000.
    */

   public class Algoritma_1 extends MutualExclusion
   {
      public Algoritma_1() {
         turn = TURN_0;
      } 
 
      public void masukCriticalSection(int t) {
         while (turn != t)
            Thread.yield();
      }

      public void keluarCriticalSection(int t) {
         turn = 1 - t;
      }

      private volatile int turn;
   }
  
  
Kelemahan algoritma 1 adalah bahwa algoritma 1 tidak menyediakan informasi yang cukup mengenai keadaan state setiap proses, ia hanya mengingat proses mana yang diperbolehkan untuk memasuki critical section. Untuk memecahkan masalah ini, variabel turn diganti dengan sebuah array, yaitu:
boolean flag[2];
Setiap elemen dari array tersebut diinisialisasi awal ke false. Jika flag[i] bernilai true, maka ini mengindikasikan bahwa Pi siap untuk masuk ke critical section.
Setiap proses memantau suatu flag yang mengindikasikan ia ingin memasuki critical section. Dia memeriksa flag proses lain dan tidak akan memasuki critical section bila ada proses lain yang sedang masuk.
  
   /**
    * Program ini sesuai dengan solusi critical section dengan
    * menggunakan algoritma 2.
    * Disadur dari  buku Silberschatz dkk,
    * Applied Operating Systems Concepts, 2000.
    */

   public class Algoritma_2 extends MutualExclusion
   {
      public Algoritma_2() {
         flag[0] = false;
         flag[1] = false;
      }
 
      public void masukCriticalSection(int t) {
         int other;
  
         other = 1 - t;

         flag[t] = true;
     
         while (flag[other] == true)
            Thread.yield();
      }

      public void keluarCriticalSection(int t) {
         flag[t] = false;
      }

      private volatile boolean[] flag = new boolean[2];
   }
  
  
Di algoritma 2 ini, proses Pi pertama-tama mengubah nilai (set) flag[i] menjadi true, menandakan bahwa Pi mau masuk ke critical section. Kemudian Pi mengecek apakah proses Pj juga mau masuk kecritical section. Jika proses Pj mau masuk, maka proses Pi akan menunggu sampai proses Pj mengubah statenya bahwa ia tidak mau lagi masuk ke critical section (flag[j] == false). Pada saat itu, maka Piakan masuk ke critical section. Ketika keluar dari critical section, Pi akan mengset nilai flag[i] menjadi false, memperbolehkan proses lain (jika ada proses lain yang menunggu) untuk masuk ke critical section.
Solusi dengan algoritma 2 ini memenuhi syarat mutual exclusion, tetapi tidak memenuhi syarat terjadinya kemajuan. Untuk mengilustrasikan masalah ini, perhatikan urutan eksekusi berikut:
              
                  T0: P0 sets flag[0] true
                  T1: P1 sets flag[1] true
               
              
Sekarang P0 dan P1 akan loop selama-lamanya di dalam statement while masing-masing.
Perhatikan bahwa mengubah urutan instuksi untuk mengset flag[i] dan mengecek nilai flag[j] tidak akan memecahkan masalah ini. Kita malah akan berada di situasi di mana ada kemungkinan untuk kedua proses berada di critical section pada saat yang bersamaan, yang akan melanggar syarat mutual exclusion.
Dengan menggabungkan algoritma 1 dan algoritma 2, kita akan memperoleh solusi yang tepat untuk masalah critical section, di mana solusi itu akan memenuhi tiga syarat seperti yang telah disebutkan di atas. Setiap proses menggunakan dua variabel:

                  boolean flag[2];
                  int turn;
              
Awalnya flag[0] = flag[1] = false, dan nilai turn tergantung dari proses yang boleh masuk (0 atau 1).
Untuk masuk ke critical section, proses Pi pertama-tama mengset flag[i] menjadi true, dan kemudian mengset nilai turn menjadi j, sehingga memperbolehkan proses lain yang ingin masuk ke critical section untuk dapat masuk ke critical section. Jika kedua proses mencoba untuk masuk ke critical section pada saat yang bersamaan, turn akan diset ke nilai i dan j pada saat yang hampir bersamaan. Yang terakhir mengubah nilai turn akan mempersilakan proses yang lainnya untuk masuk ke critical section.
  
   /**
    * Program ini sesuai dengan solusi critical section dengan
    * menggunakan algoritma 3.
    * Disadur dari  buku Silberschatz dkk,
    * Applied Operating Systems Concepts, 2000.
    */

   public class Algoritma_3 extends MutualExclusion
   {
      public Algoritma_3() {
         flag[0] = false;
         flag[1] = false;
         turn = TURN_0;
      }
 
      public void masukCriticalSection(int t) {
         int other;

         other = 1 - t;
  
         flag[t] = true;
         turn = other;

         while ( (flag[other] == true) && (turn == other) )
            Thread.yield();
      }

      public void keluarCriticalSection(int t) {
         flag[t] = false;
      }

      private volatile int turn;
      private volatile boolean[] flag = new boolean[2];
   }
  
  
Diperkenalkan pertama kali oleh Leslie Lamport, merupakan algoritma yang didasarkan pada algoritma penjadwalan yang biasanya digunakan oleh tukang roti, di mana urutan pelayanan ditentukan dalam situasi yang sangat sibuk. Algoritma ini dapat digunakan untuk memecahkan masalah critical section untuk n buah proses, yang diilustrasikan dengan n buah pelanggan. Ketika memasuki toko, setiap pelanggan menerima sebuah nomor. Sayangnya, tukang roti tidak dapat menjamin bahwa dua proses (dua pelanggan) tidak akan menerima nomor yang sama. Dalam kasus di mana dua proses menerima nomor yang sama, maka proses dengan nomor ID terkecil yang akan dilayani dahulu. Jadi, jika Pi dan Pj menerima nomor yang sama dan i < j, maka Pi dilayani dahulu. Karena setiap nama proses adalah unik dan berurut, maka algoritma ini dapat digunakan untuk memecahkan masalah critical section untuk n buah proses.
Struktur data umum algoritma ini adalah
           
               boolean choosing[n];
               int number [n];
           
           
Awalnya, struktur data ini diinisialisasi masing-masing ke false dan 0, dan menggunakan notasi berikut:
- (a, b) < (c, d) jika a < c atau jika a= c dan b < d
- max(a0, ..., an-1) adalah sebuah bilangan k, sedemikian sehingga k >= ai untuk setiap i= 0, ..., n - 1
  
      do {
         choosing[i] = true;
         number[i] = max(number[0], number [1], ..., number [n+1])+1;
         choosing[i] = false;
         for (j=0; j < n; j++) {
            while (choosing[j]);
            while ((number[j]!=0) && ((number[j],j) < number[i],i)));
         }
            <foreignphrase>critical section</foreignphrase>
         number[i] = 0;
            <foreignphrase>remainder section</foreignphrase>
      } while (1);
  
  


Sumber : 




Life Cycle Software

Penjelasan Tentang Model Life Cycle Software Model Pada Life Cycle Software Model siklus pada perangkat lunak sebenarnya sangatlah bany...