Senin, 11 Juli 2011

Fungsi adalah modul program yang memberikan/mengembalikan (return) sebuah nilai yang bertipe sederhana (integer, real, boolean dan string).
Defenisi fungsi didalam program bersesuaian dengan defenisi fungsi didalam matematika. Didalam matematika, kita mengenal cara penulisan fungsi seperti pada contoh sebagai berikut :
f (x) = 2x² + 5x - 8
H (x, y) = 3x - y + xy
Pada kedua contoh diatas, f dan H adalah nama fungsi, sedangkan x dan y adalah parameter fungsi yang bersangkutan. Nilai yang diberikan oleh fungsi bergantung pada masukan parameter. Sebagai contoh :
 
x = 2, maka f(2) = 2. 2² + 5. 2 - 8 = 10
x = 1, y = 2, maka H (1, 2) = 3. 1 - 2 + 1 . 2 = 3
 
Nilai 10 dan 3 pada kedua contoh diatas adalah nilai yang diberikan oleh masing-masing fungsi f dan fungsi H.
Berbeda dengan prosedur, suatu fungsi menghasilkan satu nilai yang disertakan pada nama fungsi itu sendiri.
Karena suatu fungsi menghasilkan satu nilai, maka suatu fungsi akan memiliki tipe data dan untuk memanggil suatu fungsi dapat langsung digunakan pada suatu ekspresi.

Bentuk Deklarasi Fungsi :
Function Nama_Fungsi (daftar paramater formal) : tipe hasil;
Var
Variabel_Lokal : Tipe Data;
…………….
Begin
Blok Statement;
End;
Dimana :
Nama_Fungsi : Merupakan nama fungsi itu sendiri;
Parameter : Berisi daftar parameter yang dibutuhkan dalam fungsi tersebut;
Tipe_Hasil : Merupakan tipe data yang dihasilkan
oleh fungsi tersebut.

Fungsi diakses dengan cara memanggil namanya dari program pemanggil, diikuti dengan daftar parameter aktual (bila ada). Karena fungsi menghasilkan nilai, maka nilai tersebut dapat ditampung dalam sebuah peubah (variabel) yang bertipe sama dengan tipe fungsi.
Variabel := Nama_Fungsi (daftar parameter aktual)
atau, nilai yang diberikan oleh fungsi langsung dimanupulasi seperti pada contoh berikut :
1.Write (Nama_Fungsi (daftar parameter aktual));
2.If Nama_Fungsi (daftar parameter aktual) < 0 Then ……
3.Z := 2 * Nama_Fungsi (daftar parameter aktual) – X + Y;

Parameter aktual dapat berupa tetapan (constanta), nama tetapan atau nama peubah (variabel) asalkan sudah terdefinisi tipe dan harganya.
Sebagai contoh, untuk mendeklarasikan sebuah fungsi yang digunakan untuk menghitung nilai dari suatu bilangan.
 
FUNCTION RATA_RATA (Bilangan:Larik; N:Integer):Real;
VAR
Jumlah, I : Integer;
BEGIN
Jumlah := 0;
FOR I := 1 TO N DO
Jumlah := Jumlah + Bilangan [I];
RATA_RATA := Jumlah / N;
END;
Dari Program tersebut dapat ditinjau bahwa suatu fungsi akan menghasilkan suatu nilai yang dibawa oleh nama fungsi itu sendiri. Dalam SunProgram / Fungsi Rata-rata tersebut terdapat suatu statement yang digunakan memberi nama fungsi itu sendiri, yaitu : RATA_RATA := Jumlah / N;
Hal ini perlu diperhatikan jika akan membuat suatu fungsi. Jika dalam tubuh fungsi tidak terdapat statement yang memberi nilai untuk nama fungsinya, maka program akan memberikan nilai sembarang terhadap fungsi tersebut.

Dengan mendefinisikan suatu fungsi, maka dapat memenggil fungsi tersebut dengan cara, misalnya :
 
Writeln (Rata_rata(Cacah,10));
Rata := Rata_rata(Cacah,10));

Dalam prosedur atau fungsi, pemanggilan terhadap dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan berakhirnya.
Dalam pemakaian sehari-hari rekursif merupakan teknik pemrograman yang berguna untuk pekerjaan pemrograman dengan mengekspresikan kedalam suku-suku dari program lain dengan menambah langkah-langkah yang sejenis.
 Kapan suatu Prosedur atau Fungsi dikatakan Rekursif ?
Suatu prosedur atau fungsi dikatakan rekursif,
jika memiliki dua hal , yaitu :
1.Harus memiliki sebuah Anchor.
Dimana satu atau lebih nilai fungsi diberikan.
2. Harus memiki sebuah Inductive Step.
Dimana penambahan nilai dari suatu fungsi didefenisikan dari nilai fungsi yang sebelumnya.
Contoh permasalahan yang dapat diselesaikan secara rekursif yaitu menghitung nilai factorial atau mencari deret fibonacci (fibonacci squence) dari suatu bilangan bulat.
Proses Rekursif untuk menghitung nilai faktorial dari suatu bilangan bulat.
1.Jika n = 0, maka n! = 1;
2.Jika n > 0, maka n! = n * (n-1)!.
Defenisi Rekursif menghitung nilai faktorial diatas dapat diterapkan pada suatu fungsi rekursif sebagai berikut :
FUNCTION FAKTORIAL (N:INTEGER) : INTEGER;
BEGIN
IF N = 0 THEN
FAKTORIAL := 1
ELSE
FAKTORIAL := N * FAKTORIAL(N – 1);
END;
Didalam fungsi diatas, anchor-nya ditulis :
IF N = 0 THEN
FAKTORIAL := 1
Dan Inductive Step-nya ditulis :
ELSE
FAKTORIAL := N * FAKTORIAL(N – 1);
Untuk menelusuri proses Rekursif dari fungsi
Faktorial tersebut, maka didalam program utama
dituliskan :

BEGIN
WRITELN (FAKTORIAL(4));
END.
Proses Rekursif untuk menampilkan deret fibonacci yang mempunyai suku-suku bilangan bulat sebagai berikut :
1 1 2 3 5 8 13 21 …………
Nilai masing-masing suku didalam deret fibonacci merupakan hasil penjumlahan 2 nilai suku yang sebelumnya.
Defenisi Rekursif untuk menampilkan deret fibonacci yang mempunyai suku-suku bilangan bulat sebagai berikut :
1.Jika n < 2, maka FIBONACCI(n) = n;
2.Jika n >= 2, maka FIBONACCI(n) = FIBONACCI (n-2) + FIBONACCI (n-1);
menghitung nilai faktorial diatas dapat diterapkan pada suatu fungsi rekursif sebagai berikut :
Proses untuk menampilkan deret fibonacci diatas dapat iterapkan pada suatu fungsi rekursif sebagai berikut :
FUNCTION FIBONACCI (N:INTEGER):INTEGER;
BEGIN
IF N < 2 THEN
FIBONACCI := N
ELSE
FIBONACCI := FIBONACCCI(N-2) + FIBONACCCI (N-1);
END;

PERBEDAAN PROSEDUR DAN FUNGSI
Baik prosedur maupun fungsi adalah sama, yaitu sebagai suatu modul atau sub program yang terdiri dari sekumpulan perintah untuk mengerjakan suatu tugas tertentu. Misalnya mencetak ke printer, membuat tabel dan sebagainya.
Walau prinsipnya sama, namun antara prosedur dan fungsi memiliki beberapa perbedaan, antara lain :
1.Fungsi hanya memberikan satu hasil (nilai), sedangkan prosedur dapat memberikan lebih dari satu hasil (nilai);
2.Nama fungsi dapat sekaligus digunakan sebagai pemanggil dan pengubah pada suatu ungkapan, sedangkan nama prosedur hanya digunakan sebagai pemanggil saja;
3.Dalam fungsi tidak ada istilah parameter variabel semua parameter-nya adalah parameter nilai, sedangkan dalam prosedur dikenal istilah parameter variabel dan parameter nilai.

