Sabtu, 10 Maret 2012

Swap dan Kernel

1. Swap pada memori


SWAP adalah suatu area pada harddisk yang merupakan bagian dari Virtual Memory. Disebut sebagai suatu area pada harddisk karena kita mengalokasikan/membuat partisi khusus pada harddisk pada saat penginstalan Linux. Swap menangani halaman memory yang tidak aktif untuk sementara waktu.
Swap akan digunakan ketika system telah membutuhkan memory fisik (RAM) untuk menangani proses aktif tetapi memory fisik (RAM) yang tidak terpakai (free) tidak mencukupi. Jika system membutuhkan lebih banyak sumber daya memori atau ruang maka halaman yang tidak aktif pada memory fisik (RAM) akan dipindahkan ke swap agar dapat memberi ruang pada memory fisik (RAM) untuk menangani proses lainnya.
Dikarenakan disk (swap berada pada harddisk) lebih lambat daripada RAM, waktu respon untuk system dan aplikasi menjadi lambat jika seandainya terjadi perpindahan yang terlalu besar dari memori fisik. Terdapat parameter swappiness untuk mengontrol kecenderungan kernel untuk memindahkan proses dari memory ke swap.
Nilainya antara 0 -100, ketika swappiness=0 maka itu akan memberitahu kernel untuk menghindari prosses swapping (ram ke swap) selama mungkin, saat swappiness=100 maka itu akan memberitahu kernel untuk melakukan proses swapping secara agresif
Sebagaimana akan kita lihat, pada dasarnya ada empat tujuan yang berbeda untuk swap:
• Beberapa program benar-benar memakan memori.
• Memori tambahan mungkin akan berguna.
• Mengoptimalkan penggunaan memori.
• Hibernasi (suspend-to-disk)

Untuk mulai dengan, mari kita mengatakan bahwa komputer telah berubah banyak sejak swap yang pertama kali digunakan:
Pada awalnya, swap diperlukan untuk memperluas kapasitas memori nyata. Anda akan menggunakan swap sehingga memori yang tersedia akan penambahan ruang RAM dan ruang swap.

Saat ini, RAM sering cukup besar sehingga kita bisa menggunakan komputer tanpa swap sama sekali.

Beberapa program benar-benar memakan memori:
Kadang-kadang, sesuatu yang besar (seperti MySQL, Apache, PHP dll Handler) membuat seluruh sistem perlu memori tambahan.
Dalam kasus ini, swap akan digunakan untuk membuat sistem mampu menangani beban tambahan.

Memori tambahan mungkin akan berguna:
Kejadian tidak terduga, mungkin dan akan terjadi (program akan gila, beberapa tindakan membutuhkan ruang lebih banyak dari yang Anda pikir, atau kombinasi yang luar biasa lain dari peristiwa).
Dalam kasus ini, swap akan memberikan penundaan ekstra untuk mencari tahu apa yang terjadi atau untuk menyelesaikan sesuatu.

Swap dapat mengoptimalkan penggunaan memori:
Hard drive jauh lebih lambat dari RAM. Jadi, ketika Anda memerlukan file (baik itu file data, seperti video ini. Anda sedang menonton lagi dan lagi, executable, seperti Firefox, atau perpustakaan), kernel Linux membaca file ke dalam RAM dan menyimpannya di sana sehingga dari waktu berikutnya Anda membutuhkannya lagi, itu sudah dalam RAM dan akses data jauh lebih cepat (ribuan kali lebih cepat). Kita menyebut ini bagian dari RAM yang mempercepat hard disk membaca. Mereka membuat perbedaan besar dalam hal respon "memori cache.".
Kernel Linux secara otomatis bergerak RAM dilindungi oleh program tetapi tidak benar-benar digunakan di swap sehingga RAM ini dapat melayani tujuan yang lebih baik memiliki lebih banyak memori cache.

