Kamis, 02 Desember 2010

PENGATURAN DAN PROSES

PENGATURAN PROSES

1.1 Proses adalah sebuah program yang sedang dijalankan (eksekusi).
Suatu proses memerlukan sumber daya pada saat ekesekusi:
CPU time, memori, berkas dan peranti I/O. Sistem operasi bertanggung jawab terhadap aktifitas yang berhubungan dengan manajemen proses:
• Pembuatan dan penghapusan proses
• Penundaan dan pelanjutan
• Penyedia mekanisme untuk :
1. Sinkronasi atas proses
2. Komunikasi antar proses
3. Penanganan Dead Lock
4. Concurrency


1.2 Penjadwalan bertugas memutuskan :
a. Proses yang harus berjalan
b. Kapan dan selama berapa lama proses itu berjalan

1.3 Kriteria untuk mengukur dan optimasi kinerje penjadwalan :
a. Adil (fairness)
Adalah proses-proses yang diperlakukan sama, yaitu mendapat jatah waktu pemroses yang sama dan tak ada proses yang tak kebagian layanan pemroses sehingga mengalami kekurangan waktu.
b. Efisiensi (eficiency)
Efisiensi atau utilisasi pemroses dihitung dengan perbandingan (rasio) waktu sibuk pemroses.
c. Waktu tanggap (response time)
Waktu tanggap berbeda untuk :
c.1 Sistem interaktif
Didefinisikan sebagai waktu yang dihabiskan dari saat karakter terakhir dari perintah dimasukkan atau transaksi sampai hasil pertama muncul di layar. Waktu tanggap ini disebut terminal response time.
c.2 Sistem waktu nyata
Didefinisikan sebagai waktu dari saat kejadian (internal atau eksternal) sampai instruksi pertama rutin layanan yang dimaksud dieksekusi, disebut event response time.
d. Turn around time
Adalah waktu yang dihabiskan dari saat program atau job mulai masuk ke system sampai proses diselesaikan sistem. Waktu yang dimaksud adalah waktu yang dihabiskan di dalam sistem, diekspresikan sebagai penjumlah waktu eksekusi (waktu pelayanan job) dan waktu menunggu, yaitu : Turn arround time = waktu
eksekusi + waktu menunggu.
e. Throughput
Adalah jumlah kerja yang dapat diselesaikan dalam satu unit waktu. Cara untuk mengekspresikan throughput adalah dengan jumlah job pemakai yang dapat dieksekusi dalam satu unit/interval waktu.

1.4 Terdapat dua strategi penjadwalan, yaitu :
1.4.1. Penjadwalan nonpreemptive (run to completion)
Proses diberi jatah waktu oleh pemroses, maka pemroses tidak dapat diambil alih oleh proses lain sampai proses itu selesai.

1.4.2. Penjadwalan preemptive
Proses diberi jatah waktu oleh pemroses, maka pemroses dapat diambil alih proses lain, sehingga proses disela sebelum selesai dan harus dilanjutkan menunggu jatah waktu pemroses tiba kembali pada proses itu. Berguna pada sistem dimana proses-proses yang mendapat perhatian/tanggapan pemroses
secara cepat, misalnya :
a. Pada sistem realtime, kehilangan interupsi (tidak layani segera) dapat berakibat fatal.
b. Pada sistem interaktif, agar dapat menjamin waktu tanggap yang memadai. Penjadwalan secara preemptive baik tetapi harus dibayar mahal. Peralihan proses memerlukan overhead (banyak tabel yang dikelola). Supaya efektif, banyak proses harus berada di memori utama sehingga proses-proses
tersebut dapat segera running begitu diperlukan. Menyimpan banyak proses tak running benar-benar di memori utama merupakan suatu overhead tersendiri.

1.5 Algoritma-algoritma Penjadwalan
Berikut jenis-jenis algoritma berdasarkan penjadwalan :

1.5.1. Nonpreemptive, menggunakan konsep :
a. FIFO (First In First Out) atau FCFS (First Come First Serve)
b. SJF (Shortest Job First)
c. HRN (Highest Ratio Next)
d. MFQ (Multiple Feedback Queues)

1.5.2. Preemptive, menggunakan konsep :
a. RR (Round Robin)
b. SRF (Shortest Remaining First)
c. PS (Priority Schedulling)
d. GS (Guaranteed Schedulling)

