<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog'e wOng GoblOK</title>
	<atom:link href="http://hoedy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hoedy.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Tue, 12 May 2009 14:04:19 +0000</lastBuildDate>
	<language>id</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='hoedy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Blog'e wOng GoblOK</title>
		<link>http://hoedy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hoedy.wordpress.com/osd.xml" title="Blog&#039;e wOng GoblOK" />
	<atom:link rel='hub' href='http://hoedy.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Alokasi Frame</title>
		<link>http://hoedy.wordpress.com/2009/05/12/alokasi-frame/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/alokasi-frame/#comments</comments>
		<pubDate>Tue, 12 May 2009 14:04:19 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=45</guid>
		<description><![CDATA[Terdapat masalah dalam alokasi frame dalam penggunaan memori virtual, masalahnya yaitu bagaimana kita membagi memori yang bebas kepada berbagai proses yang sedang dikerjakan? Jika ada sejumlah frame bebas dan ada dua proses, berapakah frame yang didapatkan tiap proses? Kasus paling mudah dari memori virtual adalah sistem satu pemakai. Misalkan sebuah sistem mempunyai memori 128K dengan [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=45&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Terdapat masalah dalam alokasi frame dalam penggunaan memori virtual, masalahnya yaitu bagaimana kita membagi memori yang bebas kepada berbagai proses yang sedang dikerjakan? Jika ada sejumlah frame bebas dan ada dua proses, berapakah frame yang didapatkan tiap proses?</p>
<p>Kasus paling mudah dari memori virtual adalah sistem satu pemakai. Misalkan sebuah sistem mempunyai memori 128K dengan ukuran halaman 1K, sehingga ada 128 frame. Sistem operasinya menggunakan 35K sehingga ada 93 frame yang tersisa untuk proses tiap user. Untuk pure demand paging, ke-93 frame tersebut akan ditaruh pada daftar frame bebas. Ketika sebuah proses user mulai dijalankan, akan terjadi sederetan page fault. Sebanyak 93 page fault pertama akan mendapatkan frame dari daftar frame bebas. Saat frame bebas sudah habis, sebuah algoritma pergantian halaman akan digunakan untuk memilih salah satu dari 93 halaman di memori yang diganti dengan yang ke 94, dan seterusnya. Ketika proses selesai atau diterminasi, sembilan puluh tiga frame tersebut akan disimpan lagi pada daftar frame bebas.<br />
<span id="more-45"></span>Terdapat macam-macam variasi untuk strategi sederhana ini, kita bisa meminta sistem operasi untuk mengalokasikan seluruh buffer dan ruang tabel-nya dari daftar frame bebas. Saat ruang ini tidak digunakan oleh sistem operasi, ruang ini bisa digunakan untuk mendukung paging dari user. Kita juga dapat menyimpan tiga frame bebas yang dari daftar frame bebas, sehingga ketika terjadi page fault, ada frame bebas yang dapat digunakan untuk paging. Saat pertukaran halaman terjadi, penggantinya dapat dipilih, kemudian ditulis ke disk, sementara proses user tetap berjalan.</p>
<p>Variasi lain juga ada, tetapi ide dasarnya tetap yaitu proses pengguna diberikan frame bebas yang mana saja. Masalah lain muncul ketika demand paging dikombinasikan dengan multiprogramming. Hal ini terjadi karena multiprogramming menaruh dua (atau lebih) proses di memori pada waktu yang bersamaan.<br />
Jumlah Frame Minimum</p>
<p>Tentu saja ada berbagai batasan pada strategi kita untuk alokasi frame. Kita tidak dapat mengalokasikan lebih dari jumlah total frame yang tersedia (kecuali ada page sharing). Ada juga jumlah minimal frame yang dapat di alokasikan. Jelas sekali, seiring dengan bertambahnya jumlah frame yang dialokasikan ke setiap proses berkurang, tingkat page fault bertambah dan mengurangi kecepatan eksekusi proses.</p>
<p>Selain hal tersebut di atas, ada jumlah minimum frame yang harus dialokasikan. Jumlah minimum ini ditentukan oleh arsitektur set instruksi. Ingat bahwa ketika terjadi page fault, sebelum eksekusi instruksi selesai, instruksi tersebut harus diulang. Sehingga kita harus punya jumlah frame yang cukup untuk menampung semua halaman yang dirujuk oleh sebuah instruksi tunggal.</p>
<p>Jumlah minimum frame ditentukan oleh arsitektur komputer. Sebagai contoh, instruksi move pada PDP-11 adalah lebih dari satu kata untuk beberapa modus pengalamatan, sehingga instruksi tersebut bisa membutuhkan dua halaman. Sebagai tambahan, tiap operannya mungkin merujuk tidak langsung, sehingga total ada enam frame. Kasus terburuk untuk IBM 370 adalah instruksi MVC. Karena instruksi tersebut adalah instruksi perpindahan dari penyimpanan ke penyimpanan, instruksi ini butuh 6 bit dan dapat memakai dua halaman. Satu blok karakter yang akan dipindahkan dan daerah tujuan perpindahan juga dapat memakai dua halaman, sehingga situasi ini membutuhkan enam frame.</p>
<p>Kesimpulannya, jumlah minimum frame yang dibutuhkan per proses tergantung dari arsitektur komputer tersebut, sementara jumlah maksimumnya ditentukan oleh jumlah memori fisik yang tersedia. Di antara kedua jumlah tersebut, kita punya pilihan yang besar untuk alokasi frame.<br />
Algoritma Alokasi</p>
<p>Cara termudah untuk membagi m frame terhadap n proses adalah untuk memberikan bagian yang sama, sebanyak m/n frame untuk tiap proses. Sebagai contoh ada 93 frame tersisa dan 5 proses, maka tiap proses akanmendapatkan 18 frame. Frame yang tersisa, sebanyak 3 buah dapat digunakan sebagai frame bebas cadangan. Strategi ini disebut equal allocation.</p>
<p>Sebuah alternatif yaitu pengertian bahwa berbagai proses akan membutuhkan jumlah memori yang berbeda. Jika ada sebuah proses sebesar 10K dan sebuah proses basis data 127K dan hanya kedua proses ini yang berjalan pada sistem, maka ketika ada 62 frame bebas, tidak masuk akal jika kita memberikan masing-masing proses 31 frame. Proses pertama hanya butuh 10 frame, 21 frame lain akan terbuang percuma.</p>
<p>Untuk menyelesaikan masalah ini, kita menggunakan proportional allocation. Kita mengalokasikan memori yang tersedia kepada setiap proses tergantung pada ukurannya.</p>
<p>Let the size of the virtual memory for process pi be si, and define S = si.</p>
<p>Lalu, jika jumlah total dari frame yang tersedia adalah m, kita mengalokasikan proses ai ke proses pi, dimana ai mendekati</p>
<p>ai = si / S x m</p>
<p>Dalam kedua strategi ini, tentu saja, alokasi untuk setiap proses bisa bervariasi berdasarkan multiprogramming level-nya. Jika multiprogramming level-nya meningkat, setiap proses akan kehilangan beberapa frame guna menyediakan memori yang dibutuhkan untuk proses yang baru. Di sisi lain, jika multiprogramming level-nya menurun, frame yang sudah dialokasikan pada bagian process sekarang bisa disebar ke proses-proses yang masih tersisa.</p>
<p>Mengingat hal itu, dengan equal atau pun proportional allocation, proses yang berprioritas tinggi diperlakukan sama dengan proses yang berprioritas rendah. Berdasarkan definisi tersebut, bagaimanapun juga, kita ingin memberi memori yang lebih pada proses yang berprioritas tinggi untuk mempercepat eksekusi-nya, to the detriment of low-priority processes.</p>
<p>Satu pendekatan adalah menggunakan proportional allocation scheme dimana perbandingan frame-nya tidak tergantung pada ukuran relatif dari proses, melainkan lebih pada prioritas proses, atau tergantung kombinasi dari ukuran dan prioritas.<br />
Alokasi Global lawan Local</p>
<p>Faktor penting lain dalam cara-cara pengalokasian frame ke berbagai proses adalah penggantian halaman. Dengan proses-proses yang bersaing mendapatkan frame, kita dapat mengklasifikasikan algoritma penggantian halaman kedalam dua kategori broad: Penggantian Global dan Penggantian Lokal. Penggantian Global memperbolehkan sebuah proses untuk menyeleksi sebuah frame pengganti dari himpunan semua frame, meski pun frame tersebut sedang dialokasikan untuk beberapa proses lain; satu proses dapat mengambil sebuah frame dari proses yang lain. Penggantian Lokal mensyaratkan bahwa setiap proses boleh menyeleksi hanya dari himpunan frame yang telah teralokasi pada proses itu sendiri.</p>
<p>Untuk contoh, pertimbangkan sebuah skema alokasi dimana kita memperbolehkan proses berprioritas tinggi untuk meyeleksi frame dari proses berprioritas rendah untuk penggantian. Sebuah proses dapat menyeleksi sebuah pengganti dari frame-nya sendiri atau dari frame-frame proses yang berprioritas lebih rendah. Pendekatan ini memperbolehkan sebuah proses berprioritas tinggi untuk meningkatkan alokasi frame-nya pada expense proses berprioritas rendah.</p>
<p>Dengan strategi Penggantian Lokal, jumlah frame yang teralokasi pada sebuah proses tidak berubah. Dengan Penggantian Global, ada kemungkinan sebuah proses hanya menyeleksi frame-frame yang teralokasi pada proses lain, sehingga meningkatkan jumlah frame yang teralokasi pada proses itu sendiri (asumsi bahwa proses lain tidak memilih frame proses tersebut untuk penggantian).</p>
<p>Masalah pada algoritma Penggantian Global adalah bahwa sebuah proses tidak bisa mengontrol page-fault-nya sendiri. Himpunan halaman dalam memori untuk sebuah proses tergantung tidak hanya pada kelakuan paging dari proses tersebut, tetapi juga pada kelakuan paging dari proses lain. Karena itu, proses yang sama dapat tampil berbeda (memerlukan 0,5 detik untuk satu eksekusi dan 10,3 detik untuk eksekusi berikutnya) due to totally external circumstances. Dalam Penggantian Lokal, himpunan halaman dalam memori untuk sebuah proses hanya dipengaruhi kelakuan paging proses itu sendiri. Penggantian Lokal dapat menyembunyikan sebuah proses dengan membuatnya tidak tersedia bagi proses lain, menggunakan halaman yang lebih sedikit pada memori. Jadi, secara umum Penggantian Global menghasilkan sistem throughput yang lebih bagus, maka itu artinya metode yang paling sering digunakan.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=45&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/alokasi-frame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Pemindahan Halaman</title>
		<link>http://hoedy.wordpress.com/2009/05/12/pemindahan-halaman/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/pemindahan-halaman/#comments</comments>
		<pubDate>Tue, 12 May 2009 14:01:41 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=43</guid>
		<description><![CDATA[Pada dasarnya, kesalahan halaman (page fault) sudah tidak lagi menjadi masalah yang terlalu dianggap serius. Hal ini disebabkan karena masing-masing halaman pasti akan mengalami paling tidak satu kali kesalahan dalam pemberian halaman, yakni ketika halaman ini ditunjuk untuk pertama kalinya. Representasi seperti ini sebenarnya tidaklah terlalu akurat. Berdasarkan pertimbangan tersebut, sebenarnya proses-proses yang memiliki 10 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=43&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pada dasarnya, kesalahan halaman (page fault) sudah tidak lagi menjadi masalah yang terlalu dianggap serius. Hal ini disebabkan karena masing-masing halaman pasti akan mengalami paling tidak satu kali kesalahan dalam pemberian halaman, yakni ketika halaman ini ditunjuk untuk pertama kalinya. Representasi seperti ini sebenarnya tidaklah terlalu akurat. Berdasarkan pertimbangan tersebut, sebenarnya proses-proses yang memiliki 10 halaman hanya akan menggunakan setengah dari jumlah seluruh halaman yang dimilikinya. Kemudian demand paging akan menyimpan I/O yang dibutuhkan untuk mengisi 5 halaman yang belum pernah digunakan. Kita juga dapat meningkatkan derajat multiprogramming dengan menjalankan banyak proses sebanyak 2 kali.<br />
<span id="more-43"></span>Jika kita meningkatkan derajat multiprogramming, itu sama artinya dengan melakukan over-allocating terhadap memori. Jika kita menjalankan 6 proses, dengan masing-masing mendapatkan 10 halaman, walau pun sebenarnya yang digunakan hanya 5 halaman, kita akan memiliki utilisasi CPU dan throughput yang lebih tinggi dengan 10 frame yang masih kosong.</p>
<p>Lebih jauh lagi, kita harus mempertimbangkan bahwa sistem memori tidak hanya digunakan untuk menangani pengalamatan suatu program. Penyangga (buffer) untuk I/O juga menggunakan sejumlah memori. Penggunaan ini dapat meningkatkan pemakaian algoritma dalam penempatan di memori. Beberapa sistem mengalokasikan secara pasti beberapa persen dari memori yang dimilikinya untuk penyangga I/O, dimana keduanya, baik proses pengguna mau pun subsistem dari I/O saling berlomba untuk memanfaatkan seluruh sistem memori.<br />
Skema Dasar</p>
<p>Pemindahan halaman mengambil pendekatan seperti berikut. Jika tidak ada frame yang kosong, kita mencari frame yang tidak sedang digunakan dan mengosongkannya. Kita dapat mengosongkan sebuah frame dengan menuliskan isinya ke ruang pertukaran (swap space), dan merubah tabel halaman (juga tabel-tabel lainnya) untuk mengindikasikan bahwa halaman tesebut tidak akan lama berada di memori. Sekarang kita dapat menggunakan frame yang kosong sebagai penyimpan halaman dari proses yang salah. Rutinitas pemindahan halaman:</p>
<p>1.Cari lokasi dari halaman yang diinginkan pada disk<br />
2.Cari frame kosong:<br />
1.Jika ada frame kosong, gunakan.<br />
2.Jika tidak ada frame kosong, gunakan algoritma pemindahan halaman untuk menyeleksi frame yang akan digunakan.<br />
3.Tulis halaman yang telah dipilih ke disk, ubah tabel halaman dan tabel frame.<br />
3.Baca halaman yang diinginkan kedalam frame kosong yang baru, ubah tabel halaman dan tabel frame.<br />
4.Ulang dari awal proses pengguna.</p>
<p>Jika tidak ada frame yang kosong, pentransferan dua halaman (satu masuk, satu keluar) akan dilakukan. Situasi ini secara efektif akan menggandakan waktu pelayanan kesalahan halaman dan meningkatkan waktu akses efektif. Kita dapat mengurangi pemborosan ini dengan menggunakan bit tambahan. Masing- masing halaman atau frame mungkin memiliki bit tambahan yang diasosiasikan didalam perangkat keras.</p>
<p>Pemindahan halaman merupakan dasar dari demand paging. Yang menjembatani pemisahan antara memori lojik dan memori fisik. Dengan mekanisme seperti ini, memori virtual yang sangat besar dapat disediakan untuk programmer dalam bentuk memori fisik yang lebih kecil. Dengan nondemand paging, alamat dari user dipetakan kedalam alamat fisik, jadi 2 set alamat dapat berbeda. Seluruh halaman dari proses masih harus berada di memori fisik. Dengan demand paging, ukuran dari ruang alamat logika sudah tidak dibatasi oleh memori fisik.</p>
<p>Kita harus menyelesaikan 2 masalah utama untuk mengimplementasikan demand paging. Kita harus mengembangkan algoritma pengalokasian frame dan algoritma pemindahan halaman. Jika kita memiliki banyak proses di memori, kita harus memutuskan berapa banyak frame yang akan dialokasikan ke masing-masing proses. Lebih jauh lagi, saat pemindahan halaman diinginkan, kita harus memilih frame yang akan dipindahkan. Membuat suatu algoritma yang tepat untuk menyelesaikan masalah ini adalah hal yang sangat penting.</p>
<p>Ada beberapa algoritma pemindahan halaman yang berbeda. Kemungkinan setiap Sistem Operasi memiliki skema pemindahan yang unik. Algoritma pemindahan yang baik adalah yang memiliki tingkat kesalahan halaman terendah.</p>
<p>Kita mengevaluasi algoritma dengan menjalankannya dalam string khusus di memori acuan dan menghitung jumlah kesalahan halaman. String dari memori acuan disebut string acuan (reference string).</p>
<p>Sebagai contoh, jika kita memeriksa proses khusus, kita mungkin akan mencatat urutan alamat seperti dibawah ini:</p>
<p>0100, 0432, 0101, 0612, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104, 0101, 0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105,</p>
<p>dimana pada 100 bytes setiap halaman, diturunkan menjadi string acuan seperti berikut:</p>
<p>1, 4, 1, 6, 1, 6, 1, 6, 1, 6, 1</p>
<p>Perlu diperhatikan bahwa selama jumlah frame meningkat, jumlah kesalahan halaman menurun. Penambahan memori fisik akan meningkatkan jumlah frame.<br />
Pemindahan Halaman Secara FIFO</p>
<p>Algoritma ini adalah algoritma paling sederhana dalam hal pemindahan halaman. Algoritma pemindahan FIFO (First In First Out) mengasosiasikan waktu pada saat halaman dibawa kedalam memori dengan masing-masing halaman. Pada saat halaman harus dipindahkan, halaman yang paling tua yang dipilih.</p>
<p>Pemindahan Halaman Secara Optimal</p>
<p>Salah satu akibat dari upaya mencegah terjadinya anomali Beladi adalah algoritma pemindahan halaman secara optimal. Algoritma ini memiliki tingkat kesalahan halaman terendah dibandingkan dengan algoritma-algoritma lainnya. Algoritma ini tidak akan mengalami anomaly Belady. Konsep utama dari algoritma ini adalah mengganti halaman yang tidak akan digunakan untuk jangka waktu yang paling lama. Algoritma ini menjamin kemungkinan tingkat kesalahan terendah untuk jumlah frame yang tetap</p>
<p>Pemindahan Halaman Secara LRU</p>
<p>Jika algoritma optimal sulit untuk dilakukan, mungkin kita dapat melakukan pendekatan terhadap algoritma tersebut. Jika kita menggunakan waktu yang baru berlalu sebagai pendekatan terhadap waktu yang akan datang, kita akan memindahkan halaman yang sudah lama tidak digunakan dalam jangka waktu yang terlama. Pendekatan ini disebut algoritma LRU (Least Recently Used).</p>
<p>Algoritma LRU mengasosiasikan dengan masing-masing halaman waktu dari halaman yang terakhir digunakan. Ketika halaman harus dipindahkan, LRU memilih halaman yang paling lama tidak digunakan pada waktu yang lalu. Inilah algoritma LRU, melihat waktu yang telah lalu, bukan waktu yang akan datang. Sebagai</p>
<p>Selain algoritma optimal, algoritma LRU juga dapat terhindar dari anomali Beladi. Salah satu kelas dari algoritma pemindahan halaman adalah algoritma stack, yang juga tidak akan pernah mengalami anomali Beladi. Algoritma stack ini menyimpan nomor-nomor halaman pada stack. Kapan pun suatu halaman ditunjuk, halaman ini dikeluarkan dari stack dan diletakkan di blok paling atas dari stack. Dengan cara seperti ini, blok paling atas dari stack selalu berisi halaman yang baru digunakan, sedangkan blok terbawah dari stack selalu berisi halaman yang sudah lama tidak digunakan. Karena suatu halaman dalam stack dapat dikeluarkan meski pun berada ditengah-tengah stack, maka implementasi terbaik untuk algoritma ini adalah dengan daftar mata rantai ganda (doubly linked list), dengan kepala dan ekor sebagai penunjuk. Pendekatan ini sangat tepat untuk perangkat lunak atau implementasi kode mikro dari algoritma LRUPemindahan Halaman Secara Perkiraan LRU</p>
<p>Hanya sedikit sistem komputer yang menyediakan perangkat lunak yang memberikan cukup dukungan terhadap algoritma pemindahan halaman secara LRU. Banyak sistem yang tidak menyediakan perangkat lunak yang memberikan dukungan terhadap algoritma LRU, sehingga terpaksa menggunakan algoritma lain, seperti FIFO. Banyak sistem menyediakan bantuan untuk menangani masalah ini, misalnya dengan bit acuan. Bit acuan untuk halaman diset oleh perangkat lunak kapan pun halaman tersebut ditunjuk. Bit acuan diasosiasikan dengan masing-masing isi dari tabel halaman.</p>
<p>Awalnya, seluruh bit dikosongkan oleh sistem operasi. Selama proses pengguna dijalankan, bit yang diasosiasikan ke masing-masing halaman acuan diset menjadi 1 oleh perangkat keras. Setelah beberapa waktu, kita dapat menentukan halaman mana yang sudah digunakan dan halaman mana yang belum digunakan dengan menguji bit-bit acuan. Informasi tersebut memberikan informasi penting untuk banyak algoritma pemindahan halaman yang memperkirakan halaman mana yang sudah lama tidak digunakan.<br />
Algoritma Additional-Reference-Bit</p>
<p>Kita bisa mendapatkan informasi tambahan mengenai urutan dengan mencatat bit-bit acuan pada suatu interval yang tetap. Kita dapat menyimpan 8-bit byte untuk masing-masing halaman pada tabel di memori. Pada interval tertentu, pencatat waktu (timer) melakukan interupsi dengan mentransfer kontrol kepada sistem operasi. Sistem operasi mengubah bit acuan untuk masing-masing halaman kedalam bit high-order dari 8-bit byte ini dan membuang bit low-order. Register pengganti 8-bit ini berisi sejarah penggunaan halaman dalam periode 8 waktu terakhir.</p>
<p>Sebagai contoh, seandainya register pengganti berisi 00000000, maka itu berarti halaman sudah tidak digunakan dalam periode 8 waktu terakhir, halaman yang digunakan paling tidak 1 kali akan memiliki nilai register penggati 11111111.<br />
Algoritma Second-Chance</p>
<p>Algoritma &#8220;second-chance&#8221; didasari oleh algoritma FIFO. Pada saat suatu halaman ditunjuk, kita akan menginspeksi bit acuannya. Jika bit acuan tersebut bernilai 0, kita memproses untuk membuang halaman ini. Jika bit acuan tersebut bernilai 1, kita berikan kesempatan kedua untuk halaman ini dan menyeleksi halaman FIFO selanjutnya.</p>
<p>Ketika suatu halaman mendapatkan kesempatan kedua, bit acuannya dikosongkan dan waktu tibanya direset menjadi saat ini. Karena itu, halaman yang mendapatkan kesempatan kedua tidak akan dipindahkan sampai seluruh halaman dipindahkan. Tambahan lagi, jika halaman yang digunakan cukup untuk menampung 1 set bit acuan, maka halaman ini tidak akan pernah dipindahkan.<br />
Algoritma Second-Chance (Yang Diperbaiki)</p>
<p>Kita dapat memperbaiki kekurangan dari algoritma second-chance dengan mempertimbangkan 2 hal sekaligus, yaitu bit acuan dan bit modifikasi. Dengan 2 bit ini, kita akan mendapatkan 4 kemungkinan yang akan terjadi, yaitu:</p>
<p>*</p>
<p>(0,0) tidak digunakan dan tidak dimodifikasi, bit terbaik untuk dipindahkan.<br />
*</p>
<p>(0,1) tidak digunakan tapi dimodifikasi, tidak terlalu baik untuk dipindahkan karena halaman ini perlu ditulis sebelum dipindahkan.<br />
*</p>
<p>(1,0) digunakan tapi tidak dimodifikasi, terdapat kemungkinan halaman ini akan segera digunakan lagi.<br />
*(1,1) digunakan dan dimodifikasi, halaman ini mungkin akan segera digunakan lagi dan halaman ini perlu ditulis ke disk sebelum dipindahkan.</p>
<p>Algoritma ini digunakan dalam skema manajemen memori virtual Macintosh.<br />
Dasar Perhitungan Pemindahan Halaman</p>
<p>Banyak algoritma-algoritma lain yang dapat digunakan untuk pemindahan halaman. Sebagai contoh, kita dapat menyimpan counter dari nomor acuan yang sudah dibuat untuk masing-masing halaman, dan mengembangkan 2 skema dibawah ini:</p>
<p>ALGORITMA PEMINDAHAN HALAMAN LFU Algoritma LFU (Least Frequently Used) menginginkan halaman dengan nilai terkecil untuk dipindahkan. Alasannya, halaman yang digunakan secara aktif akan memiliki nilai acuan yang besar.</p>
<p>ALGORITMA PEMINDAHAN HALAMAN MFU Algoritma MFU (Most Frequently Used) didasarkan pada argumen yang menyatakan bahwa halaman dengan nilai terkecil mungkin baru saja dimasukkan dan baru digunakan.</p>
<p>Kedua algoritma diatas tidaklah terlalu umum, hal ini disebabkan karena implementasi dari kedua algoritma diatas sangatlah mahal.<br />
Algoritma Page-Buffering</p>
<p>Prosedur lain sering digunakan untuk menambah kekhususan dari algoritma pemindahan halaman. Sebagai contoh, pada umumnya sistem menyimpan pool dari frame yang kosong. Prosedur ini memungkinkan suatu proses mengulang dari awal secepat mungkin, tanpa perlu menunggu halaman yang akan dipindahkan untuk ditulis ke disk karena frame-nya telah ditambahkan kedalam pool frame kosong.</p>
<p>Teknik seperti ini digunakan dalam sistem VAX/ VMS, dengan algoritma FIFO. Ketika algoritma FIFO melakukan kesalahan dengan memindahkan halaman yang masih digunakan secara aktif, halaman tersebut akan dengan cepat diambil kembali dari penyangga frame-kosong, untuk melakukan hal tersebut tidak ada I/O yang dibutuhkan. Metode ini diperlukan oleh VAX karena versi terbaru dari VAX tidak mengimplementasikan bit acuan secara tepat.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=43&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/pemindahan-halaman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Memori Virtual</title>
		<link>http://hoedy.wordpress.com/2009/05/12/memori-virtual/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/memori-virtual/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:57:16 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=41</guid>
		<description><![CDATA[Selama bertahun-tahun, pelaksanaan berbagai strategi managemen memori yang ada menuntut keseluruhan bagian proses berada di memori sebelum proses dapat mulai dieksekusi. Dengan kata lain, semua bagian proses harus memiliki alokasi sendiri pada memori fisiknya. Pada nyatanya tidak semua bagian dari program tersebut akan diproses, misalnya: 1.Terdapat pernyataan-pernyataan atau pilihan yang hanya akan dieksekusi jika kondisi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=41&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Selama bertahun-tahun, pelaksanaan berbagai strategi managemen memori yang ada menuntut keseluruhan bagian proses berada di memori sebelum proses dapat mulai dieksekusi. Dengan kata lain, semua bagian proses harus memiliki alokasi sendiri pada memori fisiknya.</p>
<p style="text-align:justify;"><span id="more-41"></span>Pada nyatanya tidak semua bagian dari program tersebut akan diproses, misalnya:<br />
1.Terdapat pernyataan-pernyataan atau pilihan yang hanya akan dieksekusi jika kondisi tertentu dipenuhi. Apabila kondisi tersebut tidak dipenuhi, maka pilihan tersebut tak akan pernah dieksekusi/ diproses. Contoh dari pilihan itu adalah: pesan-pesan error yang hanya akan muncul bila terjadi kesalahan dalam eksekusi program.<br />
2.Terdapat fungsi-fungsi yang jarang digunakan, bahkan sampai lebih dari 100x pemakaian.</p>
<p style="text-align:justify;">3.Terdapat pealokasian memori lebih besar dari yang sebenarnya dibutuhkan. Contoh pada: array, list, dan tabel.<br />
Hal-hal di atas telah menurunkan optimalitasi utilitas dari ruang memori fisik. Pada memori berkapasitas besar, hal ini mungkin tidak menjadi masalah. Akan tetapi, bagaimana jika memori yang disediakan terbatas?</p>
<p>Salah satu cara untuk mengatasinya adalah dengan overlay dan dynamic loading . Namun hal ini menimbulkan masalah baru karena implementasinya yang rumit dan penulisan program yang akan memakan tempat di memori. Tujuan semula untuk menghemat memori bisa jadi malah tidak tercapai apabila program untuk overlay dan dynamic loading . malah lebih besar daripada program yang sebenarnya ingin dieksekusi.</p>
<p>Maka sebagai solusi untuk masalah-masalah ini digunakanlah konsep memori virtual.</p>
<p style="text-align:justify;">Pengertian<br />
Memori virtual merupakan suatu teknik yang memisahkan antara memori logis dan memori fisiknya. Teknik ini mengizinkan program untuk dieksekusi tanpa seluruh bagian program perlu ikut masuk ke dalam memori.</p>
<p>Berbeda dengan keterbatasan yang dimiliki oleh memori fisik, memori virtual dapat menampung program dalam skala besar, melebihi daya tampung dari memori utama yang tersedia.</p>
<p>Prinsip dari memori virtual yang patut diingat adalah bahwa: &#8220;Kecepatan maksimum eksekusi proses di memori virtual dapat sama, tetapi tidak pernah melampaui kecepatan eksekusi proses yang sama di sistem tanpa menggunakan memori virtual.&#8221;</p>
<p>Konsep memori virtual pertama kali dikemukakan Fotheringham pada tahun 1961 pada sistem komputer Atlas di Universitas Manchester, Inggris (Hariyanto, Bambang : 2001).<br />
Keuntungan</p>
<p>Sebagaimana dikatakan di atas bahwa hanya sebagian dari program yang diletakkan di memori. Hal ini berakibat pada:</p>
<p>*</p>
<p>Berkurangnya I/O yang dibutuhkan (lalu lintas I/O menjadi rendah). Misal, untuk program butuh membaca dari disk dan memasukkan dalam memory setiap kali diakses.<br />
*</p>
<p>Berkurangnya memori yang dibutuhkan (space menjadi lebih leluasa). Contoh, untuk program 10 MB tidak seluruh bagian dimasukkan dalam memori. Pesan-pesan error hanya dimasukkan jika terjadi error.<br />
*Meningkatnya respon, sebagai konsekuensi dari menurunnya beban I/O dan memori.<br />
*Bertambahnya jumlah user yang dapat dilayani. Ruang memori yang masih tersedia luas memungkinkan komputer untuk menerima lebih banyak permintaan dari user.</p>
<p>Implementasi</p>
<p>Gagasan dari memori virtual adalah ukuran gabungan program, data dan stack melampaui jumlah memori fisik yang tersedia. Sistem operasi menyimpan bagian-bagian proses yang sedang digunakan di memori utama (main memory) dan sisanya ditaruh di disk. Begitu bagian di disk diperlukan, maka bagian di memori yang tidak diperlukan akan disingkirkan (swap-out) dan diganti (swap-in) oleh bagian disk yang diperlukan itu.</p>
<p>Memori virtual diimplementasikan dalam sistem multiprogramming. Misalnya: 10 program dengan ukuran 2 Mb dapat berjalan di memori berkapasitas 4 Mb. Tiap program dialokasikan 256 KByte dan bagian-bagian proses di-swap masuk dan keluar memori begitu diperlukan. Dengan demikian, sistem multiprogramming menjadi lebih efisien.</p>
<p>Memori virtual dapat dilakukan melalui dua cara:</p>
<p>1.</p>
<p>Permintaan pemberian halaman (demand paging).<br />
2.</p>
<p>Permintaan segmentasi (demand segmentation). Contoh: IBM OS/2. Algoritma dari permintaan segmentasi lebih kompleks, karenanya jarang diimplementasikan.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=41&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/memori-virtual/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>SEGMENTASI</title>
		<link>http://hoedy.wordpress.com/2009/05/12/segmentasi/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/segmentasi/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:45:35 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=39</guid>
		<description><![CDATA[Salah satu aspek penting dari managemen memori yang tidak dapat dihindari dari pemberian halaman adalah pemisahan cara pandang pengguna dengan tentang bagaimana memori dipetakan dengan keadaan yang sebenarnya. Pada kenyataannya pemetaan tersebut memperbolehkan pemisahan antara memori logis dan memori fisik. Metode Dasar Bagaimanakah cara pandang pengguna tentang bagaimana memori dipetakan? Apakah pengguna menganggap bahwa memori [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=39&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Salah satu aspek penting dari managemen memori yang tidak dapat dihindari dari pemberian halaman adalah pemisahan cara pandang pengguna dengan tentang bagaimana memori dipetakan dengan keadaan yang sebenarnya. Pada kenyataannya pemetaan tersebut memperbolehkan pemisahan antara memori logis dan memori fisik.</p>
<p><span id="more-39"></span></p>
<p style="text-align:justify;">Metode Dasar<br />
Bagaimanakah cara pandang pengguna tentang bagaimana memori dipetakan? Apakah pengguna menganggap bahwa memori dianggap sebagai sebuah kumpulan dari byte-byte, yang mana sebagian berisi instruksi dan sebagian lagi merupakan data, atau apakah ada cara pandang lain yang lebih layak digunakan? Ternyata programmer dari sistem tidak menganggap bahwa memori adalah sekumpulan byte-byte yang linear. Akan tetapi, mereka lebih senang dengan menganggap bahwa memori adalah sebagai kumpulan dari segmen-segmen yang berukuran beragam tanpa adanya pengurutan penempatan dalam memori fisik.</p>
<p>Ketika kita menulis suatu program, kita akan menganggapnya sebagai sebuah program dengan sekumpulan dari subrutin, prosedur, fungsi, atau variabel. mungkin juga terdapat berbagai macam struktur data seperti: tabel, array, stack, variabel, dsb. Tiap-tiap modul atau elemen-elemen dari data ini dapat di-referensikan dengan suatu nama, tanpa perlu mengetahui dimana alamat sebenarnya elemen-elemen tersebut disimpan di memori. dan kita juga tidak perlu mengetahui apakah terdapat urutan penempatan dari program yang kita buat. Pada kenyataannya, elemen-elemen yang terdapat pada sebuah segmen dapat ditentukan lokasinya dengan menambahkan offset dari awal alamat segmen tersebut.</p>
<p>Segmentasi adalah sebuah bagian dari managemen memori yang mengatur pengalamatan dari memori yang terdiri dari segmen-segmen. logical address space adalah kumpulan dari segmen-segmen yang mana tiap-tiap segmen mempunyai nama dan panjang. alamat tersebut menunjukkan alamat dari segmen tersebut dan offset-nya didalam segmen-segmen tersebut. pengguna kemudian menentukan pengalamatan dari setiap segmen menjadi dua bentuk, nama segmen dan offset dari segmen tersebut (Hal ini berbeda dengan pemberian halaman, dimana pengguna hanya menentukan satu buah alamat, dimana pembagian alamat menjadi dua dilakukan oleh perangkat keras, semua ini tidak dapat dilihat oleh user).</p>
<p>Untuk kemudahan pengimplementasian, segmen-segmen diberi nomor dan direferensikan dengan menggunakan penomoran tersebut, daripada dengan menggunakan nama. maka, logical address space terdiri dari dua tuple yaitu: (nomor-segmen, offset) Pada umumnya, program dari pengguna akan dikompilasi, dan kompilator tersebut akan membuat segmen-segmen tersebut secara otomatis. Jika mengambil contoh kompilator dari Pascal, maka kemungkinan kompilator tersebut akan membuat beberapa segmen yang terpisah untuk<br />
1.Variabel Global;<br />
2.Prosedur dari pemanggilan stack, untuk menyimpan parameter dan pengembalian alamat;<br />
3.Porsi dari kode untuk setiap prosedur atau fungsi; dan<br />
4.Variabel lokal dari setiap prosedur dan fungsi.</p>
<p>Perangkat Keras</p>
<p>Walau pun pengguna sekarang dapat mengacu ke suatu objek yang berada di dalam program dengan menggunakan pengalamatan secara dua dimensi, akan tetapi, pada kenyataannya tetap saja pada memori fisik akan dipetakan ke dalam pengalamatan satu dimensi yang terdiri dari urutan dari byte-byte. Maka, kita harus mendefinisikan suatu implementasi untuk memetakan pengalamatan dua dimensi yang dilakukan oleh pengguna ke dalam pengalamatan satu dimensi yang terdapat di memori fisik. pemetaan ini dapat di lakukan dengan menggunakan tabel segmen. Setiap anggota dari tabel segmen mempunyai basis dan limit yang akan menentukan letak dari segmen tersebut di dalam memori.<br />
Pemeliharaan dan Pembagian</p>
<p>Dengan dilakukannya pengelompokan antara segmen-segmen yang sama, maka pemeliharaan dari segmen tersebut dapat menjadi lebih mudah, walau pun didalam segmen tersebut sebagian berisi instruksi dan sebagian lagi berisi data. Dalam arsitektur modern, instruksi-instruksi yang digunakan tidak dapat diubah tanpa campur tangan pengguna, oleh karena itu, segmen yang berisi instruksi dapat diberi label read only atau hanya dapat dijalankan saja. Perangkat keras yang bertugas untuk melakukan pemetaan ke memori fisik akan melakukan pemeriksaan terhadap bit proteksi yang terdapat pada segmen, sehingga pengaksesan memori secara ilegal dapat dihindari, seperti suatu usaha untuk menulis ke area yang berstatus tidak boleh dimodifikasi.</p>
<p>Keuntungan lain dari segmentasi adalah menyangkut masalah pembagian penggunaan kode atau data. Setiap proses mempunyai tabel segmennya sendiri, dimana ini akan digunakan oleh dispatcher untuk menentukan tabel segmen dari perangkat keras yang mana akan digunakan ketika proses yang bersangkutan di eksekusi oleh CPU. Segmen akan berbagi ketika anggota dari elemen tabel segmen yang berasal dari dua proses yang berbeda menunjuk ke lokasi fisik yang sama. Pembagian tersebut terjadi pada level segmen, maka, informasi apa pun dapat dibagi jika didefinisikan pada level segmen. Bahkan beberapa segmen pun dapat berbagi, sehingga sebuah program yang terdiri dari beberapa segmen pun dapat saling berbagi pakai.<br />
Fragmentasi</p>
<p>Penjadwalan jangka-panjang harus mencari dan mengalokasikan memori untuk semua segmen dari program pengguna. Situasi ini mirip dengan pemberian halaman kecuali bahwa segmen-segmen ini mempunyai panjang yang variabel; sedangkan pada halaman, semua mempunyai ukuran yang sama. maka, masalah yang dihadapi adalah pengalamatan memori secara dinamis, hal ini biasanya dapat diselesaikan dengan menggunakan algoritma best-fit atau algoritma first-fit.</p>
<p>Segmentasi dapat menyebabkan terjadi fragmentasi eksternal, ini terjadi ketika semua blok memori yang dapat dapat dialokasikan terlalu sedikit untuk mengakomodasi sebuah segmen. Dalam kasus ini, proses hanya harus menunggu sampai terdapat cukup tempat untuk menyimpan segmen tersebut di memori, atau, melakukan suatu pemampatan dapat digunakan untuk membuat ruang kosong dalam memori menjadi lebih besar. Karena segmentasi pada dasarnya adalah algoritma penempatan secara dinamis, maka kita dapat melakukan pemampatan memori kapan saja kita mau. Jika CPU Scheduler harus menunggu untuk satu proses, karena masalah pengalokasian memori, ini mungkin akan dilewati untuk mencari proses yang berprioritas lebih kecil untuk dieksekusi lebih dulu untuk membebaskan ruang kosong dalam memori.</p>
<p>Seberapa seriuskah masalah fragmentasi eksternal dalam segmentasi? Jawaban dari pertanyaan ini tergantung kepada besarnya rata-rata segmen yang tersimpan didalam memori. Jika ukuran rata-rata dari segmen menggunakan sedikit tempat di memori, maka fragmentasi eksternal yang dilakukan juga akan sedikit terjadi.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=39&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/segmentasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>ALOKASIU MEMORI YANG BERDAMPINGAN</title>
		<link>http://hoedy.wordpress.com/2009/05/12/alokasiu-memori-yang-berdampingan/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/alokasiu-memori-yang-berdampingan/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:39:08 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=36</guid>
		<description><![CDATA[Sebuah proses membutuhkan memori untuk dieksekusi. Sebuah proses dapat ditukar sementara keluar memori ke backing store (disk), dan kemudian dibawa masuk lagi ke memori untuk dieksekusi. Sebagai contoh, asumsi multiprogramming, dengan penjadualan algoritma CPU Round-Robin. Ketika kuantum habis, manager memori akan mulai menukar keluar proses yang selesai, dan memasukkan ke memori proses yang bebas. Sementara [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=36&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Sebuah proses membutuhkan memori untuk dieksekusi. Sebuah proses dapat ditukar sementara keluar memori ke backing store (disk), dan kemudian dibawa masuk lagi ke memori untuk dieksekusi. Sebagai contoh, asumsi multiprogramming, dengan penjadualan algoritma CPU Round-Robin. Ketika kuantum habis, manager memori akan mulai menukar keluar proses yang selesai, dan memasukkan ke memori proses yang bebas. Sementara penjadualan CPU akan mangalokasikan waktu untuk proses lain di memori. Ketika tiap proses menghabiskan waktu kuantumnya, proses akan ditukar dengan proses lain. Idealnya memori manager, dapat menukar proses-proses cukup cepat, sehingga selalu ada proses dimemori, siap dieksekusi, ketika penjadual CPU ingin menjadual ulang CPU. Besar kuantum juga harus cukup besar, sehingga jumlah perhitungan yang dilakukan antar pertukaran masuk akal.</p>
<p style="text-align:justify;"><span id="more-36"></span> Variasi dari kebijakan swapping ini, digunakan untuk algoritma penjadualan berdasarkan prioritas. Jika proses yang lebih tinggi tiba, dan minta dilayani, memori manager dapat menukar keluar proses dengan prioritas yang lebih rendah, sehingga dapat memasukkan dan mengeksekusi proses dengan prioritas yang lebih tinggi. Ketika proses dengan prioritas lebih tinggi selesai, proses dengan prioritas yang lebih rendah, dapat ditukar masuk kembali, dan melanjutkan. Macam-macam pertukaran ini kadang disebut roll out, dan roll in.<br />
Normalnya, sebuah proses yang ditukar keluar, akan dimasukkan kembali ke tempat memori yang sama dengan yang digunakan sebelumnya. Batasan ini dibuat oleh method pengikat alamat. Jika pengikatan dilakukan saat assemble atau load time, maka proses tidak bisa dipindahkan ke lokasi yang berbeda. Jika menggunakan pengikatan waktu eksekusi, maka akan mungkin menukar proses kedalam tempat memori yang berbeda. Karena alamat fisik dihitung selama proses eksekusi.<br />
Pertukaran membutuhkan sebuah backing store. Backing store biasanya adalah sebuah disk yang cepat. Cukup besar untuk mengakomodasi semua kopi tampilan memori. Sistem memelihara ready queue terdiri dari semua proses yang mempunyai tampilan memori yang ada di backing store, atau di memori dan siap dijalankan. Ketika penjadual CPU memutuskan untuk mengeksekusi sebuah proses, dia akan memanggil dispatcher, yang mengecek dan melihat apakah proses berikutnya ada diantrian memori. Jika proses tidak ada, dan tidak ada ruang memori yang kosong, dispatcher menukar keluar sebuah proses dan memaasukan proses yang diinginkan. Kemudian memasukkan ulang register dengan normal, dan mentransfer pengendali ke proses yang diinginkan.<br />
Konteks waktu pergantian pada sistem swapping, lumayan tinggi. Untuk efisiensi kegunaan CPU, kita ingin waktu eksekusi untuk tiap proses lebih lama dari waktu pertukaran. Karenanya digunakan CPU penjadualan roun-robin, dimana kuantumnya harus lebih besar dari waktu pertukaran.<br />
Perhatikan bahwa bagian terbesar dari waktu pertukaran, adalah waktu pengiriman. Total waktu pengiriman langsung didapat dari jumlah pertukaran memori.<br />
Proses dengan kebutuhan memori dinamis, akan membutuhkan system call (meminta dan melepaskan memori), untuk memberi tahu sistem operasi tentang perubahan kebutuhan memori.<br />
Ada beberapa keterbatasan swapping. Jika kita ingin menukar sebuah proses kita harus yakin bahwa proses sepenuhnya diam. Konsentrasi lebih jauh, jika ada penundaan I/O. Sebuah proses mungkin menunggu I/O, ketika kita ingin menukar proses itu untuk mengosongkan memori. Jika I/O secara asinkronus, mengakses memori dari I/O buffer, maka proses tidak bisa ditukar. Misalkan I/O operation berada di antrian, karena device sedang sibuk. Maka bila kita menukar keluar proses P1 dan memasukkan P2, mungkin saja operasi I/O akan berusaha masuk ke memori yang sekarang milik P2. Dua solusi utama masalah ini adalah<br />
1.Jangan pernah menukar proses yang sedang menunggu I/O.<br />
2.Untuk mengeksekusi operasi I/O hanya pada buffer sistem operasi.<br />
Secara umum, ruang pertukaran dialokasikan sebagai potongan disk, terpisah dari sistem berkas, sehingga bisa digunakan secepat mungkin.<br />
Belakangan pertukaran standar pertukaran digunakan dibeberapa sistem. Ini membutuhkan terlalu banyak waktu untuk menukar dari pada untuk mengeksekusi untuk solusi managemen memori yang masuk akal. Modifikasi swapping digunakan dibanyak versi di UNIX. Pertukaran awalnya tidak bisa, tapi akan mulai bila banyak proses yang jalan dan menggunakan batas jumlah memori.</p>
<p style="text-align:justify;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/36/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/36/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/36/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=36&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/alokasiu-memori-yang-berdampingan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>Penukaran (Swap)</title>
		<link>http://hoedy.wordpress.com/2009/05/12/penukaran-swap/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/penukaran-swap/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:35:36 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=33</guid>
		<description><![CDATA[Sebuah proses membutuhkan memori untuk dieksekusi. Sebuah proses dapat ditukar sementara keluar memori ke backing store (disk), dan kemudian dibawa masuk lagi ke memori untuk dieksekusi. Sebagai contoh, asumsi multiprogramming, dengan penjadualan algoritma CPU Round-Robin. Ketika kuantum habis, manager memori akan mulai menukar keluar proses yang selesai, dan memasukkan ke memori proses yang bebas. Sementara [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=33&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sebuah proses membutuhkan memori untuk dieksekusi. Sebuah proses dapat ditukar sementara keluar memori ke backing store (disk), dan kemudian dibawa masuk lagi ke memori untuk dieksekusi. Sebagai contoh, asumsi multiprogramming, dengan penjadualan algoritma CPU Round-Robin. Ketika kuantum habis, manager memori akan mulai menukar keluar proses yang selesai, dan memasukkan ke memori proses yang bebas. Sementara penjadualan CPU akan mangalokasikan waktu untuk proses lain di memori. Ketika tiap proses menghabiskan waktu kuantumnya, proses akan ditukar dengan proses lain. Idealnya memori manager, dapat menukar proses-proses cukup cepat, sehingga selalu ada proses dimemori, siap dieksekusi, ketika penjadual CPU ingin menjadual ulang CPU. Besar kuantum juga harus cukup besar, sehingga jumlah perhitungan yang dilakukan antar pertukaran masuk akal.</p>
<p><span id="more-33"></span></p>
<p>Variasi dari kebijakan swapping ini, digunakan untuk algoritma penjadualan berdasarkan prioritas. Jika proses yang lebih tinggi tiba, dan minta dilayani, memori manager dapat menukar keluar proses dengan prioritas yang lebih rendah, sehingga dapat memasukkan dan mengeksekusi proses dengan prioritas yang lebih tinggi. Ketika proses dengan prioritas lebih tinggi selesai, proses dengan prioritas yang lebih rendah, dapat ditukar masuk kembali, dan melanjutkan. Macam-macam pertukaran ini kadang disebut roll out, dan roll in.</p>
<p>Normalnya, sebuah proses yang ditukar keluar, akan dimasukkan kembali ke tempat memori yang sama dengan yang digunakan sebelumnya. Batasan ini dibuat oleh method pengikat alamat. Jika pengikatan dilakukan saat assemble atau load time, maka proses tidak bisa dipindahkan ke lokasi yang berbeda. Jika menggunakan pengikatan waktu eksekusi, maka akan mungkin menukar proses kedalam tempat memori yang berbeda. Karena alamat fisik dihitung selama proses eksekusi.</p>
<p>Pertukaran membutuhkan sebuah backing store. Backing store biasanya adalah sebuah disk yang cepat. Cukup besar untuk mengakomodasi semua kopi tampilan memori. Sistem memelihara ready queue terdiri dari semua proses yang mempunyai tampilan memori yang ada di backing store, atau di memori dan siap dijalankan. Ketika penjadual CPU memutuskan untuk mengeksekusi sebuah proses, dia akan memanggil dispatcher, yang mengecek dan melihat apakah proses berikutnya ada diantrian memori. Jika proses tidak ada, dan tidak ada ruang memori yang kosong, dispatcher menukar keluar sebuah proses dan memaasukan proses yang diinginkan. Kemudian memasukkan ulang register dengan normal, dan mentransfer pengendali ke proses yang diinginkan.</p>
<p>Konteks waktu pergantian pada sistem swapping, lumayan tinggi. Untuk efisiensi kegunaan CPU, kita ingin waktu eksekusi untuk tiap proses lebih lama dari waktu pertukaran. Karenanya digunakan CPU penjadualan roun-robin, dimana kuantumnya harus lebih besar dari waktu pertukaran.</p>
<p>Perhatikan bahwa bagian terbesar dari waktu pertukaran, adalah waktu pengiriman. Total waktu pengiriman langsung didapat dari jumlah pertukaran memori.</p>
<p>Proses dengan kebutuhan memori dinamis, akan membutuhkan system call (meminta dan melepaskan memori), untuk memberi tahu sistem operasi tentang perubahan kebutuhan memori.</p>
<p>Ada beberapa keterbatasan swapping. Jika kita ingin menukar sebuah proses kita harus yakin bahwa proses sepenuhnya diam. Konsentrasi lebih jauh, jika ada penundaan I/O. Sebuah proses mungkin menunggu I/O, ketika kita ingin menukar proses itu untuk mengosongkan memori. Jika I/O secara asinkronus, mengakses memori dari I/O buffer, maka proses tidak bisa ditukar. Misalkan I/O operation berada di antrian, karena device sedang sibuk. Maka bila kita menukar keluar proses P1 dan memasukkan P2, mungkin saja operasi I/O akan berusaha masuk ke memori yang sekarang milik P2. Dua solusi utama masalah ini adalah<br />
1.Jangan pernah menukar proses yang sedang menunggu I/O.<br />
2.Untuk mengeksekusi operasi I/O hanya pada buffer sistem operasi.</p>
<p>Secara umum, ruang pertukaran dialokasikan sebagai potongan disk, terpisah dari sistem berkas, sehingga bisa digunakan secepat mungkin.</p>
<p>Belakangan pertukaran standar pertukaran digunakan dibeberapa sistem. Ini membutuhkan terlalu banyak waktu untuk menukar dari pada untuk mengeksekusi untuk solusi managemen memori yang masuk akal. Modifikasi swapping digunakan dibanyak versi di UNIX. Pertukaran awalnya tidak bisa, tapi akan mulai bila banyak proses yang jalan dan menggunakan batas jumlah memori.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=33&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/penukaran-swap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>MEMORY</title>
		<link>http://hoedy.wordpress.com/2009/05/12/memory/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/memory/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:33:26 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[Memory]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=31</guid>
		<description><![CDATA[Latar Belakang Memori merupakan inti dari sistem komputer modern. CPU mengambil instruksi dari memori sesuai yang ada pada program counter. Instruksi dapat berupa menempatkan/ menyimpan dari/ ke alamat di memori, penambahan, dan sebagainya. Dalam managemen memori ini, kita akan membahas bagaimana urutan alamat memori yang dibuat oleh program yang berjalan. Pengikatan Alamat Dalam banyak kasus, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=31&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Latar Belakang</p>
<p>Memori merupakan inti dari sistem komputer modern. CPU mengambil instruksi dari memori sesuai yang ada pada program counter. Instruksi dapat berupa menempatkan/ menyimpan dari/ ke alamat di memori, penambahan, dan sebagainya. Dalam managemen memori ini, kita akan membahas bagaimana urutan alamat memori yang dibuat oleh program yang berjalan.<br />
Pengikatan Alamat</p>
<p>Dalam banyak kasus, program akan berada dalam beberapa tahapan sebelum dieksekusi. Alamat-alamat yang dbutuhkan mungkin saja direpresentasikan dalam cara yang berbeda dalam tahapan-tahapan ini. Alamat dalam kode program masih berupa simbolik. Alamat ini akan diikat oleh kompilator ke alamat memori yang dapat diakses (misalkan 14 byte, mulai dari sebuah modul). Kemudian linkage editor dan loader, akan mengikat alamat fisiknya (misalkan 17014). Setiap pengikatan akan memetakan suatu ruang alamat ke lainnya.</p>
<p><span id="more-31"></span><br />
Secara klasik, instruksi pengikatan dan data ke alamat memori dapat dilakukan dalam beberapa tahap:</p>
<p>*waktu compile: jika diketahui pada waktu compile, dimana proses ditempatkan di memori. Untuk kemudian kode absolutnya dapat di buat. Jika keumdian amat awalnya berubah, maka harus di compile ulang.<br />
*waktu penempatan: Jika tidak diketahui dimana poses ditempatkan di memori, maka kompilator harus mmbuagt kode yang dapat dialokasikan. Dalam kasus pengikatan akan ditunda sampai waktu penempatan. Jika alamat awalnya berubah, kita hanya perlu menempatkan ulang kode, untuk menyesuaikan dengan perubahan.<br />
*waktu eksekusi: Jika proses dapat dipindahkan dari suatu segmen memori ke lainnya selama dieksekusi. Pengikatan akan ditunda sampai run-time.</p>
<p>Ruang Alamat Fisik dan Logik</p>
<p>Alamat yang dibuat CPU akan merujuk ke sebuah alamat logik. Sedangkan alamat yang dilihat oleh memori adalah alamat yang dimasukkan ke register di memori, merujuk pada alamat fisik pada pengikatan alamat, waktu compile dan waktu penempatan mnghasilkan daerah dimana alamat logik dan alamat fisik sama. Sedangkan pada waktu eksekusi menghasilkan alamat fisik dan logik yang berbeda. Kita biasanya menyebut alamat logik dengan alamat virtual. Kumpulan alamat logik yang dibuat oleh program adalah ruag alamat logik. Kumpulan alamat fisik yang berkoresponddensi dengan alamat logik sibut ruang alamat fisik. Pemetaan dari virtual ke alamat fisik dialkukan oleh Memory-Management Unit (MMU), yang merupakan sebuah perangkat keras.</p>
<p>Register utamanya disebut relocation-register. Nilai pada relocation register bertambah setiap alamat dibuat oleh proses pengguna, pada waktu yang sama alamat ini dikirim ke memori. Program pengguna tidak dapat langsung mengakses memori. Ketika ada program yang menunjuk ke alamat memori, kemudian mengoperasikannya, dan menaruh lagi di memori, akan di lokasikan awal oleh MMU, karena program pengguna hanya bernterkasi dengan alamat logik.</p>
<p>Konsep untuk memisahkan ruang alamat logik dan ruang alamat fisik, adalah inti dari managemen memori yang baik.<br />
Penempatan Dinamis</p>
<p>Telah kita ketahui seluruh proses dan data berada memori fisik ketika di eksekusi. Ukuran dari memori fisik terbatas. Untuk mendapatkan utilisasi ruang memori yang baik, kita melakukan penempatan dinamis. Dengan penempatan dinamis, sebuah rutin tidak akan ditempatkan sampai dipanggil. Semua rutin diletakan di disk, dalam format yang dapat di lokasikan ulang. Program utama di tempatkan di memori dan dieksekusi. Jika sebuah rutin memanggil rutin lainnya, maka akan di cek dulu apakah rutin yang dipanggil ada di dalam memori atau tidak, jika tidak ada maka linkage loader dipanggil untuk menempatkan rutin yang diinginkan ke memori dan memperbaharui tabel alamat program untuk menyesuaikan perubahan. Kemudian kontrol diletakan pada rutin yang baru ditempatkan.</p>
<p>Keuntungan dari penempatan dinamis adalah rutin yang tidak digunakan tidak pernah ditempatkan. Metode ini berguna untuk kode dalam jumlah banyak, ketika muncul kasus-kasus yang tidak lazim, seperti rutin yang salah. Dalam kode yag besar, walau pun ukuran kode besar, tapi yang ditempatkan dapat jauh lebih kecil.</p>
<p>Penempatan Dinamis tidak didukung oleh sistem operasi. Ini adalah tanggung-jawab para pengguna untuk merancang program yang mengambil keuntungan dari metode ini. Sistem Operasi dapat membantu pembuat program dengan menyediakan libary rutin untuk mengimplementasi penempatan dinamis.<br />
Perhubungan Dinamis dan Berbagi Library</p>
<p>Pada proses dengan banyak langkah, ditemukan juga perhubungan-perhubungan library yang dinamis. Beberapa sistem operasi hanya mendukung perhubungan yang dinamis, dimana sistem bahasa library diperlakukan seperti objek modul yang lain, dan disatukan oleh pemuat kedalam tampilan program biner. Konsep perhubungan dinamis, serupa dengan konsep penempatan dinamis. Penempatan lebih banyak ditunda selama waktu eksekusi, dari pada lama penundaan oleh perhubungan dinamis. Keistimewaan ini biasanya digunakan dalam library sistem, seperti library bahasa sub-rutin. Tanpa fasilitas ini, semua program dalam sebuah sistem, harus mempunyai kopi dari libary bahasa mereka (atau setidaknya referensi rutin oleh program) termasuk dalam tampilan yang dapat dieksekusi. Kebutuhan ini sangat boros baik untuk disk, mau pun memori utama. Dengan penempatan dinamis, sebuah potongan dimasukkan kedalam tampilan untuk setiap rujukan library subrutin. Potongan ini adalah sebuah bagian kecil dari kode yang menunjukan bagaimana mealokasikan libary rutin di memori denga tepat, atau bagaimana menempatkan library jika rutin belum ada.</p>
<p>Ketika potongan ini dieksekusi, dia akan memeriksa dan melihat apakah rutin yang dibutuhkan sudah ada di memory. Jika rutin yang dibutuhkan tidak ada di memori, program akan menempatkannya ke memori. Jika rutin yang dibutuhkan ada dimemori, maka potongan akan mengganti dirinya dengan alamat dari rutin, dan mengeksekusi rutin. Demikianlah, berikutnya ketika segmentasi kode dicapai, rutin library dieksekusi secara langsung, dengan begini tidak ada biaya untuk penghubungan dinamis. Dalam skema ini semua proses yang menggunakan sebuah library bahasa, mengeksekusi hanya satu dari kopi kode library.</p>
<p>Fasilitas ini dapat diperluas menjadi pembaharuan library (seperti perbaikan bugs). Sebuah libary dapat ditempatkan lagi dengan versi yang lebih baru dan semua program yang merujuk ke library akan secara otomatis menggunakan versi yang baru. Tanpa penempatan dinamis, semua program akan akan membutuhkan penempatan kembali, untuk dapat mengakses library yang baru. Jadi semua program tidak secara sengaja mengeksekusi yang baru, perubahan versi library, informasi versi dapat dimasukkan kedalam memori, dan setiap program menggunakan informasi versi untuk memutuskan versi mana yang akan digunakan dari kopi library. Sedikit perubahan akan tetap meggunakan nomor versi yang sama, sedangkan perubhan besar akan menambah satu versi seblumnya. Karenanya program yang dikompile dengan versi yang baru akan dipengaruhi dengan perubahan yang terdapat di dalamnya. Program lain yang berhubungan sebelum library baru diinstal, akan terus menggunakan library lama. Sistem ini juga dikenal sebagai berbagi library.<br />
Lapisan Atas</p>
<p>Karena proses dapat lebih besar daripada memori yang dialokasikan, kita gunakan lapisan atas. Idenya untuk menjaga agar di dalam memori berisi hanya instruksi dan data yang dibutuhkan dalam satuan waktu. Ketika instruksi lain dibutuhkan instruksi akan dimasukkan kedalam ruang yang ditempati sebelumnya oleh oleh instruksi yang tidak lagi dibutuhkan.</p>
<p>Sebagai contoh, sebuah two-pass assembler. selama pass1 dibangun sebuah tabel simbol, kemudian selama pass2, akan membuat kode bahasa mesin. kita dapat mempartisi sebuah assembler menjadi kode pass1, kode pass2, dan simbol tabel. dan rutin biasa digunakan untuk kedua pass1 dan pass2.</p>
<p>Untuk menempatkan semuanya sekaligus, kita akan membutuhkan 200K memori. Jika hanya 150K yang tersedia, kita tidak dapat menjalankan proses. Bagaimana pun perhatikan bahwa pass1 dan pass2 tidak harus berada di memori pada saat yang sama. Kita mendefinisikan dua lapisan atas. Lapisan atas A untuk pass1, tabel simbol dan rutin, lapisan atas 2 untuk simbol tabel, rutin, dan pass2.</p>
<p>Kita menambahkan sebuah driver lapisan atas (10K) dan mulai dengan lapisan atas A di memori. Ketika selesai pass1, lompat ke driver, dan membaca lapisan atas B kedalam memori, meniban lapisan atas A, dan mengirim kontrol ke pass2. Lapisan atas A butuh hanya 120K, dan B membutuhkan 150K memori. Kita sekarang dapat menjalankan assembler dalam 150K memori. Penempatan akan lebih cepat, karena lebih sedikit data yang ditransfer sebelum eksekusi dimulai. Jalan program akan lebih lambat, karena ekstra I/O dari kode lapisan atas B melalui kode lapisan atas A.</p>
<p>Seperti dalam penempatan dinamis, lapisan atas tidak membutuhkan dukungan tertentu dari sistem operasi. Implementasi dapat dilakukan secara lengkap oleh user dengan berkas struktur yang sederhana, membasa dari berkas ke memori, dan lompat dari memori tersebut, dan mengeksekusi instruksi yang baru dibaca. Sistem operasi hanya memperhatikan jika ada lebih banyak I/O dari biasanya.</p>
<p>Di sisi lain programmer harus mendesain program dengan struktur lapisan atas yang layak. Tugas ini membutuhkan pengetahuan yang komplit tentang struktur dari program, kode dan struktur data.</p>
<p>Pemakaian dari lapisan atas, dibatasi oleh mikrokomputer, dan sistem lain yang mempunyai batasan jumlah memori fisik, dan kurangnya dukungan perangkat keras, untuk teknik yang lebih maju. Teknik otomatis menjalankan program besar dalam dalam jumlah memori fisik yang terbatas, lebih diutamakan.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=31&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>DEADLOCK</title>
		<link>http://hoedy.wordpress.com/2009/05/12/deadlock/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/deadlock/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:26:09 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[DEadlock]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=29</guid>
		<description><![CDATA[Latar Belakang Misalkan pada suatu komputer terdapat dua buah program, sebuah tape drive dan sebuah printer. Program A mengontrol tape drive, sementara program B mengontrol printer. Setelah beberapa saat, program A meminta printer, tapi printer masih digunakan. Berikutnya, B meminta tape drive, sedangkan A masih mengontrol tape drive. Dua program tersebut memegang kontrol terhadap sumber [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=29&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;"><strong>Latar Belakang</strong><br />
Misalkan pada suatu komputer terdapat dua buah program, sebuah tape drive dan sebuah printer. Program A mengontrol tape drive, sementara program B mengontrol printer. Setelah beberapa saat, program A meminta printer, tapi printer masih digunakan. Berikutnya, B meminta tape drive, sedangkan A masih mengontrol tape drive. Dua program tersebut 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. Kondisi inilah yang disebut Deadlock atau pada beberapa buku disebut Deadly Embrace<span id="more-29"></span><br />
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.<br />
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.<br />
Contoh berikut ini terjadi pada sebuah persimpangan jalan. Beberapa hal yang dapat membuat deadlock pada suatu persimpangan, yaitu:<br />
*Terdapat satu jalur pada jalan.<br />
*Mobil digambarkan sebagai proses yang sedang menuju sumber daya.<br />
*Untuk mengatasinya beberapa mobil harus preempt (mundur).<br />
*Sangat memungkinkan untuk terjadinya starvation (kondisi proses tak akan mendapatkan sumber daya).</p>
<p style="text-align:justify;"><strong><br />
Resources-Allocation Graph</strong><br />
Sebuah cara visual (matematika) untuk menentukan apakah ada deadlock, atau kemungkinan terjadinya.<br />
G = (V, E) Graf berisi node and edge. Node V terdiri dari proses-proses = {P1, P2, P3, &#8230;} dan jenis resource. {R1, R2, &#8230;} Edge E adalah (Pi, Rj) atau (Ri, Pj)<br />
Sebuah panah dari process ke resource menandakan proses meminta resource. Sebuah panah dari resource ke process menunjukkan sebuah instance dari resource telah dtempatkan ke proses. Process adalah lingkaran, resource adalah kotak; titik-titik merepresentasikan jumlah instance dari resource Dalam tipe. Meminta poin-poin ke kotak, perintah datang dari titik.</p>
<p style="text-align:justify;">
<strong>Model Sistem</strong><br />
Menurut Coffman dalam bukunya &#8220;Operating System&#8221; menyebutkan empat syarat bagi terjadinya deadlock, yaitu:<br />
1.Mutual Exclusion<br />
Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada suatu waktu.<br />
2.Hold and Wait<br />
Kondisi yang menyatakan proses-proses yang sedang memakai suatu sumber daya dapat meminta sumber daya yang lain.<br />
3.Non-pre-emptive<br />
Kondisi dimana suatu sumber daya yang sedang berada pada suatu proses tidak dapat diambil secara paksa dari proses tersebut,sampai proses itu melepaskannya.<br />
4.circular Wait<br />
Kondisi yang menyatakan bahwa adanya rantai saling meminta sumber daya yang dimiliki oleh suatu proses oleh proses lainnya.</p>
<p><strong>Strategi menghadapi Deadlock</strong><br />
Strategi untuk menghadapi deadlock dapat dibagi menjadi tiga pendekatan, yaitu:<br />
1.Mengabaikan adanya deadlock.<br />
2.Memastikan bahwa deadlock tidak akan pernah ada, baik dengan metode Pencegahan, dengan mencegah empat kondisi deadlock agar tidak akan pernah terjadi. Metode Menghindari deadlock, yaitu mengizinkan empat kondisi deadlock, tetapi menghentikan setiap proses yang kemungkinan mencapai deadlock.<br />
3.Membiarkan deadlock untuk terjadi, pendekatan ini membutuhkan dua metode yang saling mendukung, yaitu:<br />
*Pendeteksian deadlock, untuk mengidentifikasi ketika deadlock terjadi.</p>
<p style="text-align:justify;">*Pemulihan deadlock, mengembalikan kembali sumber daya yang dibutuhkan pada proses yang memintanya.<br />
Dari penjabaran pendekatan diatas, terdapat empat metode untuk mengatasi deadlock yang akan terjadi, yaitu:</p>
<p style="text-align:justify;">
Strategi Ostrich<br />
Pendekatan yang paling sederhana adalah dengan menggunakan strategi burung unta: masukkan kepala dalam pasir dan seolah-olah tidak pernah ada masalah sama sekali. Beragam pendapat muncul berkaitan dengan strategi ini. Menurut para ahli Matematika, cara ini sama sekali tidak dapat diterima dan semua keadaan deadlock harus ditangani. Sementara menurut para ahli Teknik, jika komputer lebih sering mengalami kerusakkan disebabkan oleh kegagalan hardware, error pada kompilator atau bugs pada sistem operasi. Maka ongkos yang dibayar untuk melakukan penanganan deadlock sangatlah besar dan lebih baik mengabaikan keadaan deadlock tersebut. Metode ini diterapkan pada sistem operasi UNIX dan MINIX.</p>
<p style="text-align:justify;">Mencegah Deadlock<br />
Metode ini merupakan metode yang paling sering digunakan. Metode Pencegahan dianggap sebagai solusi yang bersih dipandang dari sudut tercegahnya deadlock. Tetapi pencgahan akan mengakibatkan kinerja utilisasi sumber daya yang buruk.<br />
Metode pencegahan menggunakan pendekatan dengan cara meniadakan empat syarat yang dapat menyebabkan deadlock terjadi pada saat eksekusi Coffman (1971).<br />
Syarat pertama yang akan dapat ditiadakan adalah Mutual Exclusion, jika tidak ada sumber daya yang secara khusus diperuntukkan bagi suatu proses maka tidak akan pernah terjadi deadlock. Namun jika membiarkan ada dua atau lebih proses mengakses sebuah sumber daya yang sama akan menyebabkan chaos. Langkah yang digunakan adalah dengan spooling sumber daya, yaitu dengan mengantrikan job-job pada antrian dan akan dilayani satu-satu.<br />
Beberapa masalah yang mungkin terjadi adalah:<br />
1.Tidak semua dapat di-spool, tabel proses sendiri tidak mungkin untuk di-spool<br />
2.Kompetisi pada ruang disk untuk spooling sendiri dapat mengarah pada deadlock<br />
Hal inilah yang menyebabkan mengapa syarat pertama tidak dapat ditiadakan, jadi mutual exclusion benar-benar tidak dapat dihilangkan.<br />
Cara kedua dengan meniadakan kondisi hold and wait terlihat lebih menjanjikan. Jika suatu proses yang sedang menggunakan sumber daya dapat dicegah agar tidak dapat menunggu sumber daya yang lain, maka deadlock dapat dicegah. Langkah yang digunakan adalah dengan membuat proses agar meminta sumber daya yang mereka butuhkan pada awal proses sehingga dapat dialokasikan sumber daya yang dibutuhkan. Namun jika terdapat sumber daya yang sedang terpakai maka proses tersebut tidak dapat memulai prosesnya.<br />
Masalah yang mungkin terjadi:<br />
1.Sulitnya mengetahui berapa sumber daya yang dibutuhkan pada awal proses<br />
2.Tidak optimalnya pengunaan sumber daya jika ada sumber daya yang digunakan hanya beberapa waktu dan tidak digunakan tapi tetap dimiliki oleh suatu proses yang telah memintanya dari awal.<br />
Meniadakan syarat ketiga non preemptive ternyata tidak lebih menjanjikan dari meniadakan syarat kedua, karena dengan meniadakan syarat ketiga maka suatu proses dapat dihentikan ditengah jalan. Hal ini tidak dimungkinkan karena hasil dari suatu proses yang dihentikan menjadi tidak baik.<br />
Cara terakhir adalah dengan meniadakan syarat keempat circular wait. Terdapat dua pendekatan, yaitu:<br />
1.Mengatur agar setiap proses hanya dapat menggunakan sebuah sumber daya pada suatu waktu, jika menginginkan sumber daya lain maka sumber daya yang dimiliki harus dilepas.<br />
2.Membuat penomoran pada proses-proses yang mengakses sumber daya. Suatu proses dimungkinkan untuk dapat meminta sumber daya kapan pun, tetapi permintaannya harus dibuat terurut.<br />
Masalah yang mungkin terjadi dengan mengatur bahwa setiap proses hanya dapat memiliki satu proses adalah bahwa tidak semua proses hanya membutuhkan satu sumber daya, untuk suatu proses yang kompleks dibutuhkan banyak sumber daya pada saat yang bersamaan. Sedangkan dengan penomoran masalah yang dihadapi adalah tidak terdapatnya suatu penomoran yang dapat memuaskan semua pihak.<br />
Secara ringkas pendekatan yang digunakan pada metode pencegahan deadlock dan masalah-masalah yang menghambatnya, terangkum dalam tabel dibawah ini.<br />
<strong><br />
Menghindari Deadlock</strong><br />
Pendekatan metode ini adalah dengan hanya memberi kesempatan ke permintaan sumber daya yang tidak mungkin akan menyebabkan deadlock. Metode ini memeriksa dampak pemberian akses pada suatu proses, jika pemberian akses tidak mungkin menuju kepada deadlock, maka sumber daya akan diberikan pada proses yang meminta. Jika tidak aman, proses yang meminta akan di-suspend sampai suatu waktu permintaannya aman untuk diberikan. Kondisi ini terjadi ketika setelah sumber daya yang sebelumnya dipegang oleh proses lain telah dilepaskan.<br />
Kondisi aman yang dimaksudkan selanjutnya disebut sebagai safe-state, sedangkan keadaan yang tidak memungkinkan untuk diberikan sumber daya yang diminta disebut unsafe-state.</p>
<p style="text-align:justify;">Kondisi Aman (Safe state)<br />
Suatu keadaan dapat dinyatakan sebagai safe state jika tidak terjadi deadlock dan terdapat cara untuk memenuhi semua permintaan sumber daya yang ditunda tanpa menghasilkan deadlock. Dengan cara mengikuti urutan tertentu.</p>
<p style="text-align:justify;">Kondisi Tak Aman (Unsafe state)<br />
Suatu state dinyatakan sebagai state tak selamat (unsafe state) jika tidak terdapat cara untuk memenuhi semua permintaaan yang saat ini ditunda dengan menjalankan proses-proses dengan suatu urutan.</p>
<p><strong>Algoritma Bankir</strong><br />
Algoritma penjadualan ini diungkapkan oleh Dijkstra (1965) lebih dikenal dengan nama Algoritma Bankir. Model ini menggunakan suatu kota kecil sebagai percontohan dengan suatu bank sebagai sistem operasi, pinjaman sebagai sumber daya dan peminjam sebagai proses yang membutuhkan sumber daya. Deadlock akan terjadi apabila terdapat seorang peminjam yang belum mengembalikan uangnya dan ingin meminjam kembali, padahal uang yang belum dikembalikan tadi dibutuhkan oleh peminjam lain yang juga belum mengembalikan uang pinjamannya.<br />
Beberapa kelemahan algoritma Bankir Tanenbaum (1992), Stallings (1995) dan Deitel (1990) adalah sebagai berikut:<br />
1.Sulit untuk mengetahui seluruh sumber daya yang dibutuhkan proses pada awal eksekusi.<br />
2.Jumlah proses yang tidak tetap dan berubah-ubah.<br />
3.Sumber daya yang tadinya tersedia dapat saja menjadi tidak tersedia kembali.<br />
4.Proses-proses yang dieksekusi haruslah tidak dibatasi oleh kebutuhan sinkronisasi antar proses.<br />
5.Algoritma ini menghendaki memberikan semua permintaan selama waktu yang berhingga.</p>
<p>Mendeteksi Deadlock dan Memulihkan Deadlock<br />
Metode ini mengunakan pendekatan dengan teknik untuk menentukan apakah deadlock sedang terjadi serta proses-proses dan sumber daya yang terlibat dalam deadlock tersebut. Setelah kondisi deadlock dapat dideteksi, maka langkah pemulihan dari kondisi deadlock dapat segera dilakukan. Langkah pemulihan tersebut adalah dengan memperoleh sumber daya yang diperlukan oleh proses-proses yang membutuhkannya. Beberapa cara digunakan untuk mendapatkan sumber daya yang diperlukan, yaitu dengan terminasi proses dan pre-emption (mundur) suatu proses. Metode ini banyak digunakan pada komputer mainframe berukuran besar.</p>
<p style="text-align:justify;">Terminasi Proses<br />
Metode ini akan menghapus proses-proses yang terlibat pada kondisi deadlock dengan mengacu pada beberapa syarat. Beberapa syarat yang termasuk dalam metode ini adalah, sebagai berikut:<br />
*Menghapus semua proses yang terlibat dalam kondisi deadlock (solusi ini terlalu mahal).<br />
*Menghapus satu persatu proses yang terlibat, sampai kondisi deadlock dapat diatasi (memakan banyak waktu).<br />
*Menghapus proses berdasarkan prioritas, waktu eksekusi, waktu untuk selesai, dan kedalaman dari rollback.</p>
<p>Resources Preemption<br />
Metode ini lebih menekankan kepada bagaimana menghambat suatu proses dan sumber daya, agar tidak terjebak pada unsafe condition.<br />
Beberapa langkahnya, yaitu:<br />
*Pilih salah satu &#8211; proses dan sumber daya yang akan di-preempt.<br />
*Rollback ke safe state yang sebelumnya telah terjadi.<br />
*Mencegah suatu proses agar tidak terjebak pada starvation karena metode ini.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=29&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/deadlock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>SOLUSI HARDWARE UNTUK SINKRONISASI</title>
		<link>http://hoedy.wordpress.com/2009/05/12/solusi-hardware-untuk-sinkronisasi/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/solusi-hardware-untuk-sinkronisasi/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:16:53 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[SINKRONISASI]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=27</guid>
		<description><![CDATA[Solusi HArdware untuk Sinkronisasi Semaphore Jika kita ingin dapat melakukan proses tulis lebih rumit kita membutuhkan sebuah bahasa untuk melakukannya. Kita akhirnya medefinisikan semaphore yang kita asumsikan sebagai sebuah operasi atomik. Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=27&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;"><strong>Solusi HArdware untuk Sinkronisasi </strong></p>
<p style="text-align:justify;"><strong>Semaphore</strong><br />
Jika kita ingin dapat melakukan proses tulis lebih rumit kita membutuhkan sebuah bahasa untuk melakukannya. Kita akhirnya medefinisikan semaphore yang kita asumsikan sebagai sebuah operasi atomik.<br />
Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur penanda yang cocok untuk kebutuhan itu. Variabel khusus untuk penanda ini disebut semaphore.<br />
Semaphore mempunyai dua sifat, yaitu:<br />
1.Semaphore dapat diinisialisasi dengan nilai non-negatif.<br />
2.Terdapat dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan Djikstra adalah operasi P dan V.</p>
<p style="text-align:justify;"><span id="more-27"></span><br />
<strong>Operasi Down</strong><br />
Operasi ini menurunkan nilai semaphore, jika nilai semaphore menjadi non-positif maka proses yang mengeksekusinya diblocked. Operasi Down adalah atomic, tak dapat diinterupsi sebelaum diselesaikan.Emnurunkan nilai, memeriksa nilai, menempatkan proses pada antrian dan memblocked sebagai instruksi tunggal. Sejak dimulai, tak ada proses alain yang dapat mengakses semaphore sampai operasi selesai atau diblocked.</p>
<p style="text-align:justify;"><strong>Operasi Up</strong><br />
Operasi Up menakkan nilai semaphore. Jika satu proses atau lebih diblocked pada semaphore itu tak dapat menyelesaikan operasi Down, maka salah satu dipilih oleh system dan menyelesaikan operasi Down-nya. Urutan proses yang dipilih tidak ditentukan oleh Djikstra, dapat dipilih secara acak. Sebelum masuk critical section, proses melakukan Down. Bila berhasil maka proses masuk ke critical section. Bila tidak berhasil maka proses di-blocked atas semaphore itu. Proses yang diblocked akan dapat melanjutkan kembali bila proses yang ada di critical section  keluar dan melakukan opersai up sehingga menjadikan proses yang diblocked ready dan melanjutkan sehingga opersi Down-nya berhasil.</p>
<p style="text-align:justify;"><strong>Problem Klasik pada Sinkronisasi</strong><br />
Ada tiga hal yang selalu memjadi masalah pada proses sinkronisasi:<br />
1.Problem Bounded buffer.<br />
2.Problem Reades and Writer.<br />
3.Problem Dining Philosophers.</p>
<p>Problem Readers-Writers<br />
Problem lain yang terkenal adalah readers-writer problem yang memodelkan proses yang mengakses database. Sebagai contoh sebuah sistem pemesanan sebuah perusahaan penerbangan, dimana banyak proses berkompetisi berharap untuk membaca (read) dan menulis (write). Hal ini dapat diterima bahwa banyak proses membaca database pada saat yang sama, tetapi jika suatu proses sedang menulis database, tidak boleh ada proses lain yang mengakses database tersebut, termasuk membaca database tersebut.<br />
Dalam solusi ini, pertama-tama pembaca mengakses database kemudian melakukan DOWN pada semaphore db.. Langkah selanjutnya readers hanya menaikkkan nilai sebuah counter. Hasil dari pembaca nilai counter diturunkan dan nilai terakhir dilakukan UP pada semaphore, mengizinkan memblok writer.<br />
Misalkan selama sebuah reader menggunakan database, reader lain terus berdatangan. Karena ada dua reader pada saat bersamaan bukanlah sebuah masalah, maka reader yang kedua diterima, reader yang ketiga juga dapat diterima jika terus berdatangan reader-reader baru.<br />
Sekarang misalkan writer berdatangan terus menerus. Writer tidak dapat diterima ke database karena writer hanya bisa mengakses data ke database secara ekslusif, jadi writer ditangguhkan. Nanti penambahan reader akan menunjukkan peningkatan. Selama paling tidak ada satu reader yang aktif, reader berikutnya jika datang akan diterima.<br />
Sebagai konsekuensi dari strategi ini, selama terdapat suplai reader yang terus-menerus, mereka akan dilayani segera sesuai kedatanga mereka. Writer akan ditunda sampai tidak ada reader lagi. Jika sebuah reader baru tiba, katakan, setiap dua detik, dan masing-masing reader mendapatkan lima detik untuk melakukan tugasnya, writer tudak akan pernah mendapatkan kesempatan.<br />
Untuk mencegah situasi seperti itu, program dapat ditulis agak sedikit berbeda: Ketika reader tiba dan writer menunggu, reader ditunda dibelakang writer yang justru diterima dengan segera. Dengan cara ini, writer tidak harus menunggu reader yang sedang aktif menyelesaikan pekerjaannya, tapi tidak perlu menunggu reader lain yang datang berturut-turut setelah itu.<br />
Problem Dining Philosopers<br />
Pada tahun 1965, Djikstra menyelesaikan sebuah masalah sinkronisasi yang beliau sebut dengan dining philisophers problem. Dining philosophers dapat diuraikan sebagai berikut: Lima orang filosuf duduk mengelilingi sebuah meja bundar. Masing-masing filosof mempunyai sepiring spageti. Spageti-spageti tersebut sangat licin dan membutuhkan dua garpu untuk memakannya. Diantara sepiring spageti terdapat satu garpu.<br />
Kehidupan para filosof terdiri dari dua periode, yaitu makan atau berpikir. Ketika seorang filosof lapar, dia berusaha untuk mendapatkan garpu kiri dan garpu kanan sekaligus. Jika sukses dalam mengambil dua garpu, filosof tersebut makan untuk sementara waktu, kemudian meletakkan kedua garpu dan melanjutkan berpikir.<br />
Pertanyaan kuncinya adalah, dapatkah anda menulis program untuk masing-masing filosof yang melakukan apa yang harus mereka lakukan dan tidak pernah mengalami kebuntuan.<br />
Prosedur take-fork menunggu sampai garpu-garpu yang sesuaididapatkan dan kemudian menggunakannya. Sayangnya dari solusi ini ternyata salah. Seharusnya lima orang filosof mengambil garpu kirinya secara bersamaan. Tidak akan mungkin mereka mengambil garpu kanan mereka, dan akan terjadi deadlock.<br />
Kita dapat memodifikasi program sehingga setelah mengambil garpu kiri, program memeriksa apakah garpu kanan meungkinkan untuk diambil. Jika garpu kanan tidak mungkin diambil, filosof tersebut meletakkan kembali garpu kirinya, menunggu untuk beberapa waktu, kemudia mengulangi proses yang sama. Usulan tersebut juga salah, walau pun dengan alasan yang berbeda. Dengan sedikit nasib buruk, semua filosof dapat memulai algoritma secara bersamaan, mengambil garpu kiri mereka, melihat garpu kanan mereka yang tidak mungkin untuk diambil, meletakkan kembali garpu kiri mereka, menunggu, mengambil garpu kiri mereka lagi secara bersamaan, dan begitu seterusnya. Situasi seperti ini dimana semua program terus berjalan secara tidak terbatas tetapi tidak ada perubahan/kemajuan yang dihasilkan disebut starvation.<br />
Sekarang anda dapat berpikir &#8220;jika filosof dapat saja menunggu sebuah waktu acak sebagai pengganti waktu yang sama setelah tidak dapat mengambil garpu kiri dan kanan, kesempatan bahwa segala sesuatau akan berlanjut dalam kemandegan untuk beberapa jam adalah sangat kecil.&#8221; Pemikiran seperti itu adalah benar,tapi beberapa aplikasi mengirimkan sebuah solusi yang selalu bekerja dan tidak ada kesalahan tidak seperti hsk nomor acak yang selalu berubah.<br />
Sebelum mulai mengambil garpu, seorang filosof melakukan DOWN di mutex. Setelah menggantikan garpu dia harus melakukan UP di mutex. Dari segi teori, solusi ini cukup memadai. Dari segi praktek, solusi ini tetap memiliki masalah. Hanya ada satu filosof yang dapat makan spageti dalam berbagai kesempatan. Dengan lima buah garpu, seharusnya kita bisa menyaksikan dua orang filosof makan spageti pada saat bersamaan.<br />
Solusi yang diberikan diatas benar dan juga mengizinkan jumlah maksimum kegiatan paralel untuk sebuah jumlah filosf yang berubah-ubah ini menggunakan sebuah array, state, untuk merekam status seorang filosof apakah sedang makan (eating), berpikir (think), atau sedang lapar (hungry) karena sedang berusaha mengambil garpu. Seorang filosof hanya dapat berstatus makan (eating) jika tidak ada tetangganya yang sedang makan juga. Tetangga seorang filosof didefinisikan ole LEFT dan RIGHT.<br />
Dengan kata lain, jika i = 2, maka tetangga kirinya (LEFT) = 1 dan tetangga kanannya (RIGHT) = 3. Program ini menggunakan sebuah array dari semaphore yang lapar (hungry) dapat ditahan jika garpu kiri atau kanannya sedang dipakai tetangganya. Catatan bahwa masing-masing proses menjalankan prosedur filosof sebagai kode utama, tetapi prosedur yang lain seperti take-forks, dan test adalah prosedur biasa dan bukan proses-proses yang terpisah.</p>
<p style="text-align:justify;">Monitors<br />
Solusi sinkronisasi ini dikemukakan oleh Hoare pada tahun 1974. Monitor adalah kumpulan prosedur, variabel dan struktur data di satu modul atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan pun diinginkan. Tapi proses tak dapat mengakses struktur data internal dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur internal.<br />
Properti-properti monitor adalah sebagai berikut:<br />
1.variabel-variabel data lokal, hanya dapat diakses oleh prosedur-prosedur dala monitor dan tidak oleh prosedur di luar monitor.<br />
2.Hanya satu proses yang dapat aktif di monitor pada satu saat. Kompilator harus mengimplementasi ini(mutual exclusion).<br />
3.Terdapat cara agar proses yang tidak dapat berlangsung di-blocked. Menambahkan variabel-variabel kondisi, dengan dua operasi, yaitu Wait dan Signal.<br />
4.Wait: Ketika prosedur monitor tidak dapat berkanjut (misal producer menemui buffer penuh) menyebabkan proses pemanggil diblocked dan mengizinkan proses lain masuk monitor.<br />
5.Signal: Proses membangunkan partner-nya yang sedang diblocked dengan signal pada variabel kondisi yang sedang ditunggu partnernya.<br />
6.Versi Hoare: Setelah signal, membangunkan proses baru agar berjalan dan menunda proses lain.<br />
7.Versi Brinch Hansen: Setelah melakukan signal, proses segera keluar dari monitor.<br />
Dengan memaksakan disiplin hanya satu proses pada satu saat yang berjalan pada monitor, monitor menyediakan fasilitas mutual exclusion. Variabel-variabel data dalam monitor hanya dapat diakses oleh satu proses pada satu saat. Struktur data bersama dapat dilindungi dengan menempatkannya dalam monitor. Jika data pada monitor merepresentasikan sumber daya, maka monitor menyediakan fasilitas mutual exclusion dalam mengakses sumber daya itu.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=27&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/solusi-hardware-untuk-sinkronisasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
		<item>
		<title>SINkRONISASI</title>
		<link>http://hoedy.wordpress.com/2009/05/12/sinjronisasi/</link>
		<comments>http://hoedy.wordpress.com/2009/05/12/sinjronisasi/#comments</comments>
		<pubDate>Tue, 12 May 2009 09:46:22 +0000</pubDate>
		<dc:creator>hoedy</dc:creator>
				<category><![CDATA[SINKRONISASI]]></category>

		<guid isPermaLink="false">http://hoedy.wordpress.com/?p=17</guid>
		<description><![CDATA[Sinkronisasi Bab ini membicarakan proses-proses untuk saling berkordinasi. Bab ini juga akan menjawab pertanyaan-pertanyaan seperti, bagaimana proses bekerja dengan sumber daya yang dibagi-bagi. Bagaimana memastikan hanya ada satu proses yang mengakses memori pada suatu saat? Bagaimana sinkronisasi benar-benar digunakan? Latar Belakang Akses-akses yang dilakukan secara bersama-sama ke data yang sama, dapat menyebabkan data menjadi tidak [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=17&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1 class="SECTION"><a name="AEN2303">Sinkronisasi</a></h1>
<p><a name="AEN2303"> </a></p>
<p><a name="AEN2303"></a></p>
<p><a name="AEN2303">Bab ini membicarakan proses-proses untuk saling berkordinasi. Bab ini juga  akan menjawab pertanyaan-pertanyaan seperti, bagaimana proses bekerja dengan  sumber daya yang dibagi-bagi. Bagaimana memastikan hanya ada satu proses yang  mengakses memori pada suatu saat? Bagaimana sinkronisasi benar-benar digunakan?<span id="more-17"></span></p>
<p></a></p>
<div class="SECTION"><a name="AEN2303"> </a></p>
<h2 class="SECTION"><a name="AEN2308">Latar Belakang</a></h2>
<p><a name="AEN2308"></p>
<ul>
<li>Akses-akses yang dilakukan secara bersama-sama ke data yang sama, dapat  menyebabkan data menjadi tidak konsisten.</li>
<li>Untuk menjaga agar data tetap konsisten, dibutuhkan mekanisme-mekanisme untuk  memastikan pemintaan ekseskusi dari proses yang bekerja.</li>
<li><em class="FOREIGNPHRASE">Race Condition</em>: Situasi dimana beberapa proses  mengakses dan memanipulasi data secara bersamaan. Nilai terakhir dari data  bergantung dari proses mana yang selesai terakhir.</li>
<li>Untuk menghindari <em class="FOREIGNPHRASE">Race Condition</em>, proses-proses  secara bersamaan harus disinkronisasikan.</li>
</ul>
<p></a></p>
<div class="SECTION"><a name="AEN2308"> </a></p>
<h3 class="SECTION"><a name="AEN2323">Kasus Produsen-Konsumer</a></h3>
<p><a name="AEN2323">Dua proses berbagi sebuah buffer dengan ukuran yang tetap. Salah satunya  produser, meletakkan informasi ke buffer yang lainnya. Konsumen mengambil  informasi dari buffer. Ini juga dapat digeneralisasi untuk masalah yang memiliki  m buah produsen dan n buah konsumen, tetapi kita hanya akan memfokuskan kasus  dengan satu produsen dan satu konsumen karena diasumsikan dapat menyederhanakan  solusi.Masalah akan timbul ketika produsen ingin menaruh barang yang baru tetapi  buffer sudah penuh. Solusi untuk produsen adalah istirahat (<em class="FOREIGNPHRASE">sleep</em>) dan akan dibangunkan ketika konsumen telah  mengambil satu atau lebih barang dari buffer. Biasanya jika konsumen ingin  mengambil barang dari buffer dan melihat bahwa buffer sedang kosong, maka  konsumen istirahat (<em class="FOREIGNPHRASE">sleep</em>) sampai produsen meletakkan  barang pada buffer dan membangunkan (<em class="FOREIGNPHRASE">wake up</em>)  consumer.<br />
<!--more--><br />
Pendekatan seperti ini terdengar cukup sederhana, tetapi hal ini dapat  menggiring kita ke jenis masalah yang sama seperti <em class="FOREIGNPHRASE">race  condition</em> dengan spooler direktori.Untuk mengetahui jumlah barang di buffer, kita membutuhkan sebuah variabel  kita namakan count. Jika jumlah maksimum dairi barang yang dapat ditampung  buffer adalah N, kode produser pertama kali akan mencoba untuk mengetahui apakah  nilai count sama dengan nilai N. Jika itu terjadi maka produsen akan istirahat  (<em class="FOREIGNPHRASE">sleep</em>), tetapi jika nilai count tidak sama dengan N,  produsen akan terus menambahkan barang dan menaikkan nilai count.</p>
<p>Sekarang mari kita kembali ke permasalahan race condition. Ini dapat terjadi  karena akses ke count tidak dipaksakan. Situasi seperti itu mungkin dapat  terjadi. Buffer sedang kosong dan konsumen baru saja membaca count untuk melihat  apakah count bernilai 0. Pada saat itu, penjadual memutuskan untuk mengentikan  proses konsumen sementara dan menjalakan produsen. Produsen memasukkan barang ke  buffer, menaikkan nilai count, dan memberitahukan bahwa count sekarang bernilai  1. Pemikiran bahwa count baru saja bernilai 0 sehingga konsumen harus istirahat  (<em class="FOREIGNPHRASE">sleep</em>). Produsen memanggil fungsi <em class="FOREIGNPHRASE">wake up</em> untuk membangkitkan konsumen.</p>
<p>Sayangnya, konsumen secara logika belum istirahat. Jadi sinyal untuk  membangkitkan konsumen, tidak dapat ditangkap oleh konsumen. Ketika konsumen  bekerja berikutnya, konsumen akan memeriksa nilai count yang dibaca sebelumnya,  dan mendapatkan nilai 0, kemudian konsumen istirahat (<em class="FOREIGNPHRASE">sleep</em>) lagi. Cepat atau lambat produsen akan mengisi  buffer dan juga pergi istirahat (<em class="FOREIGNPHRASE">sleep</em>). Keduanya  akan istirahat selamanya.</p>
<p>Inti permasalahannya disini adalah pesan untuk membangkitkan sebuah proses  tidak tersampaikan. Jika pesan/ sinyal ini tersampaikan dengan baik, segalanya  akan berjalan lancar.</p>
<p></a></div>
<p><a name="AEN2323"> </a></p>
<div class="SECTION"><a name="AEN2323"> </a></p>
<h3 class="SECTION"><a name="AEN2343"><em class="FOREIGNPHRASE">Race Condition</em></a></h3>
<p><a name="AEN2343"><em class="FOREIGNPHRASE">Race Condition</em> adalah situasi di mana beberapa  proses mengakses dan memanipulasi data bersama pada saat besamaan. Nilai akhir  dari data bersama tersebut tergantung pada proses yang terakhir selesai. Unutk  mencegah <em class="FOREIGNPHRASE">race condition</em>, proses-proses yang berjalan  besamaan haus di disinkronisasi.Dalam beberapa sistem operasi, proses-proses yang berjalan bersamaan mungkin  untuk membagi beberapa penyimpanan umum, masing-masing dapat melakukan proses  baca (<em class="FOREIGNPHRASE">read</em>) dan proses tulis (<em class="FOREIGNPHRASE">write</em>). Penyimpanan bersama (<em class="FOREIGNPHRASE">shared storage</em>) mungkin berada di memori utama atau  berupa sebuah berkas bersama, lokasi dari memori bersama tidak merubah kealamian  dari komunikasi atau masalah yang muncul. Untuk mengetahui bagaimana komunikasi  antar proses bekerja, mari kita simak sebuah contoh sederhana, sebuah print  spooler. Ketika sebuah proses ingin mencetak sebuah berkas, proses tersebut  memasukkan nama berkas ke dalam sebuah spooler direktori yang khusus. Proses  yang lain, printer daemon, secara periodik memeriksa untuk mengetahui jika ada  banyak berkas yang akan dicetak, dan jika ada berkas yang sudah dicetak  dihilangkan nama berkasnya dari direktori.Bayangkan bahwa spooler direktori memiliki slot dengan jumlah yang sangat  besar, diberi nomor 0, 1, 2, 3, 4,&#8230; masing-masing dapat memuat sebuah nama  berkas. Juga bayangkan bahwa ada dua variabel bersama, out, penunjuk berkas  berikutnya untuk dicetak, dan in, menunjuk slot kosong di direktori. Dua vaiabel  tersebut dapat menamgami sebuah two-word berkas untuk semua proses. Dengan  segera, slot 0, 1, 2, 3 kosong (berkas telah selesai dicetak), dan slot 4, 5, 6  sedang terisi (berisi nama dari berkas yang antre untuk dicetak). Lebih atau  kurang secara besamaan, proses A dan B, mereka memutuskan untuk antre untuk  sebuah berkas untuk dicetak</p>
<p></a></p>
<h2 class="SECTION"><a name="AEN2370"><em class="FOREIGNPHRASE">Critical  Section</em></a></h2>
<p><a name="AEN2370">Bagaimana menghindari <em class="FOREIGNPHRASE">race conditions</em>? Kunci untuk  mencegah masalah ini dan di situasi yang lain yang melibatkan shared memori,  shared berkas, and shared sumber daya yang lain adalah menemukan beberapa jalan  untuk mencegah lebih dari satu proses untuk melakukan proses writing dan reading  kepada shared data pada saat yang sama. Dengan kata lain kita memutuhkan <em class="FOREIGNPHRASE">mutual exclusion</em>, sebuah jalan yang menjamin jika sebuah  proses sedang menggunakan shared berkas, proses lain dikeluarkan dari pekerjaan  yang sama. Kesulitan yang terjadi karena proses 2 mulai menggunakan variabel  bersama sebelum proses 1 menyelesaikan tugasnya.</a><a name="AEN2370"><em class="FOREIGNPHRASE">Critical Section</em> adalah sebuah segmen kode di mana  sebuah proses yang mana sumber daya bersama diakses. Terdiri dari:<em class="FOREIGNPHRASE">Entry Section</em>: kode yang digunakan untuk masuk ke  dalam <em class="FOREIGNPHRASE">critical section</em><em class="FOREIGNPHRASE">Critical Section</em>: Kode di mana hanya ada satu  proses yang dapat dieksekusi pada satu waktu</p>
<p><em class="FOREIGNPHRASE">Exit Section</em>: akhir dari <em class="FOREIGNPHRASE">critical section</em>, mengizinkan proses lain</p>
<p><em class="FOREIGNPHRASE">Remainder Section</em>: kode istirahat setelah masuk ke  <em class="FOREIGNPHRASE">critical section</em></p>
<p><em class="FOREIGNPHRASE">Critical section</em> harus melakukan ketiga aturan  berikut:</p>
<p>Solusi yang diberikan harus memuaskan permintaaan berikut:</p>
<p><a name="AEN2370"></p>
<ul style="display:inline!important;">
<li>
<p style="display:inline!important;"><em class="FOREIGNPHRASE">Mutual exclution</em></p>
</li>
</ul>
<p></a></p>
<p></a></p>
<ul>
<li><em class="FOREIGNPHRASE">Deadlock free</em></li>
<li><em class="FOREIGNPHRASE">Starvation free</em></li>
</ul>
<p><a name="AEN2370"></p>
<p style="display:inline!important;">Pendekatan yang mungkin untuk solusi proses sinkronisasi</p>
<p></a></p>
<ol type="i">
<li>Solusi Piranti lunak (Software solution)
<ul>
<li>Tanpa Sinkronisasi.</li>
<li>Dengan Sinkronisasi.
<ul>
<li>Low-level primitives: <em class="FOREIGNPHRASE">semaphore</em></li>
<li>High-level primitives: <em class="FOREIGNPHRASE">monitors</em></li>
</ul>
</li>
</ul>
</li>
<li>Solusi Piranti Keras (Hardware solution)<strong><a name="AEN2439"><em class="FOREIGNPHRASE">Mutual  Exclusion</em></a></strong></li>
</ol>
<div class="SECTION"><a name="AEN2439"><em class="FOREIGNPHRASE">Mutual Exclusion</em>: Kondisi-kondisi untuk solusi</p>
<p>Tiga kondisi untuk menentukan <em class="FOREIGNPHRASE">mutual Exclusion</em></p>
<ol type="1">
<li>Tidak ada dua proses yang pada saat bersamaan berada di <em class="FOREIGNPHRASE">critical region</em>.</li>
<li>Tidak ada proses yang berjalan diluar <em class="FOREIGNPHRASE">critical  region</em> yang bisa menghambat proses lain</li>
<li>Tidak ada proses yang tidak bisa masuk ke <em class="FOREIGNPHRASE">critical  region</em><em><br />
</em></li>
</ol>
<p></a></div>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hoedy.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hoedy.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hoedy.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hoedy.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hoedy.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hoedy.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hoedy.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hoedy.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hoedy.wordpress.com&amp;blog=6028539&amp;post=17&amp;subd=hoedy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hoedy.wordpress.com/2009/05/12/sinjronisasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/641a6170c33d442c288ce72f8db165e7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">hoedy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