Array / Larik
Larik / Array adalah Tipe terstruktur yang terdiri dari sejumlah komponen-komponen yang mempunyai tipe yang sama.
Komponen-komponen ini disebut dengan tipe komponen (Component Type) atau Tipe basis (Base Type)
Suatu larik/ array mempunyai jumlah komponen yang banyaknya tetap.
Banyaknya komponen dalam suatu larik ditunjukkan oleh suatu index yang disebut dengan tipe index (Index Type)
Deklarasi Larik
Suatu larik yang akan digunakan harus dideklarasikan terlebih dahuli.
Larik dapat bertipe data sederhana byte, word, integer, real, boolean, char atau string dan tipe data skalar atau subrange.
Contoh Pendeklarasian Larik :
Var
X : array[1…100] of integer;
Keterangan :
X = nama larik
1…100 = Tipe Indeks
Integer = Tipe dari Larik
ARTINYA : Larik X telah dideklarasikan sebagai larik tipe Integer , dengan jumlah elemennya maksimum sebanyak 100 elemen. Nilai-nilai elemen larik ini harus berisi nilai integer.
Misalnya :
Elemen2 dari array X adalah :
X[1] :=25
X[2] := 75
X[3] := 8
X[4] := 23
Bila nilai elemen ke 3 dari larik X akan ditampilkan, maka dapat digunakan statemen :
Writeln(X[3]);
Contoh mendeklarasikan larik dengan tipe yang bermacam-macam :
Var Nilai : array[1..100] of byte;
Var urutan : array[1..200] of word;
Var Gaji : array[5..100] of real;
Var Lulus : array[1..25] of boolean;
Var NilaiHuruf : array[1..5] of char;
Kapan Larik Digunakan
Larik digunakan bila kita mempunyai sejumlah data yang bertipe sama dan kita perlu menyimpan sementara data tersebut, untuk selanjutnya data tersebut akan kita proses.
Selama pelaksanaan program, larik tetap menyimpan nilai. Hal ini bermanfaat bila kita ingin menggunakan nilai-nilai didlm larik tersebut untuk diproses lebih lanjut di bagian lain didalam algoritma
RECORD
Dengan tipe data record, dapat dikumpulkan beberapa item data yang masing-masing dapat mempunyai tipe data berbeda-beda. Masing-masing item data disebut dengan field.
Jadi record terdiri dari kumpulan field yang dapat berbeda tipe. Biasanya suatu record berisi beberapa field untuk sebuah subyek tertentu, misalnya record Langganan dapat terdiri field kode langganan, nama langganan, alamat langganan dan besarnya piutang.
DEKLARASI RECORD
Deklarasi tipe data record diawali dengan kata kunci Record dan diikuti oleh suatu daftar field dan diakhiri dengan End.  
Misalnya :
Deklarasi :
Langganan : Record
K o d e : Integer;
N a m a : String[35];
Alamat : String[45];
Piutang : Real;
End;
.
MENGGUNAKAN TIPE DATA RECORD
Tiap-tiap komponen field dari record dapat dipergunakan dengan cara menuliskan :
pengenal_record.pengenal_field[.pengenal_field]
Tipe data record yang telah dideklarasikan diatas, pengenal_record adalah Langganan dan pengenal_field adalah Kode, Nama, Alamat dan Piutang.

Contoh :
Program Contoh_Record;
Uses WinCrt;
Var
Lingkaran : Record
Jari_jari : Real;
Keliling : Real;
Luas : Real;
End;
Begin
Write (‘Masukan Jari-jari Lingkaran : ‘);
Readln (Lingkaran.Jari_jari);
Lingkaran.Keliling := 2 * PI * Lingkaran.Jari_jari;
Lingkaran.Luas := PI * SQR(Lingkaran.Jari_jari);
Writeln;
Writeln (‘Keliling Lingkaran : ‘, Lingkaran.Keliling:7:2);
Writeln (‘Luas Lingkaran : ‘, Lingkaran.Luas:7:2);
End.

STATEMENT WITH
Penggunaan field didalam record seperti contoh sebelumnya dapat menyebabkan statement menjadi penjang, seperti berikut :
Lingkaran.Keliling := 2 * PI * Lingkaran.Jari_jari;

Akan lebih mudah dan lebih pendek bila pengenal_record tidak selalu harus ditulis, sehingga statemen diatas dapat berbentuk :
Keliling := 2 * PI * Jari_jari;

Hal ini dapat dilakukan dengan menggunakan statemen With yang menyebutkan pengenal_record-nya, sehingga penggunaan field-field selanjutnya sudah tidak perlu menyebutkan pengenal_record-nya kembali.
Contoh :
Program pada contoh sebelumnya untuk menghitung Keliling dan Luas lingkaran bila dirubah menggunakan statemen WITH menjadi :

Contoh :
Program Contoh_Record;
Uses WinCrt;
Var
Lingkaran : Record
Jari_jari : Real;
Keliling : Real;
Luas : Real;
End;
Begin
With Lingkaran Do
Begin
Write (‘Masukan Jari-jari Lingkaran : ‘);
Readln (Jari_jari);
Keliling := 2 * PI * Jari_jari;
Luas := PI * SQR(Jari_jari);
Writeln;
Writeln (‘Keliling Lingkaran : ‘, Keliling:7:2);
Writeln (‘Luas Lingkaran : ‘, Luas:7:2);
End;
End.

Dengan statemen With, maka satu blok statemen berikutnya setelah statemen WITH ini dapat mempergunakan field tanpa harus menyebutkan lagi pengenal_record-nya.
Contoh lain dari Record dapat dilihat pada diktat kuliah. 
RECORD VARIANT (VARIASI RECORD)
Jenis record dapat dikembangkan sesuai dengan kebutuhan program. Misalnya masalah pemberian gaji karyawan pada suatu perusahaan, jika ada karyawan tetap dan karyawan tidak tetap maka akan timbul masalah pada record tersebut.
Type Gaji = Record
Nama : String [30];
NIP : String [10];
Gaji,Lama_Kerja,Gaji_Per_Jam : Real;
End;

Dengan tipe data record diatas, maka akan timbul kesulitan, karena :
Karyawan tetap biasanya tidak digaji perjam dan
tidak tergantung dari jam kerja, tetapi di gaji
sebulan sekali (perbulan);
Untuk mengatasi hal tersebut, maka digunakan
record variant, sehingga struktur setiap record
dapat diubah s esuai dengan permasalahan yang
dihadapi.
 

Bentuk umum dari Record Variant :
Type Identifier = Record
Field_1 : Tipe_1;
Field_2 : Tipe_2;
 
Field_n : Tipe_n;
Case Tag : Tipe_of_Tag Of
Label_1 : (Field_Label_1 : Tipe_1);
 
(Field_Label_n : Tipe_n);
Label_2 : (Field_Label_2 : Tipe_2);
 
(Field_Label_n : Tipe_n);
 
Label_n : (Field_Label_n : Tipe_n);
  (Field_Label_nn : Tipe_nn);
End;
Contoh penerapan dari permasalahan diatas adalah sebagai berikut :
 
Type Status = (T, P); Gaji = Record
Nama : String [30];
NIP : String [10];
Case Stat_Pegawai : Status Of Variant
T :(Gaji : Integer); P :(Gaji_Per_Jam,Jam_Kerja : Real);
End;
End;

