15.7.08

Sekilas kernel Linux (4): Subsistem utama

(Bagian 4 dari 4 artikel - ke artikel utama)

Secara garis besar, komponen utama kernel Linux dapat dibayangkan dengan model pada Gambar 1.

System call interface

Antarmuka pemanggilan sistem atau system call interface (SCI) merupakan lapisan tipis yang menyediakan cara-cara pemanggilan fungsi-fungsi kernel oleh proses/program di wilayah user. Antarmuka ini bisa berbeda-beda tergantung arsitektur meskipun berada dalam keluarga prosesor yang sama. SCI sebenarnya merupakan pelayanan multipleksi/demultipleksi pemanggilan fungsi. Implementasi SCI dapat dijumpai di kernel Linux pada direktori ./linux/kernel sedangkan bagian yang berbeda berdasarkan arsitektur dapat dijumpai di ./linux/arch.

Process management


Apakah itu kernel?
Seperti tampak pada Gambar 1, kernel tidak lebih dari manajer sumber daya. Sumber daya yang dikelola bisa berupa proses, memori atau perangkat keras. Kernel mengatur dan membagi akses sumber daya yang diakses banyak user. User yang dimaksud bisa program di kernel atau aplikasi di wilayah lebih tinggi.

Manajemen proses (process management) adalah bagian yang menjalankan proses. Pada kernel, proses ini disebut thread (thread dalam bahasa Inggris berarti benang) dan merupakan virtualisasi individual dari prosesor (kode thread, data, stack, dan register CPU). Pada wilayah user, istilah proses lebih sering digunakan tetapi dalam implementasinya proses dan thread di Linux tidaklah dibedakan (di wilayah user istilah thread digunakan untuk proses yang dapat berjalan bersamaan dengan thread/proses lain, misalnya pada program yang mengimplementasikan timer). Kernel menyediakan antarmuka program aplikasi (application program interface, API) melalui SCI untuk membuat proses baru (fork, exec, atau fungsi Portable Operating System Interface [POSIX]), menghentikan sebuah proses (kill, exit), berkomunikasi dengan proses-proses itu serta melakukan sinkronisasi di antara proses-proses tersebut (menggunakan signal, atau mekanisme POSIX).

Manajemen proses mengelola pembagian kerja CPU untuk semua thread yang aktif. Kernel menerapkan algoritma penjadwalan yang berjalan dalam jangka waktu konstan berapapun jumlah thread yang minta dilayani. Penjadwalan seperti ini disebut penjadwal O(1) yang berarti bahwa jangka waktu yang sama diperlukan untuk menjadwal satu thread maupun menjadwal banyak thread. Penjadwal O(1) mendukung penggunaan prosesor jamak (multiprocessor) atau biasa disebut prosesor jamak simetris (Symmetric MultiProcessing, SMP). Kode untuk manajemen proses dapat dijumpai dalam direktori ./linux/kernel dan ./linux/arch.

Memory management

Memori dikelola dengan mengelompokkannya ke dalam beberapa "halaman" (page), biasanya setiap halaman berukuran 4KB tergantung arsitektur hardware. Manajemen memori di Linux juga mengelola mekanisme hardware untuk memetakan memori fisik dan virtual.

Sebenarnya manajemen memori lebih dari sekedar mengelola halaman/buffer 4 KB. Linux menyediakan abstraksi di atas buffer 4 KB, misalnya slab allocator. Mekanisme slab allocator menggunakan buffer 4KB sebagai basis namun menempatkan suatu catatan struktur di dalamnya sehingga dapat memberi informasi tentang halaman yang penuh, belum penuh dan kosong. Dengan demikian mekanisme ini dapat membuat alokasi tumbuh lebih besar atau lebih kecil berdasarkan kebutuhan.

Karena mendukung penggunaan berulang dari memori, ada kemungkinan memori yang tersedia menjadi "lelah" (exhausted) artinya terlalu banyak dipakai. Karena itu halaman dapat dipindah dari memori ke disk. Proses ini disebut swapping. Program yang melakukan manajemen memori disimpan di direktori ./linux/mm.

Virtual file system

Sistem berkas maya (virtual file system, VFS) menyediakan abstraksi antarmuka yang seragam untuk berbagai sistem berkas berbeda. VFS menjadi lapisan saklar yang menghubungkan SCI dengan sistem berkas yang didukung oleh kernel (lihat Gambar 2).


Gambar 2. VFS merupakan perantara user dengan sistem berkas

Di atas VFS adalah abstraksi API yang seragam yang berwujud fungsi seperti buka, tutup, baca dan tulis. Di bawah VFS adalah abstraksi sistem berkas yang menentukan bagaimana fungsi-fungsi di atas diimplementasikan. Abstraksi di bagian ini merupakan plug-in untuk sistem berkas yang dipilih (jumlah sistem berkas lebih dari 50). Implementasi sistem berkas terdapat di direktori ./linux/fs.

Di bawah sistem berkas terdapat buffer cache, yang menyediakan beberapa fungsi seragam ke lapisan sistem berkas (yang tidak tergantung sistem berkas yang dipakai). Lapisan cache ini berfungsi mengoptimalkan akses ke piranti fisik dengan menyimpan sementara data (atau membaca data lebih dari yang dibutuhkan sebagai spekulasi kalau-kalau data itu dibutuhkan kemudian). Di bawah buffer cache adalah driver ke piranti yang menerapkan antarmuka untuk piranti fisik yang terpasang.

Network stack

Network stack adalah stack untuk jaringan yang tergantung arsitektur dan mengikuti protokol yang digunakan. Perlu diingat bahwa Internet Protocol (IP) merupakan inti lapisan jaringan yang berada di bawah protokol transport (umumnya yang dipakai adalah Transmission Control Protocol, or TCP). Di atas TCP adalah lapisan soket yang dipanggil di lapisan SCI.

Lapisan soket merupakan API standar pada subsistem jaringan dan menyediakan antarmuka ke berbagai protokol jaringan. Lapisan soket menyediakan cara standar untuk mengelola koneksi jaringan dan mentransfer data antar dua titik. Sedangkan di lapisan transmisi, dapat digunakan protokol PDU (IP Protocol Data Unit), TCP atau UDP (User Datagram Protocol). Kode untuk mengelola jaringan terdapat di direktori ./linux/net.

Device driver

Driver untuk piranti (device driver) merupakan potongan kode program untuk mengakses piranti fisik. Piranti fisik tidak dapat digunakan jika tidak ada drivernya. Mayoritas kode sumber Linux merupakan driver piranti. Linux menyediakan subdirektori khusus untuk driver dan subdirektori ini dibagi lagi menjadi subdirektori berdasar piranti yang didukung, misalnya Bluetooth, I2C, serial, dan lain-lain. Kode sumber piranti ada di direktori ./linux/drivers.

Kode khusus sesuai arsitektur

Kebanyakan kode di kernel Linux tidak tergantung arsitektur. Namun terdapat beberapa unsur yang harus memperhatikan arsitektur untuk kerja normal atau untuk efisiensi. Direktori ./linux/arch menyimpan bagian-bagian kernel yang bergantung arsitektur dan kode-kode ini diwadahi dalam subdirektori sesuai arsitekturnya. Untuk kebanyakan komputer desktop, terdapat subdirektori i386. Setiap subdirektori mengandung subdirektori lagi yang berfokus pada aspek tertentu dari kernel, seperti boot, kernel, memory management, dan lain-lain. Kode khusus sesuai arsitektur dapat ditemui di ./linux/arch.

Tidak ada komentar: