<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Process</id>
	<title>Process - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Process"/>
	<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;action=history"/>
	<updated>2026-11-01T19:54:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;diff=835&amp;oldid=prev</id>
		<title>SanzSkuy at 02:56, 22 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;diff=835&amp;oldid=prev"/>
		<updated>2026-08-22T02:56:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:56, 22 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Catatan dari &#039;&#039;&#039;CS:APP&#039;&#039;&#039; (&#039;&#039;Computer Systems: A Programmer&#039;s Perspective&#039;&#039;) §1.7.1 — tentang &#039;&#039;process&#039;&#039;, abstraksi OS untuk program yang sedang berjalan.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Lanjutan dari [[Operating System Mengelola Hardware]].&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;diff=834&amp;oldid=prev</id>
		<title>SanzSkuy at 02:56, 22 August 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;diff=834&amp;oldid=prev"/>
		<updated>2026-08-22T02:56:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:56, 22 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l42&quot;&gt;Line 42:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 42:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Multi-core modern&amp;#039;&amp;#039;&amp;#039; → beberapa program bisa jalan &amp;#039;&amp;#039;&amp;#039;benar-benar simultan&amp;#039;&amp;#039;&amp;#039;, satu di tiap core.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Multi-core modern&amp;#039;&amp;#039;&amp;#039; → beberapa program bisa jalan &amp;#039;&amp;#039;&amp;#039;benar-benar simultan&amp;#039;&amp;#039;&amp;#039;, satu di tiap core.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note&lt;/del&gt;|Bedakan &#039;&#039;concurrent&#039;&#039; (selang-seling, bisa di satu CPU) dan &#039;&#039;parallel&#039;&#039; (benar-benar bersamaan, butuh lebih dari satu core). Diskusi multiprocessor dilanjut di §1.9.2.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Catatan&lt;/ins&gt;|Bedakan &#039;&#039;concurrent&#039;&#039; (selang-seling, bisa di satu CPU) dan &#039;&#039;parallel&#039;&#039; (benar-benar bersamaan, butuh lebih dari satu core). Diskusi multiprocessor dilanjut di §1.9.2.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Mekanisme yang bikin selang-seling ini terjadi namanya &amp;#039;&amp;#039;&amp;#039;context switching&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Mekanisme yang bikin selang-seling ini terjadi namanya &amp;#039;&amp;#039;&amp;#039;context switching&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;diff=833&amp;oldid=prev</id>
		<title>SanzSkuy: Created page with &quot;Catatan dari &#039;&#039;&#039;CS:APP&#039;&#039;&#039; (&#039;&#039;Computer Systems: A Programmer&#039;s Perspective&#039;&#039;) §1.7.1 — tentang &#039;&#039;process&#039;&#039;, abstraksi OS untuk program yang sedang berjalan.  Lanjutan dari Operating System Mengelola Hardware.  __TOC__  == Ilusi yang dijual process ==  Waktu program kayak &lt;code&gt;hello&lt;/code&gt; jalan di sistem modern, OS menyediakan &#039;&#039;&#039;ilusi bahwa program itu satu-satunya yang jalan di mesin&#039;&#039;&#039;. Spesifiknya, ada tiga ilusi yang dijual sekaligus:  # Program seolah punya...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Process&amp;diff=833&amp;oldid=prev"/>
		<updated>2026-08-22T02:56:03Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Catatan dari &amp;#039;&amp;#039;&amp;#039;CS:APP&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Computer Systems: A Programmer&amp;#039;s Perspective&amp;#039;&amp;#039;) §1.7.1 — tentang &amp;#039;&amp;#039;process&amp;#039;&amp;#039;, abstraksi OS untuk program yang sedang berjalan.  Lanjutan dari &lt;a href=&quot;/wiki/index.php?title=Operating_System_Mengelola_Hardware&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Operating System Mengelola Hardware (page does not exist)&quot;&gt;Operating System Mengelola Hardware&lt;/a&gt;.  __TOC__  == Ilusi yang dijual process ==  Waktu program kayak &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; jalan di sistem modern, OS menyediakan &amp;#039;&amp;#039;&amp;#039;ilusi bahwa program itu satu-satunya yang jalan di mesin&amp;#039;&amp;#039;&amp;#039;. Spesifiknya, ada tiga ilusi yang dijual sekaligus:  # Program seolah punya...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Catatan dari &amp;#039;&amp;#039;&amp;#039;CS:APP&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Computer Systems: A Programmer&amp;#039;s Perspective&amp;#039;&amp;#039;) §1.7.1 — tentang &amp;#039;&amp;#039;process&amp;#039;&amp;#039;, abstraksi OS untuk program yang sedang berjalan.&lt;br /&gt;