TIPE DATA HIMPUNAN (SET) dan pointer
Tipe data himpunan atau set merupakan suatu kumpulan item-item data yang memiliki tipe data yang sama. Anggota himpunan dapat berupa integer, karakter atau tipe data subrange.
Data tipe himpunan dioperasikan bersama-sama sebagai satu kesatuan, berbeda dengan array yang dapat dioperasikan berdasarkan elemen-elemennya.
DEKLARASI TIPE DATA HIMPUNAN
Mendeklarasikan variabel himpunan bila variabel tersebut dapat mengandung nilai yang berupa kumpulan dari suatu data. Deklarasi tipe data himpunan adalah sebagai berikut :
Type identifier = SET OF tipe_data;
atau
Var identifier : SET OF tipe_data;

Dimana :
identifier : variabel yang akan dinyatakan
sebagai himpunan;
tipe_data : tipe data anggota himpunan;
SET OF : kata baku yang menunjukan
bertipe himpunan.

OPERASI HIMPUNAN
Pada tipe data himpunan, ada beberapa operator yang dapat digunakan untuk operasi-operasi himpunan, yaitu intersection atau product (*), union atau sum (+) dan set difference atau selisih (-).

1. OPERASI INTERSECTION (*)
Operasi interseksi terhadap dua himpunan akan menghasilkan himpunan ketiga yang anggota-angotanya merupakan gabungan elemen yang sama dari masing-masing himpunan.
Program Himpunan01;
Uses WinCrt;
Type huruf = (A,B,C,D,E,F,G,H);
him_hrf = SET OF huruf;
Var himA, himB, himC : him_hrf;
Begin
himA := [A,C,F,H];
himB := [E,F,G,H];
himC := himA * himB;
Write (himC);
End.
2. OPERASI UNION (+)
Operasi union atau operasi penggabungan antara dua himpunan yang hasilnya akan ditampung pada himpunan yang ketiga.
Program Himpunan02;
Uses WinCrt;
Type huruf = (A,B,C,D,E,F,G,H);
him_hrf = SET OF huruf;
Var himA, himB, himC : him_hrf;
Begin
himA := [A,C,F,H];
himB := [E,F,G,H];
himC := himA + himB;
Write (himC);
End.
3. OPERASI SET DIFFERENCE (-)
Operasi selisih adalah operasi dua himpunan yang menghasilkan himpunan ketiga yang berisi elemen himpunan A yang tidak terdapat pada elemen himpunan B.
Program Himpunan03;
Uses WinCrt;
Type huruf = (A,B,C,D,E,F,G,H);
him_hrf = SET OF huruf;
Var himA, himB, himC : him_hrf;
Begin
himA := [A,C,F,H];
himB := [E,F,G,H];
himC := himA - himB;
Write (himC);
End.
TIPE DATA POINTER
Pointer atau penunjuk merupakan suatu tipe data yang khas dimana pointer merupakan variabel yang mencatat alamat variabel lain atau menunjuk pada variabel lain. Variabel yang ditunjuk/dicatat oleh pointer dapat berupa berbagai tipe data yang lain, misalnya char, real, integer, record dan lain-lain.
DEKLARASI TIPE DATA POINTER
Deklarasi tipe data pointer adalah sebagai berikut :
identifier : ^tipe_data;
Contoh :
Type ptr_1 = ^integer;
Var X, Y : ptr_1; (Variabel Pointer)
A, B : ^integer; (Variabel Pointer)
C : integer; (Variabel Biasa )
OPERASI TIPE DATA POINTER
Operasi-operasi yang dapat dilakukan pada tipe data pointer adalah sebagai berikut :
1.Operasi Pemberian Alamat ke Var. Pointer
Variabel pointer adalah variabel yang mencatat alamat variabel lain. Salah satu cara untuk mengisinya adalah dengan menggunakan operator alamat (@) yang ditempatkan didepan suatu variabel.
Seperti juga variabel biasa, pointer dapat diisi dengan tipe data yang sejenis dengan menggunakan operator pemberi nilai atau assigment operator (:=).
Program Isi_Pointer;
Uses WinCrt;
Var Ptr_A,Ptr_B : ^Char;
H : Char;
Begin
H := ‘A’;
Ptr_A := @H;
Ptr_B := Ptr_A;
End.
Jika variabel pointer tidak menunjuk pada suatu alamat variabel lain, maka harus diberikan nilai NIL, yang merupakan kata kunci dalam bahasa Pascal.
Misalnya : Ptr_A := NIL;
Berarti variabel pointer Ptr_A tidak menunjuk ke suatu alamat.
2.Operasi Mengambil Data yang ditunjuk
oleh Pointer
Dengan operasi ini kita dapat memanipulasi atau mengolah data yang ditunjuk oleh pointer. Untuk mengolah data yang ditunjuk pointer maka harus memberi tanda ^ dibelakang variabelnya.

Program Isi_Pointer;
Uses WinCrt;
Var Ptr_A,Ptr_B : ^Char;
H : Char;
Begin
H := ‘A’;
Ptr_A := @H;
Ptr_B := Ptr_A;
Writeln (Ptr_A^);
Writeln (Ptr_B^);
End.


PROSEDUR PADA TIPE DATA POINTER
Beberapa prosedur yang sering digunakan sehubungan dengan pengaksesan variabel pointer adalah :
NEW (nama_variabel);
Prosedur ini digunakan untuk memesan suatu alamat nama_variabel pointer.
Contoh :
NEW (Ptr_A);

DISPOSE (nama_variabel);
Prosedur ini digunakan untuk membebaskan alamat nama_variabel sehingga alamat tersebut dapat digunakan untuk nama_variabel yang lain.
Contoh :
DISPOSE (Ptr_A);

GETMEM (nama_variabel, jumlah);
Prosedur ini digunakan untuk memesan memori dengan pointer nama_variabel sejumlah jumlah.
Contoh :
GETMEM (Ptr_A, I);
Dimana Ptr_A adalah variabel pointer dan I merupakan ekspresi integer yang memberikan jumlah byte integer yang dipesan.

FREEMEM (nama_variabel, jumlah);
Prosedur ini digunakan untuk membebaskan memori pointer sejumlah jumlah. Jumlah tersebut harus sama dengan jumlah yang dipesan dengan GETMEM .
Contoh :
FREEMEM (Ptr_A, I);
Dimana Ptr_A adalah variabel pointer dan I merupakan ekspresi integer yang memberikan jumlah byte integer yang dibebaskan.

KUALITAS DESAIN PROGRAM
Beberapa alat dapat digunakan sebagai alat bantu didalam mendesain program komputer, yaitu :
1.Bagan Terstruktur (Struktur Chart), merupakan alat yang digunakan untuk menggambarkan jenjang dan hubungan dari modul program.
2.Sandi Semu (Pseudo Code), merupakan alat untuk menggambarkan langkah-langkah intruksi suatu modul.
3. Tabel Keputusan (Decision Table), merupakan alat untuk membantu memecahkan logika program yang rumit yang terdiri dari banyak keputusan.
4. Bagan IPO (Input-Proces-Output Diagram), merupakan alat untuk menggambarkan hubungan antara input, proses dan output dari suatu modul program.
5. Bagan Alir (Flow Chart), merupakan diskripsi dari langkah-langkah pemecahan masalah.