Hibernasi membutuhkan swap:
Fitur hibernasi (suspend-to-disk) menulis keluar isi memori untuk partisi swap sebelum mematikan mesin. Oleh karena itu, partisi swap Anda harus setidaknya sama besar dengan ukuran RAM Anda. Pelaksanaan hibernasi saat ini digunakan di Ubuntu, swsusp, membutuhkan partisi swap atau menangguhkan, dan tidak dapat menggunakan swap file pada sistem file yang aktif.

Apakah saya Perlu Partisi Swap dan Jika Jadi, Berapa Besar?
Sebuah komputer yang menjalankan GNU / Linux umumnya memiliki beberapa partisi yang berbeda di atasnya (tidak termasuk Windows atau OS lain skenario dual boot). Biasanya ada Master Boot Record kecil (MBR) partisi yang menampung boot loader (GRUB atau Lilo biasanya), sebuah partisi sistem yang menampung OS anda yang sebenarnya (biasanya cukup besar), dan biasanya ada partisi swap.
Saya memiliki paritition yang saya gunakan sebagai direktori rumah saya, tapi itu semacam, khusus belum umum, mengatur.

Partisi swap digunakan untuk membantu menjalankan sistem Anda lebih cepat. Ketika sistem anda kehabisan RAM fisik selama operasi, menggunakan partisi swap sebagai RAM dan menulis sedikit dari hal-hal yang saat ini dalam RAM, tetapi tidak diperlukan, untuk partisi swap. Hal ini memungkinkan Anda untuk menjalankan lebih banyak program sekaligus. Alternatif untuk memiliki swap adalah ... baik ... tidak memiliki swap. Dalam skenario ini, ketika Anda sudah membuka aplikasi cukup memori fisik Anda mengisi, tidak ada tempat untuk menulis overflow dan sistem Anda akan rawa turun cukup sedih.

OS paling modern memiliki semacam fasilitas swap. Pada Windows ini disebut sebagai pagefile, dan aku tidak yakin apa itu disebut sebagai pada Mac.

Swap adalah baik. Anda harus memiliki swap.
Swap adalah baik, tetapi dalam banyak sistem itu tidak perlu. Saya menemukan ini sama sekali dengan kecelakaan satu hari. Aku muffed up partisi ketika saya menginstal Kubuntu dan tidak mengalokasikan partisi swap. Yang lucu adalah bahwa aku tidak menyadari selama berbulan-bulan dan ketika aku melihat hal itu adalah dengan berbicara dengan seseorang yang menanyakan sesuatu tentang swap, bukan karena masalah apapun kinerja sistem. Sebelum kejadian ini, saya tidak berpikir hal itu mungkin untuk menjalankan kotak GNU / Linux tanpa swap, tetapi ternyata bahwa tidak hanya mungkin, beberapa orang melakukannya dengan sengaja.

Dalam dunia rumah / desktop, jika Anda memiliki GB RAM atau lebih, sistem Anda mungkin tidak pernah menukar apa pun. Rekomendasi untuk mengalokasikan swap mana saja 1,5-2 kali jumlah RAM fisik di sistem anda. Pada beberapa sistem, kehilangan 2 sampai 3 GB ruang disk mungkin menjadi kerugian cukup besar dan karena itu tidak layak. Di dunia server, berjalan tanpa swap propbably bunuh diri. Jangan lakukan itu.
Jika Anda penasaran, periksa penggunaan swap Anda sekarang dan lagi. Dengan KDE Anda dapat menggunakan Sistem Guard KDE dan ada beberapa gDesklets tersedia untuk Gnome (dan mungkin dibangun dalam aplikasi juga, tidak yakin) untuk melihat penggunaan swap anda.







2. Parent and child dalam sistem operasi

