Prinsip Desain

Dalam desain keseluruhan, Linux menyerupai implementasi UNIX nonmicrokernel yang lain. Ia adalah sistem yang multi-user, multi-tasking dengan alat-alat UNIX-compatible yang lengkap. Sistem berkas Linux mengikuti semantik tradisional UNIX, dan model jaringan standar UNIX diimplementasikan secara keseluruhan. Ciri internal desain Linux telah dipengaruhi oleh sejarah perkembangan sistem operasi ini.

Walau pun Linux dapat berjalan pada berbagai macam platform, pada awalnya dia dikembangkan secara eksklusif pada arsitektur PC. Sebagian besar dari pengembangan awal tersebut dilakukan oleh peminat individual, bukan oleh fasilitas riset yang berdana besar, sehingga dari awal Linux berusaha untuk memasukkan fungsionalitas sebanyak mungkin dengan dana yang sangat terbatas. Saat ini, Linux dapat berjalan baik pada mesin multi-prosesor dengan main memory yang sangat besar dan ukuran disk space yang juga sangat besar, namun tetap mampu beroperasi secara berguna dengan jumlah RAM yang lebih kecil dari 4 MB.

Prinsip Desain Linux

Akibat semakin berkembangnya teknologi PC, kernel Linux juga semakin lengkap dalam mengimplementasikan fungsi UNIX. Cepat dan efisien merupakan tujuan desain yang penting, tetapi akhir-akhir ini konsentrasi perkembangan Linux lebih pada tujuan desain yang ketiga yaitu standarisasi. Standar POSIX terdiri dari kumpulan spesifikasi dari aspek berbeda kelakuan sistem operasi. Ada dokumen POSIX untuk fungsi sistem operasi biasa dan untuk ekstensi seperti proses untuk thread dan operasi real-time. Linux di desain supaya sesuai dengan dokumen POSIX yang relevan; sedikitnya ada dua distribusi Linux yang sudah memperoleh sertifikasi ofisial POSIX.

Karena Linux memberikan interface standar ke programmer dan pengguna, Linux tidak membuat banyak kejutan kepada siapa pun yang sudah terbiasa dengan UNIX. Namun interface pemrograman Linux merujuk pada semantik SVR4 UNIX daripada kelakuan BSD. Kumpulan perpustakaan yang berbeda tersedia untuk mengimplementasi semantik BSD di tempat dimana kedua kelakuan sangat berbeda.

Ada banyak standar lain di dunia UNIX, tetapi sertifikasi penuh Linux terhadap standar lain UNIX terkadang menjadi lambat karena lebih sering tersedia dengan harga tertentu (tidak secara bebas), dan ada harga yang harus dibayar jika melibatkan sertifikasi persetujuan atau kecocokan sebuah sistem operasi terhadap kebanyakan standar. Mendukung aplikasi yang luas penting untuk semua sistem operasi sehingga implementasi dari standar merupakan tujuan utama pengembangan Linux walau pun implementasinya tidak sah secara formal. Selain standar POSIX, Linux saat ini mendukung ekstensi thread POSIX dan subset dari ekstensi untuk kontrol proses real-time POSIX.

Komponen Sistem Linux

Sistem Linux terdiri dari tiga bagian kode penting:

  1. Kernel: Bertanggung jawab memelihara semua abstraksi penting dari sistem operasi, termasuk hal seperti proses- proses dan memori virtual.

  2. Perpustakaan sistem: menentukan kumpulan fungsi standar dimana aplikasi dapat berinteraksi dengan kernel, dan mengimplementasi hampir semua fungsi sistem operasi yang tidak memerlukan hak penuh atas kernel.

  3. Utilitas Sistem: adalah program yang melakukan pekerjaan manajemen secara individu dan khusus.

Kernel

