Pages

Monday, September 17, 2007

1.2 Hardware Dependency

Linux mengatur (maintain) perbedaan kode sumber antara hardware-dependent dan hardware-independent dengan teliti. Untuk tujuan tersebut, kedua direktori arch dan include memiliki 9 sub-direktori, masing-masing untuk 9 jenis hardware platform yang didukung oleh Linux. Nama-nama standard dari jenis platform tersebut adalah:

arm
PC Acorn

alpha
Workstation Compac Alpa

i386
PC IBM-compatible berbasiskan mikroprosesor-mikroprosesor Intel-80x86 atau 80x86-compatible

m68k
PC berbasiskan mikroprosesor-mikroprosesor Motorolla MC680x0

mips
Workstation berbasiskan mikroprosesor-mikroprosesor MIPS Silicon Grhapics

ppc
Workstation berbasiskan mikroprosesor-mikroprosesor MIPS Motorola-IBM

sparc
Workstation berbasiskan mikroprosesor-mikroprosesor Sun Microsystems

sparc64
Workstation berbasiskan mikroprosesor-mikroprosesor Ultra SPARC 64-bit Sun Microsystems

s390
Komputer mainframe IBM System/390

1.1 Kernel Linux v.s Unix

Berbagai macam sistem operasi Unix-like tersedia di pasaran, beberapa di antaranya memiliki sejarah yang sangat panjang dengan fitur-fitur yang saat ini sudah lama tidak digunakan, dan berbeda dalam beberapa hal. Semua varian Unix komersial berasal dari sistem SVR4 atau 4.4BSD; seluruhnya mengikuti standard yang ada, seperti POSIX (Portable Operating Systems based on Unix) IEEE dan CAE (Common Application Environment) X/Open.

Berbagai standard yang ada saat ini memberikan spesifikasi antarmuka pemrograman aplikasi (Application Programming Interface, API)—lingkungan yang sudah didefinisikan dengan baik di mana program-program user berjalan (run). Oleh karena itu, standard-standard tersebut tidak dibenarkan memberikan batasan apapun terhadap perancangan internal kernel yang dipilih.

Untuk mendefinisikan suatu antarmuka pengguna (user interface), ide-ide dan fitur-fitur dari rancangan fundamental kernel-kernel Unix-like sering dipertukarkan (untuk keperluan pengembangan). Oleh karena itu, Linux sebanding dengan sistem operasi Unix-like lainnya. Apa yang kita baca di buku ini dan kita lihat pada kernel Linux, akhirnya akan membantu kita untuk memahami varian Unix yang lain.

Kernel versi 2.2 dirancang untuk mengikuti standard POSIX IEEE. Hal ini, tentu saja menunjukan bahwa sebagian besar dari program-program Unix dapat di-compile dan di-execute pada sistem Linux dengan usaha yang minimal atau bahkan tanpa penambahan patch pada source code-nya. Lebih lanjut, Linux mempunyai semua fitur-fitur sebuah sistem operasi Unix yang modern, seperti virtual memory, virtual filesystem, lightweight processes, reliable signals, SVR4 interprocess communications, mendukung sistem Symmetric Multiprocessor (SMP), dan lain lain.

Awalnya, kernel Linux terlihat tidak inovatif. Ketika Linus Torvalds menulis kernel ini pada kali pertama, beliau mengambil rujukan dari beberapa buku “Unix Internals” lama, seperti The Design of the Unix Operating System karya Maurice Bach (Prentice Hall, 1986). Sebenarnya, Linux memiliki beberapa perbedaan dalam masalah hal-hal yang mendasar pada Unix (Unix baseline) yang dijelaskan pada buku tersebut (seperti tentang SVR4). Akan tetapi, Linux tidak terpaku pada satu varian Unix manapun. Oleh karena itu, Linux mencoba untuk mengadaptasi fitur-fitur dan rancangan baru yang dinilai baik dari beberapa kernel Unix yang berbeda.