Berikut beberapa definisi proses pada sistem operasi adalah :
1. Program yang sedang dalam keadaan dieksekusi.
2. Unit kerja terkecil yang secara individu memiliki sumber daya dan dijadwalkan oleh sistem operasi.
Sistem operasi mengolah seluruh proses yang ada di sistem dan bertugas mengalokasikan sumber daya – sumber daya ke proses yang membutuhkan sesuai dengan kebijaksanaan tertentu. Sumber daya yang dibutuhkan proses diantaranya CPU, memori, file serta I/O device.
Keadaan Proses
Proses – proses yang dikelola oleh sistem operasi akan melalui serangkaian keadaan yang merupakan
Bagian dari aktivitasnya. Keadaan proses ini disebut sebagai status proses yang terdiri dari:
• Status New yaitu status dimana proses sedang dibuat.
• Status Ready yaitu status dimana proses siap dieksekusi tetapi CPU belum tersedia karena sedang mengerjakan proses lain.
• Status Waiting yaitu status dimana proses sedang menunggu suatu kejadian tertentu. Misalnya sedang menunggu operasi I/O selesai, menunggu signal dari proses lain, tersedianya memori, dsb.
• Status Running yaitu status dimana proses dieksekusi. Pada status ini CPU sedang mengeksekusi instruksi – instruksi pada proses.
• Status Terminated yaitu status dimana proses diakhiri.
Sebuah proses menjadi Waiting karena proses tersebut menunggu suatu kejadian tertentu seperti selesainya operasi I/O, misalnya perekaman data ke disk karena pada saat perekaman dilakukan proses sedang tidak menggunakan CPU maka scheduler segera mengalokasikan CPU ke proses lain yang telah Ready. Apabila kejadian yang ditunggu telah selesai maka proses dipindahkan kembali ke antrian Ready dan siap dijadwalkan.
Sebuah proses dari keadaan Running dapat menjadi Ready kembali karena diinterupsi oleh proses lain. Interupsi dapat disebabkan karena jatah waktu yang diberikan CPU ke proses tersebut telah habis sementara proses masih memerlukan sejumlah waktu untuk selesai. Jatah waktu yang diberikan sering disebut sebagai quantum time (time slice) yang dapat berkisar antara 1 hingga 100 milidetik. Interupsi suatu proses terkait erat dengan strategi penjadwalan proses yang digunakan sistem operasi yaitu strategi preemptive dimana suatu proses dapat saja disela oleh proses lain pada saat Running.
Sebuah proses menjadi Terminated disebabkan oleh beberapa hal diantaranya:
• Proses memang sudah sele sai mengerjakan tugasnya, sehingga diakhiri secara normal
• Melewati batas waktu yang telah diberikan.
• Terjadi kesalahan perhitungan misalnya mengerjakan instruksi pembagian dengan nol (division by zero), atau menyimpan angka yang lebih besar daripada yang dapat diakomodasi oleh perangkat keras.
• Terjadi kegagalan I/O seperti kegagalan pembacaan dan penulisan file.
• Proses induknya berakhir, pada kasus ini suatu proses dibuat oleh proses lain, proses pembuat disebut sebagai parent, sedangkan proses yang dibuat disebut sebagai child . Sistem dirancang untuk mengakhiri secara otomatis proses – proses childnya bila proses parent berakhir.
• Proses child diakhiri atas permintaan proses parentnya. Pada kasus ini parent mengirim signal tertentu untuk mengakhiri childnya misalnya mengirim signal SIGQUIT, SIGKILL atauSIGTERM.
Konsep Pembuatan dan Penghentian Proses
Konsep pembuatan proses pada sistem operasi linux :
• Setiap proses diberi nomor khusus sebagai identifikasi yang disebut process identification atau PID berupa angka integer unik.
• Jika proses selesai (Terminated) maka semua sumber daya yang digunakan termasuk PID dibebaskan kembali.
• Proses dibuat menggunakan system call fork() yang sering disebut forking proses
• System call fork() mengkopi proses pemanggil sehingga akan terdapat 2 proses yaitu :
1. Proses pemanggil disebut PARENT
2. Proses hasil kopian disebut CHILD
• Proses CHILD identik dengan proses PARENT-nya tetapi memiliki PID yang berbeda.
• Setelah proses baru (child) berhasil dibuat eksekusi dilanjutkan secara normal di masing –masing proses pada aris setelah pemanggilan system call fork().
• Proses pemanggil (PARENT) dapat melakukan forking proses lebih dari satu kali sehingga memungkinkan terdapat banyak proses CHILD yang dieksekusi.
• Proses CHILD dapat melakukan forking proses seperti halnya PARENT sehingga dapat terbentuk struktur pohon proses.
Sedangkan pada proses penghentian pada OS linux, jika telah menyelesaikan pernyataan terakhir, dan meminta pada sistem operasi untuk menghapusnya dengan menggunakan system call exit. Proses mengembalikan semua data (output) ke parent proses melalui system call wait. Kemudian proses dihapus dari list atau tabel sistem, dilanjutkan dengan menghapus PCB.
Penghapusan proses ini akan menjadi sangat kompleks jika ternyata proses yang akan dihentikan tersebut membuat proses-proses yang lain. Pada beberapa sistem, proses-proses anak akan dihentikan secara otomatis jika proses induknya berhenti. Namun, ada beberapa sistem yang menganggap bahwa proses anak ini terpisah dengan induknya, sehingga proses anak tidak ikut dihentikan secara otomatis pada saat proses induk dihentikan.
Parent dapat menghentikan eksekusi proses child dengan menggunakan system call abort. Proses anak dihentikan parent karena beberapa alasan, antara lain :
• Child mengalokasikan sumber daya melampaui batas
• Tugas child tidak dibutuhkan lebih lanjut
• Parent berhenti, karena system operasi tidak mengijinkan child untuk melanjutkan jika parent berhenti dan terminasi dilanjutkan
Alasan lain adalah:
• Proses selesai mengerjakan tugasnya(selesai normal)
• Proses berjalan melebihi batas waktu
• Memory tidak tersedia
• Proses mengakses kawasan memori yang tidak boleh diakses
• Terjadi kesalahan karena pelanggaran proteksi
• Terjadi kesalahan perhitungan
• Proses menunggu terlalu lama
• Terjadi kegagalan I/O
• Proses mengeksekusi instruksi yang tidak ada
• Proses mengguinakan instruksi yang disimpan untuk SO
• Terjadi kesalahan penggunaan data
• Terjadi intervensi dari operator atau SO (contoh : deadlock)
• Proses induk berahir
• Atas permintaan proses induk
3. Kernel
Kernel adalah suatu perangkat lunak yang menjadi bagian utama dari sebuah sistem operasi. Tugasnya melayani bermacam program aplikasi untuk mengakses perangkat keras komputer secara aman. Karena akses terhadap perangkat keras terbatas, sedangkan ada lebih dari satu program yang harus dilayani dalam waktu yang bersamaan, maka kernel juga bertugas untuk mengatur kapan dan berapa lama suatu program dapat menggunakan satu bagian perangkat keras tersebut. Hal tersebut dinamakan sebagaimultiplexing. Akses kepada perangkat keras secara langsung merupakan masalah yang kompleks, oleh karena itu kernel biasanya mengimplementasikan sekumpulan abstraksihardware. Abstraksi-abstraksi tersebut merupakan sebuah cara untuk menyembunyikan kompleksitas, dan memungkinkan akses kepada perangkat keras menjadi mudah dan seragam. Sehingga abstraksi pada akhirnya memudahkan pekerjaan programer. Untuk menjalankan sebuah komputer kita tidak harus menggunakan kernel sistem operasi. Sebuah program dapat saja langsung di- load dan dijalankan diatas mesin 'telanjang' komputer, yaitu bilamana pembuat program ingin melakukan pekerjaannya tanpa bantuan abstraksi perangkat keras atau bantuan sistem operasi. Teknik ini digunakan oleh komputer generasi awal, sehingga bila kita ingin berpindah dari satu program ke program lain, kita harus mereset dan meload kembali program-program tersebut.
Ada 4 kategori kernel:
1. Monolithic kernel.
Merupakan kernel yang menyediakan abstraksi perangkat keras yang kaya dan tangguh. Pendekatan kernel monolitik didefinisikan sebagai sebuah antarmuka virtual yang berada pada tingkat tinggi di atas perangkat keras, dengan sekumpulan primitif atau system call untuk mengimplementasikan layanan-layanan sistem operasi, seperti halnya manajemen proses, konkurensi (concurrency), dan manajemen memori pada modul-modul kernel yang berjalan di dalam mode supervisor.
Meskipun jika setiap modul memiliki layanan operasi-operasi tersebut terpisah dari modul utama, integrasi kode yang terjadi di dalam monolithic kernel sangatlah kuat, dan karena semua modul berjalan di dalam address space yang sama, sebuah bug dalam salah satu modul dapat merusak keseluruhan sistem. Akan tetapi, ketika implementasi dilakukan dengan benar, integrasi komponen internal yang sangat kuat tersebut justru akan mengizinkan fitur-fitur yang dimiliki oleh sistem yang berada di bawahnya dieksploitasi secara efektif, sehingga membuat sistem operasi dengan monolithic kernel sangatlah efisien—meskipun sangat sulit dalam pembuatannya.
Pada sistem operasi modern yang menggunakan monolithic kernel, seperti halnya Linux, FreeBSD, Solaris, dan Microsoft Windows, dapat memuat modul-modul yang dapat dieksekusi pada saat kernel tersebut dijalankan sehingga mengizinkan ekstensi terhadap kemampuan kernel sesuai kebutuhan, dan tentu saja dapat membantu menjaga agar kode yang berjalan di dalam ruangan kernel (kernel-space) seminim mungkin.
Di bawah ini ada beberapa sistem operasi yang menggunakan Monolithic kernel:
• Kernel sistem operasi UNIX tradisional, seperti halnya kernel dari sistem operasi UNIX keluarga BSD (NetBSD, BSD/I, FreeBSD, dan lainnya).
• Kernel sistem operasi GNU/Linux, Linux.
• Kernel sistem operasi Windows (versi 1.x hingga 4.x; kecuali Windows NT).
2. Microkernel.
Merupakan kernel yang menyediakan hanya sekumpulan kecil abstraksi perangkat keras sederhana, dan menggunakan aplikasi-aplikasi yang disebut sebagai server untuk menyediakan fungsi-fungsi lainnya.
Pendekatan mikrokernel berisi sebuah abstraksi yang sederhana terhadap hardware, dengan sekumpulan primitif atau system call yang dapat digunakan untuk membuat sebuah sistem operasi agar dapat berjalan, dengan layanan-layanan seperti manajemen thread, komunikasi antar address space, dan komunikasi antar proses. Layanan-layanan lainnya, yang biasanya disediakan oleh kernel, seperti halnya dukungan jaringan, pada pendekatan microkernel justru diimplementasikan di dalam ruangan pengguna (user-space), dan disebut dengan server. Server atau disebut sebagai peladen adalah sebuah program, seperti halnya program lainnya. Server dapat mengizinkan sistem operasi agar dapat dimodifikasi hanya dengan menjalankan program atau menghentikannya. Sebagai contoh, untuk sebuah mesin yang kecil tanpa dukungan jaringan, server jaringan (istilah server di sini tidak dimaksudkan sebagai komputer pusat pengatur jaringan) tidak perlu dijalankan. Pada sistem operasi tradisional yang menggunakan monolithic kernel, hal ini dapat mengakibatkan pengguna harus melakukan rekompilasi terhadap kernel, yang tentu saja sulit untuk dilakukan oleh pengguna biasa yang awam. Dalam teorinya, sistem operasi yang menggunakan microkernel disebut jauh lebih stabil dibandingkan dengan monolithic kernel, karena sebuah server yang gagal bekerja, tidak akan menyebabkan kernel menjadi tidak dapat berjalan, dan server tersebut akan dihentikan oleh kernel utama. Akan tetapi, dalam prakteknya, bagian dari system state dapat hilang oleh server yang gagal bekerja tersebut, dan biasanya untuk melakukan proses eksekusi aplikasi pun menjadi sulit, atau bahkan untuk menjalankan server-server lainnya.
Sistem operasi yang menggunakan microkernel umumnya secara dramatis memiliki kinerja di bawah kinerja sistem operasi yang menggunakan monolithic kernel. Hal ini disebabkan oleh adanya overhead yang terjadi akibat proses input/output dalam kernel yang ditujukan untuk mengganti konteks (context switch) untuk memindahkan data antara aplikasi dan server.
Beberapa sistem operasi yang menggunakan microkernel:
• IBM AIX, sebuah versi UNIX dari IBM
• Amoeba, sebuah kernel yang dikembangkan untuk tujuan edukasi
• Kernel Mach, yang digunakan di dalam sistem operasi GNU/Hurd, NexTSTEP, OPENSTEP, dan Mac OS/X
• Minix, kernel yang dikembangkan oleh Andrew Tanenbaum untuk tujuan edukasi
• Symbian OS, sebuah sistem operasi yang populer digunakan pada hand phone, handheld device, embedded device, dan PDA Phone.
3. Hybrid (modifikasi dari microkernel).
Kernel yang mirip microkernel, tetapi ia juga memasukkan beberapa kode tambahan di kernel agar ia menjadi lebih cepat. Beberapa orang banyak yang bingung dalam membedakan antara kernel hibrida dan kernel monolitik yang dapat memuat modul kernel setelah proses booting, dan cenderung menyamakannya. Antara kernel hibrida dan kernel monolitik jelas berbeda. Kernel hibrida berarti bahwa konsep yang digunakannya diturunkan dari konsep desain kernel monolitik dan mikrokernel. Kernel hibrida juga memiliki secara spesifik memiliki teknologi pertukaran pesan (message passing) yang digunakan dalam mikrokernel, dan juga dapat memindahkan beberapa kode yang seharusnya bukan kode kernel ke dalam ruangan kode kernel karena alasan kinerja.
Di bawah ini adalah beberapa sistem operasi yang menggunakan kernel hibrida:
• BeOS, sebuah sistem operasi yang memiliki kinerja tinggi untuk aplikasi multimedia.
• Novell NetWare, sebuah sistem operasi yang pernah populer sebagai sistem operasi jaringan berbasis IBM PC dan kompatibelnya.
• Microsoft Windows NT (dan semua keturunannya).