DIAGRAM PAKET HIPO
Fungsi-fungsi dari sistem digambarkan oleh HIPO dalam tiga tingkatan. Untuk masing-masing tingkatan digambarkan dalam bentuk diagram tersendiri.
Dengan demikian HIPO menggunakan tiga macam diagram untuk masing-masing tingkatannya, yaitu :
1. VISUAL TABLE OF CONTENTS (VTOC)
Diagram ini menggambarkan hubungan dari fungsi-fungsi disistem secara berjenjang.
2. OVERVIEW DIAGRAM
Diagram ini menunjukkan secara garis besar hubungan dari input, proses dan output.
Bagian Input menunjukkan item-item data yang akan digunakan oleh bagian proses.
Bagian proses berisi sejumlah langkah-langkah yang menggambarkan kerja dari fungsi.
Bagian output berisi item-item data yang dihasilkan atau dimodifikasi oleh langkah-langkah proses.
3. DETAIL DIAGRAM
Diagram ini merupakan diagram tingkatan yang paling rendah di diagram HIPO. Diagram ini berisi dengan elemen-elemen dasar dari paket yang menggambarkan secara rinci kerja dari fungsi.
KUALITAS DESAIN PROGRAM
Desain program komputer secara modular harus berkualitas baik. Kualitas dari desain program diukur dengan Coupling dan Cohesion. 
Coupling merupakan suatu ukuran dari derajat indepedensi (ketergantungan) antara modul-modul didalam sistem. Coupling mempunyai beberapa macam tipe, yaitu :
1. Data Coupling
Dua buah modul dari sistem mempunyai data coupling jika komunikasi dari modul ini dilakukan lewat suatu data. Yang dimaksud dengan data disini adalah dapat berupa suati item data tunggal atau elemen dari suatu array.
Yang perlu dihindari dari data coupling adalah suatu data yang dikomunikasikan kesuatu modul tetapi tidak pernah digunakan dimodul penerimanya. Data ini disebut dengan Tramp Data. 
2. Stamp Coupling
Dua buah modul dari suatu item dikatakan stamp coupling jika ke dua modul ini komunikasikan lewat suatu group item data.
Yang disebut group item data disini adalah dapat berupa suatu record yang dapat terdiri dari beberapa field atau array yang terdiri dari beberapa elemen array.
 3. Control Coupling
Dua buah modul dari suatu sistem dikatakan control coupling jika modul ini berkomunikasi lewat suatu informasi yang berupa flag. Flag ini dimaksud untuk mengontrol logika intern dari modul lain. 
4. Common Coupling
Dua buah modul dari suatu sistem dikatakan common coupling jika keduanya menggunakan data yang tersimpan diarea memori yang sama.
Contoh : Pada Pascal merupakan modul yang menggunakan pengiriman parameter secara acuan (by reference).
5. Content Coupling
Content Coupling merupakan suatu modul yang menggunakan data yang ada dimodul lainnya tanpa berhubungan lewat suatu parameter.
Komunikasi antar modul harus sederhana dan mudah. Cara yang paling mudah dari komunikasi antar modul adalah lewat suatu parameter yang dikirimkan sebagai data input untuk modul penerima. Modul yang berhubungan langsung lewat pengiriman parameter dikatakan berhubungan secara normal (normally connected).
Modul yang bersifat content coupling juga dikatakan pathalogical coupling atau coupling sakit (sick coupling).
Cohesion adalah ukuran dari tipe hubungan antara elemen dalam suatu modul. Misalnya kaitan antara statement didalam modul.
Semakin kuat hubungan statement-statement dalam suatu modul, maka modul ini dapat dipandang sebagai suatu unit yang tunggal, sebagai akibatnya hubungan antara statement-statement ini jelas dan terstruktur.

Hubungan yang kuat dari statement-statement dalam suatu modul menunjukkan gejala kohesi (kaitan) yang kuat (high cohesive). Dengan demikian kohesi yang tinggi lebih diinginkan.

Modul yang bersifat kehesi tinggi merupakan modul yang melakukan fungsi tunggal. Modul seperti ini disebut juga dengan istilah functionally cohesive. Modul yang tidak melakukan fungsi yang tunggal, tetapi melakukan sejumlah fungsi disebut dengan fragmented modules. Modul yang berisi beberapa fungsi dimana satu fungsi dengan fungsi lainnya tidak mempunyai hubungan berarti satu dengan yang lainnya disebut dengan coincedental cohesion.

Dari urutan yang terbaik sampai dengan terjelek adalah modul yang bersifat :
 
1.Functional Cohesion (kohesi yang terbaik);
2.Sequential Cohesion;
3.Communicational Cohesion;
4.Temporal Cohesion;
5.Logical Cohesion;
6.Coincidental Cohesion (kohesi yang terburuk).

1.Functional Cohesion, adalah modul yang hanya mempunyai fungsi tunggal, misalnya modul yang hanya mencetak judul sebuah laporan saja atau modul yang hanya menghitung satu permasalahan saja.
2.Sequential Cohesion, adalah modul yang terdiri dari beberapa kegiatan dan output dari suatu kegiatan ini akan menjadi input untuk keguiatan lainnya secara berurutan
3.Communicational Cohesion, adalah modul yang terdiri dari beberapa fungsi dan fungsi-fungsi dalam modul ini beroperasi dengan menggunakan arus data yang sama sebagai inputnya.
4. Temporal Cohesion, adalah modul yang terdiri dari beberapa fungsi dan suatu fungsi atau elemen-elemen didalam modul hanya dieksekusi pada satu titik waktu tertentu saja. Fungsi atau elemen-elemen didalam modul ini biasanya berupa suatu rutin, misalnya mengisi nilai baru atau mengatur kembali nilai counter yang hanya dilakukan setelah nilai penghitung mencapai nilai tertentu saja.
5. Logical Cohesion, adalah modul yang terdiri dari beberapa fungsi yang mempunyai tugas yang sama tetapi untuk maksud yang berbeda, misalnya modul yang digunakan untuk mengedit data semua tipe transaksi. Modul ini terdiri dari beberapa fungsi yang sejenis yaitu semua digunakan mengedit data transaksi, tetapi untuk maksud tipe-tipe transaksi yang berbeda.
6. Coincidental Cohesion, adalah modul yang terdiri dari beberapa fungsi atau elemen- elemen yang tidak saling berhubungan satu dengan yang lain, misalnya didalam satu program yang terdiri dari 1000 statement dan karena dianggap terlalu panjang, maka dibagi menjadi 20 modul secara sembarang sama rata, maka akan didapatkan suatu modul yang berisi dengan 50 buah statement dimana satu dengan yang lainnya tidak mempunyai hubungan yang berarti.
.



 

Minggu, 23 Januari 2011

PEMUATAN INFORMASI KE MEMORI

Pengertian Pemuatan
Pemuatan adalah salah satu bagian sistem operasi yang mempengaruhi dalam menentukan proses mana yang diletakkan pada antrian.
Tanda pengenal untuk pencarian letak memori adalah alamat, lintasan / trek, sektor pada suatu disk.

Fungsi Manajemen Memori
 Mengelola informasi yang dipakai dan tidak dipakai
 Mengalokasikan memori ke proses yang memerlukan
 Mendealokasikan memori dari proses telah selesai
 Mengelola swapping atau paging antara memori utama dan disk

Memori Dukung / backing store
Contohnya : Floppy, Harddisk, CD, dll.
Untuk mendukung memori kerja, umumnya berbentuk disk sehingga berlaku juga asas pemuktakhiran. Setiap trek dan sektor dapat menyimpan sejumlah byte dari memori kerja. Memori kerja dicapai melalui alamat memori dan register data memori. Dan untuk mencapai informasi di memori dukung, isinya harus dipindahkan dulu ke memori kerja (memori dukung = memori semu = virtual memori).