Berikut adalah sejumlah perbedaan antara kernel Linux dengan beberapa kernel Unix yang terkenal (komersial):
  1. Kernel Linux tergolong jenis kernel monolithic. Sebuah program yang berukuran besar, dan kompleks, dirancang secara logis dari komponen-komponen yang berbeda. Hal ini sangat umum; karena sebagain besar varian Unix menganut sistem kernel monolithic, kecuali March 3.0 Carnegie-Mellon.
  2. Kernel Unix versi lama di-compile dan di-link secara statik. Sebagian besar kernel modern bisa me-load dan unload sebagian kode kernelnya (yang biasa disebut dengan module) secara dinamik, contoh kasus load/unload module ini terjadi pada device driver/driver perangkat keras). Fasilitas module ini digunakan dengan sangat baik oleh Linux, dengan me-load dan unload module kernel tersebut di semua sesi aktivitas komputasi sedang berjalan. Diantara semua varian Unix yang bersifat komersial, hanya kernel SVR4.2 yang mempunyai fitur ini.
  3. Kernel threading. Beberapa kernel Unix modern, seperti Solaris 2.x dan SVR4.2/MP, tersusun sebagai suatu kumpulan kernel thread. Suatu kernel thread merupakan suatu execution context yang bisa dengan mandiri (independently) dijadwalkan; berlaku baik pada suatu user program, atau menjalankan beberapa fungsi kernel. Context switch di antara sejumlah kernel thread menggunakan sumber daya yang lebih sedikit dibandingkan antar sejumlah proses, karena biasanya beroperasi pada address space yang sama. Linux menggunakan fungsionalitas kernel thread ini sangat terbatas hanya pada beberapa fungsi kernel secara periodik; kernel thread Linux tidak dirancang untuk mengeksekusi user program, karena tidak memberikan abstraksi dasar execution context. (Hal ini akan dibahas pada bagian selanjutnya.)
  4. Mendukung multithreaded application. Sebagian besar sistem operasi modern mempunyai dukungan terhadap aplikasi-aplikasi yang mempunyai fitur multithreading (multithreaded aplication), inilah, program-program (user programs) yang dirancang dengan baik untuk memiliki alur-alur eksekusi yang relatif mandiri (independently) dengan membagi sejumlah besar bagian struktur data aplikasi. Sebuah multithreaded aplication dapat tersusun dari sejumlah lightweight processes (LWP), atau proses-proses yang dapat beroperasi pada address space, RAM, file-file digunakan (opened files) yang sama, dan beberapa sumber daya lain. Linux merancang versi sendiri fitur lightweight processes ini, dan pasti akan berbeda dengan jenis yang digunakan oleh sistem lain seperti SVR4 dan Solaris. Apabila semua varian Unix komersial menggunakan LWP berbasiskan pada kernel thread, Linux memanfaatkannya dengan metoed basic execution context dan mengaturnya lewat system call non-standard clone ( ).
  5. Linux termasuk jenis kernel nonpreemptive. Hal ini berarti Linux tidak bisa secara langsung melakukan interleave alur eksekusi yang sedang berada pada privileged mode. Beberapa bagian kode program pada kernel memberikan gambaran bagaimana Linux dapat menjalankan dan memodifikasi struktur-struktur data tanpa diganggu (interrupted) dan lahirnya thread-thread baru yang dapat mengubah struktur-struktur data tersebut. Biasanya, kernel yang bersifat preemptive secara penuh akan berhubungan dengan sebuah sistem operasi real-time. Pada saat ini, diantara sistem Unix general-purpose yang ada, hanya Solaris 2.x dan March 3.0 yang termasuk kernel preemptive secara penuh. Pada lain pihak, SVR4.2/MP memperkenalkan beberapa hal solusi preemptive yang membatasi kapabilitas fitur preemptive.
  6. Mendukung sistem multiprocessor. Beberapa kernel varian Unix memanfaatkan keunggulan sistem multiprocessor. Linux 2.2 telah menyediakan hasil pengembangan dari symmetric multiprocessing (SMP), artinya bahwa tidak hanya sistem bisa menggunakan sejumlah prosesor, tapi juga prosesor dapat mengeksekusi task manapun; tidak ada diskriminasi di antara prosesor-prosesor yang ada. Walaupun begitu, Linux 2.2 tidak bisa mengotimalkan fasilitas SMP ini. Beberapa fungsi-fungsi kernel yang bisa dieksekusi secara konkuren—seperti filesystem handling dan networking—sekarang hanya bisa dieksekusi secara sekuensial.
  7. Filesystem. Filesystem standard Linux memiliki kekurangan (saat tulisan ini dibuat) pada fitur journaling. Akan tetapi, filesystem lain yang dinilai lebih baik tersedia untuk Linux, dan walaupun tidak source code tidak tersedia pada kernel Linux; diantaranya adalah: Journaling Filesystem (JFS) AIX IBM, dan XFS filesystem Silicon Graphic. Hal yang luar biasa terhadap teknologi object-oriented virtual filesystem (terinspirasi oleh Solaris dan SVR4), filesystem di luar Linux dapat dengan di-porting dengan mudah ke sistem Linux.
  8. STREAMS. Linux tidak memanfaatkan fitur STREAMS I/O (diadaptasi oleh SVR4) ini ke dalam sistemnya, walaupun saat ini sebagian besar kernel varian Unix mengikutkan ke dalam kernelnya dan menjadikannya sebagai interface yang paling sering digunakan untuk menulis (membuat) driver perangkat keras, dan protokol-protokol jaringan komputer.