4. Exokernel
Merupakan kernel yang tidak menyediakan sama sekali abstraksi hardware, tapi ia menyediakan sekumpulan pustaka yang menyediakan fungsi-fungsi akses ke perangkat keras secara langsung atau hampir-hampir langsung.
Exokernel biasanya menggunakan library yang disebut dengan libOS untuk melakukan abstraksi. libOS memungkinkan para pembuat aplikasi untuk menulis abstraksi yang berada pada level yang lebih tinggi, seperti halnya abstraksi yang dilakukan pada sistem operasi tradisional, dengan menggunakan cara – cara yang lebih fleksibel, karena aplikasi mungkin memiliki abstraksinya masing-masing. Secara teori, sebuah sistem operasi berbasis Exokernel dapat membuat sistem operasi yang berbeda seperti halnya Linux, UNIX, dan Windows dapat berjalan di atas sistem operasi tersebut.
Salah satu contoh implementasi kernel ialah pada system operasi windows. Pada sistem operasi Windows, kernel ditangani oleh file kernel32.dll. Kernel ini menangani manajemen memori, operasi masukan / keluaran dan interrupt. Ketika boot Windows, kernel32.dll di-load ke dalam spasi protected memory sehingga spasi memorinya tidak digunakan oleh aplikasi lain. Apabila ada aplikasi yang mencoba mengambil spasi memori kernel32.dll, akan muncul pesan kesalahan “invalid page fault”.

Twitter Delicious Facebook Digg Stumbleupon Favorites More