1 pindahan = 1 blok, makin kecil ukuran memori kerja, makin sering terjadi pindahan.
Alamat Memori
- Alamat memori mutlak (alamat fisik)
Sel memori pada memori kerja adalah sumber daya berbentuk fisik, sehingga untuk mencapai sel memori ini digunakan kata pengenal. Maka disebutlah alamat fisik dan karena nomor alamat fisik ini bersifat mutlak (nomor setiap sel adalah tetap), maka disebut juga alamat mutlak.
- Alamat memori relatif (alamat logika)
Alamat memori yang digunakan oleh program / data berurutan / berjulat. Jika kita menggunakan alamat 1, maka kitapun menggunakan alamat 2,3, … dan untuk 1 informasi jika alamat awalnya 0 dan alamat lainnya relatif terhadap alamat awal 0 ini, maka dinamakan alamat relatif. Dan alamat tersebut adalah logika dari untaian alamat yang menyimpan informasi maka dikenal alamat memori logika.
Contoh : alamat awal relatif 0, alamat awal fisik 14726, maka selisihnya = relokasinya = 14726-0 = 14726.


Ada beberapa cara pemuatan informasi ke ruang memori, yaitu :
1. Pemuatan Mutlak
2. Pemuatan Relokasi
3. Pemuatan Sambung
4. Pemuatan Dinamik

Pemuatan Mutlak
Pemuatan informasi ke memori kerja, alamat yang tercantum di dalam tata olah sama dengan alamat yang ditempatinya di dalam memori kerja. Contohnya pada program, alamat awal 5235 dan subroutine = 5468 diletakkan pada alamat fisik yang sama.

Pemuatan Relokasi
Kondisi dimana pemuatan informasi ke memory kerja, alamat yang tercantum di dalam tata olah tidak mesti sama dengan alamat yang ditempatinya di dalam memori kerja. Contohnya alamat pangkal / fisik = 15200, alamat relatif program 152, maka alamat mutlaknya = 15200 + 152 = 15352.


Hubungan antara alamat memori mutlak dan alamat relatif
Hubungan alamat memori mutlak dan alamat relatif berbeda sebanyak alamat pangkal pada alamat mutlak dikurangi dengan alamat awal pada alamat relatif, selisih ini dinamakan relokasi umum, sedangkan alamat awal adalah A, alamat pangkal adalah P, maka relokasi P adalah sebesar :
R = P – A

Pemuatan Sambung (Linker)
Menyambungkan suatu informasi ke informasi lain di dalam memori kerja. Pemuatan sambung sering digunakan pada tata olah atau penggalan tata olah yang tersimpan di dalam pustaka (library).

Pemuatan Dinamik (Pemuatan Tumpang atau Overlay)
Jika ukuran tata olah itu melampaui ukuran ruang memori kerja, tata olah dapat dipenggal ke dalam sejumlah segmen. Segmen itulah yang kemudian dimuat ke dalam memori kerja. Pelaksanaan pekerjaan berlangsung segmen demi segmen.
Ukuran dari memori fisik terbatas. Supaya utilitas memori berjalan dengan baik, maka kita menggunakan pemuatan dinamis. Dengan cara ini, routine-routine hanya akan dipanggil jika dibutuhkan.
Ilustrasi sebagai berikut, semua routine disimpan di disk dalam format yang dapat dialokasikan ulang (relocatable load format). Program utama diletakkan di memori dan dieksekusi. Ketika sebuah routine memanggil routine yang lain, hal pertama yang dilakukan adalah mengecek apakah ada routine lain yang sudah di-load. Jika tidak, relocatable linking loader dipanggil untuk menempatkan routine yang dibutuhkan ke memori dan memperbaharui tabel alamat program. Lalu, kontrol diberikan pada routine baru yang dipanggil.
Keuntungan dari pemuatan dinamis adalah routine yang tidak digunakan tidak pernah dipanggil. Metode ini berguna pada kode yang berjumlah banyak, ketika muncul kasus seperti routine yang salah. Walaupun ukuran kode besar , porsi yang digunakan bisa jauh lebih kecil.

Kamis, 04 November 2010

ARTIKEL

DEADLOCK

PENGERTIAN DEADLOCK
Pada pembahasan di atas telah dikenal suatu istilah yang populer pada bagian semaphores, yaitu deadlock. Secara sederhana deadlock dapat terjadi dan menjadi hal yang merugikan, jika pada suatu saat ada suatu proses yang memakai sumber daya dan ada proses lain yang menunggunya. Bagaimanakah deadlock itu yang sebenarnya? Bagaimanakah cara penanggulangannya?
Deadlock ialah suatu kondisi permanen dimana proses tidak berjalan lagi ataupun tidak ada komunikasi lagi antar proses.

Deadlock adalah keadaan dimana dua program memegang kontrol terhadap sumber daya yang dibutuhkan oleh program yang lain. Tidak ada yang dapat melanjutkan proses masing-masing sampai program yang lain memberikan sumber dayanya, tetapi tidak ada yang mengalah.
Contoh Deadlock Sederhana



Pada gambar diatas, tidak ada yang dapat maju karena keduanya memperebutkan jalan yang sama ( yang dilingkari ), demikian juga deadlock saat semua proses memperebutkan sumber yang sama.

KEMUNGKINAN TERJADI DEADLOCK

Deadlock disebabkan karena proses yang satu menunggu sumber daya yang sedang dipegang oleh proses lain yang sedang menunggu sumber daya yang dipegang oleh proses tersebut. Atau dengan kata lain setiap proses dalam set menunggu untuk sumber yang hanya bisa dikerjakan oleh proses lain dalam set yang sedang menunggu.

Deadlock yang mungkin dapat terjadi pada suatu proses disebabkan proses itu menunggu suatu kejadian tertentu yang tidak akan pernah terjadi. Dua atau lebih proses dikatakan berada dalam kondisi deadlock, bila setiap proses yang ada menunggu suatu kejadian yang hanya dapat dilakukan oleh proses lain dalam himpunan tersebut.
Terdapat kaitan antara overhead dari mekanisme koreksi dan manfaat dari koreksi deadlock itu sendiri. Pada beberapa kasus, overhead atau ongkos yang harus dibayar untuk membuat sistem bebas deadlock menjadi hal yang terlalu mahal dibandingkan jika mengabaikannya. Sementara pada kasus lain, seperti pada real-time process control, mengizinkan deadlock akan membuat sistem menjadi kacau dan membuat sistem tersebut tidak berguna.
Contoh berikut ini terjadi pada sebuah persimpangan jalan. Beberapa hal yang dapat membuat deadlock pada suatu persimpangan, yaitu:
• Terdapat satu jalur pada jalan.
• Mobil digambarkan sebagai proses yang sedang menuju sumber daya.
• Untuk mengatasinya beberapa mobil harus preempt (mundur).
Sangat memungkinkan untuk terjadinya starvation (kondisi proses tak akan mendapatkan sumber daya).

KARAKTERISTIK DEADLOCK

Karakteristik-karakteristik ini harus dipenuhi keempatnya untuk terjadi deadlock. Namun, perlu diperhatikan bahwa hubungan kausatif antara empat karakteristik ini dengan terjadinya deadlock adalah implikasi. Deadlock mungkin terjadi apabila keempat karakteristik terpenuhi.

Empat kondisi tersebut adalah:
1.Mutual Exclusion . Kondisi yang pertama adalah mutual exclusion yaitu proses memiliki hak milik pribadi terhadap sumber daya yang sedang digunakannya. Jadi, hanya ada satu proses yang menggunakan suatu sumber daya. Proses lain yang juga ingin menggunakannya harus menunggu hingga sumber daya tersebut dilepaskan oleh proses yang telah selesai menggunakannya. Suatu proses hanya dapat menggunakan secara langsung sumber daya yang tersedia secara bebas.