Walau pun berbagai sistem operasi modern telah mengadopsi sebuah arsitektur message-passing buat kernel internal mereka, Linux memakai model historis UNIX: kernel diciptakan sebagai biner yang tunggal dan monolitis. Alasan utama adalah untuk meningkatkan performa: Karena semua struktur data dan kode kernel disimpan dalam satu address space, context switch tidak diperlukan ketika sebuah proses memanggil sebuah fungsi sistem operasi atau ketika interupsi perangkat keras dikirim. Tidak hanya scheduling inti dan kode memori virtual menempati address space ini; semua kode kernel, termasuk semua device drivers, sistem berkas, dan kode jaringan, hadir dalam satu address space yang sama.

Kernel Linux membentuk inti dari sistem operasi Linux. Dia menyediakan semua fungsi yang diperlukan untuk menjalankan proses, dan disediakan servis sistem untuk memberikan pengaturan dan proteksi akses ke sumber daya (resource) perangkat keras. Kernel mengimplementasi semua fitur yang diperlukan supaya dapat bekerja sebagai sistem operasi. Namun, jika sendiri, sistem operasi yang disediakan oleh kernel Linux sama sekali tidak mirip dengan sistem UNIX. Dia tidak memiliki banyak fitur ekstra UNIX, dan fitur yang disediakan tidak selalu dalam format yang diharapkan oleh aplikasi UNIX. Interface dari sistem operasi yang terlihat oleh aplikasi yang sedang berjalan tidak dipelihara secara langsung oleh kernel. Melainkan, aplikasi membuat panggilan (calls) ke perpustakaan sistem, yang kemudian memanggil servis sistem operasi yang dibutuhkan.

Perpustakaan Sistem

Perpustakaan sistem menyediakan banyak tipe fungsi. Pada level yang paling mudah, mereka membolehkan aplikasi melakukan permintaan pada servis sistem kernel. Membuat sebuah panggilan sistem (system calls) melibatkan transfer kontrol dari mode user yang tidak penting ke mode kernel yang penting; detil dari transfer ini berbeda pada masing-masing arsitektur. Perpustakaan bertugas untuk mengumpulkan argumen system-call dan, jika perlu, mengatur argumen tersebut dalam bentuk khusus yang diperlukan untuk melakukan system call.

Perpustakaan juga dapat menyediakan versi lebih kompleks dari system call dasar. Contohnya, fungsi buffered file-handling dari bahasa C semuanya diimplementasi dalam perpustakaan sistem, yang berakibat kontrol yang lebih baik terhadap file I/O daripada yang disediakan oleh system call kernel dasar. Perpustakaan juga menyediakan rutin yang tidak ada hubungan dengan system call, seperti algoritma penyusunan (sorting), fungsi matematika, dan rutin manipulasi string (string manipulation). Semua fungsi yang diperlukan untuk mendukung jalannya aplikasi UNIX atau POSIX diimplementasikan dalam perpustakaan sistem.

Utilitas Sistem

Sistem linux mengandung banyak program-program user-mode: utilitas sistem dan utilitas user. Utilitas sistem termasuk semua program yang diperlukan untuk menginisialisasi sistem, seperti program untuk konfigurasi alat jaringan (network device) atau untuk load modul kernel. Program server yang berjalan secara kontinu juga termasuk sebagai utilitas sistem; program semacam ini mengatur permintaan user login, koneksi jaringan yang masuk, dan antrian printer.

Tidak semua utilitas standar melakukan fungsi administrasi sistem yang penting. Lingkungan pengguna UNIX mengandung utilitas standar dalam jumlah besar untuk melakukan pekerjaan sehari-hari, seperti membuat daftar direktori, memindahkan dan menghapus file, atau menunjukkan isi dari sebuah file. Utilitas yang lebih kompleks dapat melakukan fungsi text-processing, seperti menyusun data tekstual atau melakukan pattern-searches pada input teks. Jika digabung, utilitas-utilitas tersebut membentuk toolset standar yang diharapkan oleh user pada sistem UNIX mana saja; walau pun tidak melakukan fungsi sistem operasi apa pun, utilitas tetap merupakan bagian penting dari sistem Linux dasar.