&lt;br /&gt;
Lanjutan dari [[Operating System Mengelola Hardware]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Ilusi yang dijual process ==&lt;br /&gt;
&lt;br /&gt;
Waktu program kayak &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; jalan di sistem modern, OS menyediakan &amp;#039;&amp;#039;&amp;#039;ilusi bahwa program itu satu-satunya yang jalan di mesin&amp;#039;&amp;#039;&amp;#039;. Spesifiknya, ada tiga ilusi yang dijual sekaligus:&lt;br /&gt;
&lt;br /&gt;
# Program seolah punya &amp;#039;&amp;#039;&amp;#039;akses eksklusif&amp;#039;&amp;#039;&amp;#039; ke processor, main memory, dan I/O devices.&lt;br /&gt;
# Processor seolah mengeksekusi instruksi program itu &amp;#039;&amp;#039;&amp;#039;satu per satu tanpa interupsi&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Code dan data program itu seolah &amp;#039;&amp;#039;&amp;#039;satu-satunya objek&amp;#039;&amp;#039;&amp;#039; di memory sistem.&lt;br /&gt;
&lt;br /&gt;
Ketiganya bohong. Tapi bohongnya konsisten dan rapi, jadi kita bisa nulis program tanpa mikirin ada 300 proses lain yang lagi rebutan CPU yang sama.&lt;br /&gt;
&lt;br /&gt;
CS:APP nyebut ide ini sebagai salah satu gagasan &amp;#039;&amp;#039;&amp;#039;paling penting dan paling sukses&amp;#039;&amp;#039;&amp;#039; dalam ilmu komputer — dan itu bukan lebay.&lt;br /&gt;
&lt;br /&gt;
== Definisi ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Process&amp;#039;&amp;#039;&amp;#039; adalah abstraksi operating system untuk sebuah &amp;#039;&amp;#039;program yang sedang berjalan&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Bedakan baik-baik:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Program !! Process&lt;br /&gt;
|-&lt;br /&gt;
| Entitas pasif — sekumpulan byte di disk || Entitas aktif — program yang lagi dieksekusi&lt;br /&gt;
|-&lt;br /&gt;
| Satu file bisa dijalankan berkali-kali || Tiap eksekusi = process terpisah dengan konteks sendiri&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Concurrency ==&lt;br /&gt;
&lt;br /&gt;
Beberapa process bisa jalan &amp;#039;&amp;#039;&amp;#039;concurrently&amp;#039;&amp;#039;&amp;#039; di sistem yang sama, dan masing-masing tetap merasa punya hardware sendirian.&lt;br /&gt;
&lt;br /&gt;
Yang dimaksud &amp;#039;&amp;#039;concurrently&amp;#039;&amp;#039; di sini: &amp;#039;&amp;#039;&amp;#039;instruksi dari satu process diselang-seling (&amp;#039;&amp;#039;interleaved&amp;#039;&amp;#039;) dengan instruksi process lain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Di kebanyakan sistem, jumlah process yang mau jalan &amp;#039;&amp;#039;&amp;#039;lebih banyak&amp;#039;&amp;#039;&amp;#039; daripada jumlah CPU yang tersedia. Jadi:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Sistem tradisional&amp;#039;&amp;#039;&amp;#039; (single CPU) → cuma bisa eksekusi satu program pada satu waktu, tapi bisa &amp;#039;&amp;#039;tampak&amp;#039;&amp;#039; concurrent dengan cara CPU-nya gantian antar process.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Multi-core modern&amp;#039;&amp;#039;&amp;#039; → beberapa program bisa jalan &amp;#039;&amp;#039;&amp;#039;benar-benar simultan&amp;#039;&amp;#039;&amp;#039;, satu di tiap core.&lt;br /&gt;
&lt;br /&gt;
{{Note|Bedakan &amp;#039;&amp;#039;concurrent&amp;#039;&amp;#039; (selang-seling, bisa di satu CPU) dan &amp;#039;&amp;#039;parallel&amp;#039;&amp;#039; (benar-benar bersamaan, butuh lebih dari satu core). Diskusi multiprocessor dilanjut di §1.9.2.}}&lt;br /&gt;
&lt;br /&gt;
Mekanisme yang bikin selang-seling ini terjadi namanya &amp;#039;&amp;#039;&amp;#039;context switching&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Context dan context switch ==&lt;br /&gt;
&lt;br /&gt;
=== Apa itu context ===&lt;br /&gt;
&lt;br /&gt;
OS melacak semua informasi state yang dibutuhkan sebuah process supaya bisa jalan. Kumpulan state ini disebut &amp;#039;&amp;#039;&amp;#039;context&amp;#039;&amp;#039;&amp;#039;, isinya antara lain:&lt;br /&gt;
&lt;br /&gt;
* nilai &amp;#039;&amp;#039;&amp;#039;PC&amp;#039;&amp;#039;&amp;#039; (program counter) saat ini&lt;br /&gt;
* isi &amp;#039;&amp;#039;&amp;#039;register file&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* isi &amp;#039;&amp;#039;&amp;#039;main memory&amp;#039;&amp;#039;&amp;#039; milik process itu&lt;br /&gt;
&lt;br /&gt;
=== Mekanisme switch ===&lt;br /&gt;
&lt;br /&gt;
Di sistem uniprocessor, pada satu titik waktu CPU cuma bisa mengeksekusi kode dari &amp;#039;&amp;#039;&amp;#039;satu&amp;#039;&amp;#039;&amp;#039; process. Waktu OS memutuskan untuk memindahkan kontrol dari process sekarang ke process baru, dia melakukan &amp;#039;&amp;#039;&amp;#039;context switch&amp;#039;&amp;#039;&amp;#039; dengan tiga langkah:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Save&amp;#039;&amp;#039;&amp;#039; — simpan context process yang sedang jalan&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Restore&amp;#039;&amp;#039;&amp;#039; — pulihkan context process yang baru&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Transfer&amp;#039;&amp;#039;&amp;#039; — serahkan kontrol ke process baru&lt;br /&gt;
&lt;br /&gt;
Process yang baru itu lanjut &amp;#039;&amp;#039;&amp;#039;persis dari titik terakhir dia berhenti&amp;#039;&amp;#039;&amp;#039;. Dari sudut pandang si process, nggak ada yang terjadi — dia nggak sadar sempat &amp;quot;dibekukan&amp;quot; entah berapa lama.&lt;br /&gt;
&lt;br /&gt;
=== Alur pada Figure 1.12 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 Time    Process A                        Process B&lt;br /&gt;
   |     ---------                        ---------&lt;br /&gt;
   |     user code&lt;br /&gt;
   |         |&lt;br /&gt;
 read --&amp;gt;    +----&amp;gt; kernel code ---------------+     } context switch&lt;br /&gt;
   |                                           v&lt;br /&gt;
   |                                      user code&lt;br /&gt;
   |                                           |&lt;br /&gt;
 disk        +-------- kernel code &amp;lt;-----------+     } context switch&lt;br /&gt;
 interrupt   v&lt;br /&gt;
   |     user code   (return from read)&lt;br /&gt;
   v         |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yang wajib diperhatiin dari diagram ini:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Switch selalu lewat kernel code.&amp;#039;&amp;#039;&amp;#039; Nggak pernah ada lompatan langsung dari user code A ke user code B. Polanya selalu: user code → kernel → user code process lain.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dua pemicu switch di gambar itu beda sifat:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; → &amp;#039;&amp;#039;voluntary&amp;#039;&amp;#039;. Process A sendiri yang manggil system call. Karena dia bakal nunggu disk (lambat banget dibanding CPU), OS mendingan kasih CPU ke B daripada nganggur.&lt;br /&gt;
** &amp;#039;&amp;#039;Disk interrupt&amp;#039;&amp;#039; → &amp;#039;&amp;#039;involuntary&amp;#039;&amp;#039;, datang dari luar. Process B lagi jalan normal terus dipotong karena data yang ditunggu A udah siap.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;quot;Return from read&amp;quot; itu terjadi jauh setelah &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; dipanggil.&amp;#039;&amp;#039;&amp;#039; Dari sisi A, satu pemanggilan fungsi. Dari sisi mesin, di antaranya ada seluruh eksekusi B.&lt;br /&gt;
&lt;br /&gt;
== Skenario hello ==&lt;br /&gt;
&lt;br /&gt;
Ada dua process concurrent dalam contoh ini: &amp;#039;&amp;#039;&amp;#039;shell&amp;#039;&amp;#039;&amp;#039; dan &amp;#039;&amp;#039;&amp;#039;hello&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
# Awalnya shell jalan sendirian, nunggu input di command line.&lt;br /&gt;
# Kita minta shell menjalankan &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Shell memenuhi permintaan itu dengan memanggil fungsi khusus bernama &amp;#039;&amp;#039;&amp;#039;system call&amp;#039;&amp;#039;&amp;#039;, yang menyerahkan kontrol ke OS.&lt;br /&gt;
# OS &amp;#039;&amp;#039;&amp;#039;menyimpan context shell&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;membuat process &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; baru&amp;#039;&amp;#039;&amp;#039; beserta context-nya, lalu menyerahkan kontrol ke process baru itu.&lt;br /&gt;
# Setelah &amp;lt;code&amp;gt;hello&amp;lt;/code&amp;gt; selesai, OS &amp;#039;&amp;#039;&amp;#039;memulihkan context shell&amp;#039;&amp;#039;&amp;#039; dan mengembalikan kontrol ke situ.&lt;br /&gt;
# Shell balik nunggu input berikutnya.&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
Transisi dari satu process ke process lain diatur oleh &amp;#039;&amp;#039;&amp;#039;kernel&amp;#039;&amp;#039;&amp;#039; — bagian dari kode operating system yang &amp;#039;&amp;#039;&amp;#039;selalu resident di memory&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Waktu program aplikasi butuh tindakan dari OS (misalnya baca atau tulis file), dia mengeksekusi instruksi &amp;#039;&amp;#039;&amp;#039;system call&amp;#039;&amp;#039;&amp;#039; khusus yang mentransfer kontrol ke kernel. Kernel melakukan operasi yang diminta, lalu balik lagi ke program aplikasi.&lt;br /&gt;
&lt;br /&gt;
{{Warning|&amp;#039;&amp;#039;&amp;#039;Kernel bukan process yang terpisah.&amp;#039;&amp;#039;&amp;#039; Ini miskonsepsi paling umum di bab ini. Kernel adalah kumpulan &amp;#039;&amp;#039;&amp;#039;kode dan struktur data&amp;#039;&amp;#039;&amp;#039; yang dipakai sistem untuk mengelola semua process. Jangan cari &amp;quot;process kernel&amp;quot; di output &amp;lt;code&amp;gt;ps&amp;lt;/code&amp;gt; — konsepnya memang bukan itu.}}&lt;br /&gt;
&lt;br /&gt;
== Kerja sama hardware dan software ==&lt;br /&gt;
&lt;br /&gt;
Mengimplementasikan abstraksi process butuh &amp;#039;&amp;#039;&amp;#039;kerja sama erat antara hardware level rendah dan software operating system&amp;#039;&amp;#039;&amp;#039;. OS sendiri nggak bisa; dia butuh dukungan hardware seperti:&lt;br /&gt;
&lt;br /&gt;
* privilege level (user mode / kernel mode) untuk proteksi&lt;br /&gt;
* timer interrupt supaya OS bisa merebut kembali CPU dari process yang nggak mau berhenti&lt;br /&gt;
* MMU untuk isolasi ruang alamat&lt;br /&gt;
&lt;br /&gt;
Detail cara kerjanya, dan cara aplikasi membuat serta mengendalikan process-nya sendiri, dibahas di &amp;#039;&amp;#039;&amp;#039;Bab 8&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Catatan untuk kerja systems ==&lt;br /&gt;
&lt;br /&gt;
Beberapa implikasi praktis yang nyambung ke performance:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;quot;Context termasuk isi main memory&amp;quot; itu benar secara konseptual, tapi implementasinya nggak menyalin RAM.&amp;#039;&amp;#039;&amp;#039; Yang benar-benar diganti waktu switch cuma pointer ke page table (di x86: register CR3). Kalau context switch beneran nyalin seluruh memory, sistem modern nggak akan pernah bisa jalan.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Biaya context switch bukan cuma save/restore register.&amp;#039;&amp;#039;&amp;#039; Yang sering lebih mahal adalah efek tidak langsungnya: cache jadi dingin, TLB ke-flush, branch predictor kehilangan sejarahnya. Direct cost bisa ratusan nanodetik, indirect cost bisa jauh lebih besar.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ini alasan CPU pinning penting di HPC.&amp;#039;&amp;#039;&amp;#039; Kalau thread dibiarkan pindah-pindah core, dia kehilangan cache lokalitas dan bisa nyebrang NUMA node. Makanya ada &amp;lt;code&amp;gt;taskset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;numactl&amp;lt;/code&amp;gt;, atau &amp;lt;code&amp;gt;OMP_PROC_BIND&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Voluntary vs involuntary switch bisa diukur.&amp;#039;&amp;#039;&amp;#039; Di Linux lihat &amp;lt;code&amp;gt;/proc/[pid]/status&amp;lt;/code&amp;gt; pada baris &amp;lt;code&amp;gt;voluntary_ctxt_switches&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;nonvoluntary_ctxt_switches&amp;lt;/code&amp;gt;, atau pakai &amp;lt;code&amp;gt;perf stat&amp;lt;/code&amp;gt;. Rasio yang aneh sering jadi petunjuk masalah: involuntary tinggi = rebutan CPU, voluntary tinggi = banyak nunggu I/O atau lock.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Async I/O ada supaya switch-nya bisa dihindari.&amp;#039;&amp;#039;&amp;#039; Pola &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; yang blocking di Figure 1.12 itu persis masalah yang mau diselesaikan &amp;lt;code&amp;gt;epoll&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;io_uring&amp;lt;/code&amp;gt;, dan model async lainnya — satu thread bisa ngurus banyak operasi I/O tanpa harus di-switch tiap kali nunggu.&lt;br /&gt;
&lt;br /&gt;
== Istilah kunci ==&lt;br /&gt;
&lt;br /&gt;
; Process&lt;br /&gt;
: Abstraksi OS untuk sebuah program yang sedang berjalan.&lt;br /&gt;
; Concurrent&lt;br /&gt;
: Instruksi beberapa process saling diselang-seling (belum tentu benar-benar bersamaan).&lt;br /&gt;
; Context&lt;br /&gt;
: Seluruh state yang dibutuhkan process untuk jalan — PC, register file, isi memory.&lt;br /&gt;
; Context switch&lt;br /&gt;
: Mekanisme menyimpan context process lama, memulihkan context process baru, lalu menyerahkan kontrol.&lt;br /&gt;
; System call&lt;br /&gt;
: Instruksi khusus yang menyerahkan kontrol dari aplikasi ke kernel.&lt;br /&gt;
; Kernel&lt;br /&gt;
: Bagian kode OS yang selalu resident di memory; kumpulan kode dan struktur data untuk mengelola semua process. Bukan sebuah process.&lt;br /&gt;
&lt;br /&gt;
== Lihat juga ==&lt;br /&gt;
&lt;br /&gt;
* [[OS Manages Hardware]]&lt;br /&gt;
* [[Virtual Memory]]&lt;br /&gt;
* [[System Call]]&lt;br /&gt;
* [[Thread]]&lt;br /&gt;
* [[CS:APP]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Computer Systems]]&lt;br /&gt;
[[Category:Operating System]]&lt;br /&gt;
[[Category:CS:APP]]&lt;/div&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
</feed>