2.Hold and Wait . Kondisi yang kedua adalah hold and wait yaitu beberapa proses saling menunggu sambil menahan sumber daya yang dimilikinya. Suatu proses yang memiliki minimal satu buah sumber daya melakukan request lagi terhadap sumber daya. Akan tetapi, sumber daya yang dimintanya sedang dimiliki oleh proses yang lain. Pada saat yang sama, kemungkinan adanya proses lain yang juga mengalami hal serupa dengan proses pertama cukup besar terjadi. Akibatnya, proses-proses tersebut hanya bisa saling menunggu sampai sumber daya yang dimintanya dilepaskan. Sambil menunggu, sumber daya yang telah dimilikinya pun tidak akan dilepas. Semua proses itu pada akhirnya saling menunggu dan menahan sumber daya miliknya.

3.No Preemption . Kondisi yang selanjutnya adalah no preemption yaitu sebuah sumber daya hanya dapat dilepaskan oleh proses yang memilikinya secara sukarela setelah ia selesai menggunakannya. Proses yang menginginkan sumber daya tersebut harus menunggu sampai sumber daya tersedia, tanpa bisa merebutnya dari proses yang memilikinya.
4.Circular Wait . Kondisi yang terakhir adalah circular wait yaitu kondisi membentuk siklus yang berisi proses-proses yang saling membutuhkan. Proses pertama membutuhkan sumber daya yang dimiliki proses kedua, proses kedua membutuhkan sumber daya milik proses ketiga, dan seterusnya sampai proses ke n-1 yang membutuhkan sumber daya milik proses ke n. Terakhir, proses ke n membutuhkan sumber daya milik proses yang pertama. Yang terjadi adalah proses-proses tersebut akan selamanya menunggu.

METODE PENGENDALIAN DEADLOC
Tiga metode dalam mengatasi Deadlock:

a.Metode pencegahan terjadinya Deadlock (Deadlock Preventation)
Metode ini banyak dipakai, dan metode ini berhubungan dengan pengkondisian sistem agar menghilangkan kemungkinan terjadinya deadlock, pencegahan adalah sulusi yang terbaik dipandang dari sudut tercegahnya deadlock. Dan metode ini sering menghasilkanutilisasi sumber daya yangburuk.


b.Metode penghindaran terjadinya Deadlock (Deadlock Avoidence)
Tujuan dari metoda ini adalah untuk menghindari terjadinya kondisi-kondisi yang me-
mungkinkan terjadinya deadlock, dan memperoleh utilisasi sumber daya yg baik.
Penghindaran bukan berarti menghilangkan semua kemungkinan terjadinya deadlock,
Secara teoritis deadlock dimungkinkan.
Sistem operasi memeriksa semua permintaan sumber daya secara hati-hati, jika sistem
operasi mengetahui bahwa alokasi sumber daya menimbulkan resiko deadlock, maka
sistem akan menolak pengaksesan dan dengan demikian menghindari terjadinya deadlock

c. Metode deteksi dan pemulihan Deadlock (Deadlock detection and recovery)
Metode deteksi ini digunakan pada sistem yang mengizinkan terjadinya deadlock, Tujuan
dari metode ini adalah untuk memeriksa apakah telah terjadi deadlock dan menentukan
proses serta sumber daya yang terlibat dalam deadlock secara presisi setelah ditemukan
sistem dipulihkan dari deadlock dengan metode pemulihan. (metode pemulihan dari dead
lock adalah untuk menghilangkan deadlock sistem sehingga dapat beroperasi kembali)
Proses yang terlibat dalam deadlock mungkin akan dapat menyelesaikan eksekusi dan mem
bebaskan sumber daya dari sumber dayanya.


PENANGANANA DEADLOCK
4 cara untuk menangani keadaan deadlock, yaitu:

1.Pengabaian. Maksud dari pengabaian di sini adalah sistem mengabaikan terjadinya deadlock dan pura-pura tidak tahu kalau deadlock terjadi. Dalam penanganan dengan cara ini dikenal istilah ostrich algorithm. Pelaksanaan algoritma ini adalah sistem tidak mendeteksi adanya deadlock dan secara otomatis mematikan proses atau program yang mengalami deadlock. Kebanyakan sistem operasi yang ada mengadaptasi cara ini untuk menangani keadaan deadlock. Cara penanganan dengan mengabaikan deadlock banyak dipilih karena kasus deadlock tersebut jarang terjadi dan relatif rumit dan kompleks untuk diselesaikan. Sehingga biasanya hanya diabaikan oleh sistem untuk kemudian diselesaikan masalahnya oleh user dengan cara melakukan terminasi dengan Ctrl+Alt+Del atau melakukan restart terhadap computer.

2.Pencegahan. Penanganan ini dengan cara mencegah terjadinya salah satu karakteristik deadlock. Penanganan ini dilaksanakan pada saat deadlock belum terjadi pada sistem. Intinya memastikan agar sistem tidak akan pernah berada pada kondisi deadlock. Akan dibahas secara lebih mendalam pada bagian selanjutnya.

3.Penghindaran. Menghindari keadaan deadlock. Bagian yang perlu diperhatikan oleh pembaca adalah bahwa antara pencegahan dan penghindaran adalah dua hal yang berbeda. Pencegahan lebih kepada mencegah salah satu dari empat karakteristik deadlock terjadi, sehingga deadlock pun tidak terjadi. Sedangkan penghindaran adalah memprediksi apakah tindakan yang diambil sistem, dalam kaitannya dengan permintaan proses akan sumber daya, dapat mengakibatkan terjadi deadlock. Akan dibahas secara lebih mendalam pada bagian selanjutnya.

4.Pendeteksian dan Pemulihan. Pada sistem yang sedang berada pada kondisi deadlock, tindakan yang harus diambil adalah tindakan yang bersifat represif. Tindakan tersebut adalah dengan mendeteksi adanya deadlock, kemudian memulihkan kembali sistem. Proses pendeteksian akan menghasilkan informasi apakah sistem sedang deadlock atau tidak serta proses mana yang mengalami deadlock. Akan dibahas secara lebih mendalam pada bagian selanjutnya.

PENCEGAHAN DEADLOCK

Pencegahan deadlock dapat dilakukan dengan cara mencegah salah satu dari empat karakteristik terjadinya deadlock. Berikut ini akan dibahas satu per satu cara pencegahan terhadap empat karakteristik tersebut.
1.Mutual Exclusion . Kondisi mutual exclusion pada sumber daya adalah sesuatu yang wajar terjadi, yaitu pada sumber daya yang tidak dapat dibagi (non-sharable). Sedangkan pada sumber daya yang bisa dibagi tidak ada istilah mutual exclusive. Jadi, pencegahan kondisi yang pertama ini sulit karena memang sifat dasar dari sumber daya yang tidak dapat dibagi.


2.Hold and Wait . Untuk kondisi yang kedua, sistem perlu memastikan bahwa setiap kali proses meminta sumber daya, ia tidak sedang memiliki sumber daya lain. Atau bisa dengan proses meminta dan mendapatkan sumber daya yang dimilikinya sebelum melakukan eksekusi, sehingga tidak perlu menunggu.

3.No Preemption . Pencegahan kondisi ini dengan cara membolehkan terjadinya preemption. Maksudnya bila ada proses yang sedang memiliki sumber daya dan ingin mendapatkan sumber daya tambahan, namun tidak bisa langsung dialokasikan, maka akan preempted. Sumber daya yang dimiliki proses tadi akan diberikan pada proses lain yang membutuhkan dan sedang menunggu. Proses akan mengulang kembali eksekusinya setelah mendapatkan semua sumber daya yang dibutuhkannya, termasuk sumber daya yang dimintanya terakhir.