1.6 Penjadwalan PreEmptive
Round Robin (RR)
Merupakan :
- Penjadwalan yang paling tua, sederhana, adil,banyak digunakan algoritmanya dan mudah diimplementasikan.
- Penjadwalan ini bukan dipreempt oleh proses lain tetapi oleh penjadwal berdasarkan lama waktu berjalannya proses (preempt by time).
- Penjadwalan tanpa prioritas.
- Berasumsi bahwa semua proses memiliki kepentingan yang sama, sehingga tidak ada prioritas tertentu.Semua proses dianggap penting sehingga diberi sejumlah waktu oleh pemroses yang disebut kwanta (quantum) atau time slice dimana proses itu berjalan. Jika proses masih running sampai akhir quantum, maka CPU akan mempreempt proses itu dan memberikannya ke proses lain. Penjadwal membutuhkannya dengan memelihara daftar proses dari runnable. Ketika quantum habis untuk satu proses tertentu, maka proses tersebut akan diletakkan diakhir daftar (list


1.7 Shortest Remaining First (SRF)
Merupakan :
þ Penjadwalan berprioritas.dinamis.
þ Adalah preemptive untuk timesharing
þ Melengkapi SJF
Pada SRF, proses dengan sisa waktu jalan diestimasi terendah dijalankan,
termasuk proses-proses yang baru tiba.
- Pada SJF, begitu proses dieksekusi, proses dijalankan sampai selesai.
- Pada SRF, proses yang sedang berjalan (running) dapat diambil alih proses
baru dengan sisa waktu jalan yang diestimasi lebih rendah.
Kelemahan :
- Mempunyai overhead lebih besar dibanding SJF. SRF perlu penyimpanan waktu layanan yang telah dihabiskan job dan kadang-kadang harus menangani peralihan.
- Tibanya proses-proses kecil akan segera dijalankan.
- Job-job lebih lama berarti dengan lama dan variasi waktu tunggu lebih lama dibanding pada SJF.
SRF perlu menyimpan waktu layanan yang telah dihabiskan , menambah overhead. Secara teoritis, SRF memberi waktu tunggu minimum tetapi karena overhead peralihan, maka pada situasi tertentu SFJ bisa memberi kinerja lebih baik dibanding
SRF.

Algoritma Nonpreemptive
First In First Out (FIFO)
Merupakan :
- Penjadwalan tidak berprioritas.
FIFO adalah penjadwalan paling sederhana, yaitu :
- Proses-proses diberi jatah waktu pemroses berdasarkan waktu kedatangan.
- Pada saat proses mendapat jatah waktu pemroses, proses dijalankan sampai selesai.

FIFO jarang digunakan secara mandiri, tetapi dikombinasikan dengan skema lain, misalnya : Keputusan berdasarkan prioritas proses. Untuk proses-pross berprioritas sama diputuskan berdasarkan FIFO.
Penjadwalan ini :
a. Baik untuk sistem batch yang sangat jarang berinteraksi dengan pemakai.
Contoh : aplikasi analisis numerik, maupun pembuatan tabel.
b. Sangat tidak baik (tidak berguna) untuk sistem interaktif, karena tidak memberi waktu tanggap yang baik.
c. Tidak dapat digunakan untuk sistem waktu nyata (real-time applications).
B. Shortest Job First (SJF)
Penjadwalan ini mengasumsikan waktu jalan proses sampai selesai diketahui sebelumnya. Mekanismenya adalah menjadwalkan proses dengan waktu jalan
terpendek lebih dulu sampai selesai, sehingga memberikan efisiensi yang tinggi dan
turn around time rendah dan penjadwalannya tak berprioritas.

Contoh :

Terdapat empat proses (job) yaitu A,B,C,D dengan waktu jalannya masing-masing adalah 8,4,4 dan 4 menit. Apabila proses-proses tersebut dijalankan, maka turn around time untuk A adalah 8 menit, untuk B adalah 12, untuk C adalah 16 dan untuk D adalah 20. Untuk menghitung rata-rata turn around time seluruh proses adalah dengan menggunakan rumus :
( 4a + 3b + 2c + 1d ) / 4
Dengan menggunakan rumus, maka dapat dihitung turn around time-nya sebagai berikut (belum memperhatikan shortest job first) :
= ( 4a + 3b + 2c + 1d ) / 4
= ( 4×8 + 3×4 + 2×4 + 1×4 ) / 4
= ( 32 + 12 + 8 + 4 ) / 4
= 56 / 4
= 14 menit
Apabila keempat proses tersebut menggunakan penjadwalan shortest job fisrt, maka turn around time untuk B adalah 4, untuk C adalah 8, untuk D adalah 12 dan untuk A adalah 20, sehingga rata-rata turn around timenya adalah
sebagai berikut :
= ( 4a + 3b + 2c + 1d ) / 4
= ( 4×4 + 3×4 + 2×4 + 1×8 ) / 4
= ( 16 + 12 + 8 + 8 ) / 4
= 44 / 4
= 11 menit

Dengan demikian, penggunaan SJF (Shortest Job First) lebih efisien.




















Bab 2
KONSEP PROSES DALAM OPERASI

Konsep proses dalam operasi dibagi menjadi :
1. KomponenSistemOperasi
2. Layanan Sistem Operasi
3. System Calls
4. PemrogramanSistem
5. Struktur system
6. MesinVirtual
7. System Generation
8. RancanganSistem


Sedangkan komponen operasi terdiri dari :
1. ManagemenProses
2. ManagemenMemoriUtama
3. ManagemenBerkas
4. ManagemenI/O
5. ManagemenPenyimpanan Sekunder
6. Jaringan
7. SistemProteksi
8. Command-Interpreter System

2.1 Managemen Proses (2)

Sistem operasi bertanggung jawab terhadap aktifitas yang berhubungan dengan manajemen proses:
1. Pembuatan dan penghapusan proses
2. Penundaan dan pelanjutan proses
3. Penyedia mekanisme untuk:
• Sinkronisasi antar proses
• Komunikasi antar proses
• PenangananDeadlock
2.2 ManagemenMemoriUtama(1)

 Memori sebagai tempat penyimpanan instruksi/data dari program.
 Penyimpanan yang cepat sehingga dapat mengimbangi kecepatan eksekusi instruksiCPU
 Terdiri dari“array words/bytes”yang besar
 Alamat digunakanuntukmengakses data (shared oleh CPU danI/O devices)

2.3 Managemen Memori Utama(2)

 Umumnya main memory bersifat“volatile”–tidak permanen
 Isinya akan hilang jika komputer di matikan.
 Sistem operasi bertanggung jawab untuk aktivitas berikut yang berhubungan dengan manajemen memori:
 melacak pemakaian memori(siapa dan berapa besar?).
 memilh program mana yang akan diload ke memori ketika bisa digunakan.
 alokasi dan dealokasi memori sesuai yang dibutuhkan




2.4 ManagemenFile (1)

 Berkas adalah kumpulan informasi yang berhubungan(sesuai dengan tujuan pembuat berkas tersebut). Biasanya berkas merepresentasikan program dan data.
 Sistem operasi bertanggungjawab untuk aktivitas berikut yang berhubungan dengan manajemen berkas:
o pembuatan danpenghapusan berkas
o pembuatan dan penghapusan direktori
o Mendukung primitive untuk manipulasi berkas dan direktori
o Memetakan berkas pada sistem sekunder
o Back up berkas pada media penyimpanan yang stabil (nonvolatile)

2.5 ManagemensistemI/O

System I/O terdiri dari :
• Sistembuffer: menampung sementara data dari/ke perantiI/O
• Spooling: melakukan penjadwalan pemakaianI/O sistem supaya lebih efisien(antrian dsb)
• Antar muka devices-driver yang umum:
menyediakan device driver yang umum sehingga sistem operasi dapat seragam (buka, baca, tulis, tutup)
• Drivers untuk spesifik perangkat keras:
Menyediakan driver untuk melakukan operasi rinci/detail untukperangkat keras tertentu.












Bab 3
JENIS-JENIS PROSES

3.1 DOS
DOS adalah singkatan dari Disk Operating System. DOS merujuk pada perangkat system operasi yang digunakan di banyak komputer yang menyediakan abstraksi dan pengelolaan perangkat penyimpan sekunder dan informasinya. Misalnya penggunaan sistem file yang mengelola file-file yang ada pada perangkat penyimpan. DOS biasanya dijalankan dari satu atau dua disc.
Hal ini karena pada masa DOS digunakan media penyimpan masih sangat terbatas kemampuannya (paling besar mungkin hanya 1,4 Megabyte). Ada banyak jenis DOS diantaranya Apple DOS, Commodore DOS, Atari DOS dan lain-lain. Jenis ini sangat bergantung dengan jenis perangkat komputernya. Jenis DOS yang paling terkenal adalah jenis DOS yang berjalan pada mesin-mesin yang compatible dengan IBM Personal Computer.
Untuk menjalankan perintah-perintah sistem operasi, DOS menggunakan
perintah berbasis teks atau CLI. Setiap kali selesai mengetikkan suatu perintah,
kita harus menekan tombol ENTER untuk mengeksekusi perintah tersebut.

3.2. UNIX
UNIX adalah sistem operasi yang mula-mula dikembangkan oleh suatu kelompok di AT & T ada laboatorium Bell. Unix banyak digunakan baik untuk server maupun workstation. Linkungan Unix dan model program client-server menunjukkan bahwa Unix lebih dikembangkan sebagai sistem operasi yang kuat di jaringan komputer dari pada sistem operasi untuk computer personal.
UNIX dirancang untuk portable, multi-tasking, dan multi-user. Konsep utama Unix antara lain banyak menggunakan file teks biasa untuk menyimpan data, menggunakan sistem file berjenjang, memperlakukan perangkat sebagai suatu file, dan menggunakan banyak program kecil yang eksekusinya pada CLI dapat digabung dengan tanda pipeline (|). Pada Gambar 5.2 di atas, tampak beberapa perintah UNIX yang digabung dengan pipeline. Konsep yang sangat
solid dan stabil membuat Unix banyak dijadikan dasar sistem operasi modern.

Sistem UNIX terdiri dari beberapa komponen yang biasanya dipaket
bersama. Umumnya paket-paket tersebut adalah sebagai berikut:
* Kernel dengan sub komponen seperti :
- conf = file konfigurasi.
- dev = driver perangkat keras
- sys = kernel sistem operasi, manajemen memori, penjadwalan
proses, sistem calls dan lain-lain.
- h = header files, mendefinisikan struktur kunci di dalam sistem.


* Development Environment:
o cc —compiler untuk bahasa C
o as — machine-language assembler
o ld — linker, untuk menggabung file-file object
o lib — object-code libraries (diinstall di folder /lib atau /usr/lib) libc,
kumpulan pustaka untuk bahasa C
o make – program untuk mengkompilasi kode program
o include — file-file header untuk pengembangan perangkat lunak dan
menentukan standar interface
o Other languages — bahasa-bahasa pemrograman lain seperti
Fortran-77, Free Pascal, dan lain-lain.

* Commands:
o sh —"Shell" untuk melakukan pemrograman berbasis CLI atau
mengeksekusi perintah-perintah tertentu.
o Utilities — Sekumpulan perintah CLI yang berguna untuk fungsifungsi
yang bermacam-macam, meliputi:
1. System utilities — Program-program untuk pengelolaan
sistem seperti mkfs, fsck, dan lain-lain.
2. User utilities — Program-program untuk pengelolan
lingkungan kerja, seperti passwd, kill, dan lain-lain.
o Document formatting — Program untuk penyiapan dokumen seperti
nroff, troff, tbl, eqn, refer, dan pic. Beberapa sistem Unix modern
juga memasukkan aplikasi seperti TeX dan Ghostscript.
o Graphics — Sistem Unix modern menyediakan X11 sebagai sistem
standard windowing dan GUI.

3.3. Microsoft Windows
Micosoft Windows atau orang lebih sering menyebut Windows saja pada awalnya hanyalah add-on dari MS-DOS karena tingginya tuntutan pada system operasi yang berbasis GUI. Versi awal Windows berjalan di atas MS-DOS. Meski demikian Windows versi awal telah menunjukkan beberapa fungsi-fungsi yang umum dijumpai dalam sistem operasi, antara lain: memiliki tipe file executable tersendiri, memiliki driver perangkat keras sendiri, dan lain-lain.
Secara konsep sebenarnya Windows lebih banyak ditujukan bagi komputer personal. Pada awalnya Windows juga tidak mendukung konsep multi-tasking dan multi-user. Akomodasi terhadap jaringan atau fungsi-fungsi client-server juga tidak sekuat pada UNIX dan turunannya. Sehingga masalah yang sering muncul di sistem operasi Windows adalah masalah keamanan yang berhubungan dengan jaringan. Namun Windows memiliki kelebihan dari sisi
kemudahan pemakaian. Pada versi yang terbaru (Windows Vista) konsep multiuser dan multi-tasking telah semakin matang. Selain itu tampilan GUI telah dirubah dengan banyak menggunakan efek tiga dimensi.

3.4. Apple Mac OS
Seperti terlihat pada Gambar 5.10, Apple Mac OS merupakan turunan dari UNIX melalui jalur BSD (Berkeley Software Distribution). Oleh karena itu kekuatan dalam multi-tasking, multi-user, networking yang ada pada UNIX juga dimiliki oleh Mac OS. Mac OS adalah sistem operasi berbasis GUI. Apple merupakan pelopor dalam penggunaan GUI pada sistem operasi. Penggunaan icon, mouse dan beberapa komponen GUI merupakan sumbangan yang luar
biasa bagi perkembangan sistem operasi berbasis GUI. Versi awal dari Mac OS hampir secara penuh mengandalkan pada kemampuan GUI-nya dan sangat membatasi penggunaan CLI
Meskipun sangat memudahkan namun ada beberapa kelemahan, antar lain:multi-tasking yang tidak berjalan sempurna, pengelolaan memori yang terbatas,dan konflik pada beberapa program yang ditanamkan. Memperbaiki sistem Mac OS kadang-kadang menjadi suatu pekerjaan yang sangat melelahkan.Pada Mac OS X (versi terbaru), semua kelemahan pada versi lama telah coba dihilangkan. Multi-tasking telah berjalan dengan baik dan manajemen
memori yang jauh lebih baik. Selain itu tampilan GUI-nya disebut-sebut sebagai yang terbaik di antara sistem operasi yang ada.

3.5. Linux
Linux sangat mirip dengan sistem-sistem UNIX, hal ini dikarenakan kompatibilitas dengan UNIX merupakan tujuan utama desain dari proyek Linux. Perkembangan Linux dimulai pada tahun 1991, ketika mahasiswa Finlandia bernama Linus Torvalds menulis Linux, sebuah kernel untuk prosesor 80386, prosesor 32-bit pertama dalam kumpulan CPU intel yang cocok untuk PC. Dalam banyak hal, kernel Linux merupakan inti dari proyek Linux, tetapi komponen lainlah yang membentuk secara komplit sistem operasi Linux. Dimana kernel Linux terdiri dari kode-kode yang dibuat khusus untuk proyek Linux, kebanyakan perangkat lunak pendukungnya tidak eksklusif terhadap Linux, melainkan biasa dipakai dalam beberapa sistem operasi yang mirip UNIX. Contohnya, sistem operasi BSD dari Berkeley, X Window System dari MIT, dan
proyek GNU dari Free Software Foundation. Pembagian (sharing) alat-alat telah bekerja dalam dua arah. Sistem perpustakaan utama Linux awalnya dimulai oleh proyek GNU, tetapi
perkembangan perpustakaannya diperbaiki melalui kerjasama dari komunitas Linux terutama pada pengalamatan, ketidak efisienan, dan bugs. Komponen lain seperti GNU C Compiler, gcc, kualitasnya sudah cukup tinggi untuk dipakai langsung dalam Linux. Alat-alat administrasi network dibawah Linux berasal dari kode yang dikembangkan untuk 4.3BSD, tetapi BSD yang lebih baru , salah satunya FreeBSD, sebaliknya meminjam kode dari Linux, contohnya adalah
perpustakaan matematika Intel floating-point-emulation.Saat ini, Linux merupakan salah satu sistem operasi yang perkembangannya paling cepat. Kehadiran sejumlah kelompok pengembang,tersebar di seluruh dunia, yang selalu memperbaiki segala fiturnya, ikut
membantu kemajuan sistem operasi Linux. Bersamaan dengan itu, banyak pengembang yang sedang bekerja untuk memindahkan berbagai aplikasi ke Linux (dapat berjalan di Linux).
Masalah utama yang dihadapi Linux dahulu adalah interface yang berupa teks (text based interface). Ini membuat orang awam tidak tertarik menggunakan Linux karena harus dipelajari terlebih dahulu dengan seksama untuk dapat dimengerti cara penggunaannya (tidak user-friendly). Tetapi keadaan ini sudah mulai berubah dengan kehadiran KDE dan GNOME. Keduanya memiliki tampilan desktop yang menarik sehingga mengubah persepsi dunia
tentang Linux.









Bab 4
DEADLOCK

Deadlock atau mungkin kita semua lebih familiar kita menyebutnya dengan hang, tapi apakah sebenarnya yang disebut hang itu? Dalam istilah ilmiah atau teknologi istilah tersebut dikenal dengan kata deadlock. Apakah itu deadlock dan apa penyebabnya? Untuk itulah akan dibahas berikut ini.
4.1 Pengertian Deadlock
Deadlock adalah suatu kondisi dimana dua proses atau lebih saling menunggu proses yang lain untuk melepaskan resource yang sedang dipakai. Karena beberapa proses itu saling menunggu, maka tidak terjadi kemajuan dalam kerja proses-proses tersebut. Deadlock adalah masalah yang biasa terjadi ketika banyak proses yang membagi sebuah resource yang hanya boleh dirubah oleh satu proses saja dalam satu waktu. Nah karena adanya tunggu-menunggu tersebut, menyebabkan komputer atau gadget kita tiba-tiba berhenti bekerja.
Pengertian deadlock mungkin lebih dimengerti dengan apabila kita analogikan dengan kehidupan disekitar kita.
Deadlock dianalogikan sebagai dua antrian mobil yang akan menyeberangi jembatan. Dalam kasus diatas, antrian di sebelah kiri menunggu antrian kanan untuk mengosongkan jembatan (resource), begitu juga dengan antrian kanan. Akhirnya tidak terjadi kemajuan dalam kerja dua antrian tersebut.Misal ada proses A mempunyai resource X, proses B mempunyai resource Y. Kemudian kedua proses ini dijalankan bersama, proses A memerlukan resource Y dan proses B memerlukan resource X, tetapi kedua proses tidak akan memberikan resource yang dimiliki sebelum proses dirinya sendiri selesai dilakukan. Sehingga akan terjadi tunggu-menunggu.
Berikutnya kita akan lihat pemodelan sistemnya. Pada sistem terdapat beberapa sumber daya (resource) yang digunakan untuk proses-proses untuk menyelesaikan task. Sumber daya yang pada sistem terdiri dari tipe resource CPU cycle, ruang memori, perangkat I/O yang disebut dengan tipe sumber daya R1, R2, . . ., Rm. Setiap tipe sumber daya Ri mempunyai beberapa anggota Wi.
Setiap proses yang menggunakan sumber daya menjalankan urutan operasi sebagai berikut :
1. meminta (request) : meminta sumber daya
2. memakai (use) : memakai sumber daya
3. melepaskan (release) : melepaskan sumber daya

Deadlock terjadi bila terdapat empat kondisi berikut ini secara simultan.
a. Mutual Exclusion : hanya satu proses pada satu waktu yang dapat menggunakan sumber daya.
b. Genggam dan Tunggu (Hold and Wait) : suatu proses membawa sedikitnya satu sumber daya menunggu mendapatkan tambahan sumber daya baru yang dibawa oleh proses
c. Non-Preemption : sebuah sumber daya dapat dibebaskan dengan sukarela oleh proses yang memegangnya setelah proses menyelesaikan task.
d. Menunggu Secara Sirkuler (Circular Wait) : Terdapat sekumpulan proses {P0, P1, …, P0} yang menunggu sumber daya dimana P0 menunggu sumber daya yang dibawa P1, P1 menunggu sumber daya yang dibawa P2, dan seterusnya, Pn–1 menunggu sumber daya yang dibawa oleh Pn, dan Pn menunggu sumber daya yang dibawa P0. Ketiga syarat pertama merupakan syarat perlu (necessary conditions) bagi terjadinya deadlock. Keberadaan deadlock selalu berarti terpenuhi kondisi-kondisi diatas, tak mungkin terjadi deadlock bila tidak ada ketiga kondisi itu. Deadlock terjadi berarti terdapat ketiga kondisi itu, tetapi adanya ketiga kondisi itu belum berarti terjadi deadlock. Deadlock baru benar-benar terjadi bila syarat keempat terpenuhi. Kondisi keempat merupakan keharusan bagi terjadinya peristiwa deadlock. Bila salah satu saja dari kondisi tidak terpenuhi maka deadlock tidak terjadi.
Terus apakah deadlock ini dapat kita cegah? Atau minimal dapat kita hindari, ternyata ada metode untuk mencegah deadlock. Metode ini berkaitan dengan pengkondisian sistem agar menghilangkan kemungkinan terjadinya deadlock. Pencegahan merupakan solusi yang bersih dipandang dari sudut tercegahnya deadlock. Metode ini sering menghasilkan utilisasi sumber daya yang buruk. Pencegahan deadlock merupakan metode yang banyak dipakai.
4.2 Untuk mencegah deadlock dilakukan dengan meniadakan salah satu dari syarat perlu sebagai berikut :
4.2.1. Mencegah Mutual Exclusion
Mutual exclusion benar-benar tak dapat dihindari. Hal ini dikarenakan tidak ada sumber daya yang dapat digunakan bersama-sama, jadi sistem harus membawa sumber daya yang tidak dapat digunakan bersama-sama.
4.2.2. Mencegah Hold and Wait
Untuk mencegah hold and wait, sistem harus menjamin bila suatu proses meminta sumber daya, maka proses tersebut tidak sedang memegang sumber daya yang lain. Proses harus meminta dan dialokasikan semua sumber daya yang diperlukan sebelum proses memulai eksekusi atau mengijinkan proses meminta sumber daya hanya jika proses tidak membawa sumber daya lain. Model ini mempunyai utilitas sumber daya yang rendah dan kemungkinan terjadi starvation jika proses membutuhkan sumber daya yang popular sehingga terjadi keadaan menunggu yang tidak terbatas karena setidaknya satu dari sumber daya yang dibutuhkannya dialokasikan untuk proses yang lain.
4.2.3. Mencegah Non Preemption
Peniadaan non preemption mencegah proses-proses lain harus menunggu. Seluruh proses menjadi preemption, sehingga tidak ada tunggu menunggu. Cara mencegah kondisi non preemption :
1. Jika suatu proses yang membawa beberapa sumber daya meminta sumber daya lain yang tidak dapat segera dipenuhi untuk dialokasikan pada proses tersebut, maka semua sumber daya yang sedang dibawa proses tersebut harus dibebaskan.
2. Proses yang sedang dalam keadaan menunggu, sumber daya yang dibawanya ditunda dan ditambahkan pada daftar sumber daya.
3. Proses akan di restart hanya jika dapat memperoleh sumber daya yang lama dan sumber daya baru yang diminta.
4.2.4. Mencegah Kondisi Menunggu Sirkular
Sistem mempunyai total permintaan global untuk semua tipe sumber daya. Proses dapat meminta proses kapanpun menginginkan, tapi permintaan harus dibuat terurut secara numerik. Setiap proses yang membutuhkan sumber daya dan memintanya maka nomor urut akan dinaikkan. Cara ini tidak akan menimbulkan siklus. Masalah yang timbul adalah tidak ada cara pengurutan nomor sumber daya yang memuaskan semua pihak.












BAB 5
CONCURRENCY
5.1 Pengertian
Concurrency adalah banyaknya transaksi yang dijalankan secara bersamaan dalam satu waktu. Hampir semua DBMS adalah multiuser, sehingga berpeluang terjadinya inkonsistensi basis data. Maka perlu adanya pengendalian persaingan eksekusi transaksi (concurrency control). Alasan mengapa transaksi yang konkuren banyak dipilih dibandingkan transaksi secara serial? Hal itu dikarenakan:
a. Idle time (waktu menganggur) menjadi lebih kecil.
Aktivitas transaksi terbagi 2, yaitu:
- Aktivitas I/O, seperti pengaksesan disk, penulisan ke monitor.
- Aktivitas CPU, seperti proses perhitungan, pembandingan.
Operasi I/O dan CPU bisa dikerjakan secara paralel, dan bisa terjadi dari transaksi yang berbeda. Jika keparalelan ini bisa dioptimalkan, maka akan meningkatkan performansinya, atau dengan kata lain waktu pakai perangkat CPU dan I/O lebih berdaya guna, karena idle time-nya kecil.
b.Response time (waktu tanggap) menjadi lebih baik.
Transaksi pada suatu sistem ada banyak atau beragam. Ada yang singkat dan ringan, dan ada pula yang berat. Semua transaksi itu berbeda waktu prosesnya. Jika transaksi-transaksi itu dikerjakan secara serial maka dapat terjadi situasi dimana transaksi yang ringan dan butuh waktu singkat harus menunggu selesainya transaksi yang berat dan panjang, sehingga response time menjadi rendah dan tidak dapat diprediksi.
5.2 Pemrograman Serentak (Concurrency)
Java adalah bahasa pemrograman banyak thread, yang artinya beberapa hal bisa dilakukan bersama-sama. Thread adalah unit terkecil dari eksekusi suatu program. Thread mengeksekusi rangkaian instruksi satu demi satu. Ketika sistem menjalankan program, komputer akan membuat thread baru. (Thread dalam konteks ini disebut proses, akan tetapi perbedaanya tidank penting di sini). Instruksi-instruksi dalam program akan dieksekusi oleh thread ini secara berantai, satu demi satu dari awal hingga akhir. Thread disebut "mati" jika program selesai dieksekusi.
Dalam sistem komputer modern, beberapa thread bisa tercipta dalam satu waktu. Pada satu saat tertentu, hanya ada satu thread yang bisa dijalankan, karena CPI hanya bisa melakukan satu hal dalam satu waktu. (Pada komputer dengan multiprosesor, multicore, dan hyper-threading, masing-masing prosesor atau core melakukan thread yang berbeda-beda). Akan tetapi sebenarnya komputer membagi waktu menjadi bagian-bagian kecil sehingga seolah-olah seluruh thread dijalankan secara bersama-sama. Pembagian waktu berarti CPU mengeksekusi suatu thread dalam kurun waktu tertentu, setelah itu beralih mengeksekusi thread yang lain, kemudian thread lain, dan seterusnya dan kemudian kembali ke thread pertama -- kira-kira 100 kali per detik. Di mata user, semua thread berjalan pada saat yang sama.
Java adalah bahasa pemrograman banyak thread. Artinya Java bisa membuat satu atau lebih thread yang bisa dijalankan secara paralel. Hal ini adalah bagian mendasar, yang dibuat di dalam core bahasa, bukan merupakan tambahan (add-on) seperti bahasa pemrograman lain. Tetap saja pemrogaman dengan banyak thread adalah sesuatu yang tidak mudah.
Penggunaan thread yang banyak digunakan adalah untuk membuat GUI (graphical user interface) yang responsif. Pada dasarnya suatu program harus dapat terus bejalan dan pada saat yang sama tetap bisa menerima input dari user, menanggapi klik mouse, dan sebagainya.
Thread juga digunakan untuk mempercepat suatu proses, misalnya kita ingin membuat program yang menunggu suatu input I/O dari network, dan pada saat yang sama mengolahnya sehingga proses pengolahan berjalan serentak. Jika program harus menunggu seluruh input datang baru kemudian melakukan pengolahan, tentunya akan memakan waktu yang lebih lama, terutama apabila aliran network lambat atau pengolahannya memakan waktu lama.
Jika kita memiliki CPU multiprocessor atau multicore, maka menggunakan banyak thread akan mempercepat eksekusi program, karena masing-masing thread dijalankan secara terpisah. Misalnya untuk melakukan video encoding dengan jumlah data besar, jika kita menggunakan seluruh core yang tersedia maka prosesnya akan dapat diselesaikan dengan cepat.
5.3 Contoh Pemrograman pada Jaringan
Contoh ini melibatkan dua program, yaitu klien sederhana dan servernya. Klien melakukan koneksi dengan server, membaca satu baris teks dari server, kemudian menampilkan teks ini pada layar. Teks yang dikirim oleh server adalah tanggal dan waktu saat ini di komputer di mana server dijalankan.
Untuk membuka koneksi, klien harus tahu di komputer mana server dijalankan dan di port mana server tersebut mendengarkan permintaan sambungan. Server akan mendengarkan pada port bernomor 32007. Nomor port ini bisa berapapun di antara 1025 hingga 65535, asalkan klien dan servernya menggunakan port yang sama. Nomor port antara 1 hingga 1024 hanya digunakan oleh layanan standar dan seharusnya tidak digunakan untuk server lainnya.
Nama komputer atau alamat IP di mana server dijalankan harus diberikan pada paramater baris perintah. Misalnya jika server dijalankan pada komputer kita sendiri, kita bisa memanggilnya dengan "java KlienTanggal localhost". Berikut ini adalah program klien lengkapnya.
import java.net.*;
import java.io.*;

public class KlienTanggal {

static final int PORT_PENDENGAR = 32007;

/**
* @param args
*/
public static void main(String[] args) {
String komputer; // Nama komputer yang akan disambungkan
Socket koneksi; // Soket untuk berkomunikasi dengan
// komputer tersebut
Reader masuk; // Aliran untuk membaca data dari koneksi

/* Ambil nama komputer dari baris perintah */

if (args.length > 0)
komputer = args[0];
else {
// Tidak ada nama komputer yang diberikan
// Beri pesan kesalahan dan program selesai
System.out.println("Cara menggunakan : java KlienTanggal ");
return;
}

/* Buat koneksi, kemudian baca dan tampilkan di layar */

try {
koneksi = new Socket( komputer, PORT_PENDENGAR );
masuk = new InputStreamReader( koneksi.getInputStream() );
while (true) {
int ch = masuk.read();
if (ch == -1 || ch == '\n' || ch == '\r')
break;
System.out.print( (char)ch );
}
System.out.println();
masuk.close();
}
catch (IOException e) {
System.out.println("Kesalahan : " + e);
}
}
}
Perhatikan bahwa semua komunikasi dengan server dilakukan dalam pernyataan try ... catch. Ini akan menangkap pengecualian IOException yang mungkin terjadi ketika koneksi sedang dibuka atau ditutup atau sedang membaca karakter dari aliran input.
Aliran yang digunakan adalah aliran sederhana Reader yang memiliki operasi input masuk.read(). Fungsi ini membaca satu per satu karakter dari aliran, kemudian mengembalikan nomor kode Unicodenya. Jika akhir aliran telah dicapai, maka nilai -1 akan dikembalikan. Perulangan while membaca karakter ini satu per satu hingga akhir aliran ditemui atau akhir baris ditemui. Akhir baris ditandai dengan salah satu dari '\n' atau '\r' atau keduanya, tergantung dari jenis komputer di mana server tersebut berjalan.
Agar program ini dapat berjalan tanpa kesalahan, maka program server harus dijalankan terlebih dahulu. Kita bisa membuat program klien dan server pada komputer yang sama. Misalnya kita bisa membuat dua jendela konsol pada windows, kemudian menjalankan server di konsol yang satu dan menjalankan klien di server yang lain. Agar ini bisa berjalan, komputer lokal kita memiliki alamat 127.0.0.1, sehingga perintah "java KlienTanggal 127.0.0.1" artinya sama dengan memerintahkan program KlienTanggal untuk melakukan sambungan dengan server yang berjalan di komputer yang sama. Atau bisa juga menggunakan alamat "localhost" sebagai pengganti "127.0.0.1".
Program servernya kita namakan ServerTanggal. Program ServerTanggal membuat ServerSocket untuk mendengarkan permintaan sambungan pada port 32007. Setelah soket pendengar kita buat, maka server akan masuk pada perulangan tak hingga di mana ia menerima dan mengolah permintaan sambungan. Program ini akan berjalan terus menerus tanpa henti kecuali kita hentikan dengan paksa -- misalnya dengan menekan tombol Ctrl-C di jendela konsol di mana server dijalankan.
Ketika koneksi diterima dari klien, server akan memanggil subrutin lain untuk menangani koneksi tersebut. Dalam subrutin itu, pengecualian apapun yang terjadi akan ditangkap sehingga server tidak akan mati. Subrutin akan membuat aliran PrintWriter untuk mengirim data melalui koneksi yang terjadi.
Server akan menulis tanggal dan waktu sekarang pada aliran output ini, kemudian menutup koneksi. (Kelas standar java.util.Date akan digunakan untuk mengambil tanggal saat ini. Objek bertipe Date melambangkan tanggal dan waktu. Konstruktor standarnya, "new Date()" membuat objek yang melambangkan tanggal dan waktu ketika objek tersebut dibuat.)
Berikut ini adalah program server lengkapnya :
import java.net.*;
import java.io.*;
import java.util.Date;

public class ServerTanggal {

static final int PORT_PENDENGAR = 32007;

/**
* @param args
*/
public static void main(String[] args) {
ServerSocket pendengar; // Mendengarkan sambungan yang masuk
Socket koneksi; // Untuk berkomunikasi dengan sambungan yang masuk

/*
* Menerima dan mengolah sambungan selamanya, atau hingga kesalahan
* terjadi. (Kesalahan yang terjadi ketika sedang berkomunikasi atau
* mengirimkan tanggal akan ditangkap untuk mencegah server crash)
*/

try {
pendengar = new ServerSocket(PORT_PENDENGAR);
System.out.println("Mendengarkan pada port " + PORT_PENDENGAR);
while (true) {
koneksi = pendengar.accept();
kirimTanggal(koneksi);
}
} catch (Exception e) {
System.out.println("Maaf, server telah mati.");
System.out.println("Kesalahan : " + e);
return;
}
}

static void kirimTanggal(Socket klien) {
// Parameternya, klien, adalah soket yang telah terhubung dengan
// program lain. Ambil aliran keluaran untuk melakukan sambungan,
// kirim tanggal saat ini dan tutup sambungan.
try {
System.out.println("Sambungan dari "
+ klien.getInetAddress().toString());
Date sekarang = new Date(); // Tanggal dan waktu saat ini
PrintWriter keluar; // Aliran output untuk mengirim tanggal
keluar = new PrintWriter(klien.getOutputStream());
keluar.println(sekarang.toString());
keluar.flush(); // Pastikan data telah terkirim!
klien.close();
} catch (Exception e) {
System.out.println("Kesalahan : " + e);
}
}
}
Jika kita jalankan ServerTanggal pada konsol, maka ia akan diam menunggu datangnya permintaan sambungan dan melaporkannya apabila permintaan telah masuk. Agar layanan ServerTanggal tetap tersedia pada suatu komputer, program tersebut seharusnya dijalankan sebagai daemon. Daemon adalah program yang terus berjalan pada suatu komputer, tidak peduli siapa yang menggunakan komputer itu. Komputer bisa dikonfigurasi untuk menjalankan daemon secara otomatis ketika komputer dinyalakan. Kemudian ia akan berjalan di latar belakang, meskipun komputer digunakan untuk hal lainnya. Misalnya, komputer yang menyediakan layanan Web menjalankan daemon yang mendengarkan permintaan sambungan untuk melihat halaman web dan meresponnya dengan mengirimkan isi halaman tersebut. Bagaimana menjalankan program sebagai daemon tidak akan kita bahas di sini, dan bisa Anda temui pada buku-buku tentang administrasi server dan jaringan.
Lihat setelah memanggil keluar.println() untuk mengirim data ke klien, program server memanggil keluar.flush(). Metode flush() tersedia pada semua kelas aliran output. Metode ini digunakan untuk menjamin bahwa data yang telah dikirim pada aliran benar-benar dikirim ke tujuannya. Kita harus memanggil fungsi ini setiap kali kita menggunakan aliran output untuk mengirim data melalui jaringan. Jika tidak, ada kemungkinan program akan mengumpulkan banyak data dan mengirimkan semuanya sekaligus. Mungkin dari segi efisiensi terlihat bagus, akan tetapi tentunya pesan akan sangat lambat sampai di program klien. Atau bahkan masih ada data yang belum terkirim hingga soket ditutup.
Berikut ini adalah screen shot hasil pemanggilan program di atas pada dua konsol, masing-masing untuk server dan kliennya.

Dan program di atas dapat diunduh pada daftar sisipan di bawah, dan diimpor ke dalam Eclipse dengan menggunakan instruksi pada halaman berikut.
Untuk menjalankan program di atas, jalankan program server terlebih dahulu, dari dalam konsol ketik "cd \bin" (di screen shot di atas direktorinya berada di c:\belajarjava.lyracc.com\servertanggal\bin) kemudian ketik "java ServerTanggal".
Kemudian untuk menjalankan program klien, lakukan dengan cara yang serupa, yaitu buka konsol baru, kemudian ketik "cd \bin" (di screen shot di atas direktornya berada di c:\belajarjava.lyracc.com\klientanggal\bin) kemudian ketik "java KlienTanggal localhost







KRITIK DAN SARAN

Saran
Di dalam konsep dasar system operasi, harus dijelaskan secara mendetail dari KomponenSistem Operasi ,LayananSistemOperasi, System Calls, PemrogramanSistem, Struktursistem, System Generation, dan RancanganSistem. Karena ini berkaitan dengan pengertian awal atau defenisi dari konsep dasar system operasi, dimana semuanya akan berlanjut kepada proses selanjutnya.

Kritik
pada Konsep dasar sistem operasi, banyak sekali tulisan tulisan / pengucapan yang sulit dimengerti. Sehingga akan menyulitkan ketika mempresentasikan kepada orang lain.













KESIMPULAN
Sistem berkas merupakan mekanisme penyimpanan on-line serta untuk akses, baik data mau pun program yang berada dalam Sistem Operasi. Terdapat dua bagian penting dalam sistem berkas, yaitu:

1.Kumpulan berkas, sebagai tempat penyimpanan data, serta
2.Struktur direktori, yang mengatur dan menyediakan informasi mengenai seluruh berkas dalam sistem.

Berkas adalah kumpulan informasi berkait yang diberi nama dan direkam pada penyimpanan sekunder. Atribut berkas terdiri dari:
1.Nama; merupakan satu-satunya informasi yang tetap dalam bentuk yang bisa dibaca oleh manusia (human-readable form)
2.Type; dibutuhkan untuk sistem yang mendukung beberapa type berbeda
3.Lokasi; merupakan pointer ke device dan ke lokasi berkas pada device tersebut
4.Ukuran (size); yaitu ukuran berkas pada saat itu, baik dalam byte, huruf, atau pun blok
5.Proteksi; adalah informasi mengenai kontrol akses, misalnya siapa saja yang boleh membaca, menulis, dan mengeksekusi berkas
6.Waktu, tanggal dan identifikasi pengguna; informasi ini biasanya disimpan untuk:
- pembuatan berkas
- modifikasi terakhir yang dilakukan pada berkas, dan
- modifikasi terakhir yang dilakukan pada berkas, dan
- modifikasi terakhir yang dilakukan pada berkas, dan
- penggunaan terakhir berkas

Operasi Pada Berkas
1.Membuat sebuah berkas.
2.Menulis pada sebuah berkas.
3.Membaca sebuah berkas.
4.Menempatkan kembali sebuah berkas.
5.Menghapus sebuah berkas.
6.Memendekkan berkas.

Metode Akses
1.Akses Berurutan.
2.Akses Langsung.
3.Akses menggunakan Indeks.




Operasi Pada Direktori
Operasi-operasi yang dapat dilakukan pada direktori adalah:
1.Mencari berkas.
2.Membuat berkas.
3.Menghapus berkas.
4.Menampilkan isi direktori.
5.Mengganti nama berkas.
6.Melintasi sistem berkas.

Macam-macam Direktori
1.Direktori Satu Tingkat.
2.Direktori Dua Tingkat.
3.Direktori Dengan Struktur "Tree".
4.Direktori Dengan Struktur "Acyclic-Graph".
5.Direktori Dengan Struktur Graph.

Metode Alokasi Berkas
1.Alokasi Secara Berdampingan (Contiguous Allocation).
2.Alokasi Secara Berangkai (Linked Allocation).
3.Alokasi Dengan Indeks (Indexed Allocation).

Manajemen Free Space
1.Menggunakan Bit Vektor.
2.Linked List.
3.Grouping.
4.Counting.

Implementasi Direktori
1.Linear List.
2.Hash Table.

Sistem Berkas pada Windows
Direktori yang secara otomatis dibuat dalam instalasi Windows adalah:
1.Direktori C:\WINDOWS
2.Direktori C:\Program Files
3.Direktori C:\My Documents

Sistem Berkas yang terdapat dalam sistem operasi Windows adalah:
1.FAT 16
Sistem berkas ini digunakan dalam sistem operasi DOS dan Windows 3.1
2.FAT 32
Sistem ini digunakan oleh keluarga Windows 9x
3.NTFS



Merupakan singkatan dari New Technology File System. Sistem berkas ini adalah sistem berkas berbasis journaling dan dapat digunakan hanya pada keluarga Windows NT. Keunggulan dari sistem berkas ini adalah fasilitas recovery yang memungkinkan dilakukannya penyelamatan data saat terjadi kerusakan pada sistem operasi.

Sistem Berkas pada UNIX (dan turunannya)
Ada beberapa direktori yang umum terdapat dalam instalasi UNIX:
1.Direktori /root.
2.Direktori /bin.
3.Direktori /dev.
4.Direktori /etc.
5.Direktori /lib.
6.Direktori /sbin.
7.Direktori /usr.
8.Direktori /var.

Macam-macam Sistem Berkas di UNIX
1.EXT2.
2.EXT3.
3.JFS (Journaling File System).
4.ReiserFS.
5.Dan Lain-lain.

Tidak ada komentar:

Posting Komentar