Biasanya timbul pernyataan yang membuat hal-hal tersebut di atas tidak menggambarkan secara keseluruhan sesuatu yang selalu benar, tetapi, kenyataannya begitulah adanya. Beberapa fitur Linux membuatnya terlihat sebagai sistem operasi yang sangat unik. Sejumlah kernel varian Unix yang komersial sering memperkenalkan fitur-fitur baru untuk memperoleh keuntungan pasar yang lebih besar, tetapi fitur-fitur tersebut (biasanya) tidak bermanfaat secara signifikan, stabil, dan produktif. Akhirnya, kernel-kernel Unix modern cendrung terlihat sebagai sistem operasi yang sangat berukuran besar tapi menjadi tidak efisien. Sebaliknya, Linux tidak terkekang oleh tekanan dan pengaruh dari kondisi pasar, karena Linux berkembang sejalan dengan gagasan dari para pengembangnya (terutama Linus Torvalds). Secara khusus, Linux memiliki beberapa keunggulan dibanding pesaing varian Unix komersial sebagai berikut:

Linux bersifat bebas.
Kita bisa dengan bebas meng-install suatu sistem Unix yang lengkap dengan harga yang lebih terjangkau dibandingkan dengan harga (tentu saja) perangkat keras.

Linux mempunyai komponen-komponen yang keseluruhannya sangat mudah untuk dimodifikasi.
Penghargaan setinggi-tingginya untuk GNU General Public License (GPL), kita diberi kebebasan untuk melihat dan memodifikasi kode sumber (source code) kernel dan semua program sistem.

Linux dapat berjalan pada komputer low-end (spesifikasi hardware yang murah).
Kita bisa membangun sebuah server menggunakan komputer kelas rendah seperti sistem Intel 80386 dengan RAM 4 MB.

Linux memiliki kualitas standard kode sumber yang baik.
Sistem Linux biasanya sangat stabil; memiliki laju kegagalan dan waktu pemeliharaan sistem yang sangat rendah.

Linux sangat cocok (compatible) dengan banyak sekali sistem operasi.
Linux dapat melakukan proses mount otomatis semua filesystem MS-DOS dan MS Windows, SVR4, OS/2, Mac OS, Solaris, SunOS, NeXTSTEP, sejumlah besar varian BSD, dan lain-lain. Linux juga dapat melakukan operasi dengan layer-layer network, seperti Ethernet, Fiber Distributed Data Interface (FDDI), High Performance Parallel Interface (HIPPI), Token Ring IBM, WaveLAN AT&T, RoamAbout DS DEC, dan lain sebagainya. Dengan menggunakan pustaka-pustaka (libraries) yang tepat, sistem Linux bahkan dapat dengan langsung menjalankan program yang ditulis (codding) untuk sistem operasi lain. Sebagai contoh, Linux dapat mengeksekusi aplikasi-aplikasi yang ditulis untuk MS-DOS, MS Windows, SVR3 dan 4, Unix SCO, XENIX, dan sistem operasi lain yang berjalan di atas sistem Intel 80x86.

Linux didukung dengan sangat baik.
Percaya atau tidak, path atau update untuk Linux akan jauh mudah didapatkan daripada sistem operasi proprietary! Jawaban untuk masalah yang dihadapi sering keluar hanya dalam beberapa jam saja setelah masalah tersebut muncul di newsgroup atau mailing list. Lagipula, driver-driver perangkat keras untuk Linux biasanya tersedia dalam beberapa minggu setelah produk perangkat keras tersebut diperkenalkan oleh perusahaannya ke pasar. Pada sisi lain, beberapa vendor hardware hanya menyediakan driver perangkat keras tersebut hanya untuk beberapa sistem operasi komersial, dan biasanya hanya untuk Microsoft saja. Akibatnya, akan ada beberapa fitur dari hardware tersebut yang tidak bisa dipakai di semua varian Unix komersial.

Dengan perkiraan pengguna yang telah meng-install Linux lebih dari 12 juta dan terus bertambah, masyarakat yang sudah biasa menggunakan suatu sistem operasi akan mengalami cara penggunaan komputer yang relatif sama apabila melakukannya di atas Linux. Pada sisi lain, tuntutan terhadap para pengembang Linux terus bertambah, dan untungnya, Linux telah berkembang dalam arah development yang ketat oleh Linus, untuk memenuhi kebutuhan masyarakat.