4.Circular Wait . Kondisi 'lingkaran setan' ini dapat 'diputus' dengan jalan menentukan total kebutuhan terhadap semua tipe sumber daya yang ada. Selain itu, digunakan pula mekanisme enumerasi terhadap tipe-tipe sumber daya yang ada. Setiap proses yang akan meminta sumber daya harus meminta sumber daya dengan urutan yang menaik. Misalkan sumber daya printer memiliki nomor 1 sedangkan CD-ROM memiliki nomor 3. Proses boleh melakukan permintaan terhadap printer dan kemudian CD-ROM, namun tidak boleh sebaliknya.

PENGHINDARAN DEADLOCK

Penghindaran terhadap deadlock adalah cara penanganan yang selanjutnya. Inti dari penghindaran adalah jangan sembarangan membolehkan proses untuk memulai atau meminta lagi. Maksudnya jangan pernah memulai suatu proses apabila nantinya akan menuju ke keadaan deadlock. Kedua, jangan memberikan kesempatan pada proses untuk meminta sumber daya tambahan jika penambahan tersebut akan membawa sistem pada keadaan deadlock. Tidak mungkin akan terjadi deadlock apabila sebelum terjadi sudah kita hindari.
Langkah lain untuk menghindari adalah dengan cara tiap proses memberitahu jumlah kebutuhan maksimum untuk setiap tipe sumber daya yang ada. Selanjutnya terdapat deadlock-avoidance algorithm yang secara rutin memeriksa state dari sistem untuk memastikan tidak adanya kondisi circular wait serta sistem berada pada kondisi safe state. Safe state adalah suatu kondisi dimana semua proses mendapatkan sumber daya yang dimintanya dengan sumber daya yang tersedia. Apabila tidak bisa langsung, ia harus menunggu selama waktu tertentu, kemudian mendapatkan sumber daya yang diinginkan, melakukan eksekusi, dan terakhir melepas kembali sumber daya tersebut. Terdapat dua jenis algoritma penghindaran yaitu resource-allocation graph untuk single instances resources serta banker's algorithm untuk multiple instances resources.
Dalam banker's algorithm, terdapat beberapa struktur data yang digunakan, yaitu:
Available . Jumlah sumber daya yang tersedia.
Max . Jumlah sumber daya maksimum yang diminta oleh tiap proses.
Allocation . Jumlah sumber daya yang sedang dimiliki oleh tiap proses.
Need . Sisa sumber daya yang masih dibutuhkan oleh proses, didapat dari max- allocation.
Kemudian terdapat safety algorithm untuk menentukan apakah sistem berada pada safe state atau tidak.


PENDETEKSI DEADLOCK

Pada dasarnya kejadian deadlock sangatlah jarang terjadi. Apabila kondisi tersebut terjadi, masing-masing sistem operasi mempunyai mekanisme penanganan yang berbeda. Ada sistem operasi yang ketika terdapat kondisi deadlock dapat langsung mendeteksinya. Namun, ada pula sistem operasi yang bahkan tidak menyadari kalau dirinya sedang mengalami deadlock. Untuk sistem operasi yang dapat mendeteksi deadlock, digunakan algoritma pendeteksi. Secara lebih mendalam, pendeteksian kondisi deadlock adalah cara penanganan deadlock yang dilaksanakan apabila sistem telah berada pada kondisi deadlock. Sistem akan mendeteksi proses mana saja yang terlibat dalam kondisi deadlock. Setelah diketahui proses mana saja yang mengalami kondisi deadlock, maka diadakan mekanisme untuk memulihkan sistem dan menjadikan sistem berjalan kembali dengan normal.
Mekanisme pendeteksian adalah dengan menggunakan detection algorithm yang akan memberitahu sistem mengenai proses mana saja yang terkena deadlock. Setelah diketahui proses mana saja yang terlibat dalam deadlock, selanjutnya adalah dengan menjalankan mekanisme pemulihan sistem yang akan dibahas pada bagian selanjutnya. Berikut ini adalah algoritma pendeteksian deadlock.

PEMULIHAN DEADLOCK

Pemulihan kondisi sistem terkait dengan pendeteksian terhadap deadlock. Apabila menurut algoritma pendeteksian deadlock sistem berada pada keadaan deadlock, maka harus segera dilakukan mekanisme pemulihan sistem. Berbahaya apabila sistem tidak segera dipulihkan dari deadlock, karena sistem dapat mengalami penurunan performance dan akhirnya terhenti.

Cara-cara yang ditempuh untuk memulihkan sistem dari deadlock adalah sebagai berikut:
1.Terminasi proses. Pemulihan sistem dapat dilakukan dengan cara melalukan terminasi terhadap semua proses yang terlibat dalam deadlock. Dapat pula dilakukan terminasi terhadap proses yang terlibat dalam deadlock secara satu per satu sampai 'lingkaran setan' atau circular wait hilang. Seperti diketahui bahwa circular wait adalah salah satu karakteristik terjadinya deadlock dan merupakan kesatuan dengan tiga karakteristik yang lain. Untuk itu, dengan menghilangkan kondisi circular wait dapat memulihkan sistem dari deadlock.Dalam melakukan terminasi terhadap proses yang deadlock, terdapat beberapa faktor yang menentukan proses mana yang akan diterminasi. Faktor pertama adalah prioritas dari proses-proses yang terlibat deadlock. Faktor kedua adalah berapa lama waktu yang dibutuhkan untuk eksekusi dan waktu proses menunggu sumber daya. Faktor ketiga adalah berapa banyak sumber daya yang telah dihabiskan dan yang masih dibutuhkan. Terakhir, faktor utilitas dari proses pun menjadi pertimbangan sistem untuk melakukan terminasi pada suatu proses.

2.Rollback and Restart . Dalam memulihkan keadaan sistem yang deadlock, dapat dilakukan dengan cara sistem melakukan preempt terhadap sebuah proses dan kembali ke state yang aman. Pada keadaan safe state tersebut, proses masih berjalan dengan normal, sehingga sistem dapat memulai proses dari posisi aman tersebut. Untuk menentukan pada saat apa proses akan rollback, tentunya ada faktor yang menentukan. Diusahakan untuk meminimalisasi kerugian yang timbul akibat memilih suatu proses menjadi korban. Harus pula dihindari keadaan dimana proses yang sama selalu menjadi korban, sehingga proses tersebut tidak akan pernah sukses menjalankan eksekusi.

Banker's Algorithm for Deadlock Avoidance
When a request is made, check to see if after the request is satisfied, there is a (atleast one!) sequence of moves that can satisfy all the requests. ie. the new state is safe. If so, satisfy the request, else make the request wait.
How do you find if a state is safe


n process and m resources
Max[n * m]
Allocated[n * m]
Still_Needs[n * m]
Available[m]
Temp[m]
Done[n]

while () {
Temp[j]=Available[j] for all j
Find an i such that
a) Done[i] = False
b) Still_Needs[i,j] <= Temp[j]
if so {
Temp[j] += Allocated[i,j] for all j
Done[i] = TRUE}
}
else if Done[i] = TRUE for all i then state is safe
else state is unsafe
}

Tugas Sistem Operasi

1. Gambar struktur direktori pohon di Linux :



2. Direktori standar pada Linux :
• /var : Tempat penyimpanan log (catatan hasil output program)
• /tmp : Berisi file sementara
• /home : Berisi direktori untuk file dokumen/data user/pemakai
• /etc : Berisi file administratif (konfigurasi dll) dan file executable atau script yang berguna untuk administrasi system
• /bin : Berisi program standar Linux (binary)

3. Aturan penamaan file dan direktori pada Linux:

• Nama file terdiri dari maksimal 255 karakter berupa alfanumerik dan beberapa karakter spesial yaitu garis bawah ( _ ), dash ( – ), titik( . ), koma ( , ) dan lainnya, kecuali spasi dan karakter & , ; , | , ? , ` , ” , ’ , [ , ] , ( , ) , $ , , { , } , ^ , # , \ , /
• Linux membedakan huruf kecil dengan huruf besar (case sensitive).

4. Pengertian istilah :

• Path absolut : Sebuah Path yang di awali dari direktori root ( / ), dan nama direktori yang akan dimasuki berada di dalamnya, misalnya perintah ls yang sebenarnya berada pada direktori /bin/ls. Jadi untuk menjalankan perintah ls dengan menggunakan absolute path yakni dengan cara:
$ /bin/ls
Kita juga dapat menggunakan ls untuk menampilkan file file pada sebuah direktori dengan path absolut :
$ ls /usr/share/doc/
• Path relatif : Sebuah path yang dapat dimasuki tanpa harus memulai dari direktori root ( / ) atau dengan kata lain jika kita menggunakan relative path, lokasi path tersebut tergantung dari direktori dimana kita berada saat itu.
Misalnya :
$ cd /
$ cd usr
$ cd share
Sama saja dengan perintah dengan memakai path absolut :
$ cd /usr/share

5. Perintah cd : Perintah untuk berpindah/berganti ke suatu direktori (cd = change directory).
• Syntax : cd nama_direktori
• Contoh :
$ cd tugas → Pindah ke direktori tugas
$ cd / → Pindah ke direktori / (root)
$ cd ~ → Pindah ke direktori /home/nama_user
$ cd /usr/bin → Pindah ke direktori /usr/li

6. Perintah ls : Perintah untuk menampilkan isi dari suatu direktori
• Syntax : ls [options] nama_file_atau_direktori
• Contoh :
$ ls → Menampilkan isi dari direktori kerja (working directory)
$ ls materi → Menampilkan isi dari direktori materi
$ ls /usr/bin → Menampilkan isi dari direktori /usr/bin
$ ls -l kelas → Menampilkan isi dari direktori kelas dalam format long (lengkap)

7. Perintah cp : Perintah untuk menyalin (copy) file atau folder
• Syntax : cp [options] direktori_sumber direktori_tujuan
• Contoh :
$ cp data/mhs.doc data_2/ → Men-copy file mhs.doc yang ada di folder data ke folder data_2
$ cp data/tes.xls data_2/tes_2 → Men-copy file tes.xls yang ada di folder data ke folder data_2, dan diganti namanya dengan tes_2

8.Perintah mv : Perintah untuk memindahkan (move) atau mengganti nama (rename) file atau direktori
• Syntax : mv [options] file_atau_direktori_sumber file_atau_direktori_tujuan
• Contoh :
$ mv data/urut.sh data_2/ → Memindahkan file urut.sh yang ada di folder data ke folder data_2
$ mv data/lab.ppt data_2/labor.ppt → Memindahkan file lab.ppt yang ada di folder data ke folder data_2, dan diganti namanya dengan labor.ppt
$ mv kelompok.doc kumpul.doc → Mengubah nama file kelompok.doc menjadi kumpul.doc

9. Perintah rm : Perintah untuk menghapus (remove) file atau direktori
• Syntax : rm [options] nama_file_atau_direktori
• Contoh :
$ rm index.htm → Menghapus file index.htm
$ rm -r coba → Menghapus direktori coba

10. Perintah touch : Perintah untuk membuat file baru.
• Syntax : touch nama_file
• Contoh :
$ touch catatan.txt → Membuat file baru dengan nama catatan.txt

11. Perintah mkdir : Perintah untuk membuat direktori baru
• Syntax : mkdir nama_direktori
• Contoh :
$ mkdir dokumen → Membuat sebuah direktori baru dengan nama dokumen


12. Perintah rmdir : Perintah untuk membuang suatu direktori, jika direktori tersebut kosong.
• Syntax : rmdir nama_direktori_kosong
• Contoh :
$ rmdir langganan → Menghapus direktori kosong langganan.
13. Perintah file : Perintah untuk melihat tipe/jenis suatu file
• Syntax : file nama_file
• Contoh :
$ file gbrkerja.jpg → Melihat tipe file gbrkerja.jpg


14. Perintah cat : Perintah untuk menampilkan isi dari suatu file (tanpa meng-editnya)
• Syntax : cat nama_file
• Contoh :
$ cat list.txt → Menampilkan isi dari file list.txt

15. Perintah less : Perintah untuk menampilkan isi dari suatu file tanpa mengeditnya, dan ditampilkan dalam bentuk full screen.
• Syntax : less nama_file
• Contoh :
$ less daftar.txt → Menampilkan isi dari file daftar.txt

PRAKTIKUM
1. Perintah di terminal Linux :
$ cd → Change directory, berpindah ke direktori /home/nama_user
$ pwd → Print working directory, menampilkan informasi direktori aktif saat ini
$ ls -al → Menampilkan isi dari direktori secara lengkap (long) termasuk file yang tersembunyi (hidden).
$ cd . → Direktori . adalah direktori tempat kita berada / tidak berefek apa-apa
$ pwd → Menampilkan informasi direktori aktif saat ini
$ cd .. → Berpindah ke direktori parent / 1 tingkat di atas direktori aktif → Pindah ke /home
$ pwd → Menampilkan informasi direktori aktif saat ini
$ ls -al → Menampilkan isi dari direktori secara lengkap (long) termasuk file yang tersembunyi (hidden).
$ cd .. → Berpindah ke direktori parent / 1 tingkat di atas direktori aktif → Pindah ke /
$ pwd → Menampilkan informasi direktori aktif saat ini
$ ls -al → Menampilkan isi dari direktori secara lengkap (long) termasuk file yang tersembunyi (hidden).
$ cd /etc → Pindah ke direktori /etc
$ ls -al | more → Menampilkan isi dari direktori secara lengkap (long) termasuk file yang tersembunyi (hidden), ditampilkan halaman (page) per halaman.
$ cat passwd → Menampilkan isi dari file passwd
$ cd – → Pindah ke direktori /home
$ pwd → Menampilkan informasi direktori aktif saat ini
2. Perintah di terminal Linux :
$ ls → Menampilkan isi dari direktori
$ ls -a → Menampilkan isi dari direktori, termasuk yang hidden
$ ls -al → Menampilkan isi dari direktori, termasuk yang hidden dalam format long
• Perintah kedua menampilkan jumlah file yang lebih banyak karena selain file biasa, juga ditambah dengan ditampilkannya file-file tersembunyi/hidden.
• Ukuran file terbesar : .xsession-errors.old
• Ukuran direktori terbesar : tidak ada, semua direktori besarnya 4096 byte
3. Perintah di terminal Linux :
$ touch {report,graph}_{jan,feb,mar}
File yang terbentuk :
• graph_feb
• graph_jan
• graph_mar
• report_feb
• report_jan
• report_mar

4. Perintah di terminal Linux :
$ mkdir SO → Membuat direktori SO
$ mkdir SO/graphs → Membuat direktori graphs di dalam direktori SO
$ cd SO → Masuk ke direktori SO
$ mkdir report → Membuat direktori report di dalam direktori SO
$ cd report → Masuk ke direktori report
$ mkdir ../Backups → Membuat direktori Backups di dalam direktori SO
$ ls → Menampilkan isi direktori report

5. Memindahkan semua file graph ke direktori SO/graph
$ mv graph_* SO/graphs/

6. Memindahkan 2 file report ke direktori SO/report
$ mv report_feb report_mar SO/report/

7. Menghapus 1 file report
$ rm report_jan