LINUX
Sejarah
Linux sangat mirip dengan sistem-sistem UNIX, hal ini dikarenakan kompatibilitas dengan
UNIX merupakan tujuan utama desain dari proyek Linux. Perkembangan Linux dimulai pada
tahun 1991, ketika mahasiswa Finlandia bernama Linus Torvalds menulis Linux, sebuah kernel
untuk prosesor 80386, prosesor 32-bit pertama dalam kumpulan CPU intel yang cocok untuk PC.
Pada awal perkembangannya, source code Linux disediakan secara gratis di Internet.
Hasilnya, sejarah Linux merupakan kolaborasi banyak user dari seluruh dunia, semuanya
dilakukan secara eksklusif melalui Internet. Dari kernel awal yang hanya mengimplementasikan
subset kecil dari sistem UNIX, sistem Linux telah bertumbuh dimana sudah mampu memasukkan
banyak fungsi UNIX.
Kernel Linux perlu dibedakan dari sebuah sistem Linux: kernel Linux merupakan sebuah
perangkat lunak orisinil yang dibuat oleh komunitas Linux sedangkan sistem Linux, yang
diketahui saat ini, mengandung banyak komponen yang dibuat sendiri atau dipinjam dari proyek
lain.
Kernel Linux
Kernel Linux pertama yang dipublikasikan adalah versi 0.01, pada tanggal 14 Maret, 1991.
Sistem berkas yang didukung hanya sistem berkas Minix - kernel pertama dibuat berdasarkan
kerangka Minix. Tetapi, kernel tersebut sudah mengimplementasi proses UNIX secara tepat.
Tanggal 14 Maret, 1994, versi yang merupakan tonggak sejarah Linux yaitu versi 1.0
keluar.
Rilis ini adalah kulminasi dari tiga tahun perkembangan yang cepat dari kernel Linux. Fitur
baru terbesar yang disediakan adalah jaringan: 1.0 mampu mendukung protokol standar jaringan
TCP/IP. Kernel 1.0 juga memiliki sistem berkas yang lebih baik tanpa batasan-batasan sistem
berkas Minix. Sejumlah dukungan perangkat keras ekstra juga dimasukkan ke dalam rilis ini.
Dukungan perangkat keras telah berkembang termasuk diantaranya floppy-disk, CD-ROM, sound
card, berbagai mouse, dan keyboard internasional. Dukungan buat modul kernel yang
dynamically loadable dan unloadable juga diberikan.
Satu tahun setelah dirilis versi 1.0, kernel 1.2 keluar. Kernel versi 1.2 mendukung variasi
perangkat keras yang lebih luas. Pengembang telah memperbaharui networking stack untuk
menyediakan support bagi protokol IPX, dan membuat implementasi IP lebih komplit dengan
memberikan fungsi accounting dan firewalling. Kernel 1.2 juga merupakan kernel Linux terakhir
yang PC-only. Konsentrasi lebih diberikan pada dukungan perangkat keras dan memperbanyak
implementasi lengkap pada fungsi-fungsi yang ada.
Akhirnya pada bulan Juni 1996, Linux 2.0 dirilis. Versi 2.0 memiliki dua kemampuan baru
yang penting, yaitu: dukungan terhadap multiple architectures dan multiprocessor architectures.
Kode untuk manajemen memori telah diperbaiki sehingga performa sistem berkas dan memori
virtual meningkat. Untuk pertama kalinya, file system caching dikembangkan ke networked file
systems, writable memory mapped regions juga sudah didukung. Kernel 2.0 sudah memberikan
performa TCP/IP yang lebih baik, ditambah dengan sejumlah protokol jaringan baru. Kemampuan
untuk memakai remote Netware dan SMB (Microsoft LanManager) network volumes juga telah
ditambahkan pada versi terbaru ini. Tambahan lain adalah dukungan internal kernel threads,
penanganan dependencies antara modul-modul loadable, dan loading otomatis modul
berdasarkan permintaan (on demand). Konfigurasi dinamis dari kernel pada run time telah
diperbaiki melalui konfigurasi interface yang baru dan standar.
Sistem Linux
Dalam banyak hal, kernel Linux merupakan inti dari proyek Linux, tetapi komponen lainlah
yang membentuk secara komplit sistem operasi Linux. Dimana kernel Linux terdiri dari kode-kode
yang dibuat khusus untuk proyek Linux, kebanyakan perangkat lunak pendukungnya tidak
eksklusif terhadap Linux, melainkan biasa dipakai dalam beberapa sistem operasi yang mirip
UNIX. Contohnya, sistem operasi BSD dari Berkeley, X Window System dari MIT, dan proyek
GNU dari Free Software Foundation.
Pembagian (sharing) alat-alat telah bekerja dalam dua arah. Sistem perpustakaan utama
Linux awalnya dimulai oleh proyek GNU, tetapi perkembangan perpustakaannya diperbaiki
melalui kerjasama dari komunitas Linux terutama pada pengalamatan, ketidak efisienan, dan
bugs. Komponen lain seperti GNU C Compiler, gcc, kualitasnya sudah cukup tinggi untuk dipakai
langsung dalam Linux. Alat-alat administrasi network dibawah Linux berasal dari kode yang
dikembangkan untuk 4.3BSD, tetapi BSD yang lebih baru , salah satunya FreeBSD, sebaliknya
meminjam kode dari Linux, contohnya adalah perpustakaan matematika Intel floating-pointemulation.
Sistem Linux secara keseluruhan diawasi oleh network tidak ketat yang terdiri dari para
pengembang melalui internet, dengan grup kecil atau individu yang memiliki tanggung jawab
untuk menjaga integritas dari komponen- komponen khusus. Dokumen 'File System Hierarchy
Standard' juga dijaga oleh komunitas Linux untuk memelihara kompatibilitas keseluruh komponen
sistem yang berbeda-beda. Aturan ini menentukan rancangan keseluruhan dari sistem berkas
Linux yang standar.
Distribusi Linux
Siapa pun dapat menginstall sistem Linux, ia hanya perlu mengambil revisi terakhir dari
komponen sistem yang diperlukan melalui situs ftp lalu di-compile. Pada awal keberadaan Linux,
operasi seperti di atas persis seperti yang dilaksanakan oleh pengguna Linux. Namun, dengan
semakin dewasanya Linux, berbagai individu dan kelompok berusaha membuat pekerjaan
tersebut lebih mudah dengan cara menyediakan sebuah set bingkisan yang standar dan sudah
di-compile terlebih dahulu supaya dapat diinstall secara mudah.
Koleksi atau distribusi ini, mengandung lebih dari sistem Linux dasar. Mereka mengandung
instalasi sistem ekstra dan utilitas manajemen, juga paket yang sudah di compile dan siap
diinstall dari banyak alat UNIX yang biasa, seperti news servers, web browsers, text-processing
dan alat mengedit, termasuk juga games.
Distribusi pertama mengatur paket-paket ini secara sederhana menyediakan sebuah
sarana untuk memindahkan seluruh file ke tempat yang sesuai. Salah satu kontribusi yang
penting dari distribusi modern adalah manajemen/ pengaturan paket-paket yang lebih baik.
Distribusi Linux pada saat sekarang ini melibatkan database packet tracking yang
memperbolehkan suatu paket agar dapat diinstal, di upgrade, atau dihilangkan tanpa susah
payah.
Distribusi SLS adalah koleksi pertama dari bingkisan Linux yang dikenal sebagai distribusi
komplit. Walau pun SLS dapat diinstall sebagai entitas tersendiri, dia tidak memiliki alat-alat
manajemen bingkisan yang sekarang diharapkan dari distribusi Linux. Distribusi Slackware
adalah peningkatan yang besar dalam kualitas keseluruhan (walau pun masih memiliki
manajemen bingkisan yang buruk); Slackware masih merupakan salah satu distribusi yang paling
sering diinstall dalam komunitas Linux.
Sejak dirilisnya Slackware, sejumlah besar distribusi komersil dan non-komersil Linux telah
tersedia. Red Hat dan Debian adalah distribusi yang terkenal dari perusahaan pendukung Linux
komersil dan perangkat lunak bebas komunitas Linux. Pendukung Linux komersil lainnya
termasuk distribusi dari Caldera, Craftworks, dan Work- Group Solutions. Contoh distribusi lain
adalah SuSE dan Unifix yang berasal dari German.
Lisensi Linux
Kernel Linux terdistribusi dibawah Lisensi Publik Umum GNU (GPL), dimana peraturannya
disusun oleh Free Software Foundation. Linux bukanlah perangkat lunak domain publik (public
domain): Public Domain berarti bahwa pengarang telah memberikan copyright terhadap
perangkat lunak mereka, tetapi copyright terhadap kode Linux masih dipegang oleh pengarangpengarang
kode tersebut. Linux adalah perangkat lunak gratis/bebas, namun: gratis dalam arti
bahwa siapa saja dapat mengkopi, modifikasi, memakainya dengan cara apa pun, dan
memberikan kopi mereka kepada siapa pun tanpa larangan atau halangan.
Implikasi utama peraturan lisensi Linux adalah bahwa siapa saja yang menggunakan
Linux, atau membuat modifikasi dari Linux, tidak boleh membuatnya menjadi hak milik sendiri.
Jika sebuah perangkat lunak dirilis berdasarkan lisensi GPL, produk tersebut tidak boleh
didistribusi hanya sebagai produk biner (binary-only). Perangkat lunak yang dirilis atau akan dirilis
tersebut harus disediakan sumber kodenya bersamaan dengan distribusi binernya.
Linux Saat Ini
Saat ini, Linux merupakan salah satu sistem operasi yang perkembangannya paling cepat.
Kehadiran sejumlah kelompok pengembang, tersebar di seluruh dunia, yang selalu memperbaiki
segala fiturnya, ikut membantu kemajuan sistem operasi Linux. Bersamaan dengan itu, banyak
pengembang yang sedang bekerja untuk memindahkan berbagai aplikasi ke Linux (dapat
berjalan di Linux).
Masalah utama yang dihadapi Linux dahulu adalah interface yang berupa teks (text based
interface). Ini membuat orang awam tidak tertarik menggunakan Linux karena harus dipelajari
terlebih dahulu untuk dapat dimengerti cara penggunaannya (tidak user-friendly). Tetapi keadaan
ini sudah mulai berubah dengan kehadiran KDE dan GNOME. Keduanya memiliki tampilan
desktop yang menarik sehingga mengubah persepsi dunia tentang Linux.
Linux di negara-negara berkembang mengalami kemajuan yang sangat pesat. Harga
perangkat lunak (misalkan sebuah sistem operasi) bisa mencapai US $100 atau lebih. Di negara
yang rata-rata penghasilan per tahun adalah US $200-300, US $100 sangatlah besar. Dengan
adanya Linux, semua berubah. Karena Linux dapat digunakan pada komputer yang kuno, dia
menjadi alternatif cocok bagi komputer beranggaran kecil. Di negara-negara Asia, Afrika, dan
Amerika Latin, Linux adalah jalan keluar bagi penggemar komputer.
Pemanfaatan Linux juga sudah diterapkan pada supercomputer. Diberikan beberapa contoh:
•The Tetragrid, sebuah mega computer dari Amerika yang dapat menghitung lebih dari 13
trilyun kalkulasi per detik (13.6 TeraFLOPS). Tetragrid dapat dimanfaatkan untuk
mencari solusi dari masalah matematika kompleks dan simulasi, dari astronomi dan riset
kanker hingga ramalan cuaca.
•Evolocity, juga dari Amerika, dapat berjalan dengan kecepatan maksimum 9.2
TeraFLOPS(FLoating Operations Per Second), menjadikannya sebagai salah satu dari
lima supercomputer tercepat di dunia.
Jika melihat ke depan, kemungkinan Linux akan menjadi sistem operasi yang paling
dominan bukanlah suatu hal yang mustahil. Karena semua kelebihan yang dimilikinya, setiap hari
semakin banyak orang di dunia yang mulai berpaling ke Linux.
Tux: Logo Linux
Logo Linux adalah sebuah pinguin. Tidak sepert produk komersil sistem operasi lainnya,
Linux tidak memiliki simbol yang terlihat hebat. Melainkan Tux, nama pinguin tersebut,
memperlihatkan sikap santai dari gerakan Linux. Logo yang lucu ini memiliki sejarah yang unik.
Awalnya, tidak ada logo yang dipilih untuk Linux, namun pada waktu Linus (pencipta Linux)
berlibur, ia pergi ke daerah selatan. Disanalah dia bertemu seekor pinguin yang pendek cerita
menggigit jarinya. Kejadian yang lucu ini merupakan awal terpilihnya pinguin sebagai logo Linux.
Tux adalah hasil karya seniman Larry Ewing pada waktu para pengembang merasa bahwa
Linux sudah memerlukan sebuah logo (1996), dan nama yang terpilih adalah dari usulan James
Hughes yaitu "(T)orvolds (U)ni(X) -- TUX!". Lengkaplah sudah logo dari Linux, yaitu seekor
pinguin bernama Tux.
Hingga sekarang logo Linux yaitu Tux sudah terkenal ke berbagai penjuru dunia. Orang
lebih mudah mengenal segala produk yang berbau Linux hanya dengan melihat logo yang unik
nan lucu hasil kerjasama seluruh komunitas Linux di seluruh dunia.
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 messagepassing
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 textprocessing,
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.
Modul Kernel Linux
Apakah Modul Kernel Linux itu?
Modul kernel Linux adalah bagian dari kernel Linux yang dapat dikompilasi, dipanggil dan
dihapus secara terpisah dari bagian kernel lainnya saat dibutuhkan. Modul kernel dapat
menambah fungsionalitas kernel tanpa perlu me-reboot sistem. Secara teori tidak ada yang dapat
membatasi apa yang dapat dilakukan oleh modul kernel. Kernel modul dapat
mengimplementasikan antara lain device driver, sistem berkas, protokol jaringan.
Modul kernel Linux memudahkan pihak lain untuk meningkatkan fungsionalitas kernel
tanpa harus membuat sebuah kernel monolitik dan menambahkan fungsi yang mereka butuhkan
langsung ke dalam image dari kernel. Selain hal tersebut akan membuat ukuran kernel menjadi
lebih besar, kekurangan lainnya adalah mereka harus membangun dan me-reboot kernel setiap
saat hendak menambah fungsi baru. Dengan adanya modul maka setiap pihak dapat dengan
mudah menulis fungsi-fungsi baru dan bahkan mendistribusikannya sendiri, di luar GPL.
Kernel modul juga memberikan keuntungan lain yaitu membuat sistem Linux dapat
dinyalakan dengan kernel standar yang minimal, tanpa tambahan device driver yang ikut
dipanggil. Device driver yang dibutuhkan dapat dipanggil kemudian secara eksplisit mau pun
secara otomatis saat dibutuhkan.
Terdapat tiga komponen untuk menunjang modul kernel Linux. Ketiga komponen tersebut
adalah manajemen modul, registrasi driver, dan mekanisme penyelesaian konflik. Berikut akan
dibahas ketiga komponen pendukung tersebut.
Manajemen Modul Kernel Linux
Manajemen modul akan mengatur pemanggilan modul ke dalam memori dan
berkomunikasi dengan bagian lainnya dari kernel. Memanggil sebuah modul tidak hanya
memasukkan isi binarinya ke dalam memori kernel, namun juga harus dipastikan bahwa setiap
rujukan yang dibuat oleh modul ke simbol kernel atau pun titik masukan diperbaharui untuk
menunjuk ke lokasi yang benar di alamat kernel. Linux membuat tabel simbol internal di kernel.
Tabel ini tidak memuat semua simbol yang didefinisikan di kernel saat kompilasi, namun simbolsimbol
tersebut harus diekspor secara eksplisit oleh kernel. Semua hal ini diperlukan untuk
penanganan rujukan yang dilakukan oleh modul terhadap simbol-simbol.
Pemanggilan modul dilakukan dalam dua tahap. Pertama, utilitas pemanggil modul akan
meminta kernel untuk mereservasi tempat di memori virtual kernel untuk modul tersebut. Kernel
akan memberikan alamat memori yang dialokasikan dan utilitas tersebut dapat menggunakannya
untuk memasukkan kode mesin dari modul tersebut ke alamat pemanggilan yang tepat.
Berikutnya system calls akan membawa modul, berikut setiap tabel simbol yang hendak
diekspor, ke kernel. Dengan demikian modul tersebut akan berada di alamat yang telah
dialokasikan dan tabel simbol milik kernel akan diperbaharui.
Komponen manajemen modul yang lain adalah peminta modul. Kernel mendefinisikan
antarmuka komunikasi yang dapat dihubungi oleh program manajemen modul. Saat hubungan
tercipta, kernel akan menginformasikan proses manajemen kapan pun sebuah proses meminta
device driver, sistem berkas, atau layanan jaringan yang belum terpanggil dan memberikan
manajer kesempatan untuk memanggil layanan tersebut. Permintaan layanan akan selesai saat
modul telah terpanggil. Manajer proses akan memeriksa secara berkala apakah modul tersebut
masih digunakan, dan akan menghapusnya saat tidak diperlukan lagi.
Registrasi Driver
Untuk membuat modul kernel yang baru dipanggil berfungsi, bagian dari kernel yang lain
harus mengetahui keberadaan dan fungsi baru tersebut. Kernel membuat tabel dinamis yang
berisi semua driver yang telah diketahuinya dan menyediakan serangkaian routines untuk
menambah dan menghapus driver dari tabel tersebut. Routines ini yang bertanggungjawab untuk
mendaftarkan fungsi modul baru tersebut.
Hal-hal yang masuk dalam tabel registrasi adalah:
•device driver
•sistem berkas
•protokol jaringan
•format binari
Resolusi Konflik
Keanekaragaman konfigurasi perangkat keras komputer serta driver yang mungkin
terdapat pada sebuah komputer pribadi telah menjadi suatu masalah tersendiri. Masalah
pengaturan konfigurasi perangkat keras tersebut menjadi semakin kompleks akibat dukungan
terhadap device driver yang modular, karena device yang aktif pada suatu saat bervariasi.
Linux menyediakan sebuah mekanisme penyelesaian masalah untuk membantu arbitrasi
akses terhadap perangkat keras tertentu. Tujuan mekanisme tersebut adalah untuk mencegah
modul berebut akses terhadap suatu perangkat keras, mencegah autoprobes mengusik
keberadaan driver yang telah ada, menyelesaikan konflik di antara sejumlah driver yang
berusaha mengakses perangkat keras yang sama.
Kernel membuat daftar alokasi sumber daya perangkat keras. Ketika suatu driver hendak
mengakses sumber daya melalui I/O port, jalur interrupt, atau pun kanal DMA, maka driver
tersebut diharapkan mereservasi sumber daya tersebut pada basis data kernel terlebih dahulu.
Jika reservasinya ditolak akibat ketidaktersediaan sumber daya yang diminta, maka modul harus
memutuskan apa yang hendak dilakukan selanjutnya. Jika tidak dapat melanjutkan, maka modul
tersebut dapat dihapus.
Manajemen Proses
Pendahuluan
Linux mengatur semua proses di dalam sistem melalui pemeriksaan dan perubahan
terhadap setiap struktur data task_struct yang dimiliki setiap proses. Sebuah daftar pointer ke
semua struktur data task_struct disimpan dalam task vector. Jumlah maksimum proses dalam
sistem dibatasi oleh ukuran dari task vector. Linux umumnya memiliki task vector dengan ukuran
512 entries. Saat proses dibuat, task_struct baru dialokasikan dari memori sistem dan
ditambahkan ke task vector. Linux juga mendukung proses secara real time. Proses semacam ini
harus bereaksi sangat cepat terhadap event eksternal dan diperlakukan berbeda dari proses
biasa lainnya oleh penjadwal.
Proses akan berakhir ketika ia memanggil exit(). Kernel akan menentukan waktu
pelepasan sumber daya yang dimiliki oleh proses yang telah selesai tersebut. Fungsi do_exit()
akan dipanggil saat terminasi yang kemudian memanggil __exit_mm/files/fs/sighand() yang akan
membebaskan sumber daya. Fungsi exit_notify() akan memperbarui hubungan antara proses
induk dan proses anak, semua proses anak yang induknya berakhir akan menjadi anak dari
proses init. Terakhir akan dipanggil scheduler untuk menjalankan proses baru.
Deskriptor Proses
Guna keperluan manajemen proses, kernel memelihara informasi tentang setiap proses di
sebuah deskriptor proses dengan tipe task_struct. Setiap deskriptor proses mengandung
informasi antara lain status proses, ruang alamat, daftar berkas yang dibuka, prioritas proses,
dan sebagainya. Berikut gambaran isinya:
Contoh 7-1. Isi deskriptor proses
struct task_struct{
volatile long state;
/*-1 unrunnable,
0 runnable,
>0 stopped*/
unsigned long flags;
/* 1 untuk setiap flag proses */
mm_segment_t_addr_limit;
/* ruang alamat untuk thread */
struct exec_domain *exec_domain;
long need_resched;
long counter;
long priority;
/* SMP and runqueue state */
struct task_struct *next_task, *prev_task;
struct task_struct *next_run, *prev_run;
...
/* task state */
/* limits */
/* file system info */
/* ipc stuff */
/* tss for this task */
/* filesystem information */
/* open file information */
/* memory management info */
/* signal handlers */
...
};
Setiap proses di Linux memiliki status. Status proses merupakan array dari flag yang
mutually exclusive. Setiap proses memiliki tepat satu keadaan (status) pada suatu waktu. Status
tersebut adalah:
•TASK_RUNNING
Pada status ini, proses sedang atau pun siap dieksekusi oleh CPU.
•TASK_INTERRUPTIBLE
Pada status ini, proses sedang menunggu sebuah kondisi. Interupsi, sinyal, atau pun
pelepasan sumber daya akan membangunkan proses.
•TASK_UNINTERRUPTIBLE
Pada status ini, proses sedang tidur dan tidak dapat dibangunkan oleh suatu sinyal.
•TASK_STOPPED
Pada status ini proses sedang dihentikan, misalnya oleh sebuah debugger.
•TASK_ZOMBIE
Pada status ini proses telah berhenti, namun masih memiliki struktur data task_struct di
task vector dan masih memegang sumber daya yang sudah tidak digunakan lagi.
Setiap proses atau pun eksekusi yang terjadwal secara independen memiliki deskriptor
prosesnya sendiri. Alamat dari deskriptor proses digunakan untuk mengindentifikasi proses.
Selain itu, nomor ID proses (PIDs) juga digunakan untuk keperluan tersebut. PIDs adalah 32-bit
bilangan yang mengidentifikasikan setiap proses dengan unik. Linux membatasi PIDs berkisar 0-
32767 untuk menjamin kompatibilitas dengan sistem UNIX tradisional.
Karena proses merupakan sesuatu yang dinamis, maka deskriptor proses disimpan dalam
memori yang dinamis pula. Untuk itu dialokasikan juga memori sebesar 8KB untuk setiap proses
untuk menyimpan proses deskriptornya dan stack proses dari modus kernel. Keuntungan dari dal
ini adalah pointer dari deskriptor proses dari proses yang sedang berjalan (running) dapat
diakses dengan cepat menggunakan stack pointer. Selain itu, 8KB (EXTRA_TASK_STRUCT)
dari memori akan di-cache untuk mem-bypass pengalokasi memori kernel ketika sebuah proses
dihapus dan sebuah proses baru dibuat. Kedua perintah free_task_struct() dan
alloc_task_struct() akan digunakan untuk melepaskan atau mengalokasikan memori seukuran
8KB sebagai cache.
Deskriptor proses juga membangun sebuah daftar proses dari semua proses yang ada di
sistem. Daftar proses tersebut merupakan sebuah doubly-linked list yang dibangun oleh bagian
next_task dan prev_task dari deskriptor proses. Deskriptor init_task(mis:swapper) berada di awal
daftar tersebut dengan prev_task-nya menunjuk ke deskriptor proses yang paling akhir masuk
dalam daftar. Sedangkan makro for_each_task() digunakan untuk memindai seluruh daftar.
Proses yang dijadwalkan untuk dieksekusi dari doubly-linked list dari proses dengan status
TASK_RUNNING disebut runqueue. Bagian prev_run dan next_run dari deskriptor proses
digunakan untuk membangun runqueue, dengan init_task mengawali daftar tersebut. Sedangkan
untuk memanipulasi daftar di deskriptor proses tersebut, digunakan fungsi-fungsi:
add_to_runqueue(), del_from_runqueue(), move_first_runqueue(), move_last_runqueue(). Makro
NR_RUNNING digunakan untuk menyimpan jumlah proses yang dapat dijalankan, sedangkan
fungsi wake_up_process membuat sebuah proses menjadi dapat dijalankan.
Untuk menjamin akurasinya, array task akan diperbarui setiap kali ada proses baru dibuat
atau pun dihapus. Sebuah daftar terpisah akan melacak elemen bebas dalam array task itu.
Ketika suatu proses dihapus, entrinya ditambahkan di bagian awal dari daftar tersebut.
Proses dengan status task_interruptible dibagi ke dalam kelas-kelas yang terkait dengan
suatu event tertentu. Event yang dimaksud misalnya: waktu kadaluarsa, ketersediaan sumber
daya. Untuk setiap event atau pun kelas terdapat antrian tunggu yang terpisah. Proses akan
diberi sinyal bangun ketika event yang ditunggunya terjadi. Berikut contoh dari antrian tunggu
tersebut:
Contoh 7-2. Antrian Tunggu
void sleep_on(struct wait_queue **wqptr) {
struct wait_queue wait;
current_state=TASK_UNINTERRUPTIBLE;
wait.task=current;
add_wait_queue(wqptr, &wait);
schedule();
remove_wait_queue(wqptr, &wait);
}
Fungsi sleep_on() akan memasukkan suatu proses ke dalam antrian tunggu yang
diinginkan dan memulai penjadwal. Ketika proses itu mendapat sinyal untuk bangun, maka
proses tersebut akan dihapus dari antrian tunggu.
Bagian lain konteks eksekusi proses adalah konteks perangkat keras, misalnya: isi register.
Konteks dari perangkat keras akan disimpan oleh task state segment dan stack modus kernel.
Secara khusus tss akan menyimpan konteks yang tidak secara otomatis disimpan oleh perangkat
keras tersebut. Perpindahan antar proses melibatkan penyimpanan konteks dari proses yang
sebelumnya dan proses berikutnya. Hal ini harus dapat dilakukan dengan cepat untuk mencegah
terbuangnya waktu CPU. Versi baru dari Linux mengganti perpindahan konteks perangkat keras
ini menggunakan piranti lunak yang mengimplementasikan sederetan instruksi mov untuk
menjamin validasi data yang disimpan serta potensi untuk melakukan optimasi.
Untuk mengubah konteks proses digunakan makro switch_to(). Makro tersebut akan
mengganti proses dari proses yang ditunjuk oleh prev_task menjadi next_task. Makro switch_to()
dijalankan oleh schedule() dan merupakan salah satu rutin kernel yang sangat tergantung pada
perangkat keras (hardware-dependent). Lebih jelas dapat dilihat pada kernel/sched.c dan
include/asm-*/system.h.
Pembuatan Proses Dan Thread
Linux menggunakan representasi yang sama untuk proses dan thread. Secara sederhana
thread dapat dikatakan sebuah proses baru yang berbagi alamat yang sama dengan induknya.
Perbedaannnya terletak pada saat pembuatannya. Thread baru dibuat dengan system call clone
yang membuat proses baru dengan identitas sendiri, namun diizinkan untuk berbagi struktur data
dengan induknya.
Secara tradisional, sumber daya yang dimiliki oleh proses induk akan diduplikasi ketika
membuat proses anak. Penyalinan ruang alamat ini berjalan lambat, sehingga untuk
mengatasinya, salinan hanya dibuat ketika salah satu dari mereka hendak menulis di alamat
tersebut. Selain itu, ketika mereka akan berbagi alamat tersebut ketika mereka hanya membaca.
Inilah proses ringan yang dikenal juga dengan thread.
Thread dibuat dengan __clone(). __clone() merupakan rutin dari library system call clone().
__clone memiliki 4 buah argumen yaitu:
•fn
fungsi yang akan dieksekusi oleh thread baru
•arg
pointer ke data yang dibawa oleh fn
•flags
sinyal yang dikirim ke induk ketika anak berakhir dan pembagian sumber daya antara
anak dan induk.
•child_stack
pointer stack untuk proses anak.
clone() mengambil argumen flags dan child_stack yang dimiliki oleh __clone kemudian
menentukan id dari proses anak yang akan mengeksekusi fn dengan argumen arg.
Pembuatan anak proses dapat dilakukan dengan fungsi fork() dan vfork(). Implementasi
fork() sama seperti system call clone() dengan sighandler SIGCHLD di-set, semua bendera clone
di-clear yang berarti tidak ada sharing dan child_stack dibuat 0 yang berarti kernel akan membuat
stack untuk anak saat hendak menulis. Sedangkan vfork() sama seperti fork() dengan tambahan
bendera CLONE_VM dan CLONE_VFORK di-set. Dengan vfork(), induk dan anak akan berbagi
alamat, dan induk akan di-block hingga anak selesai.
Untuk memulai pembuatan proses baru, clone() akan memanggil fungsi do_fork(). Hal yang
dilakukan oleh do_fork() antara lain:
•memanggil alloc_task_struct() yang akan menyediakan tempat di memori dengan ukuran
8KB untuk deskriptor proses dan stack modus kernel.
•memeriksa ketersediaan sumber daya untuk membuat proses baru.
•find_empty_procees() memanggil get_free_taskslot() untuk mencari sebuah slot di array
task untuk pointer ke deskriptor proses yang baru.
•memanggil copy_files/fm/sighand/mm() untuk menyalin sumber daya untuk anak,
berdasarkan nilai flags yang ditentukan clone().
•copy_thread() akan menginisialisasi stack kernel dari proses anak.
•mendapatkan PID baru untuk anak yang akan diberikan kembali ke induknya ketika
do_fork() selesai.
Beberapa proses sistem hanya berjalan dalam modus kernel di belakang layar. Untuk
proses semacam ini dapat digunakan thread kernel. Thread kernel hanya akan mengeksekusi
fungsi kernel, yaitu fungsi yang biasanya dipanggil oleh proses normal melalui system calls.
Thread kernel juga hanya dieksekusi dalam modus kernel, berbeda dengan proses biasa. Alamat
linier yang digunakan oleh thread kernel lebih besar dari PAGE_OFFSET proses normal yang
dapat berukuran hingga 4GB. Thread kernel dibuat sebagai berikut: int kernel_thread(int (*fn)
(void *), void *arg, unsigned long flags); flags=CLONE_SIGHAND, CLONE_FILES, etc
Penjadualan
Penjadualan adalah suatu pekerjaan yang dilakukan untuk mengalokasikan CPU time
untuk tasks yang berbeda-beda dalam sistem operasi. Pada umumnya, kita berfikir penjadualan
sebagai menjalankan dan menginterupsi suatu proses, untuk linux ada aspek lain yang penting
dalam penjadualan: seperti menjalankan dengan berbagai kernel tasks. Kernel tasks meliputi
task yang diminta oleh proses yang sedang dijalankan dan tasks yand dieksekusi internal
menyangkut device driver yang berkepentingan.
Sinkronisasi Kernel
Cara penjadualan kernel pada operasinya secara mendasar berbeda dengan cara
penjadualan suatu proses. Terdapat dua cara agar sebuah permintaan akan eksekusi kernelmode
dapat terjadi. Sebuah program yang berjalan dapat meminta service sistem operasi, dari
system call atau pun secara implisit (untuk contoh:ketika page fault terjadi). Sebagai alternatif,
device driver dapat mengirim interupsi perangkat keras yang menyebabkan CPU memulai
eksekusi kernel-define handler untuk suatu interupsi.
Problem untuk kernel muncul karena berbagai tasksmungkin mencoba untuk mengakses
struktur data internal yang sama. Jika hanya satu kernel task ditengah pengaksesan struktur data
ketika interupsi service routine dieksekusi, maka service routine tidak dapat mengakses atau
merubah data yang sama tanpa resiko mendapatkan data yang rusak. Fakta ini berkaitan dengan
ide dari critical section (baca sinkronisasi proses).
Sehagai hasilnya, sinkronisasi kernel melibatkan lebih banyak dari hanya penjadualan
proses saja. sebuah framework dibutuhkan untuk memperbolehkan kernel's critical sections
berjalan tanpa diinterupsi oleh critical section yang lain.
Solusi pertama yang diberikan oleh linux adalah membuat normal kernel code
nonpreemptible (baca proses). Biasanya, ketika sebuah timer interrupt diterima oleh kernel,
membuat penjadualan proses, kemungkinan besar akan menunda eksekusi proses yang sedang
berjalan pada saat itu dan melanjutkan menjalankan proses yang lain. Biar bagaimana pun,
ketika timer interrupt diterima ketika sebuah proses mengeksekusi kernel-system service routine,
penjadualan ulang tidak dilakukan secara mendadak; cukup, kernel need_resched flag terset
untuk memberitahu kernel untuk menjalankan penjadualan kembali setelah system call selesai
dan control dikembalikan ke user mode.
Sepotong kernel code mulai dijalankan, akan terjamin bahwa itu adalah satu-satunya
kernel code yang dijalankan sampai salah satu dari aksi dibawah ini muncul:
•interupsi
•page fault
•kernel code memanggil fungsi penjadualan sendiri
Interupsi adalah suatu masalah bila mengandung critical section-nya sendiri. Timer
interrupt tidak secara langsung menyebabkan terjadinya penjadualan ulang suatu proses; hanya
meminta suatu jadual untuk dilakukan kemudian, jadi kedatangan suatu interupsi tidak
mempengaruhi urutan eksekusi dari noninterrupt kernel code. Sekali interrupt serviceselesai,
eksekusi akan menjadi lebih simpel untuk kembali ke kernel code yang sedang dijalankan ketika
interupsi mengambil alih.
Page faults adalah suatu masalah yang potensial; jika sebuah kernel routine mencoba
untuk membaca atau menulis ke user memory, akan menyebabkan terjadinya page fault yang
membutuhkan I/O diskuntuk selesai, dan proses yang berjalan akan di tunda sampai I/O selesai.
Pada kasus yang hampir sama, jika system call service routine memanggil penjadualan ketika
sedang berada di mode kernel, mungkin secara eksplisit dengan membuat direct call pada code
penjadualan atau secara implisit dengan memanggil sebuah fungsi untuk menunggu I/O selesai,
setelah itu proses akan menunggu dan penjadualan ulang akan muncul. Ketika proses jalan
kembali, proses tersebut akan melanjutkan untuk mengeksekusi dengan mode kernel,
melanjutkan intruksi setelah call (pemanggilan) ke penjadualan.
Kernel code dapat terus berasumsi bahwa ia tidak akan diganggu (pre-empted) oleh
proses lainnya dan tidak ada tindakan khusus dilakukan untuk melindungi critical section. Yang
diperlukan adalah critical section tidak mengandung referensi ke user memory atau menunggu
I/O selesai.
Teknik kedua yang di pakai Linux untuk critical section yang muncul pada saat interrupt
service routines. Alat dasarnya adalah perangkat keras interrupt-control pada processor. Dengan
meniadakan interupsi pada saat critical section, maka kernel menjamin bahwa ia dapat
melakukan proses tanpa resiko terjadinya ketidak-cocokan akses dari struktur data yang di share.
Untuk meniadakan interupsi terdapat sebuah pinalti. Pada arsitektur perangkat keras
kebanyakan, pengadaan dan peniadaan suatu interupsi adalah sesuatu yang mahal. Pada
prakteknya, saat interupsi ditiadakan, semua I/O ditunda, dan device yang menunggu untuk
dilayani akan menunggu sampai interupsi diadakan kembali, sehingga kinerja meningkat. Kernel
Linux menggunakan synchronization architecture yang mengizinkan critical section yang panjang
dijalankan untuk seluruh durasinya tanpa mendapatkan peniadaan interupsi. Kemampuan secara
spesial berguna pada networking code: Sebuah interupsi pada network device driver dapat
memberikan sinyal kedatangan dari keseluruhan paket network, dimana akan menghasilkan code
yang baik dieksekusi untuk disassemble, route, dan forward paket ditengah interrupt service
routine.
Linux mengimplementasikan arsitektur ini dengan memisahkan interrupt service routine
menjadi dua seksi: the top half dan the bottom half. The top half adalah interupsi yang normal,
dan berjalan dengan rekursive interupt ditiadakan (interupsi dengan prioritas yang lebih tinggi
dapat menginterupsi routine, tetapi interupsi dengan prioritas yang sama atau lebih rendah
ditiadakan). The bottom half service routine berjalan dengan semua interupsi diadakan, oleh
miniatur penjadualan yang menjamin bahwa bottom halves tidak akan menginterupsi dirinya
sendiri. The bottom half scheduler dilakukan secara otomatis pada saat interupt service routine
ada.
Pemisahan itu berarti bahwa kegiatan proses yang komplek dan harus selesai diberi
tanggapan untuk suatu interupsi dapat diselesaikan oleh kernel tanpa kecemasan tentang
diinterupsi oleh interupsi itu sendiri. Jika interupsi lain muncul ketika bottom half dieksekusi, maka
interupsi dapat meminta kepada bottom half yang sama untuk dieksekusi, tetapi eksekusinya
akan dilakukan setelah proses yang sedang berjalan selesai. Setiap eksekusi dari bottom half
dapat di interupsi oleh top half tetapi tidak dapat diinterupsi dengan bottom half yang mirip.
Arsitektur Top-half bottom-half komplit dengan mekanisme untuk meniadakan bottom
halver yang dipilih ketika dieksekusi secara normal, foreground kernel code. Kernel dapat mengcodekan
critical section secara mudah dengan mengunakan sistem ini: penanganan interupsi
dapat meng-codekan critical section-nya sebagai bottom halves, dan ketika foreground kernel
ingin masuk ke critical section, setiap bottom halves ditiadakan untuk mencegah critical section
yang lain diinterupsi. Pada akhir dari critical section, kernel dapat kembali mengadakan bottom
halves dan menjalankan bottom half tasks yang telah di masukkan kedalam queue oleh top half
interrupt service routine pada saat critical section.
Penjadualan Proses
Ketika kernel telah mencapai titik penjadualan ulang, entah karena terjadi interupsi
penjadualan ulang mau pun karena proses kernel yang sedang berjalan telah diblokir untuk
menunggu beberapa signal bangun, harus memutuskan proses selanjutnya yang akan
dijalankan. Linux telah memiliki dua algoritma penjadualan proses yang terpisah satu sama lain.
Algoritma yang pertama adalah algoritma time-sharing untuk penjadualan preemptive yang adil
diantara sekian banyak proses. Sedangkan algoritma yang kedua didesain untuk tugas real-time
dimana proritas mutlak lebih utama daripada keadilan mendapatkan suatu pelayanan.
Bagian dari tiap identitas proses adalah kelas penjadualan, yang akan menentukan
algoritma yang digunakan untuk tiap proses. Kelas penjadualan yang digunakan oleh Linux,
terdapat dalam standar perluasan POSIX untuk sistem komputer waktu nyata.
Untuk proses time-sharing, Linux menggunakan teknik prioritas, sebuah algoritma yang
berdasarkan pada kupon. Tiap proses memiliki sejumlah kupon penjadualan; dimana ketika ada
kesempatan untuk menjalankan sebuah tugas, maka proses dengan kupon terbanyaklah yang
mendapat giliran. Setiap kali terjadi interupsi waktu, proses yang sedang berjalan akan
kehilangan satu kupon; dan ketika kupon yang dimiliki sudah habis maka proses itu akan ditunda
dan proses yang lain akan diberikan kesempatan untuk masuk.
Jika proses yang sedang berjalan tidak meiliki kupon sama sekali, linux akan melakukan
operasi pemberian kupon, memberikan kupon kepada tiap proses dalam sistem, dengan aturan
main: kupon = kupon / 2 + prioritas Algoritma ini cenderung untuk menggabungkan dua faktor
yang ada: sejarah proses dan prioritas dari proses itu sendiri. Satu setengah dari kupon yang
dimiliki sejak operasi pembagian kupon terakhir akan tetap dijaga setelah algoritma telah
dijalankan, menjaga beberapa sejarah sikap proses. Proses yang berjalan sepanjang waktu akan
cenderung untuk menghabiskan kupon yang dimilikinya dengan cepat, tapi proses yang lebih
banyak menunggu dapat mengakumulasi kuponnya dari. Sistem pembagian kupon ini, akan
secara otomatis memberikan proritas yang tinggi ke proses I/O bound atau pun interaktif, dimana
respon yang cepat sangat diperlukan.
Kegunaan dari proses pemberian prioritas dalam menghitung kupon baru, membuat
prioritas dari suatu proses dapat ditingkatkan. Pekerjaan background batch dapat diberikan
prioritas yang rendah; proses tersebut akan secara otomatis menerima kupon yang lebih sedikit
dibandingkan dengan pekerjaan yang interaktif, dan juga akan menerima persentase waktu CPU
yang lebih sedikit dibandingan dengan tugas yang sama dengan prioritas yang lebih tinggi. Linux
menggunakan sistem prioritas ini untuk menerapkan mekanisme standar pembagian prioritas
proses yang lebih baik.
Penjadualan waktu nyata Linux masih tetap lebih sederhana. Linux, menerapkan dua kelas
penjadualan waktu nyata yang dibutuhkan oleh POSIX 1.b: First In First Out dan round-robin.
Pada keduanya, tiap proses memiliki prioritas sebagai tambahan kelas penjadualannya. Dalam
penjadualan time-sharing, bagaimana pun juga proses dengan prioritas yang berbeda dapat
bersaing dengan beberapa pelebaran; dalam penjadualan waktu nyata, si pembuat jadual selalu
menjalankan proses dengan prioritas yang tinggi. Diantara proses dengan prioritas yang sama,
maka proses yang sudah menunggu lama, akan dijalankan. Perbedaan satu - satunya antara
penjadualan FIFO dan round-robin adalah proses FIFO akan melanjutkan prosesnya sampai
keluar atau pun diblokir, sedangkan proses round-robin akan di-preemptive-kan setelah beberapa
saat dan akan dipindahkan ke akhir antrian, jadi proses round-robin dengan prioritas yang sama
akan secara otomatis membagi waktu jalan antar mereka sendiri.
Perlu diingat bahwa penjadualan waktu nyata di Linux memiliki sifat yang lunak. Pembuat
jadual Linux menawarkan jaminan yang tegas mengenai prioritas relatif dari proses waktu nyata,
tapi kernel tidak menjamin seberapa cepat penjadualan proses waktu-nyata akan dijalankan pada
saat proses siap dijalankan. Ingat bahwa kode kernel Linux tidak akan pernah bisa dipreemptive
oleh kode mode pengguna. Apabila terjadi interupsi yang membangunkan proses waktu nyata,
sementara kernel siap untuk mengeksekusi sebuah sistem call sebagai bagian proses lain,
proses waktu nyata harus menunggu sampai sistem call yang sedang dijalankan selesai atau
diblokir.
Symmetric Multiprocessing
Kernel Linux 2.0 adalah kernel Linux pertama yang stabil untuk mendukung perangkat
keras symmetric multiprocessor (SMP). Proses mau pun thread yang berbeda dapat dieksekusi
secara paralel dengan processor yang berbeda. Tapi bagaimana pun juga untuk menjaga
kelangsungan kebutuhan sinkronisasi yang tidak dapat di-preemptive dari kernel, penerapan
SMP ini menerapkan aturan dimana hanya satu processor yang dapat dieksekusi dengan kode
mode kernel pada suatu saat. SMP menggunakan kernel spinlock tunggal untuk menjalankan
aturan ini. Spinlock ini tidak memunculkan permasalahan untuk pekerjaan yang banyak
menghabiskan waktu untuk menunggu proses komputasi, tapi untuk pekerjaan yang melibatkan
banyak aktifitas kernel, spinlock dapat menjadi sangat mengkhawatirkan.
Sebuah proyek yang besar dalam pengembangan kernel Linux 2.1 adalah untuk
menciptakan penerapan SMP yang lebih masuk akal, dengan membagi kernel spinlock tunggal
menjadi banyak kunci yang masing-masing melindungi terhadap masuknya kembali sebagian
kecil data struktur kernel. Dengan menggunakan teknik ini, pengembangan kernel yang terbaru
mengizinkan banyak processor untuk dieksekusi oleh kode mode kernel secara bersamaan.
Manajemen Memori di Linux
Manajemen Memori Fisik
Bagian ini menjelaskan bagaimana linux menangani memori dalam sistem. Memori
manajemen merupakan salah satu bagian terpenting dalam sistem operasi. Karena adanya
keterbatasan memori, diperlukan suatu strategi dalam menangani masalah ini. Jalan keluarnya
adalah dengan menggunakan memori virtual. Dengan memori virtual, memori tampak lebih besar
daripada ukuran yang sebenarnya.
Dengan memori virtual kita dapat:
1. Ruang alamat yang besar
Sistem operasi membuat memori terlihat lebih besar daripada ukuran memori
sebenarnya. Memori virtual bisa beberapa kali lebih besar daripada memori fisiknya.
2. Pembagian memori fisik yang dil
Manajemen memori membuat pembagian yang adil dalam pengalokasian memori antara
proses-proses.
3. Perlindungan
Memori manajemen menjamin setiap proses dalam sistem terlindung dari proses-proses
lainnya. Dengan demikian, program yang crash tidak akan mempengaruhi proses lain
dalam sistem tersebut.
4. Penggunaan memori virtual bersama
Memori virtual mengizinkan dua buah proses berbagi memori diantara keduanya,
contohnya dalam shared library. Kode library dapat berada di satu tempat, dan tidak
dikopi pada dua program yang berbeda.
Memori Virtual
gambar model mapping virtual to physical address
Memori fisik dan memori virtual dibagi menjadi bagian-bagian yang disebut page. Page ini
memiliki ukuran yang sama besar. Tiap page ini punya nomor yang unik, yaitu Page Frame
Number (PFN). Untuk setiap instruksi dalam program, CPU melakukan mapping dari alamat
virtual ke memori fisik yang sebenarnya.
Penerjemahan alamat di antara virtual dan memori fisik dilakukan oleh CPU menggunakan
tabel page untuk proses x dan proses y. Ini menunjukkan virtial PFN 0 dari proses x dimap ke
memori fisik PFN 1. Setiap anggota tabel page mengandung informasi berikut ini:
1. Virtual PFN
2. PFN fisik
3. informasi akses page dari page tersebut
Untuk menerjemahkan alamat virtual ke alamat fisik, pertama-tama CPU harus menangani
alamat virtual PFN dan offsetnya di virtual page. CPU mencari tabel page proses dan mancari
anggota yang sesuai degan virtual PFN. Ini memberikan PFN fisik yang dicari. CPU kemudian
mengambil PFN fisik dan mengalikannya dengan besar page untuk mendapat alamat basis page
tersebut di dalam memori fisik. Terakhir, CPU menambahkan offset ke instruksi atau data yang
dibutuhkan. Dengan cara ini, memori virtual dapat dimap ke page fisik dengan urutan yang
teracak.
Demand Paging
Cara untuk menghemat memori fisik adalah dengan hanya meload page virtual yang
sedang digunakan oleh program yang sedang dieksekusi. Tehnik dimana hanya meload page
virtual ke memori hanya ketika program dijalankan disebut demand paging.
Ketika proses mencoba mengakses alamat virtual yang tidak ada di dalam memori, CPU
tidak dapat menemukan anggota tabel page. Contohnya, dalam gambar, tidak ada anggota tabel
page untuk proses x untuk virtual PFN 2 dan jika proses x ingin membaca alamat dari virtual PFN
2, CPU tidak dapat menterjemahkan alamat ke alamat fisik. Saat ini CPU bergantung pada
sistem operasi untuk menangani masalah ini. CPU menginformasikan kepada sistem operasi
bahwa page fault telah terjadi, dan sistem operasi membuat proses menunggu selama sistem
operasi menagani masalah ini.
CPU harus membawa page yang benar ke memori dari image di disk. Akses disk
membutuhkan waktu yang sangat lama dan proses harus menunggu sampai page selesai
diambil. Jika ada proses lain yang dapat dijalankan, maka sistem operai akan memilihnya untuk
kemudian dijalankan. Page yang diambil kemudian dituliskan di dalam page fisik yang masih
kosong dan anggota dari virtual PFN ditambahkan dalam tabel page proses. Proses kemudian
dimulai lagi pada tempat dimana page fault terjadi. Saat ini terjadi pengaksesan memori virtual,
CPU membuat penerjemahan dan kemudian proses dijalankan kembali.
Demand paging terjadi saat sistem sedang sibuk atau saat image pertama kali diload ke
memori. Mekanisme ini berarti sebuah proses dapat mengeksekusi image dimana hanya
sebagian dari image tersebut terdapat dalam memori fisik.
Swaping
Jika memori fisik tiba-tiba habis dan proses ingin memindahkan sebuah page ke memori,
sistem operasi harus memutuskan apa yang harus dilakukan. Sistem operasi harus adil dalam
mambagi page fisik dalam sistem diantara proses yang ada, bisa juga sistem operasi menghapus
satu atau lebih page dari memori untuk membuat ruang untuk page baru yang dibawa ke memori.
Cara page virtual dipilih dari memori fisik berpengaruh pada efisiensi sistem.
Linux menggunakan tehnik page aging agar adil dalam memilih page yang akan dihapus
dari sistem. Ini berarti setiap page memiliki usia sesuai dengan berapa sering page itu diakses.
Semakin sering sebuah page diakses, semakin muda page tersebut. Page yang tua adalah
kandidat untuk diswap.
Pengaksesan memori virtual bersama
Memori virtual mempermudah proses untuk berbagi memori saat semua akses ke memori
menggunakan tabel page. Proses yang akan berbagi memori virtual yang sama, page fisik yang
sama direference oleh banyak proses. Tabel page untuk setiap proses mengandung anggota
page table yang mempunyai PFN fisik yang sama.
Efisiensi
Desainer dari CPU dan sistem operasi berusaha meningkatkan kinerja dari sistem.
Disamping membuat prosesor, memori semakin cepat, jalan terbaik adalah manggunakan cache.
Berikut ini adalah beberapa cache dalam manajemen memori di linux:
1. Page Cache
Digunakan untuk meningkatkan akses ke image dan data dalam disk. Saat dibaca dari
disk, page dicache di page cache. Jika page ini tidak dibutuhkan lagi pada suatu saat,
tetapi dibutuhkan lagi pada saat yang lain, page ini dapat segera diambil dari page
cache.
2. Buffer Cache
Page mungkin mengandung buffer data yang sedang digunakan oleh kernel, device
driver dan lain-lain. Buffer cache tampak seperti daftar buffer. Contohnya, device driver
membutuhkan buffer 256 bytes, adalah lebih cepat untuk mengambil buffer dari buffer
cache daripada mengalokasikan page fisik lalu kemudian memecahnya menjadi 256
bytes buffer-buffer.
3. Swap Cache
Hanya page yang telah ditulis ditempatkan dalam swap file. Selama page ini tidak
mengalami perubahan setelah ditulis ke dalam swap file, maka saat berikutnya page di
swap out tidak perlu menuliskan kembali jika page telah ada di swap file. Di sistem yang
sering mengalami swap, ini dapat menghemat akses disk yang tidak perlu.
Salah satu implementasi yang umum dari hardware cache adalah di CPU, cache dari
anggota tabel page. Dalam hal ini, CPU tidak secara langsung membaca tabel page, tetap
mencache terjemahan page yang dibutuhkan.
Load dan Eksekusi Program
1. Penempatan program dalam memori
Linux membuat tabel-tabel fungsi untuk loading program, memberikan kesempatan
kepada setiap fungsi untuk meload file yang diberikan saat sistem call exec dijalankan.
Pertama-tama file binari dari page ditempatkan pada memori virtual. Hanya pada saat
program mencoba mengakses page yang telah diberikan terjadi page fault, maka page
akan diload ke memori fisik.
2. Linking statis dan linking dinamis
a. Linking statis:
librari-librari yang digunakan oleh program ditaruh secara langsung dalam file
binari yang dapat dieksekusi. Kerugian dari linking statis adalah setiap program
harus mengandung kopi library sistem yang umum.
b. Linking dinamis:
hanya sekali meload librari sistem menuju memori. Linking dinamis lebih efisien
dalam hal memori fisik dan ruang disk.
File Sistem di Linux
Linux virtual file sistem
Objek dasar dalam layer-layer virtual file system
1. File
File adalah sesuatu yang dapat dibaca dan ditulis. File ditempatkan pada memori.
Penempatan pada memori tersebut sesuai dengan konsep file deskriptor yang dimiliki
unix.
2. Inode
Inode merepresentasikan objek dasar dalam file sistem. Inode bisa saja file biasa,
direktori, simbolik link dan lain sebagainya. Virtual file sistem tidak memiliki perbedaan
yang jelas di antara objek, tetapi mengacu kepada implementasi file sistem yang
menyediakan perilaku yang sesuai. Kernel tingkat tinggi menangani objek yang berbeda
secara tidak sama.
File dan inode hampir mirip diantara keduanya. Tetapi terdapat perbedaan yang penting
diantara keduanya. Ada sesuatu yang memiliki inode tetapi tidak memiliki file, contohnya
adalah simbolik link. Ada juga file yang tidak memiliki inode seperti pipes dan socket.
3. File sistem
File system adalah kumpulan dari inode-inode dengan satu inode pembeda yaitu root.
Inode lainnya diakses mulai dari root inode dan pencarian nama file untuk menuju ke
inode lainnya.
File sistem mempunyai beberapa karakteristik yang mencakup seluruh inode dalam file
sistem. Salah satu yang terpenting adalah blocksize.
4. Nama inode
Semua inode dalam file sistem diakses melalui namanya. Walau pun pencarian nama
inode bisa menjadi terlalu berat untuk beberapa sistem, virtual file sistem pada linux
tetap memantau cache dan nama inode yang baru saja terpakai agar kinerja meningkat.
Cache terdapat di memori sebagai tree, ini berarti jika sembarang inode dari file terdapat
di dalam cache, maka parent dari inode tersebut juga terdapat di dalam cache.
Virtual file system layer menangani semua pengaturan nama path dari file dan
mengubahnya menjadi masukan di dalam cache sebelum mengizinkan file sistem untuk
mengaksesnya. Ada pengecualian pada target dari simbolik link, akan diakses file sistem secara
langsung. File sistem diharapkan untuk menginterpretasikannya.
Operasi-operasi dalam inode
Linux menyimpan cache dari inode aktif mau pun dari inode yang telah terakses
sebelumnya. Ada 2 path dimana inode ini dapat diakses. Yang pertama telah disebutkan
sebelumnya, setiap entri dalam cache menunjuk pada suatu inode dan menjaga inode tetap
dalam cache. Yang kedua melalui inode hash table. Setiap inode mempunyai alamat 8 bit sesuai
dengan alamat dari file sistem superblok dan nomor inode. Inode dengan nilai hash yang sama
kemudian dirangkai di doubly linked list.
Perubahan pada cache melibatkan penambahan dan penghapusan entri-entri dari cache
itu sendiri. Entri-entri yang tidak dibutuhkan lagi akan di unhash sehingga tidak akan tampak
dalam pencarian berikutnya.
Operasi diperkirakan akan mengubah struktur cache harus dikunci selama melakukan
perubahan. Unhash tidak memerlukan semaphore karena ini bisa dilakukan secara atomik dalam
kernel lock. Banyak operasi file memerlukan 2 langkah proses. Yang pertama adalah melakukan
pencarian nama di dalam direktori. Langkah kedua adalah melakukan operasi pada file yang
telah ditemukan. Untuk menjamin tidak terdapatnya proses yang tidak kompatibel diantara kedua
proses itu, setelah proses kedua, virtual file sistem protokol harus memeriksa bahwa parent entry
tetap menjadi parent dari entri childnya. Yang menarik dari cache locking adalah proses rename,
karena mengubah 2 entri dalam sekali operasi.
Jenis-jenis file sistem di linux
EXT2 file sistem
a. Keterangan
EXT2 adalah file sistem yang ampuh di linux. EXT2 juga merupakan salah satu file
sistem yang paling ampuh dan menjadi dasar dari segala distribusi linux. Pada EXT2 file
sistem, file data disimpan sebagai data blok. Data blok ini mempunyai panjang yang
sama dan meski pun panjangnya bervariasi diantara EXT2 file sistem, besar blok
tersebut ditentukan pada saat file sistem dibuat dengan perintah mk2fs. Jika besar blok
adalah 1024 bytes, maka file dengan besar 1025 bytes akan memakai 2 blok. Ini berarti
kita membuang setengah blok per file.
EXT2 mendefinisikan topologi file sistem dengan memberikan arti bahwa setiap file pada
sistem diasosiasiakan dengan struktur data inode. Sebuah inode menunjukkan blok
mana dalam suatu file tentang hak akses setiap file, waktu modifikasi file, dan tipe file.
Setiap file dalam EXT2 file sistem terdiri dari inode tunggal dan setiap inode mempunyai
nomor identifikasi yang unik. Inode-inode file sistem disimpan dalam tabel inode.
Direktori dalam EXT2 file sistem adalah file khusus yang mengandung pointer ke inode
masing-masing isi direktori tersebut.
gambar struktur ext2 file sistem
b. Inode dalam EXT2
gambar ext2 inode
Inode adalah kerangka dasar yang membangun EXT2. Inode dari setiap kumpulan blok
disimpan dalam tabel inode bersama dengan peta bit yang menyebabkan sistem dapat
mengetahui inode mana yang telah teralokasi dana inode mana yang belum. MODE:
mengandung dia informasi, inode apa dan izin akses yang dimiliki user. OWNER INFO:
user atau grop yang memiliki file atau direktori SIZE: besar file dalam bytes
TIMESTAMPS: kapan waktu pembuatan inode dan waktu terakhir dimodifikasi.
DATABLOKS: pointer ke blok yang mengandung data.
EXT2 inode juga dapat menunjuk pada device khusus, yang mana device khusus ini
bukan merupakan file, tatapi dapat menangani program sehingga program dapat
mengakses ke device. Semua file device di dalam drektori /dev dapat membantu
program mengakses device.
c. Superblok dalam EXT2
Superblok mengandung informasi tentang ukuran dasar dan bentuk file sistem. Informasi
di dalamnya memungkinkan file sistem manager untuk menggunakan dan merawat file
sistem. Biasanya, hanya superblok di blok group 0 saat file sistem di-mount tetapi setiap
blok grup mengandung duplikatnya untuk menjaga jika file sistem menjadi rusak.
Informasi yang dikandung adalah:
a. Magic Number
meyakinkan software bahwa ini adalah superblok dari EXT2 file sistem.
b. Revision Level
menunjukkan revisi mayor dan minor dari file sistem.
c. Mount Count dan Maksimum Mount Count
menunjukkan pada sistem jika harus dilakukan pengecekan dan maksimum
mount yang diijikan sebelum e2fsck dijalankan.
d. Blocks per Size
besar blok dalam file sistem, contohnya 1024 bytes.
e. Blocks per Group
benyaknya blok per group.
f. Block Group Number
nomor blok group yang mengadung copy dari superblok.
g. Free Blocks
banyaknya blok yang kosong dalam file sistem.
h. Free Inode
banyak inode kosong dalam file sistem.
i. First Inode
nomor inode dalam inode pertama dalam file sistem, inode pertama dalam EXT2
root file sistem adalah direktori "/".
EXT3 file sistem
EXT3 adalah peningkatan dari EXT2 file sistem. Peningkatan ini memiliki beberapa keuntungan,
diantaranya:
a. Setelah kegagalan sumber daya, "unclean shutdown", atau kerusakan sistem, EXT2 file
sistem harus melalui proses pengecekan dengan program e2fsck. Proses ini dapat
membuang waktu sehingga proses booting menjadi sangat lama, khususnya untuk disk
besar yang mengandung banyak sekali data. Dalam proses ini, semua data tidak dapat
diakses.
Jurnal yang disediakan oleh EXT3 menyebabkan tidak perlu lagi dilakukan pengecekan
data setelah kegagalan sistem. EXT3 hanya dicek bila ada kerusakan hardware seperti
kerusakan hard disk, tetapi kejadian ini sangat jarang. Waktu yang diperlukan EXT3 file
sistem setelah terjadi "unclean shutdown" tidak tergantung dari ukuran file sistem atau
banyaknya file, tetapi tergantung dari besarnya jurnal yang digunakan untuk menjaga
konsistensi. Besar jurnal default memerlukan waktu kira-kira sedetik untuk pulih,
tergantung kecepatan hardware.
b. Integritas data
EXT3 menjamin adanya integritas data setelah terjadi kerusakan atau "unclean
shutdown". EXT3 memungkinkan kita memilih jenis dan tipe proteksi dari data.
c. Kecepatan
Daripada menulis data lebih dari sekali, EXT3 mempunyai throughput yang lebih besar
daripada EXT2 karena EXT3 memaksimalkan pergerakan head hard disk. Kita bisa
memilih tiga jurnal mode untuk memaksimalkan kecepatan, tetapi integritas data tidak
terjamin.
d. Mudah dilakukan migrasi
Kita dapat berpindah dari EXT2 ke sistem EXT3 tanpa melakukan format ulang.
Reiser file sistem
Reiser file sistem memiliki jurnal yang cepat. Ciri-cirinya mirip EXT3 file sistem. Reiser file
sistem dibuat berdasarkan balance tree yang cepat. Balance tree unggul dalam hal kinerja,
dengan algoritma yang lebih rumit tentunya.
Reiser file sistem lebih efisien dalam pemenfaatan ruang disk. Jika kita menulis file 100
bytes, hanya ditempatkan dalam satu blok. File sistem lain menempatkannya dalam 100 blok.
Reiser file sistem tidak memiliki pengalokasian yang tetap untuk inode. Resier file sistem dapat
menghemat disk sampai dengan 6 persen.
X file sistem
X file sistem juga merupakan jurnaling file sistem. X file sistem dibuat oleh SGI dan
digunakan di sistem operasi SGI IRIX. X file sistem juga tersedia untuk linux dibawah lisensi
GPL. X file sistem mengunakan B-tree untuk menangani file yang sangat banyak. X file sistem
digunakan pada server-server besar.
Proc file sistem
proc file sistem menunjukkan bagaimana hebatnya virtual file sistem yang ada pada linux.
Proc file sistem sebenarnya tidak ada secara fisik, baik subdirektorinya, mau pun file-file yang
ada di dalamnya. Proc file sistem diregister oleh linux virtual file sistem, jika virtual file sistem
memanggilnya dan meminta inode-inode dan file-file, proc file sistem membuat file tersebut
dengan informasi yang ada di dalam kernel. Contohnya, /proc/devices milik kernel dibuat dari
data struktur kernel yang menjelaskan device tersebut.
Pembagian file sistem secara ortogonal
Shareable dan Unshareable
1. Shareable
Isinya dapat dishare (digunakan bersama) dengan sistem lain, gunanya untuk
menghemat tempat.
2. Unshareable
Isinya tidak dapat dishare(digunakan bersama) dengan sistem lain, biasanya untuk
alasan keamanan.
Variabel dan Static
1. Variabel
Isinya sering berubah-ubah.
2. Static
Sekali dibuat, kecil kemungkinan isinya akan berubah. Bisa berubah jika ada campur
tangan sistem admin.
IO Linux
Salah satu tujuan OS adalah menyembunyikan kerumitan device hardware dari sistem si
penggunanya. Contohnya, Virtual File System menyamakan tampilan filesystems yang dimount
tanpa memperdulikan devices fisik yang berada di bawahnya. Bab ini akan menjelaskan
bagaimana kernel Linux mengatur device fisik di sistem.
Salah satu fitur yang mendasar adalah kernel mengabstraksi penanganan device. Semua
device hardware terlihat seperti file pada umumnya: mereka dapat dibuka, ditutup, dibaca, dan
ditulis menggunakan calls sistem yang sama dan standar untuk memanipulasi file. Setiap device
di sistem direpresentasikan oleh sebuah file khusus device, contohnya disk IDE yang pertama di
sistem direpresentasikan dengan /dev/hda. Devices blok (disk) dan karakter dibuat dengan
perintah mknod dan untuk menjelaskan device tersebut digunakan nomor devices besar dan
kecil. Devices jaringan juga direpresentasikan dengan files khusus device, tapi file ini dibuat oleh
Linux setelah Linux menemukan dan menginisialisasi pengontrol-pengontrol jaringan di sistem.
Semua device yang dikontrol oleh driver device yang sama memiliki nomor device besar yang
umum. Nomor devices kecil digunakan untuk membedakan antara device-device yang berbeda
dan pengontrol-pengontrol mereka, contohnya setiap partisi di disk IDE utama punya sebuah
nomor device kecil yang berbeda. Jadi, /dev/hda2, yang merupakan partisi kedua dari disk IDE
utama, punya nomor besar 3 dan nomor kecil yaitu 2. Linux memetakan file khusus device yang
diteruskan ke system call (katakanlah melakukan mount ke sistem file device blok) pada driver si
device dengan menggunakan nomor device besar dan sejumlah tabel sistem, contohnya tabel
device karakter, chrdevs.
Linux membagi devices ke tiga kelas: devices karakter, devices blok dan devices jaringan.
Device karakter
Device karakter, device paling sederhana dari Linux, diakses sebagai file. Aplikasi
menggunakan system calls standar untuk membukanya, membacanya dan menulisnya dan
menutupnya persis seolah devices adalah file. Memang benar, meski pun devices ini merupakan
modem yang sedang digunakan oleh PPP daemon untuk menghubungkan sistem Linux ke
jaringan. Saat sebuah device karakter diinisialisasi, driver devicenya mendaftarkan sang device
pada kernel Linux dengan menambahkan sebuah entry ke vektor chrdevs dari struk data
device_struct. Pengenal utama devicenya digunakan sebagai indeks ke vektor ini. Pengenal
utama untuk suatu device tidak pernah berubah.
Cara Kerja
Setiap entry di vektor chrdevs, sebuah struk data device_struct, mengandung dua elemen:
sebuah penunjuk nama dari driver devices yang terdaftar dan sebuah penunjuk ke operasioperasi
file seperti buka, baca, tulis, dan tutup. Isi dari /proc/devices untuk devices karakter
diambil dari vektor chrdevs.
Saat sebuah file khusus karakter yang merepresentasikan sebuah devices karakter
(contohnya /dev/cua0) dibuka, kernelnya harus mengatur beberapa hal sehingga routine operasi
file yang benar dari driver devices karakter akan terpanggil.
Seperti sebuah file atau direktori pada umumnya, setiap file khusus device
direpresentasikan dengan sebuah inode VFS. Inode VFS untuk sebuah file khusus karakter
tersebut, sebenarnya untuk semua filesystem yang berada dibawahnya, contohnya EXT2. Hal ini
terlihat dari informasi di filesystem yang sebenarnya ketika nama file khusus device dilihat.
Setiap inode VFS memiliki keterkaitan dengan seperangkat operasi file dan operasi-operasi
ini berbeda tergantung pada objek filesystem yang direpresentasikan oleh inode tersebut. Kapan
pun sebuah VFS yang merepsentasikan file khusus karakter dibuat, operasi-operasi filenya diset
ke operasi device karakter default.
VFS inode memiliki hanya satu operasi file, yaitu operasi membuka file. Saat file khusus
karakter dibuka oleh sebuah aplikasi, operasi buka file yang umum atau generik menggunakan
pengenal utama dari device tersebut. Pengenal ini digunakan sebagai index ke vektor chrdevs
untuk memperoleh blok operasi file untuk device tertentu ini. Ia juga membangun struk data file
yang menjelaskan file khusus karakter ini, yang membuat penunjuk operasi file menunjuk ke
driver device itu. Setelah itu semua aplikasi dari operasi-operasi file aplikasi akan dipetakan
untuk memanggil perangkat devices karakter dari operasi file itu.
Device blok
Device ini pun diakses seperti file. Mekanisme untuk menyediakan perangkat operasi file
yang benar bagi file khusus blok yang terbuka sama seperti devices karakter. Linux memelihara
operasi dari perangkat device blok yang terdaftar sebagai vektor blkdevs. Vektor ini, seperti
halnya vektor chrdevs, diindeks dengan menggunakan nomor device besar dari sang device.
Entrynya juga merupakan struk data device_struct. Tidak seperti devices karakter, ada sejumlah
kelas yang dimiliki device blok. Device-device SCSI adalah salah satu kelasnya dan device IDE
adalah kelas lainnya. Kelaslah yang mendaftarkan dirinya sendiri pada kernel Linux dan
menyediakan operasi file kepada kernel. Driver-driver device untuk sebuah kelas device blok
menyediakan interface khusus kelas kepada kelas tersebut. Jadi, contohnya, sebuah driver
device SCSI harus menyediakan interface untuk subsistem SCSI agar dapat menyediakan
operasi file bagi devices ini ke kernel.
Cara Kerja
Setiap driver device blok harus menyediakan sebuah interface ke cache buffernya,
demikian pula interface operasi umum file. Setiap driver device blok mengisi entrynya di vektor
blk_dev dari struk data blk_dev_struct. Indeksnya ke vektor ini, lagi-lagi, nomor utama devicenya.
Struk data blk_dev_struct mengandung alamat routine permintaan dan sebuah penunjuk ke
sekumpulan struk data request,yang masing-masingnya merepresentasikan sebuah request dari
cache buffernya untuk driver untuk membaca atau menulis atau menulis satu blok data.
Setiap kali cache buffer ingin membaca dari, atau pun menuliskan satu blok data ke device
terdaftar, ia menambahkan struk data request kedalam blk_dev_struct nya. Gambar di atas ini
menunjukkan bahwa setiap request memiliki pointer (penunjuk) ke satu atau lebih struk data
buffer_head. Masing-masingnya merupakan suatu request untuk membaca atau menulis sebuah
blok data. Struk buffer_head tersebut dikunci (oleh cache buffer) dan mungkin ada suatu proses
yang menunggu buffer ini selesai di operasi blok tersebut. Setiap struk request dialokasikan dari
suatu daftar yang statik, yaitu daftar all_request. Jika proses tersebut sedang dimasukkan
sebuah ke list request yang kosong, fungsi request dari drivernya akan dipanggil agar memulai
proses antrian request. Jika tidak driver tersebut hanya akan memproses setiap request di daftar
request.
Sekali driver device telah menyelesaikan sebuah request, ia harus membuang setiap stuk
buffer_request dari struk requestnya, kemudian mencapnya up to date dan membuka kuncinya.
Pembukaan kunci buffer_head akan membangunkan proses apa pun yang tidur akibat
menunggu operasi blok selesai. Contoh dari kasus ini misalnya dimana sebuah nama file sedang
ditangani dan filesystem EXT2 harus membaca blok data yang mengandung entry direktori EXT2
berikutnya dari device blok yang menyimpan filesystem tersebut. Proses ini tidur di buffer_head
yang akan mengandung entri direktorinya sampai driver devicenya membangunkannya. Struk
data request tersebut ditandai bebas sehingga ia dapat digunakan di request blok lainnya.
Device jaringan
Device jaringan merupakan sebuah entity yang mengirimkan dan menerima paket-paket
data. Biasanya ia merupakan device fisik seperti kartu ethernet. Beberapa devices jaringan
bagaimana pun hanyalah software, seperti device loopback yang digunakan untuk mengirimkan
data ke Anda. Setiap device direpresentasikan dengan struk data device. Driver device jaringan
mendaftarkan device-device yang ia kontrol pada Linux selama inisialisasi jaringan yaitu saat
kernel melakukan booting. Struk data device tersebut berisi informasi mengenai device dan
alamat fungsi-fungsi yang memungkinkan bermacam-macam protokol jaringan menggunakan
layanan dari device tersebut. Fungsi-fungsi ini kebanyakan terkait dengan mentransmisikan data
dengan menggunakan device jaringan. Device tersebut menggunakan mekanisme pendukung
jaringan standar untuk melewatkan data yang diterima sampai ke lapisan protokol yang
semestinya. Semua data jaringan atau paket yang ditransmisikan dan diterima, direpresentasikan
dengan struk-struk data sk_buff. Struk-struk data yang bersifat fleksibel ini memungkinkan
header-header protokol jaringan menjadi mudah ditambahkan dan dibuang. Bagian ini hanya
memfokuskan pada struk data device serta bagaimana jaringan ditemukan dan diinsialisasi.
Struk data device ini mengandung informasi tentang device jaringan :
Nama
Berbeda dengan device karakter dan blok yang menggunakan file khusus device yang
dibuat dengan perintah mknod, file khusus device terlihat sekilas seperti device jaringan sistem
yang ditemukan dan diinsialisasi. Nama mereka standar, yaitu setiap nama merepsentasikan
jenis device masing-masing. Device multiple dari jenis yang sama dinomori lebih besar dari 0.
Oleh sebab itu device-device ethernet dikenal sebagai /dev/eth0, /dev/eth1, /dev/eth2 dan
seterusnya.
Beberapa device jaringan yang umum adalah
•/dev/ethN Device ethernet
•/dev/slN Device SLIP
•/dev/pppN Device PPP
•/dev/lo Device Loopback
Informasi bus
Berikut ini adalah informasi yang driver device butuhkan untuk mengontrol devicenya.
Nomor irq merupakan interrupt yang digunakan oleh device ini. Alamat basisnya adalah alamat
dari segala register status dan control dari device yang ada di memori I/O. Channel DMA adalah
nomor DMA yang device jaringan ini gunakan. Semua informasi ini diset pada waktu booting,
yaitu saat device ini diinisialisasi.
Flags interface
Hal-hal berikut ini akan menjelaskan karakteristik dan kemampuan dari device jaringan:
•IFF_UP Interface bangkit dan berjalan,
•IFF_BROADCAST Alamat broadcast di device adalah sah
•IFF_DEBUG Penghilangan error dinyalakan
•IFF_LOOPBACK Merupakan device loopback
•IFF_POINTTOPOINT Merupakan link point to point (SLIP dan PPP)
•IFF_NOTRAILERS Tidak ada pengangkut jaringan
•IFF_RUNNING Sumberdaya yang dialokasikan
•IFF_NOARP Tidak mendukung protokol ARP
•IFF_PROMISC Device di mode penerimaan acak, ia akan menerima semua paket tanpa
memperdulikan kemana paket-paket ini dialamatkan
•IFF_ALLMULTI Menerima seluruh frame multicast IP
•IFF_MULTICAST Dapat menerima frame multicast IP
Informasi protokol
Setiap device menjelaskan bagaimana ia digunakan oleh lapisan protokol jaringan.
mtu
Ukuran paket terbesar yang jaringan dapat kirim, tidak termasuk header lapisan link yang ia perlu
tambahkan.
Keluarga
Keluarga ini menandakan bahwa keluarga protokol yang dapat didukung oleh device tersebut.
Keluarga untuk seluruh device jaringan Linux adalah AF_INET, keluarga alamat internet.
Jenis
Jenis menjelaskan media di mana device jaringan terpasang. Ada banyak jenis media yang
didukung oleh device jaringan Linux. Termasuk diantaranya adalah Ethernet, X.25, Token Ring,
Slip, PPP dan Apple Localtalk.
Alamat
Struk data device tersebut memiliki sejumlah alamat yang relevan bagi device jaringan ini,
termasuk alamat-alamat IP-nya.
Antrian paket
Merupakan antrian paket-paket sk_buff yang antri menunggu untuk dikirmkan lewat device
jaringan ini.
Fungsi pendukung
Setiap device menyediakan seperangkat routine standar yang lapisan-lapisan protokol sebut
sebagai bagian dari interface mereka ke lapisan link device ini. Hal ini termasuk pembuatannya
dan routine-routine pengirim frame dan routine-routine penambah header standar dan pengumpul
statistik. Statistik ini bisa dilihat dengan memakai perintah ifconfig.
Komunikasi Antar Proses
Untuk mengatur kegiatan proses mereka perlu saling berkomunikasi. Linux mendukung berbagai
mekanisme komunikasi antar proses (KAP). Sinyal dan pemipaan merupakan dua di antaranya,
tapi linux juga mendukung system sistem ke lima mekanisme KAP.
Sinyal
Sinyal merupakan salah satu metode KAP tertua sistem Unix. Sinyal digunakan untuk
memberitahukan kejadian yang asinkronus pada satu atau lebih proses. misalnya sinyal yang
dihasilkan oleh keyboard saat ditekan oleh pemakai. Sinyal juga dapat dihasilkan oleh kondisi
yang menyatakan error, misalnya saat suatu proses mencoba mengakses lokasi yang tidak
pernah ada di dalam memori utama. Sinyal pun digunakan oleh shells untuk memberitahu
perintah kontrol kerja kepada proses child.
Beberapa sinyal di Linux
Ada satu perangkat sinyal terdefinisi yang bisa digenerate oleh kernel atau oleh proses lain di
dalam sistem, tentunya setelah proses tersebut punya hak untuk melakukannya. Anda dapat
melihat daftar dari seperangkat sinyal sistem dengan menggunakan perintah kill (kill -l). Di dalam
box Linux Intel, perintah kill tersebut menghasilkan keluaran sebagai berikut:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGIOT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR
Jumlah sinyal tersebut berbeda untuk sebuah kotak Linux AXP Alpha.
Bagaimana suatu sinyal disikapi
Proses dapat memilih untuk mengabaikan kebanyakan sinyal yang digenerate dengan dua
pengecualian: baik sinyal SIGSTOP, yang menyebabkan suatu proses menghentikan
pekerjaannya, mau pun sinyal SIGKILL, yang menyebabkan suatu proses berhenti, tidak dapat
diabaikan. Selain itu, suatu proses dapat memilih bagaimana cara ia mengatasi bermacammacam
sinyal. Proses dapat menghalangi sinyal tersebut dan, bila tidak menghalanginya, proses
itu dapat memilih antara mengatasinya sendiri atau membiarkan kernel mengatasinya. Bila kernel
mengatasi sinyal tersebut maka sejumlah tindakan default akan dilakukan untuk mengatasi sinyal
ini. Misalnya, tindakan default saat sebuah proses menerima sinyal SIGPE (exception floating
point) adalah dengan core dump kemudian keluar. Sinyal tidak punya prioritas-prioritas yang
terkait. Bila dua sinyal dihasilkan untuk suatu proses pada waktu yang sama, maka keduanya
dapat diberikan ke proses tersebut atau ditangani dengan urutan tertentu. Selain itu, tidak ada
mekanisme untuk mengatasi sinyal yang sama dan banyak sekaligus. Tidak ada cara bahwa
suatu proses dapat memberitahukan apakah ia menerima 1 atau 42 sinyal SIGCONT.
Penerapan sinyal
Linux menerapkan sinyal dengan menggunakan informasi yang disimpan dalam task_struct untuk
proses tersebut. Jumlah sinyal yang didukung terbatas pada ukuran word prosesornya. Proses
dengan ukuran word 32 bit dapat memiliki 32 sinyal sementara prosesor 64 bit seperti Alpha AXP
dapat memiliki sampai 64 sinyal. Sinyal-sinyal yang tertunda saat ini disimpan dalam field sinyal
dengan sebuah mask dari sinyal-sinyal terblokir yang disimpan di blocked. Dengan pengecualian
SIGTOP dan SIGKILL, semua sinyal dapat diblokir. Bila sinyal yang diblokir digenerate, maka
sinyal itu akan tetap tertahan sampai ia tidak diblokir lagi.
Linux juga menyimpan informasi tentang bagaimana setiap proses menangani sinyal-sinyal yang
mungkin terjadi. Informasi ini disimpan dalam suatu array stuktur data sigaction yang ditunjuk
oleh task_struct untuk setiap proses. Di antara hal-hal yang lain, informasi ini mengandung baik
alamat routin yang nantinya menangani sinyal atau flag, yang memberitahu Linux bahwa proses
tersebut ingin mengabaikan sinyal ini atau membiarkan kernel menanganinya. Proses tersebut
memodifikasi penanganan default sinyal dengan membuat system call ,dan call ini mengubah
sigaction untuk sinyal yang sesuai dan juga mask daripada blocked.
Tidak semua proses di dalam sistem dapat mengirimkan sinyal ke proses lainnya. Kernel dapat
melakukannya demikian pula super users. Proses-proses biasa hanya dapat mengirim sinyal
pada proses-proses yang memiliki uid dan gid yang sama atau pun pada kelompok proses yang
sama. Sinyal digenerate dengan mengatur bit yang sesuai di dalam field signal task_struct. Jika
proses tersebut belum memblokir sinyal dan sedang menunggu (namun dapat diinterrupt di
status Interruptible), maka ia akan dibangunkan dengan mengubah statusnya ke Running dan
memastikan bahwa proses ini berada pada antrian run. Dengan cara itu scheduler akan
menganggapnya sebagai suatu yang akan running pada jadwal sistem berikutnya. Jika
penanganan default diperlukan, maka Linux dapat mengoptimalkan penganganan sinyal tersebut.
Sebagai contoh, jika sinyal SIGWINCH (fokus yang berubah dari jendela X) dan penangan
default sedang digunakan, maka tidak ada yang perlu dilakukan.
Sinyal-sinyal tidak diberikan ke proses segera saat mereka digenerate. Sinyal-sinyal ini harus
menunggu sampai proses tersebut berjalan kembali. Setiap kali sebuah proses keluar dari suatu
system calls, field signals dan blocked dicek dan bila ada sinyal-sinyal apa pun yang tidak
terblokir, sekarang sinyal-sinyal ini dapat disampaikan. Kelihatannya cara ini bukanlah cara yang
dapat diandalkan, namun setiap proses di dalam sistem pasti membuat system calls, sebagai
contoh, untuk menulis suatu karakter ke terminal sepanjang waktu. Proses dapat memilih untuk
menunggu sinyal bila ia mau, kemudian dapat disuspend di status Interruptible sampai sinyal itu
datang. Kode pemrosesan sinyal Linux melihat pada struktur sigaction untuk setiap sinyal yang
saat ini belum diblokir.
Jika sebuah penangan sinyal diset ke tindakan default, maka kernel akan mengatasinya.
Penangan default sinyal SIGSTOP akan mengubah status proses saat ini ke status Stopped dan
selanjutnya menjalankan scheduler untuk memilih sebuah proses baru untuk berjalan. Tindakan
default untuk sinyal SIGFPE akan core dump proses dan menyebabkannya keluar. Cara lainnya,
proses tersebut dapat menentukan handler sinyalnya sendiri. Penangan ini merupakan suatu
routine yang akan dipanggil kapan pun sinyal digenerate dan struktur sigactionnya menyimpan
alamat routine ini. Kernel tersebut harus memanggil routine penangan sinyal proses tersebut dan
bagaimana ini terjadi adalah kekhususan masing-masing prosesor tetapi intinya semua CPU
harus berhasil mengatasi kenyataan bahwa proses saat ini sedang berjalan di mode kernel dan
mengembalikan proses yang tadi memanggil kernel atau system routine di mode user. Masalah
ini terpecahkan dengan memanipulasi stack dan register daripada proses tersebut. Program
counter dari proses diset ke alamat sinyalnya, yang menangani routine, dan parameterparameter
ke routine dimasukkan ke frame callnya atau dilewatkan di register. Ketika proses
tersebut menerima operasi, proses ini terlihat seolah-olah routine penangan sinyalnya dipanggil
secara normal.
Linux bersifat POSIX compatible dan oleh karena itu prosesnya dapat menentukan sinyal-sinyal
mana yang diblokir saat routine tertentu penangan sinyal dipanggil. Hal ini berarti mengubah
mask blocked tersebut selama pemanggilan penangan sinyal proses-proses tersebut. mask
blocked harus dikembalikan ke nilai aslinya ketika routine penangan routine tersebut telah
selesai. Oleh karena itu Linux menambahkan suatu call pada sebuah routine perapih yang akan
mengembalikan mask asli daripada blocked ke dalam stack call dari proses yang disinyal. Linux
juga mengoptimalkan kasus di mana beberapa routine penangan sinyal perlu dipanggil dengan
stacking routine-routine ini sehingga setiap saat sebuah routine penangan ada, routine penangan
berikutnya dipanggil sampai routine perapih dipanggil.
Pipa
Semua shells Linux yang biasa, membolehkan redirection. Sebagai contoh
$ ls | pr | lpr
memipakan output dari perintah ls, yang melist file yang ada di dalam direktori, sampai standar
input dari perintah pr yang mempaginasi file tersebut. Pada akhirnya standard output dari
perintah pr dipipakan ke standar input dari perintah lpr yang mencetak hasil-hasilnya ke printer
default. Pipa-pipa berikutnya adalah unidirectional byte streams yang menghubungkan standard
output dari suatu proses ke standar input dari proses lainnya. Proses tidak peduli terhadap
redirection ini dan berperilaku seolah-olah ia berjalan normal saja. Adalah shell yang membangun
pipa-pipa yang bersifat sementara ini di antara dua proses tersebut.
Penerapan
Di Linux, suatu pipa diterapkan dengan menggunakan dua struktur data file yang keduanya
menunjuk ke inode VFS sementara yang sama yang ia sendiri menunjuk pada halaman fisik di
dalam memori. Gambar di atas menunjukkan bahwa setiap struktur data file mengandung pointer
ke vektor-vektor routine operasi file yang berbeda; satu untuk menulis ke pipa, satu lagi untuk
membaca dari pipa.
Hal tersebut menyembunyikan perbedaan-perbedaan yang mendasar dari system calls umum
yang membaca dan menulis file biasa. Saat proses menulis tersebut menulis ke pipa, byte-byte
dikopi ke halaman data bersama dan ketika proses membaca membaca dari pipa, byte-byte
dikopi dari halaman data bersama. Linux harus mensinkronisasikan akses ke pipa tersebut. Linux
harus memastikan bahwa pembaca dan penulis pipa berada pada jalur dan untuk melakukannya
Linux menggukan kunci, antrian wait dan sinyal.
Bagaimana menulis data
Saat penulis ingin menulis ke pipa, ia menggunakan fungsi-fungsi pustaka penulisan yang
standar. Semuanya ini melewatkan pendeskripsi file yang diindeks ke perangkat proses dari
sturktur data file, masing-masing merepresentasikan file yang sedang terbuka atau pun, dalam
kasus ini, pipa yang terbuka. routine penulis itu menggunakan informasi yang ada di dalam inode
VFS yang merepresentasikan pipa untui mengatur permintaan menulis.
Bila ada cukup ruangan untuk menulis semua bytes kedalam pipa dan, sepanjang pipa tidak
dikunci oleh pembacanya, Linux menguncinya untuk si penulis dan mengkopikan bytes tersebut
dari ruang alamat proses itu ke halaman data bersama. Bila pipa itu dikunci oleh pembaca atau
bila tidak ada cukup ruang bagi data maka proses sekarang disuruh tidur di antrian tunggu inode
pipa itu dan scheduller dipanggil sehingga proses lainnya dapat berjalan. Proses yang tidur ini
interruptible, sehingga ia masih dapat menerima sinyal dan dapat dibangunkan oleh pembaca
ketika ruangan telah cukup untuk ditulisi data atau pun ketika pipa sudah tidak dikunci. Setelah
data ditulis, inode VFS dari pipa dibuka kuncinya dan semua pembaca yang menunggu di antrian
tunggu inode akan dibangunkan oleh mereka sendiri.
Bagaimana membaca data
Membaca data dari pipa sangat mirip dengan menulis.
Proses boleh membaca dengan tidak melakukan pemblokiran (tergantung pada mode di mana
proses tersebut membuka file atau pipa) dan, dalam kasus ini, bila tidak ada data untuk dibaca
atau bila pipa dikunci, pesan kesalahan akan dikembalikan. Artinya, proses tersebut dapat terus
berjalan. Cara lainnya adalah dengan menunggu di antrian tunggu inode pipa sampai proses
menulis sudah selesai. Saat kedua proses sudah selesai berurusan dengan pipa, inode pipa
tersebut dibuang bersama halaman data bersama.
FIFO
Linux pun mendukung pipa bernama, yang dikenal dengan FIFO karena prinsip kerjanya FIFO.
Data yang pertama kali ditulis ke pipa adalah data pertama yang dibaca. Tidak seperti pipa, FIFO
bukan merupakan objek yang bersifat sementara, ia adalah entity di sistem file dan bisa dibuat
dengan perintah mkfifo. Proses-proses bebas menggunakan FIFO selama mereka punya hak
akses ke sana. Cara FIFO dibuka sedikit berbeda dengan pipa. Sebuah pipa (dua struktur data
filenya, inode VFSnya dan halaman data bersama) dibuat sekaligus sementara FIFO sudah ada
dan dibuka dan ditutup oleh penggunanya. Linux harus menangani pembaca-pembaca yang
membuka FIFO sebelum penulis-penulis membukanya dan juga penulis-penulis yang
membacanya sebelum penulis-penulis sudah menulisnya. Selain itu, FIFO ditangani dengan cara
yang hampir sama dengan pipa dan FIFO menggunakan struktur data dan operasi yang sama
Struktur Jaringan
Ide pokok dari jaringan mungkin sudah setua usia telekomunikasi itu sendiri. Coba anda
bayangkan ketika anda harus tinggal di jaman batu, yang ketika itu gendang digunakan sebagai
alat untuk berkomunikasi satu dengan lainnya. Andaikan manusia gua A ingin mengundang
manusia gua B untuk bermain, tapi jarak B terlalu jauh dari A untuk mendengar suara gendang
yang dibunyikannya. Apa yang akan dilakukan oleh A ? Mungkin si A akan datang langsung ke
tempat B, membunyikan gendang yang lebih besar, atau meminta C yang tinggal di antara A dan
B untuk menyampaikan pesan ke B. Pilihan terakhir inilah yang merupakan dasar dari jaringan.
Terlepas dari masalah jaman batu, sekarang kita memiliki komputer yang canggih. Dimana
komputer yang kita miliki sekarang dapat berkomunikasi dengan komputer lainnya melalui kabel
tembaga, kabel optik, gelombang microwave, dan medium komunikasi lainnya.
Sebagai hasil dari usaha para programmer dari seluruh dunia, Linux tidak akan tercipta tanpa
Internet. Jadi tidaklah mengherankan apabila pada tahap awal pengembangan, beberapa orang
mulai mengerjakan kemampuan jaringan di Linux. implementasi UUCP di Linux sudah ada sejak
awal dan jaringan dengan basis TCP/IP mulai dikerjakan sejak musim gugur 1992, ketika Ross
Biro dan yang lainnya mengerjakan sesuatu yang kini disebut dengan Net-1.
Setelah Ross berhenti dalam pengembangan pada Mei 1993, Fred Van Kempen mulai bekerja
pada implementasi yang baru, menulis ulang bagian terbesar dalam kode. Proyek ini dikenal
dengan Net-2. Peluncuran yang pertama adalah Net-2d, dibuat pada musim panas 1993, dan
telah dibantu kembangkan oleh beberapa orang, terutama Alan Cox. Hasil pekerjaan Alan
dikenal dengan nama Net-3 setelah Linux 1.0 diluncurkan. Kode Net-3 masih dikembangkan
lebih lanjut untuk Linux 1.2 dan Linux 2.0. Kernel 2.2 dan seterusnya menggunakan versi Net-4
untuk mendukung jaringan, yang masih tetap menjadi standar sampai saat ini.
Kode untuk jaringan Linux Net-4 menawarkan berbagai macam driver dan kemampuan khusus.
Protokol standar Net-4 mencakup :
•SLIP dan PPP (untuk mengirimkan data melalui route serial)
•PLIP (untuk route paralel)
•IPX (untuk jaringan yang kompatibel dengan Novell)
•Appletalk (untuk jaringan Apple)dan AX.25
•NetRom dan Rose (untuk jaringan radio amatir)
Sedangkan kemampuan standar Net-4 mencakup firewall IP, penghitungan IP, dan IP
masquerade. IP tunneling dalam berbagai sudut dan kebijaksanaan routing juga didukung.
Dukungan untuk berbagai macam tipe perlatan ethernet, untuk mendukung FDDI, Token Ring,
Frame Relay, ISDN, dan kartu ATM.
Sebagai tambahan ada beberapa kemampuan yang sangat mendukung fleksibilitas dari Linux.
Kemampuan ini termasuk implementasi sistem berkas SMB, yang bekerja bersama dengan
aplikasi seperti lanmanager dan Ms. Windows, yang disebut Samba, yang diciptakan oleh
Andrew Tridgell, dan sebuah implementasi Novell NCP (Protokol Inti Netware).
Implementasi jaringan Net-4 sekarang cukup matang dan digunakan dalam banyak situs di
seluruh dunia. Banyak waktu yang tersita untuk meningkatkan kemampuan implementasi Net-4.
Linux juga seringkali digunakan dalam lingkungan penyedia jasa Internet (ISP). Linux digunakan
untuk membangun World Wide Web (WWW) server, mail server, dan news server yang murah
dan terjamin. Sekarang ini sudah ada pengembangan yang cukup besar dalam Linux, dan
beberapa versi kernel Linux saat ini menawarkan generasi terbaru IPv6 sebagai suatu standar.
Mengingat besarnya peran timbal balik antara pengembangan Linux dan jaringan, mungkin akan
sulit bagi kita untuk membayangkan Linux tanpa dukungan jaringan yang standar.
Kita akan membahas tiga macam tipe jaringan, tapi fokus utama akan diarahkan pada TCP/IP
karena protokol inilah yang paling populer digunakan baik dalam jaringan lokal (LAN) maupun
jaringan yang lebih besar (WAN), seperti Internet. Kita juga akan mempelajari UUCP dan IPX.
Dahulu kala UUCP banyak digunakan untuk mengirim berita (news) dan pesan (mail) melalui
koneksi telepon dialup. Memang saat ini UUCP sudah jarang digunakan, tapi tetap masih
berguna dalam situasi tertentu. Sedangkan protokol IPX banyak digunakan dalam lingkungan
Novell Netware dan di bagian belakang akan dijelaskan lebih lanjut cara mengkoneksikan mesin
Linux anda dengan jaringan Novell. Ketiganya merupakan protokol jaringan dan digunakan untuk
medium pengiriman data antar komputer.
Kita mendefinisikan jaringan sebagai kumpulan host yang dapat berkomunikasi satu dengan
lainnya, yang seringkali bergantung pada pelayanan (service) dari beberapa host komputer yang
dikhususkan fungsinya sebagai relay data antar komputer. Host biasanya berupa komputer, tapi
tidak selalu, X terminal dan printer cerdas juga bisa dianggap sebagai suatu host. Sekelompok
kecil host disebut sebagai situs.
Komunikasi adalah mustahil tanpa bahasa atau kode yang dapat digunakan untuk komunikasi.
Dalam jaringan komputer, bahasa ini seringkali dianalogikan protokol. Tapi perlu diingat, anda
tidak bisa membayangkan protokol ini adalah suatu aturan yang tertulis, tapi lebih sebagai kode
yang telah diformat sedemikian hingga. Dalam bahasa yang sama, protokol digunakan dalam
jaringan komputer adalah bukan apa-apa melainkan suatu aturan tegas untuk pertukaran pesan
antara dua atau lebih host.
Jaringan TCP/IP
Aplikasi jaringan moderen membutuhkan pendekatan yang kompleks untuk memindahkan data
dari satu mesin ke mesin lainnya. Jika anda mengatur sebuah mesin Linux dengan banyak user,
tiap pengguna mungkin secara simultan ingin terhubung dengan remote host dalam jaringan.
Anda harus memikirkan cara sehingga mereka bisa berbagai jaringan tanpa harus menggangu
yang lain.
Pendekatan yang digunakan dalam protokol jaringan moderen adalah packet switching. Sebuah
paket adalah sebagian kecil data yang ditransfer dari satu mesin ke mesin lainnya melalui
sebuah jaringan. Proses switching berlangsung ketika datagram dikirim melalui tiap link dalam
jaringan. Sebuah jaringan dengan packet switching saling berbagi sebuah link jaringan tunggal
diantara banyak pengguna dengan mengirim paket dari satu pengguna ke pengguna lainnya
melalui link tersebut.
Pemecahan yang digunakan oleh sistem UNIX dan banyak sistem lainnya adalah dengan
mengadapatasikan TCP/IP. Di atas sudah disebutkan mengenai datagram, secara teknis
datagram tidak memiliki definisi yang khusus tetapi seringkali disejajarkan artinya dengan paket.
Protokol Internet (IP)
Tentu, anda tidak menginginkan jaringan dibatasi hanya untuk satu ethernet atau satu koneksi
data point to point. Secara ideal, anda ingin bisa berkomunikasi dengan host komputer diluar tipe
jaringan yang ada. Sebagai contoh, dalam instalasi jaringan yang besar, biasanya anda memiliki
beberapa jaringan terpisah yang harus disambung dengan motode tertentu.
Koneksi ini ditangani oleh host yang dikhususkan sebagai gateway yang menangani paket yang
masuk dan keluar dengan mengkopinya antara dua ethernet dan kabel optik. Gateway akan
bertindak sebagai forwarder. Tata kerja dengan mengirimkan data ke sebuah remote host disebut
routing, dan paket yang dikirim seringkali disebut sebagai datagram dalam konteks ini. Untuk
memfasilitasisasi hal ini, pertukaran datagram diatur oleh sebuah protokol yang independen dari
perangkat keras yang digunakan, yaitu IP (Internet Protocol).
Keuntungan utama dari IP adalah IP mengubah jaringan yang tidak sejenis menjadi jaringan yag
homogen. Inilah yang disebut sebagai Internetworking, dan sebagai hasilnya adalah internet.
Perlu dibedakan antara sebuah internet dan Internet, karena Internet adalah definisi resmi dari
internet secara global.
Tentu saja, IP juga membutuhkan sebuah perangkat keras dengan cara pengalamatan yang
independen. Hal ini diraih dengan memberikan tiap host sebuah 32 bit nomor yang disebut
alamat IP. Sebuah alamat IP biasanya ditulis sebagai empat buah angka desimal, satu untuk tiap
delapan bit, yang dipisahkan oleh koma. Pengalamatan dengan nama IPv4 (protokol internet
versi 4)ini lama kelamaan menghilang karena standar baru yang disebut IPv6 menawarkan
pengalamatan yang lebih fleksibel dan kemampuan baru lainnya.
Setelah apa yang kita pelajari sebelumnya, ada tiga tipe pengalamatan, yaitu ada nama host,
alamat IP dan alamat perangkat keras, seperti pengalamatan pada alamat enam byte pada
ethernet.
Untuk menyederhanakan peralatan yang akan digunakan dalam lingkungan jaringan, TCP/IP
mendefinisikan sebuah antar muka abstrak yang melaluinya perangkat keras akan diakses. Antar
muka menawarkan satu set operasi yang sama untuk semua tipe perangkat keras dan secara
mendasar berkaitan dengan pengiriman dan penerimaan paket.
Sebuah antar muka yang berkaitan harus ada di kernel, untuk setiap peralatan jaringan. Sebagai
contoh, antar muka ethernet di Linux, memiliki nama eth0 dan eth1, antar muka PPP memiliki
nama ppp0 dan ppp1, sedangkan antar muka FDDI memiliki nama fddi0 dan fddi1. Semua nama
antar muka ini bertujuan untuk konfigurasi ketika anda ingin mengkonfigurasinya, dan mereka
tidak memiliki arti lain dibalik fungsinya.
Sebelum digunakan oleh jaringan TCP/IP, sebuah antar muka harus diberikan sebuah alamat IP
yang bertugas sebagai tanda pengenal ketika berkomunikasi dengan yang lain. Alamat ini
berbeda dengan nama antar muka yang telah disebutkan sebelumnya; jika anda menganalogikan
sebuah antar muka dengan pintu, alamat IP seperti nomor rumah yang tergantung di pintu
tersebut.
Paramater peralatan yang lain, mungkin sekali untuk diatur, misalnya ukuran maksimum
datagram yang dapat diproses oleh sebuah nomor port keras, yang biasanya disebut Unit
Transfer Maksimum atau Maximum Transfer Unit(MTU). Protokol Internet (IP) mengenali alamat
dengan 32 bit nomor. Tiap mesin diberikan sebuah nomor yang unik dalam jaringan. Jika anda
menjalankan sebuah jaringan lokal yang tidak memiliki route TCP/IP dengan jaringan lain, anda
harus memberikan nomor tersebut menurut keinginan anda sendiri. Ada beberapa alamat IP
yang sudah ditetapkan untuk jaringan khusus. Sebuah domain untuk situs di Internet, alamatnya
diatur oleh badan berotoritas, yaitu Pusat Informasi Jaringan atau Network Information
Center(NIC).
Alamat IP terbagi atas 4 kelompok 8 bit nomor yang disebut oktet untuk memudahkan
pembacaan. Sebagai contoh quark.physics.groucho.edu memiliki alamat IP 0x954C0C04, yang
dituliskan sebagai 149.76.12.4. Format ini seringkali disebut notasi quad bertitik. Alasan lain
untuk notasi ini adalah bahwa alamat IP terbagi atas nomor jaringan, yang tercantum dalam oktet
pertama, dan nomor host, pada oktet sisanya. Ketika mendaftarkan alamat IP ke NIC, anda tidak
akan diberikan alamat untuk tiap host yang anda punya. Melainkan, anda hanya diberikan nomor
jaringan, dan diizinkan untuk memberikan alamat IP dalam rentang yang sudah ditetapkan untuk
tiap host sesuai dengan keinginan anda sendiri.
Banyaknya host yang ada akan ditentukan oleh ukuran jaringan itu sendiri. Untuk
mengakomodasikan kebutuhan yang berbeda-beda, beberapa kelas jaringan ditetapkan untuk
memenuhinya, antara lain:
1. Kelas A
Terdiri atas jaringan 1.0.0.0 sampai 127.0.0.0. Nomor jaringan ada pada oktet pertama.
Kelas ini menyediakan alamat untuk 24 bit host, yang dapat menampung 1,6 juta host
per jaringan.
2. Kelas B
Terdiri atas jaringan 128.0.0.0 sampai 191.255.0.0. Nomor jaringan ada pada dua oktet
yang pertama. Kelas ini menjangkau sampai 16.320 jaringan dengan masing-masing
65024 host.
3. Kelas C
Terdiri atas jaringan 192.0.0.0 sampai 223.255.255.0. Nomor jaringan ada pada tiga
oktet yang pertama. Kelas ini menjangkau hingga hampir 2 juta jaringan dengan masingmasing
254 host.
4. Kelas D, E, dan F
Alamat jaringan berada dalam rentang 224.0.0.0 sampia 254.0.0.0 adalah untuk
eksperimen atau disediakan khusus dan tidak merujuk ke jaringan manapun juga. IP
muliticast, yang adalah service yang mengizinkan materi untuk dikirim ke banyak tempat
di Internet pada suatu saat yang sama, sebelumnya telah diberikan alamat dalam
rentang ini.
Oktet 0 dan 255 tidak dapat digunakan karena telah dipesan sebelumnya untuk kegunaan
khusus. Sebuah alamat yang semua bagian bit host-nya adalah 0 mengacu ke jaringan, sedang
alamat yang semua bit host-nya adalah 1 disebut alamat broadcast. Alamat ini mengacu pada
alamat jaringan tertentu secara simultan. Sebagai contoh alamat 149.76.255.255 bukanlah
alamat host yang sah, karena mengacu pada semua host di jaringan 149.76.0.0.
Sejumlah alamat jaringan dipesan untuk kegunaan khusus. 0.0.0.0 dan 127.0.0.0 adalah
contohnya. Alamat yang pertama disebut default route, sedangkan yang kedua adalah alamat
loopback.
Jaringan 127.0.0.0 dipesan untuk lalu lintas IP lokal menuju ke host anda. Biasanya alamat
127.0.0.1 akan diberikan ke suatu antar muka khusus pada host anda, yaitu antar muka
loopback, yang bertindak seperti sebuah sirkuit tertutup. Paket IP yang dikirim ke antar muka ini
dari TCP atau UDP akan dikembalikan lagi. Hal ini akan membantu anda untuk mengembangkan
dan mengetes perangkat lunak jaringan tanpa harus menggunakan jaringan yang sesungguhnya.
Jaringan loopback juga memberikan anda kemudahan menggunakan perangkat lunak jaringan
pada sebuah host yang berdiri sendiri. Proses ini tidak seaneh seperti kedengarannya. Sebagai
contoh banyak situs UUCP yang tidak memiliki konektivitas sama sekali, tapi tetap ingin
menggunakan sistem news INN. Supaya dapat beroperasi dengan baik di Linux, INN
membutuhkan antar muka loopback.
Beberapa rentang alamat dari tiap kelas jaringan telah diatur dan didesain 'pribadi' atau 'dipesan'.
Alamat ini dipesan untuk kepentingan jaringan pribadi dan tidak ada di rute internet. Biasanya
alamat ini digunakan untuk organisasi untuk menciptakan intranet untuk mereka sendiri, bahkan
jaringan yang kecil pun akan merasakan kegunaan dari alamat itu.
Rentang Alamat IP untuk fungsi khusus
Kelas jaringan
•A 10.0.0.0 sampai 10.255.255.255
•B 172.16.0.0 sampai 172.31.0.0
•C 192.168.0.0 sampai 192.168.255.0
Protokol Pengontrol Transmisi (TCP)
Mengirimkan datagram dari satu host ke host bukanlah segalanya. Jika anda login, informasi
yang dikirim harus dibagi menjadi beberapa paket oleh si pengirim dan digabungkan kembali
menjadi sebuah karakter stream oleh si penerima. Proses ini memang tampaknya sederhana tapi
sebenarnya tidak sesederhana kelihatannya.
Sebuah hal penting yang harus anda ingat adalah bahwa IP tidak menjamin. Asumsikan bahwa
ada sepuluh orang dalam ethernet yang mulai men-download, maka jumlah lalu lintas data yang
tercipta mungkin akan terlalu besar bagi sebuah gateway untuk menanganinya dengan segala
keterbatasan yang ada. IP menyelesaikan masalah ini dengan membuangnya. Paket yang dikirim
akan hilang tanpa bisa diperbaiki. Karenanya host harus bertanggungjawab untuk memeriksa
integritas dan kelengkapan data yang dikirim dan pengiriman ulang data jika terjadi error.
Proses ini dilakukan oleh protokol lain, TCP ( Transmision Control Protocol), yang menciptakan
pelayanan yang terpercaya di atas IP. Karakteristik inti dari TCP adalah bahwa TCP
menggunakan IP untuk memberikan anda ilusi dari koneksi sederhana antara dua proses di host
dan remote machine. Jadi anda tidak perlu khawatir tentang bagaimana dan route mana yang
ditempuh oleh data. Sebuah koneksi TCP bekerja seperti sebuah pipa dua arah dimana proses
dari kedua arah bisa menulis dan membaca. Pikirkan hal ini seperti halnya sebuah pembicaraan
melalui telepon.
TCP mengidentifikasikan titik ujung dari sebuah koneksi dengan alamat IP dari kedua host yang
terlibat dan jumlah port yang dimiliki oleh tiap-tiap host. Port dapat dilihat sebagai sebuah titik
attachment untuk tiap koneksi jaringan. Jika kita lebih mendalami contoh telepon sebelumnya,
dan anda dapat membayangkan kota sebagai suatu host, kita dapat membandingkan alamat IP
dengan kode area (dimana nomor IP akan dipetakan ke kota), dan nomor port dengan kode lokal
(dimana nomor port dipetakan ke nomor telepon). Sebuah host tunggal bisa mendukung berbagai
macam service, yang masing-masing dibedakan dari nomor port-nya.
Dalam contoh login, aplikasi client membuka port dan terhubung ke port di server dimana dia
login. Tindakan ini akan membangun sebuah koneksi TCP. Dengan menggunakan koneksi ini,
login service akan menjalankan prosedur autorisasi dan memunculkan shell. Standar masukan
dan keluaran dari shell akan disambungkan ke koneksi TCP, jadi apapun yang anda ketik ke
login service, akan dikirimkan melalui TCP stream dan dikirimkan ke shell sebagai standar
masukan.
Protokol Pengontrol Pesan di Internet (ICMP)
IP memiliki protokol lain yang mendampinginya yang belum pernah kita bahas sebelumnya, yaitu
ICMP (Internet Control Message Protocol). ICMP digunakan oleh kode jaringan di kernel untuk
mengkomunikasikan pesan error ke host lainnya. Sebagai contoh, anda ingin melakukan telnet,
tapi tidak ada proses yang menangkap pesan tersebut di port. Ketika paket TCP pertama untuk
port tersebut tiba, lapisan jaringan akan mengenalinya dan kemudian akan langsung
mengembalikan sebuah pesan ICMP yang menyatakan bahwa port tidak dapat dijangkau.
Protokol ICMP menyediakan beberapa pesan yang berbeda, dimana banyak dari pesan tersebut
berhubungan dengan kondisi error. Tapi bagaimana pun juga, ada suatu pesan yang menarik
yang disebut pesan redirect. Pesan ini dihasilkan oleh modul routing ketika tertedeteksi bahwa
ada host lain yang menggunkannya sebagai gateway, walaupun ada rute yang lebih pendek.
Sebagai contoh, setelah melakukan booting, tabel routingnya kemungkinan tidak lengkap. Tabel
ini mungkin berisi rute ke jaringan lain. Sehingga paket yang dikirim tidak sampai ke tujuannya,
malah sampai ke jaringan lain. Ketika menerima sebuah datagram, maka server yang
menerimanya akan menyadari bahwa rute tersebut adalah pilihan rute yang buruk dan
meneruskannya ke jaringan lain.
Hal ini sepertinya jalan terbaik untuk menghindari pengaturan seting secara manual, kecuali
setingan dasarnya saja. Tapi bagaimana pun juga, waspadalah selalu untuk tidak terlalu
bergantung pada skema routing yang dinamis, baik itu RIP ataupun pesan indirect ICMP. Indirect
ICMP dan RIP menawarkan anda sedikit atau tidak sama sekali pilihan untuk memverifikasi
bahwa beberapa informasi routing memerlukan autentifikasi. Sebagai konsekuensi, kode jaringan
Linux mengancam pesan indirect jaringan seakan-akan mereka adalah indirect host . Hal ini akan
meminimalkan kerusakan yang diakibatkan oleh serangan dan membatasinya hanya ke satu host
saja, daripada keseluruhan jaringan. Pada sisi yang lain, ini berarti sedikit lalu lintas dihasilkan
dalam kejadian dari suatu kondisi yang masuk akal, seakan-akan tiap host menyebabkan
terbentuknya pesan indirect ICMP. Sebenarnya ketergantungan pada ICMP tidak langsung
dianggap sebagai suatu yang buruk.
Protokol Datagram Pengguna (UDP)
Tentu saja, TCP bukanlah satu-satunya protokol dalam jaringan TCP/IP. Walaupun TCP cocok
untuk aplikasi untuk login, biaya yang dibutuhkan terbatas untuk aplikasi semacam NFS, dimana
lebih baik kita menggunakan saudara sepupu dari TCP yang disebut UDP ( User Datagram
Protocol. Seperti halnya TCP, UDP memperbolehkan sebuah aplikasi untuk menghubungi
sebuah service pada port tertentu dari remote machine, tapi untuk itu tidak diperlukan koneksi
apa pun juga. Sebaliknya, anda bisa mengirimkan paket tunggal ke pelayanan tujuan, apa pun
juga namanya.
Asumsikan bahwa anda ingin menggunakan sejumlah kecil data dari server basis data.
Pengambilan data tersebut membutuhkan minimal tiga datagram untuk membangun sebuah
koneksi TCP, tiga lainnya untuk mengirim dan mengkonfirmasikan sejumlah kecil data tiap kali
jalan, sedangkan tiga lainnya dibutuhkan untuk menutup koneksi. UDP menyediakan kita
pelayanan yang sama dengan hanya menggunakan dua datagram. UDP bisa dikatakan hanya
membutuhkan sedikit koneksi, dan tidak menuntut kita untuk membangun dan menutup koneksi.
Kita hanya perlu untuk meletakkan data kita pada datagram dan mengirimkannya ke server.
server akan memformulasikan balasannya, meletakkan data balasan ke dalam datagram yang
dialamatkan kembali ke kita, dan mengirimkan balik. Walaupun UDP lebih cepat dan efisien
daripada TCP untuk transaksi yang sederhana, UDP tidak didesain untuk menghadapi hilangnya
datagram pada saat pengiriman. Semuanya tergantung pada aplikasi, sebagai contoh mungkin
nama server, untuk menangani hal ini.
IPX dan Sistem Berkas NCP
Sejarah dan Latar Belakang Xerox dan Novell
Lama sebelum Microsoft mempelajari jaringan, dan bahkan sebelum Internet dikenal di luar
lingkup kehidupan akademis, perusahaan membagi sumber daya untuk berkas dan printer
berdasarkan sistem operasi Novel NetWare dan protokol yang berkaitan. Banyak dari
penggunanya masih menggunakan protokol ini dan ingin mengintegrasikannya dengan dukungan
dari TCP/IP.
Linux tidak hanya mendukung protokol TCP/IP, tapi juga seperangkat protokol yang digunakan
oleh sistem operasi Novel NetWare. Protokol ini masih merupakan saudara sepupu dari TCP/IP,
dan sementara mereka menjalankan fungsi yang relatif sama, tapi dari segi cara yang digunakan,
berbeda dan tidak kompatibel. Linux tidak hanya menyediakan perangkat lunak gratis tapi juga
yang komersial untuk menyediakan dukungan pelayanan untuk diintegrasikan dengan produk
Novell. Kita akan memberikan deskripsi ringkas mengenai protokol yang digunakan.
Pertama-lama, mari kita lihat darimana protokol tersebut berasal dan seperti apakah bentuknya ?
Pada akhir tahun 1970, perusahaan Xerox mengembangkan dan menerbitkan sebuah standar
terbuka yang disebut Xerox Network Specification (XNS). Standar tersebut menjelaskan
mengenai seperangkat protokol yang didesain untuk internetworking secara umum, dengan
kegunaan utama pada jaringan lokal. Ada dua protokol jaringan yang terlibat: Internet Datagram
Protocol, yang menyediakan pengiriman datagram yang tidak terjamin dan tanpa koneksi dari
satu host ke host lain dan Sequenced Packet Protokol (SPP), yang merupakan modifikasi dari
IDP yang berbasiskan koneksi dan lebih terjamin. Datagram pada jaringan XNS diberikan alamat
secara individual. Skema pengalamatan menggunakan kombinasi dari 4 byte alamat jaringan IDP
dan 6 byte alamat node (alamat dari kartu jaringan). Router adalah alat yang mengatur
perpindahan datagram antar dua atau lebih jaringan IDP. IDP tidak memiliki sub jaringan;
Kumpulan dari host yang baru membutuhkan alamat jaringan yang lain untuk dipergunakan.
Alamat jaringan dipilih sedemikian rupa sehingga alamat tersebut unik dalam internetwork.
Terkadang administrator mengembangkan konvensi dengan aturan tiap byte men-encode
beberapa informasi lain, seperti lokasi geografik, sehingga alamat jaringan dialokasikan secara
sistematik; walaupun begitu, hal ini bukanlah merupakan suatu syarat mutlak dari protokol
jaringan.
Perusahaan Novell memilih untuk mendasarkan paket jaringam mereka pada paket XNS. Novell
menciptakan sedikit perubahan ke IDP dan SPP, dan menamakannya Paket Pertukaran di
Internet atau Internet Packet Xchange (IPX) dan pertukaran Paket yang Berurut atau Sequenced
Packet Xchange (SPX). Novell menambahkan beberapa protokol baru, seperti NetWare Core
Protocol (NCP), yang menyediakan kemampuan untuk berbagi sumber daya berkas dan printer
yang dapat berjalan melalui IPX, dan Service Advertisement Protocol (SAP). Dimana SAP
memungkinkan host dalam jaringan Novell untuk mengetahui persis host yang menyediakan
masing-masing service.
Berikut ini disajikan data relasi antara XNS, Novell, dan perangkat TCP/IP dalam hal fungsi.
Relasi ini hanya perkiraan saja, tapi sedikit banyak akan membantu anda untuk memahami apa
yang sebenarnya terjadi ketika kita merujuk ke protokol tersebut.
===================================================================
XNS Novell TCP/IP Kemampuan
===================================================================
IDP -IPX-- UDP/IP Sedikit koneksi, pengiriman tidak terjamin
SPP -SPX-- -TCP-- Banyak menggunakan koneksi, pengiriman terjamin
--- -NCP-- -NFS-- Pelayanan berkas
--- -RIP-- -RIP-- Pertukaran informasi routing
--- -SAP-- ------ Pelayanan pengadaan pertukaran informasi
===================================================================
IPX dan Linux
Dukungan untuk IPX pertama kali dikembangkan oleh Alan Cox pada tahun 1985. Secara
mendasar, IPX berguna sedikit lebih dari sekedar me-routing datagram IPX. Sejak saat itu,
pengembang lain, terutama Greg Page, telah menambahkan beberapa dukungan tambahan.
Greg mengembangkan utilitas kofigurasi IPX yang akan digunakan untuk mengkonfigurasi antar
muka kita. Volker Lendecke mengembangkan dukungan untuk sistem berkas NCP sehingga
Linux bisa melakukan mount pada server sistem berkas NetWare yang terhubung dalam
jaringan. Beliau juga menciptakan perangkat lunak yang bisa melakukan pencetakan dari dan ke
Linux. Sedangkan Ales Dryak dan Stover masing-masing mengembangkan juga pelayanan
sistem berkas NCP untuk Linux yang memungkinkan client NetWare yang terkoneksi dalam
jaringan untuk mount direktori Linux yang diekspor sebagai NCP, seperti halnya NFS serviceyang
memungkinkan Linux untuk melayani sistem berkas pada client yang menggunakan protokol
NFS.
Distribusi Linux komersial yang paling memberikan dukungan adalah Caldera, dimana Caldera
dibiayai oleh Ray Noorda, mantan presiden komisaris Novell. Caldera memberikan dukungan
secara komersial dan berlisensi penuh terhadap client dan server NetWare yang mendukung
standardisasi Novell yang terbaru, termasuk dukungan terhadap NetWare Directory Service
(NDS). Caldera menyediakan dukungan ini sebagai komponen dari distribusi mereka sendiri yang
disebut Caldera OpenLinux. Karenanya, Linux mendukung service yang luas terhadap sistem
untuk berintegrasi dengan jaringan Novell.
Netware Directory Service
Bersamaan dengan NetWare versi empat, Novell juga memperkenalkan sebuah kemampuan
yang disebut NetWare Directory Service (NDS). Spesifikasi dari NDS tidak tersedia tanpa
perjanjian, sebuah aturan yang mengekang pengembangan pengembangan dukungan
pelayanan gratis. Hanya versi 2.2.0 dan selanjutnya dari paket ncpfs yang memiliki dukungan
terhadap NDS. Dukungan ini dikembangkan dengan teknik terbalik dari protokol NDS. Dukungan
ini sepertinya berjalan dengan baik, tapi sebenarnya masih dalam tahap eksperimen. Anda dapat
menggunakan perangkat lunak bukan DNS dengan server NetWare 4, dengan adanya mode
emulasi biner.
Perangkat lunak Caldera memiliki dukungan yang penuh terhadap NDS karena penerapannya
mendapatkan lisensi yang penuh dari Novell. Walaupun begitu penerapannya tidak gratis. Jadi
anda tidak memiliki akses yang penuh ke kode sumbernya dan tidak akan dapat memperbanyak
dan mendistribusikan perangkat lunak tersebut.
Keamanan
Pendahuluan
Mengapa Kita Perlu Pengamanan?
Banyak pertanyaan yang mungkin timbul di pikiran kita. Mengapa kita membutuhkan kemanan,
atau seberapa aman, atau apa yang hendak kita lindungi, seberapa pentingkah data kita
sehingga perlu memusingkan diri dengan masalah keamanan. Pertama akan dijelaskan
mengapa kita membutuhkan keamanan. Dalam dunia global dengan komunikasi data yang selalu
berkembang dengan pesat dari waktu ke waktu, koneksi internet yang semakin murah, masalah
keamanan seringkali luput dari perhatian pemakai komputer dan mulai menjadi isu yang sangat
serius. Kemananan data saat ini telah menjadi kebutuhan dasar karena perkomputeran secara
global telah menjadi tidak aman. Sementara data anda berpindah dari satu titik ke titik lainnya di
Internet, mungkin data tersebut melewati titik - titik lain dalam perjalanannya, yang memberikan
kesempatan kepada orang lain untuk mengganggunya. Bahkan mungkin beberapa pengguna
dari sistem anda, mengubah data yang dimiliki menjadi sesuatu yang tidak anda inginkan. Akses
yang tidak terotorisasi ke dalam sistem anda mungkin bisa diperoleh oleh penyusup, yang
disebut 'cracker', yang kemudian menggunakan kemampuannya untuk mencuri data, atau pun
melakukan hal - hal lain yang merupakan mimpi buruk bagi anda.
Seberapa Aman?
Sekarang kita akan mempelajari lebih jauh mengenai seberapa tinggi tingkat kemanan yang kita
miliki, atau pun kita perlukan. Satu hal yang perlu diingat adalah tidak ada satu sistem komputer
pun yang memiliki sistem keamanan yang sempurna. Hal yang dapat anda lakukan hanya
mencoba meminimalisir celah keamanan yang ada. Untuk pengguna Linux rumahan yang hanya
menggunakannya untuk keperluan pribadi saja di rumah, mungkin tidak perlu memikirkan terlalu
banyak tindakan pencegahan. Tetapi untuk pengguna Linux yang termasuk dalam skala besar,
seperti bank dan perusahaan telekomunikasi, banyak usaha ekstra keras yang harus dilakukan.
Hal lain yang perlu diingat adalah semakin aman sistem yang anda miliki, maka sistem komputer
akan menjadi semakin merepotkan. Anda harus menyeimbangkan antara kenyamanan
pemakaian sistem dan proteksi demi alasan keamanan. Sebagai contoh, anda bisa saja
memaksa orang lain yang ingin masuk ke dalam sistem anda untuk menggunakan call-back
modem untuk melakukan panggilan balik melalui nomor telepon rumah mereka. Cara ini
kelihatannya memang lebih aman, tapi jika tidak ada seorang pun di rumah, akan menyulitkan
mereka untuk login. Anda juga dapat mengatur konfigurasi sistem Linux anda tanpa jaringan atau
koneksi ke Internet, tapi pembatasan ini akan membatasi kegunaan jaringan itu sendiri.
Jika anda memiliki situs dengan ukuran menengah sampai besar, anda harus membangun
seperangkat kebijakan dalam hal keamanan yang menyatakan tingkat keamanan yang
diperlukan. Anda dapat menemukan berbagai informasi mengenai contoh kebijakan dalam hal
keamanan yang umum digunakan di http://www.faqs.org/rfcs/rfc2196.html. Informasi ini sering
diperbarui, dan berisi lingkup kerja yang bagus untuk mengembangkan kebijakan keamanan
untuk perusahaan anda.
Apa yang Anda Coba Lindungi?
Sebelum anda berusaha melakukan pengamanan terhadap sistem yang anda miliki, anda harus
menentukan terlebih dahulu beberapa hal. Hal - hal yang perlu dipikirkan, yaitu tingkat ancaman
yang harus anda antisipasi, resiko yang harus diambil, dan seberapa kebal sistem anda sebagai
hasil usaha yang telah anda lakukan. Anda harus menganalisa sistem anda untuk mengetahui
apa yang anda lindungi, kenapa anda melindunginya, seberapa besar nilai data yang anda
lindungi, dan siapa yang bertanggung jawab terhadap data dan aset lain dalam sistem anda.
Resiko adalah kemungkinan dimana seorang penyusup mungkin bisa berhasil dalam usahanya
untuk mengakses komputer anda. Dapatkah seorang penyusup membaca atau menulis berkas,
atau pun mengeksekusi program yang dapat menyebabkan kerusakan? Dapatkah mereka
menghapus data yang penting? Sebagai tambahan, memiliki account yang tidak aman dalam
sistem anda dapat berakibat kecurian pada jaringan anda. Anda harus memutuskan siapa yang
anda percaya untuk mengakses sistem dan siapa yang dapat menimbulkan ancaman bagi sistem
anda.
Ada beberapa tipe penyusup yang karakteristiknya berbeda satu dengan lainnya, diantaranya:
1. The Curious Penyusup tipe ini pada dasarnya tertarik mencari tahu tipe sistem dan data
yang anda miliki.
2. The Malicious Penyusup tipe ini, mengganggu sistem sehingga tidak dapat bekerja
dengan optimal, merusak halaman situs web anda, atau pun memaksa anda untuk
menghabiskan banyak uang dan waktu untuk memperbaiki kerusakan yang dibuatnya.
3. The High-Profile Intruder Penyusup tipe ini mencoba menyusup ke dalam sistem anda
untuk mendapatkan ketenaran dan pengakuan. Kemungkinan dia akan menggunakan
sistem anda yang canggih sebagai sarana untuk membuatnya terkenal karena telah
berhasil menyusup sistem kemanan komputer anda.
4. The Competition Penyusup tipe ini tertarik pada data yang dimiliki oleh sistem anda.
Penyusup ini mungkin adalah seseorang yang berpikir ada sesuatu yang berharga yang
dapat memberikan keuntungan baginya.
5. The Borrowers Penyusup tipe ini akan menggunakan sumber daya yang kita miliki untuk
kepentingan mereka sendiri. Biasanya penyusup ini akan menjalankannya sebagai
server chatting (irc), situs porno, atau bahkan server DNS.
6. The Leapfrogger Penyusup tipe ini hanya tertarik menggunakan sistem yang anda miliki
untuk masuk ke dalam sistem lain. Jika sistem anda terhubung atau merupakan sebuah
gateway ke sejumlah host internal, anda akan menyaksikan penyusup tipe ini sedang
berusaha untuk berkompromi dengan sistem yang anda miliki.
Mengembangkan Suatu Kebijaksanaan Keamanan
Ciptakanlah kebijakan yang sederhana dan umum digunakan, dimana tiap pengguna dalam
sistem anda dapat mengerti dan mengikutinya. Kebijakan tersebut harus dapat melindungi data
anda sendiri sebagaimana melindungi kerahasiaan dari tiap pengguna. Beberapa hal yang perlu
dipertimbangkan adalah: siapa sajakah yang memiliki akses ke sistem anda, siapa sajakah yang
diizinkan untuk menginstall program ke dalam sistem, siapa memiliki data apa, perbaikan
terhadap kerusakan yang mungkin terjadi, dan penggunaan yang wajar dari sistem.
Sebuah kebijakan mengenai keamanan yang dapat diterima secara umum dimulai dengan
pernyataan "Mereka yang tidak diizinkan, dilarang masuk". Artinya, kecuali anda memberikan izin
akses kepada service atas seorang pengguna, maka pengguna tersebut haruslah tidak bisa
melakukan apa - apa sampai anda memberikan izin akses kepadanya. Yakinkan bahwa
kebijakan yang anda buat, dapat berjalan dengan baik pada account pengguna biasa. Dengan
mengatakan "Ah, saya tidak habis pikir mengenai masalah perizinannya" atau "Saya malas",
biasanya seseorang akan melakukan segala sesuatunya sebagai root. Hal ini dapat
menyebabkan terciptanya lubang keamanan yang belum ada sebelumnya. rfc1244 adalah
dokumentasi yang menjelaskan cara untuk membuat kebijakan keamanan jaringan sendiri.
Sedangkan dokumentasi yang menjelaskan mengenai contoh kebijakan keamanan dengan
deskripsi yang lengkap untuk tiap tahapnya dapat anda lihat di rfc1281.
Mengamankan Situs Anda
Dokumen ini mendiskusikan berbagai macam cara untuk mengamankan aset anda. Sebagai
contoh mesin lokal anda, data anda, pengguna anda, jaringan anda, dan bahkan reputasi anda
sendiri. Apa yang akan terjadi pada reputasi anda, jika seorang penyusup berhasil menghapus
sebagian pengguna data anda? Atau merusak situs web anda? Atau bahkan menerbitkan
rencana proyek perusahaan anda untuk beberapa tahun kedepan? Jika anda berencana untuk
membangun sebuah instalasi jaringan, ada banyak faktor yang harus anda perhitungkan sebelum
menambahkan satu demi satu mesin ke dalam jaringan anda.
Bahkan dengan account panggilan PPP tunggal anda, atau bahkan sebuah situs kecil, bukan
berarti si penyusup tidak tertarik pada sistem yang anda miliki. Situs - situs raksasa bukanlah
satu - satunya target sasaran, karena banyak penyusup yang ingin mengeksploitasi sebanyak
mungkin situs yang ada, seberapa pun juga ukurannya. Sebagai tambahan mereka mungkin
menggunakan lubang keamanan dalam situs anda untuk memperoleh akses ke situs lain yang
mereka tuju. Penyusup tidak perlu melakukan tebak - tebakan mengenai cara anda
mengamankan sistem karena mereka memiliki banyak waktu. Kemungkinan besar cara yang
mereka gunakan adalah mencoba semua kemungkinan yang ada (brute force).
Keamanan Fisik
Lapisan kemanan pertama yang harus anda perhitungkan adalah keamanan secara fisik dalam
sistem komputer anda. Siapa saja yang memiliki akses secara langsung ke sistem? Apakah
mereka memang berhak? Dapatkah anda melindungi sistem anda dari maksud dan tujuan
mereka? Apakah hal tersebut perlu anda lakukan?
Berapa banyak keamanan fisik yang berada dalam sistem anda memiliki ketergantungan
terhadap situasi yang anda hadapi, dan tentu saja anggaran. Apabila anda adalah pengguna
rumahan, maka kemungkinan anda tidak membutuhkan banyak. Tapi jika anda berada di
laboratorium, atau pun jaringan komputer tempat anda bekerja, banyak yang harus anda pikirkan.
Secara nyata dan jelas, metode keamanan secara fisik yang bisa dilakukan antara lain dengan
mngunci pintu, kabel, laci, tapi semuanya itu diluar pembahasan dalam bagian ini.
Kunci Komputer
Banyak komputer pribadi saat ini yang memiliki kemampuan mengunci. Biasanya kunci ini berupa
soket pada bagian depan casing yang bisa dimasukkan kunci untuk mengunci mau pun
membukanya, Kunci casing dapat membantu mencegah seseorang untuk mencuri dari komputer,
atau membukanya secara langsung untuk memanipulasi atau pun mencuri perangkat keras yang
anda miliki. Kunci ini juga berguna untuk mencegah orang tertentu untuk mereboot komputer
anda dari disket mau pun perangkat keras lainnya.
Kunci casing ini melakukan hal-hal yang berbeda menurut fasilitas yang ditawarkan oleh
motherboard dan bagaimana struktur casing itu sendiri. Pada banyak komputer pribadi,
perusahaan pembuat menciptakan casing tersebut sedemikian rupa sehingga anda harus
menghancurkannya untuk membukanya. Sedangkan pada tipe casing yang lain, keyboard mau
pun mouse baru tidak dapat dipasangkan ke dalamnya. Periksalah mainboard anda, mau pun
instruksinya untuk informasi lebih lanjut. Kadang - kadang hal ini bisa menjadi sangat berguna,
walau pun kunci yang digunakan seringkali berkualitas rendah dan dapat dengan mudah
dikalahkan oleh si penyerang dengan metode pembukaan kunci yang dimilikinya.
Beberapa mesin terutama SPARC dan Mac punya pengaman di bagian belakangnya, sehingga
jika ada yang memasukkan kabel ke dalamnya, si penyerang harus memotong kabelnya atau
merusak casing untuk masuk ke dalamnya. Dengan meletakkan padlock atau combo lock akan
menjadi pengamanan yang cukup baik untuk mencegah orang lain mencuri mesin anda.
Keamanan BIOS
BIOS adalah tingkatan terendah dari perangkat lunak yang mengkonfigurasi atau memanipulasi
perangkat keras anda. BIOS adalah singkatan dari Basic Input Output System. LILO dan
berbagai metode boot Linux lainnya mengakses BIOS untuk menentukan cara untuk memboot
mesin Linux anda. Perangkat keras lain yang dijalankan dengan Linux memiliki perangkat lunak
yang mirip (Open Firmware di Mac dan new Suns, Sun boot PROM, dll). Anda dapat
menggunakan BIOS untuk mencegah penyerang untuk mem-boot komputer dan memanipulasi
sistem Linux anda.
Banyak BIOS komputer yang bisa diset kata kuncinya. Walau pun begitu, keamanan belum
terjamin karena seseorang bisa saja menset ulang BIOS atau pun membuangnya jika ada orang
yang mampu memasuki casing-nya. Mirip dengan itu, EEPROM S/Linux dapat diset untuk
memenuhi sebuah kata kunci boot. Hal ini mungkin dapat memperlambat gerak si penyerang.
Resiko lainnya dari mempercayai kata kunci BIOS untuk mengamankan sistem anda adalah
masalah kata kunci yang digunakan. Kebanyakan pembuat BIOS tidak berharap pembeli untuk
membuka komputernya dan mencabut baterai untuk menghilangkan kata kuncinya apabila
mereka lupa. Pembuat BIOS ini seringkali melengkapi BIOS mereka dengan kata kunci standar
dari pembuatnya.
Banyak BIOS dari komputer dengan sistem x86 memberikan kemudahan untuk mengatur
berbagai macam seting keamanan. Periksalah manual BIOS anda atau lihatlah pada saat anda
akan melakukan boot up lagi. Sebagai contoh, beberapa BIOS tidak mengizinkan anda untuk
mem- boot dari disket dan menuntut kata kunci untuk mengakses fasilitas tertentu dari BIOS.
Sebagai catatan, jika anda memiliki mesin server, dan anda mengeset sebuah kata kunci boot,
mesin anda tidak akan melakukan boot tanpa sepengetahuan dari anda sendiri. Ingatlah bahwa
anda harus masuk ke ruangan server dan menyediakan kata kunci setiap kali terjadi penurunan
daya listrik.
Keamanan Boot Loader
Berbagai macam boot loader Linux juga memiliki seperangkat kata kunci boot. Sebagai contoh,
LILO memiliki kata kunci dan beberapa seting tertutup. LILO akan meminta masukan berupa kata
kunci dari pengguna, sementara seting tertutup meminta kata kunci boot-time jika anda
menambahkan option (misalnya single) di prompt LILO.
Ingatlah selalu kata kunci yang anda masukkan pada saat seting. Juga jangan lupa bahwa kata
kunci tersebut akan memperlambat gerakan beberapa hacker. Jika anda menerapkan keamanan
dalam boot-loader, aturlah BIOS anda sehingga komputer tidak bisa diboot dari disket, dan
berikan kata kunci pada BIOS anda.
Jangan lupa juga untuk menset atribut berkas /etc/lilo.conf menjadi 600 (rw- --- ---), yang artinya
berkas tersebut hanya bisa dibaca dan ditulis oleh root. Jika tidak, orang lain akan dapat
mengetahui kata kunci anda. Jika anda memiliki sebuah server, dan memberikan kata kunci boot,
maka mesin anda tidak akan dapat mem-boot tanpa seizin anda. Ingatlah bahwa anda harus
datang dan memasukkan kata kunci setiap kali terjadi masalah dengan daya listrik pada ruangan
di mana server berada.
Keamanan Lokal
Hal berikutnya yang akan kita perhatikan lebih lanjut adalah keamanan sistem terhadap serangan
dari pengguna lokal. Mendapatkan akses ke account pengguna lokal adalah hal pertama yang
dilakukan oleh penyusup sistem untuk memperoleh account root. Dengan sistem keamanan yang
lemah, seorang pengguna biasa dapat menjadi root dengan menggunakan berbagai macam bug
yang ada dan service dari localhost yang rentan. Jika anda yakin, bahwa sistem keamanan anda
cukup baik, maka si penyusup akan mencari jalan lain untuk menyusup ke sistem anda.
Membuat Account Baru
Anda harus yakin bahwa anda menyediakan account pengguna dengan keleluasaan minimal
sesuai dengan tugas yang akan mereka kerjakan. Jika anda menyediakan account kepada
seorang anak berumur 10 tahun, anda mungkin hanya akan memberikan akses ke program
pengolah kata dan program menggambar kepadanya, sehingga dia tidak bisa menghapus berkas
yang bukan miliknya sendiri.
Beberapa tips yang mungkin bisa membantu membatasi akses:
•Berikan kepada mereka akses yang minimum sesuai dengan kebutuhannya
•Berhati-hatilah, perhatikan kapan dan dimana mereka login
•Pastikan bahwa anda telah menghapus account yang sudah tidak digunakan lagi, yang
dapat anda tentukan dengan perintah 'last' atau pun dengan memeriksa berkas log
aktivitas dari tiap pengguna.
•Penggunaan userid yang sama untuk semua komputer dan jaringan sangat dianjurkan
untuk mempermudah pemeliharaan account, dan memudahkan analisa berkas log.
•Pembuatan userid dengan group harus dihindari. Account pengguna lebih mudah untuk
diawasi dan diperhitungkan, berbeda halnya dengan account group.
Keamanan Root
Account root memiliki akses penuh terhadap keseluruhan sistem. Ingat jangan menggunakan
account root dengan sembarangan. Gunakan account root hanya untuk mengerjakan suatu
pekerjaan khusus saja dan lakukan dalam jangka waktu yang tidak terlalu lama. Biasakan untuk
menggunakan account pengguna biasa untuk menjalankan aplikasi sehari - hari. Bahkan
kesalahan terkecil yang dilakukan pada saat login sebagai root dapat menyebabkan kekacauan
yang fatal.
Beberapa trik untuk menghindari kekacauan ketika login sebagai root:
•Ketika mengetikkan beberapa perintah yang kompleks, cobalah untuk menjalankannya
pertama kali dengan cara yang aman, khususnya perintah yang menggunakan globbing.
Anda dapat juga menggunakan echo di depan perintah yang anda ketikkan, sehingga
anda yakin bahwa anda benar - benar ingin menjalankannya.
•Menyediakan pengguna dalam sistem anda dengan alias standar (alias rm='rm -i' ke
perintah rm untuk memberikan konfirmasi mengenai penghapusan berkas.
•Jadilah root hanya untuk melakukan pekerjaan tertentu saja. Jika anda ingin mencoba
sesuatu, cobalah dengan login pengguna biasa sampai anda yakin apa yang akan anda
lakukan dengan login root.
•Variabel path untuk root sangat penting. Cobalah batasi isi variabel path perintah untuk
root dan jangan memasukkan "." (direktori saat ini) ke dalam variabel path. Jangan
pernah memberikan izin akses tulis ke dalam direktory yang ada di variabel path, supaya
pengguna lain tidak bisa memasukkan berkas binary lain yang bisa membuatnya menjadi
root setelah anda mengeksekusi berkas binary tersebut.
•Jangan menggunakan perangkat lunak tools rlogin/rsh/rexec sebagai root. Karena
perangkat lunak tersebut mudah diserang oleh penyusup. Jangan pula membuat sebuah
berkas .rhost untuk root.
•Dalam berkas /etc/securetty terdapat daftar terminal di mana root dapat login. Berhati -
hatilah apabila anda ingin memodifikasinya. Sedapat mungkin login-lah sebagai
pengguna biasa, dan gunakan perintah su untuk mendapatkan akses lebih.
•Terakhir cobalah untuk bersikap tenang dan berpikir jernih ketika login sebagai root. Apa
pun yang anda lakukan sebagai root akan sangat mempengaruhi banyak hal. Karena itu
berpikirlah sebelum anda melakukan hal bodoh yang dapat merusak seluruh sistem.
Perangkat Lunak Bebas
Serba-Serbi PLB
Perangkat lunak bebas merupakan suatu bentuk pengembangan perangkat lunak yang
dikembangkan melalui proyek GNU (GNU's Not Unix, GNU Bukan Unix). Proyek ini mulai dirintis
pada tahun 1980-an dipicu dengan mulainya masa perangkat lunak berpemilik (perangkat lunak
berlisensi). Pihak-pihak pengembang perangkat lunak berpemilik Menekankan bahwa
penggunaan perangkat lunak tanpa lisensi merupakan suatu bentuk pelanggaran Hak atas
Kekayaan Intelektual (HKI) dan merupakan suatu tindakan kriminal. Konsep yang ditekankan
oleh pihak pengembang diatas tidak diterima oleh semua orang, terdapat orang-orang seperti
Richard Stallman (perintis proyek GNU) yang memiliki pendapat bahwa perangkat lunak
merupakan milik masyarakat sehingga diperbolehkan untuk dimodifikasi dan disebarluaskan
secara bebas. Pengembangan perangkat lunak bebas memiliki tujuan agar setiap orang dapat
mendapatkan manfaat dari perangkat lunak secara bebas sehingga setiap orang dapat
menjalankan, menggandakan, menyebarluaskan, mempelajari, mengubah dan meningkatkan
kinerja perangkat lunak.
Kata bebas pada perangkat lunak bebas sering diartikan sebagai gratis (free), arti sesungguhnya
bebas pada perangkat lunak bebas lebih merupakan kebebasan untuk mempergunakan
perangkat lunak, melakukan penyalinan, dan perubahan pada kode sumber. Arti bebas yang
salah, telah menimbulkan persepsi masyarakat bahwa perangkat lunak bebas merupakan
perangkat lunak yang gratis.
Perangkat lunak bebas ialah perihal kebebasan, bukan harga. Konsep kebebasan yang dapat
diambil dari kata bebas pada perangkat lunak bebas adalah seperti kebebasan berbicara bukan
seperti bir gratis. Maksud dari bebas seperti kebebasan berbicara adalah kebebasan untuk
menggunakan, menyalin, menyebarluaskan, mempelajari, mengubah, dan meningkatkan kinerja
perangkat lunak.
Suatu perangkat lunak dapat dimasukkan dalam kategori perangkat lunak bebas bila setiap
orang memiliki kebebasan tersebut. Hal ini berarti, setiap pengguna perangkat lunak bebas dapat
meminjamkan perangkat lunak yang dimilikinya kepada orang lain untuk dipergunakan tanpa
perlu melanggar hukum dan disebut pembajak.
Kebebasan yang diberikan perangkat lunak bebas dijamin oleh copyleft, suatu cara yang dijamin
oleh hukum untuk melindungi kebebasan para pengguna perangkat lunak bebas. Dengan adanya
copyleft maka suatu perangkat lunak bebas beserta hasil perubahan dari kode sumbernya akan
selalu menjadi perangkat lunak bebas. Kebebasan yang diberikan melalui perlindungan copyleft
inilah yang membuat suatu program dapat menjadi perangkat lunak bebas.
Keuntungan yang diperoleh dari penggunaan perangkat lunak bebas adalah karena serbaguna
dan efektif dalam keanekaragaman jenis aplikasi. Dengan pemberian source code-nya,
perangkat lunak bebas dapat disesuaikan secara khusus untuk kebutuhan pemakai. Sesuatu
yang tidak mudah untuk terselesaikan dengan perangkat lunak berpemilik Selain itu, perangkat
lunak bebas didukung oleh milis-milis pengguna yang dapat menjawab pertanyaan yang timbul
karena permasalahan pada penggunaan perangkat lunak bebas.
Pembagian Perangkat Lunak
Perangkat Lunak Bebas
Perangkat lunak bebas ialah perangkat lunak yang mengizinkan siapa pun untuk menggunakan,
menyalin, dan mendistribusikan, baik dimodifikasi atau pun tidak, secara gratis atau pun dengan
biaya. Perlu ditekankan, bahwa source code dari program harus tersedia. ``Jika tidak ada kode
program, berarti bukan perangkat lunak bebas.'' Yang tersebut di atas merupakan definisi
sederhananya; lihat juga definisi lengkapnya.
Terdapat berbagai cara untuk membuat suatu program bebas--- banyak pertanyaan rinci, yang
dapat ditentukan dalam banyak cara dan masih menjadikan program tersebut bebas. Beberapa
kemungkinan variasi akan dijelaskan di bawah ini.
Perangkat lunak bebas menyangkut masalah kebebasan, bukan harga. Tapi beberapa
perusahaan perangkat lunak berpemilik terkadang menggunakan istilah perangkat lunak bebas
untuk menunjukkan harga. Terkadang maksud mereka ialah anda dapat memperoleh salinan
biner tanpa biaya; terkadang maksud mereka ialah suatu salinan disertakan dalam komputer
yang anda beli. Ini tidak ada hubungannya sama sekali dengan apa yang di maksud dengan
perangkat lunak bebas pada proyek GNU.
Karena hal ini dapat membingungkan, ketika sebuah perusahaan perangkat lunak menyatakan
bahwa produknya adalah perangkat lunak bebas, selalu periksa ketentuan distribusinya untuk
melihat apakah pengguna memiliki kebebasan yang dimaksudkan oleh istilah perangkat lunak
bebas. Terkadang memang benar-benar perangkat lunak bebas; namun terkadang tidak.
Banyak bahasa memiliki dua kata yang berbeda untuk menyatakan ``bebas'' sebagai kebebasan
dan ``bebas'' sebagai tanpa biaya. Sebagai contoh, bahasa Perancis memiliki kata ``libre'' dan
``gratuit''. Dalam bahasa Inggris terdapat kata ``gratis'' yang menyatakan tentang harga tanpa
membingungkan. Tapi tidak ada kata sifat yang menyatakan kebebasan tanpa membingungkan.
Hal ini sangat disayangkan, karena kata semacam itu akan sangat berguna disini.
Perangkat lunak bebas seringkali lebih handal daripada perangkat lunak tidak bebas.
Perangkat Lunak Open Source
Istilah perangkat lunak ``open source'' digunakan oleh beberapa pihak yang artinya kurang lebih
sama dengan perangkat lunak bebas. Kami memilih untuk menggunakan istilah ``perangkat
lunak bebas''.
Perangkat Lunak Public Domain
Perangkat lunak public domain ialah perangkat lunak yang tanpa hak cipta. Ini merupakan kasus
khusus dari perangkat lunak bebas non-copylefted, yang berarti bahwa beberapa salinan atau
versi yang telah dimodifikasi bisa jadi tidak bebas sama sekali.
Terkadang ada yang menggunakan istilah ``public domain'' secara bebas yang berarti ``cumacuma''
atau ``tersedia gratis". Namun ``public domain'' merupakan istilah hukum yang artinya
``tidak memiliki hak cipta''. Untuk jelasnya, kami menganjurkan untuk menggunakan istilah
``public domain'' dalam arti tersebut, serta menggunakan istilah lain untuk mengartikan
pengertian yang lain.
Perangkat Lunak Copylefted
Perangkat lunak copylefted merupakan perangkat lunak bebas yang ketentuan pendistribusinya
tidak memperbolehkan untuk menambah batasan-batasan tambahan--jika mendistribusikan atau
memodifikasi perangkat lunak tersebut. Artinya, setiap salinan dari perangkat lunak, walau pun
telah dimodifikasi, haruslah merupakan perangkat lunak bebas.
Dalam proyek GNU, kami meng-copyleft -kan hampir semua perangkat lunak yang kami buat,
karena tujuan kami adalah untuk memberikan kebebasan kepada semua pengguna seperti yang
tersirat dalam istilah ``perangkat lunak bebas''.
Copyleft merupakan konsep yang umum. Jadi, untuk meng-copyleft-kan sebuah program, anda
harus menggunakan ketentuan distribusi tertentu. Terdapat berbagai cara untuk menulis
perjanjian distribusi program copyleft.
Perangkat Lunak Bebas Non-copylefted
Perangkat lunak bebas non-copylefted dibuat oleh pembuatnya yang mengizinkan seseorang
untuk mendistribusikan dan memodifikasi, dan untuk menambahkan batasan-batasan tambahan
dalamnya. Jika suatu program bebas tapi tidak copylefted, maka beberapa salinan atau versi
yang dimodifikasi bisa jadi tidak bebas sama sekali. Perusahaan perangkat lunak dapat
mengkompilasi programnya, dengan atau tanpa modifikasi, dan mendistribusikan file tereksekusi
sebagai produk perangkat lunak yang berpemilik.
Sistem X Window menggambarkan hal ini. Konsorsium X mengeluarkan X11 dengan ketentuan
distribusi yang menetapkannya sebagai perangkat lunak bebas non-copylefted. Jika anda
menginginkannya, anda dapat memperoleh salinan yang memiliki perjanjian distribusi dan juga
bebas. Namun ada juga versi tidak bebasnya, dan ada workstation terkemuka serta perangkat
grafik PC, dimana versi yang tidak bebas merupakan satu-satunya yang dapat bekerja disini. Jika
anda menggunakan perangkat keras tersebut, X11 bukanlah perangkat lunak bebas bagi anda.
Perangkat Lunak GPL-covered
GNU GPL (General Public License) (20k huruf) merupakan sebuah kumpulan ketentuan
pendistribusian tertentu untuk meng-copyleft-kan sebuah program. Proyek GNU
menggunakannya sebagai perjanjian distribusi untuk sebagian besar perangkat lunak GNU.
Sistem GNU
Sistem GNU merupakan sistem serupa Unix yang seutuhnya bebas. Sistem operasi serupa Unix
terdiri dari berbagai program. Sistem GNU mencakup seluruh perangkat lunak GNU, dan juga
paket program lain, seperti sistem X Windows dam TeX yang bukan perangkat lunak GNU.
Kami telah mengembangkan dan mengumpulkan komponen untuk sistem GNU ini sejak tahun
1984. Pengedaran awal (percobaan) dari ``sistem GNU lengkap'' dilakukan tahun 1996.
Sekarang (2001), sistem GNU ini bekerja secara handal, serta orang-orang bekerja dan
mengembangkan GNOME, dan PPP dalam sistem GNU. Pada saat bersamaan sistem
GNU/Linux, merupakan sebuah terobosan dari sistem GNU yang menggunakan Linux sebagai
kernel dan mengalami sukses luar biasa.
Berhubung tujuan dari GNU ialah untuk kebebasan, maka setiap komponen dalam sistem GNU
harus merupakan perangkat lunak bebas. Namun tidak berarti semuanya harus copylefted; setiap
jenis perangkat lunak bebas dapat sah-sah saja jika menolong memenuhi tujuan teknis.
Seseorang dapat menggunakan perangkat lunak non-copylefted seperti sistem X Window.
Program GNU
``Program GNU'' setara dengan perangkat lunak GNU. Program Anu adalah program GNU jika ia
merupakan perangkat lunak GNU.
Perangkat Lunak GNU
Perangkat lunak GNU merupakan perangkat lunak yang dikeluarkan oleh proyek GNU. Sebagian
besar perangkat lunak GNU merupakan copylefted, tapi tidak semuanya; namun, semua
perangkat lunak GNU harus merupakan perangkat lunak bebas.
Jika suatu program adalah perangkat lunak GNU, seseorang juga dapat menyebutnya sebagai
program GNU.
Beberapa perangkat lunak GNU ditulis oleh staf dari Free Software Foundation (FSF, Yayasan
Perangkat Lunak Bebas), namun sebagian besar perangkat lunak GNU merupakan kontribusi
dari para sukarelawan. Beberapa perangkat lunak yang dikontribusikan merupakan hak cipta dari
Free Software Foundation; beberapa merupakan hak cipta dari kontributor yang menulisnya.
Perangkat Lunak Semi-Bebas
Perangkat lunak semi-bebas adalah perangkat lunak yang tidak bebas, tapi mengizinkan setiap
orang untuk menggunakan, menyalin, mendistribusikan, dan memodifikasinya (termasuk
distribusi dari versi yang telah dimodifikasi) untuk tujuan non-laba. PGP adalah salah satu contoh
dari program semi-bebas.
Perangkat lunak semi-bebas jauh lebih baik dari perangkat lunak berpemilik, namun masih ada
masalah, dan seseorang tidak dapat menggunakannya pada sistem operasi yang bebas.
Pembatasan dari copyleft dirancang untuk melindungi kebebasan bagi semua pengguna. Bagi
pihak GNU, satu-satunya alasan untuk membatasi substantif dalam menggunakan program--
ialah melarang orang lain untuk menambahkan batasan lain. Program semi-bebas memiliki
batasan-batasan tambahan, yang dimotivasi oleh tujuan pribadi semata.
Sangat mustahil untuk menyertakan perangkat lunak semi-bebas pada sistem operasi bebas. Hal
ini karena perjanjian distribusi untuk sistem operasi keseluruhan adalah gabungan dari perjanjian
distribusi untuk semua program di dalamnya. Menambahkan satu program semi-bebas pada
sistem akan membuat keseluruhan sistem menjadi semi-bebas. Terdapat dua alasan mengapa
GNU tidak menginginkan hal ini:
Sudah seharusnya kita percaya bahwa perangkat lunak bebas seharusnya ditujukan bagi
semuanya--termasuk pelaku bisnis, dan bukan hanya untuk sekolah dan sekedar hobi saja. GNU
ingin mengundang kalangan bisnis untuk menggunakan keseluruhan sistem GNU, dan untuk itu
kami tidak dapat menyertakan program semi-bebas di dalamnya.
Distribusi komersial dari sistem operasi bebas, termasuk Sistem GNU/Linux sangat penting, dan
para pengguna menghargai kemampuan untuk dapat membeli distribusi CD-ROM komersial.
Menyertakan satu program semi-bebas dalam sistem operasi dapat memotong distribusi CDROM
komersial untuknya.
Free Software Foundation sendiri adalah organisasi nirlaba, dan karena itu, kami diizinkan secara
hukum untuk menggunakan program semi-bebas secara ``internal''. Tapi GNU tidak
melakukannya, karena hal itu akan melemahkan upaya yang telah dilakukan untuk memperoleh
program yang dapat disertakan ke dalam GNU.
Jika ada pekerjaan yang berhubungan dengan perangkat lunak, maka sebelum kami memiliki
program bebas untuk melakukan pekerjaan itu, sistem GNU memiliki kesenjangan. Kami harus
memberitahukan kepada para sukarelawan, ``Kami belum memiliki program untuk melakukan
pekerjaan ini di GNU, jadi kami berharap Anda menulisnya sendiri.'' Jika program semi-bebas
digunakan untuk untuk melakukan pekerjaan itu, hal itu akan melemahkan apa yang telah
dijelaskan diatas; hal itu akan menghancurkan motivasi (bagi pengembang GNU, dan orang lain
yang memiliki pandangan yang sama) untuk menulis substitusi yang bebas.
Perangkat Lunak Berpemilik
Perangkat lunak berpemilik ialah perangkat lunak yang tidak bebas atau pun semi-bebas.
Seseorang dapat dilarang, atau harus meminta izin, atau akan dikenakan pembatasan lainnya
sehingga menyulitkan--jika menggunakan, mengedarkan, atau memodifikasinya.
Free Software Foundation mengikuti aturan bahwa seseorang tidak dapat memasang programprogram
berpemilik di komputernya kecuali untuk sementara waktu dengan maksud menulis
pengganti bebas untuk program tersebut. Disamping itu, pihak perangkat lunak bebas merasa
tidak; ada alasan untuk memasang sebuah program berpemilik.
Sebagai contoh, pengemban GNU merasa sah dalam memasang Unix di komputer yang
digunakan pada tahun 1980-an, sebab kami menggunakannya untuk menulis pengganti bebas
untuk Unix. Sekarang, karena sistem operasi bebas telah tersedia, alasan ini tidak lagi dapat
diterima; pihak GNU harus menghapus semua sistem operasi tidak bebas yang dimiliki, dan
setiap komputer yang dipasang harus berjalan pada sistem operasi yang benar-benar bebas.
GNU tidak memaksa para pengguna GNU atau para kontributor GNU untuk mengikuti aturan ini.
Ini adalah aturan yang dibuat untuk diri kami sendiri (GNU). Tapi kami berharap agar anda
memutuskan untuk mengikutinya juga.
Freeware
Istilah ``freeware'' tidak terdefinisi dengan jelas, tapi biasanya digunakan untuk paket-paket yang
mengizinkan redistribusi tetapi bukan pemodifikasian (dan kode programnya tidak tersedia).
Paket-paket ini bukan perangkat lunak bebas, jadi jangan menggunakan istilah ``freeware'' untuk
merujuk ke perangkat lunak bebas.
Shareware
Shareware ialah perangkat lunak yang mengizinkan orang-orang untuk meredistribusikan
salinannya, tetapi mereka yang terus menggunakannya diminta untuk membayar biaya lisensi.
Shareware bukan perangkat lunak bebas atau pun semi-bebas. Ada dua alasan untuk hal ini,
yakni:
Sebagian besar shareware, kode programnya tidak tersedia; jadi anda tidak dapat memodifikasi
program tersebut sama sekali.
Shareware tidak mengizinkan seseorang untuk membuat salinan dan memasangnya tanpa
membayar biaya lisensi, tidak juga untuk orang-orang yang terlibat dalam kegiatan nirlaba
(Dalam prakteknya, orang-orang sering tidak mempedulikan perjanjian distribusi dan tetap
melakukan hal tersebut, tapi sebenarnya perjanjian tidak mengizinkannya).
Perangkat Lunak Komersial
Perangkat lunak komersial adalah perangkat lunak yang dikembangkan oleh kalangan bisnis
untuk memperoleh keuntungan dari penggunaannya. ``Komersial'' dan ``kepemilikan'' adalah dua
hal yang berbeda! Kebanyakan perangkat lunak komersial adalah berpemilik, tapi ada perangkat
lunak bebas komersial, dan ada perangkat lunak tidak bebas dan tidak komersial.
Sebagai contoh, GNU Ada selalu didistribusikan di bawah perjanjian GNU GPL, dan setiap
salinannya adalah perangkat lunak bebas; tapi para pengembangnya menjual kontrak penunjang.
Ketika penjualnya bicara kepada calon pembeli, terkadang pembeli tersebut mengatakan, ``Kami
merasa lebih aman dengan kompilator komersial.'' Si penjual menjawab, ``GNU Ada ialah
kompilator komersial; hanya saja ia merupakan perangkat lunak bebas.''
Bagi proyek GNU, penekanannya ada pada hal yang sebaliknya: hal terpenting ialah GNU Ada
merupakan perangkat lunak bebas; terlepas komersial atau bukan, itu bukan hal yang penting.
Namun perkembangan tambahan GNU Ada yang dihasilkan dari komersialismenya adalah
menguntungkan.
Harap sebarkan ke khalayak, perangkat lunak bebas komersial merupakan sesuatu yang
mungkin. Sebaiknya, anda jangan mengatakan ``komersial'' ketika maksud anda ialah
``berpemilik''.
Latihan
Soal Latihan
1. Modul kernel yang dapat dipanggil terpisah memberikan fleksibilitas untuk
menambahkan driver ke dalam kernel. Berikan contoh langkah pemanggilan modul di
Linux!
2. Jelaskan perbedaan antara proses dan thread di Linux!
3. Jelaskan operasi-operasi dalam inode!
4. Apa keuntungan reiser file sistem dibandingkan dengan file sistem lain?
5. Apakah perbedaan shareable dan unshareable di dalam file sistem?
6. Mengapa file sistem ext3 membutuhkan waktu recovery yang lebih sedikit daripada file
sistem ext2 setelah terjadi "unclean shutdown"?
7. Jelaskan pengertian proc file sistem!
8. soal manajemen memori linux
9. Jelaskan pengertian page!
10. Apakah perbadaan linking statis dan linking dinamis?
11. Sebutkan 4 keuntungan menguunakan memori virtual!
12. Sebutkan beberapa cache dalam manajemen memori di linux!
13. Jelaskan pengertian dari demand paging!
14. Siapakah penemu Linux?
15. Jabarkan fitur dan keunggulan/kekurangan dari kernel Linux v0.01, v1.0, v2.0.
16. Jelaskan perbedaan antara kernel Linux dan sistem Linux.
17. Sebutkan tiga komponen utama sistem Linux. Jelaskan.
18. Sebutkan dua distribusi Linux dari Jerman.
19. Bagaimanakah cara menseting lilo.conf di Linux supaya:
a. Pada saat boot dan ingin memilih suatu OS user memasukkan password ?
b. Pada saat boot dan ingin menambahkan option di prompt lilo, user memasukkan
password ?
20. Apakah hacker dan craker sama ? Kalau beda / sama sebutkan dalam hal apa ?
21. a. Alamat IP berapa yang tidak bisa digunakan pada golongan C ?
b. Mengapa tidak bisa digunakan ?
22. Apakah kelebihan dan kekurangan protokol IPX, TCP/IP, dan UDP ?
23. Bagaimanakah cara kerja protokol TCP/IP ?
24. - Jelaskan perbedaan yang mendasar dari device blok dengan device karakter!
- Apakah yang membedakan device jaringan dengan device karakter dan device blok?
- Bagaimana cara Linux mengakses IO?
25. Komunikasi antar proses:
- Jelaskan cara proses menyikapi proses!
- Sebutkan sinyal-sinyal yang tidak dapat diabaikan!
- Jelaskan sedikit mengenai pipa dan perbedaan yang khusus dari cara komunikasi yang
lainnya
Point - Point Kernel Linux dan PLB
Sejarah Linux
Kernel Linux
Sistem Linux
Distribusi Linux
Lisensi Linux
Linux Saat Ini
Tux: Logo Linux
Design Principles
Prinsip Desain Linux
Komponen Sistem Linux
Modul Kernel Linux
Apakah Modul Kernel Linux itu?
Manajemen Modul Kernel Linux
Registrasi Driver
Resolusi Konflik
Manajemen Proses
Pendahuluan
Deskriptor Proses
Pembuatan Proses Dan Thread
Penjadwalan
Sinkronisasi Kernel
Penjadwalan Proses
Symmetric Multiprocessing
Manajemen Memori di Linux
Manajemen Memori Fisik
Memori Virtual
Load dan Eksekusi Program
File Sistem di Linux
Linux virtual file sistem
Jenis-jenis file sistem di linux
Pembagian file sistem secara ortogonal
IO Linux
Device karakter
Device blok
Device jaringan
Komunikasi Antar Proses
Sinyal
Pipa
Struktur Jaringan
Sejarah dan Latar Belakang Jaringan
Jaringan TCP/IP
Protokol Pengontrol Pesan di Internet (ICMP)
User Datagram Protokol
IPX dan Sistem Berkas NCP
Keamanan
Pendahuluan
Keamanan Fisik
Perangkat Lunak Bebas
Serba-Serbi PLB
Pembagian Perangkat Lunak
Kesimpulan Kernel Linux dan Perangkat
Lunak Bebas
Linux sangat mirip dengan sistem-sistem UNIX, hal ini dikarenakan kompatibilitas dengan UNIX
merupakan tujuan utama desain dari proyek Linux. Perkembangan Linux dimulai pada tahun
1991, ketika mahasiswa Finlandia bernama Linus Torvalds menulis Linux, sebuah kernel untuk
prosesor 80386, prosesor 32-bit pertama dalam kumpulan CPU intel yang cocok untuk PC.
Dalam banyak hal, kernel Linux merupakan inti dari proyek Linux, tetapi komponen lainlah yang
membentuk secara komplit sistem operasi Linux. Dimana kernel Linux terdiri dari kode-kode yang
dibuat khusus untuk proyek Linux, kebanyakan perangkat lunak pendukungnya tidak eksklusif
terhadap Linux, melainkan biasa dipakai dalam beberapa sistem operasi yang mirip UNIX.
Contohnya, sistem operasi BSD dari Berkeley, X Window System dari MIT, dan proyek GNU dari
Free Software Foundation.
Saat ini, Linux merupakan salah satu sistem operasi yang perkembangannya paling cepat.
Kehadiran sejumlah kelompok pengembang, tersebar di seluruh dunia, yang selalu memperbaiki
segala fiturnya, ikut membantu kemajuan sistem operasi Linux. Bersamaan dengan itu, banyak
pengembang yang sedang bekerja untuk memindahkan berbagai aplikasi ke Linux (dapat
berjalan di Linux).
Daftar Istilah
accounting
address space
administrator
attachment
binary -> biner
boot -> boot
box
broadcast
buffer cache
bug
byte
calls
child
client
compatible -> kompatibel
compile = compile
connection -> koneksi
context switch
core dump
crash
data page
datagram
default
default -> standar
dependencies
desainer -> perancang
device -> peralatan
device drivers
dimap -> dipetakan
download
driver
encoding
entity
entry
error
ethernet
ethernet
feature -> kemampuan
file -> berkas
file sistem -> sistem file
firewalling
flag
forwarder
gateway
generate
handler -> penangan
hardware -> perangkat keras
host
implementation -> implementasi
inode
input -> masukan
interface
interface -> antar muka
internetworking
interuptible
journaling
load
loading -> meload
login
loopback
mapping
mask
me-list
memori manajemen -> manajemen memori
message-passing
mode
network -> jaringan
networking -> jaringan
node -> node
offset
option
page table
paginates
parameter
password -> kata kunci
point to point -> point to point
pointer
port -> port
printer
prompt
real-time
redirection
remote
request
resolve
root
routine
run
run time
scheduler
server
service
setting -> seting
shared library
shell
signal
software -> perangkat lunak
source code
standard
statik -> statis
stream -> stream
super user
swap
system call
sytem calls
table -> tabel
text-processing
the call frame
the X window changed focus
thread
up to date
user -> pengguna
user mode = user mode
variable
virtual
virtual file system -> file sistem virtual
virtual memori -> memori virtual
wait
Referensi Kernel Linux dan Perangkat Lunak
Bebas
Sejarah Linux (Referensi)
http://www.ragib.hypermart.net/linux/ history of linux
http://www.wired.com/news/culture/0,1284,42209.html the story behind tux
http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs.html
http://telemann.coda.cs.cmu.edu/doc/talks/linuxvfs/
http://www.science.unitn.it/~fiorella/guidelinux/tlk/node94.html
http://web.mit.edu/tytso/www/linux/ext2intro.html
http://www.science.unitn.it/~fiorella/guidelinux/tlk/node5.html -->toc
http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide
http://www.pdrs.com.au/pdrs/linuxfs.htm
http://www.cs.umd.edu/projects/shrug/ppt/5-Oct-2001.ppt
http://www.reiserfs.org/
http://www.tldp.org/HOWTO/Linux+XFS-HOWTO/
http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/ch-proc.html
http://www.cs.wits.ac.za/~adi/courses/linuxadmin/content/module2doc.html
http://www.sao.nrc.ca/imsb/rcsg/documents/basic/node30.html
http://home.earthlink.net/~jknapka/linux-mm/vmoutline.html
http://limited.vlsm.org/v01/os/BahanKuliah/ppt/index.html
Linux Umumnya(Referensi)
http://sdn.vlsm.org/share/LDP/intro/index.html
http://www.linuxhq.com/guides/index.html
http://www.linuxhq.com/guides/TLK/tlk-toc.html
http://en.tldp.org/guides.html
http://ctdp.tripod.com/os/linux/howlinuxworks/index.html
http://en.tldp.org/LDP/lkmpg/lkmpg.pdf
http://en.tldp.org/LDP/intro-linux/Intro-Linux.pdf
http://en.tldp.org/LDP/lki/lki.pdf
Modul Kernel (Referensi)
http://www.kernel.org/
http://www.kernelnewbies.org/
http://www.kernelnewbies.org/documents/
http://kernelbook.sourceforge.net/
http://www.freeos.com/articles/4051/
http://opensource.ucc.ie/icse2002/SchachOffutt.pdf
http://sdn.vlsm.org/share/LDP/lkmpg/
Process Management(Referensi)
http://cs-pub.bu.edu/fac/richwest/cs591_w1/ notes/linux_process_mgt.PDF
http://www.cs.wm.edu/~dsn/444F02/lectures/linux_l1.pdf
http://ctdp.tripod.com/os/linux/howlinuxworks/linux_hlprocess.html
GNU (Referensi)
http://www.gnu.org
Rujukan
Buku
[Coffmanea1997] E G Coffman, Jr., M J Elphick, dan A Shoshani, 1971, System Deadlocks,
Computing Surveys, Vol.3, No.2.
[Deitel1990] H M Deitek, 1990, Operating Systems, Massachusetts, Addison-Wesley, 2nd ed.
[Hariyanto1997] B Hariyanto, 1997, Sistem Operasi, Informatika, Bandung.
[Havender1968] J W Havender, 1968, Avoiding Deadlock in Multitasking Systems, IBM Systems
Journal, Vol.7, No.2.
[Silberschatz2000] Avi Silberschatz, Peter Galvin, dan Grag Gagne, 2000, Applied Operating
Systems: First Edition, Edisi Pertama, John Wiley & Sons.
[Stallings2001] William Stallings, 2001, Operating Systems, Fourth Edition, Prentice Hall.
[Tanenbaum1992] Andrew S Tanenbaum, 1992, Modern Operating Systems, Englewood Cliffs,
New Jersey.
[Walsh2002] Norman Walsch dan Leonard Muellner, Bob Stayton, 1999, 2000, 2001, 2002,
DocBook: The Definitive Guide, Version 2.0.7, O'Reilly.
URLs
[FIXME1] FIXME1, FIXME URL NAME .
[FIXME2] FIXME2, FIXME URL NAME .
[FIXME3] FIXME3, FIXME URL NAME .
[FIXME3] FIXME3, FIXME URL NAME .
[FIXME4] FIXME4, FIXME URL NAME .
[FIXME5] FIXME5, FIXME URL NAME .
[FIXME6] FIXME6, FIXME URL NAME .
[FIXME7] FIXME7, FIXME URL NAME .
[FIXME8] FIXME8, FIXME URL NAME .
[FIXME9] FIXME9, FIXME URL NAME .
[FIXME10] FIXME10, FIXME URL NAME .
[FIXME11] FIXME11, FIXME URL NAME .
[FIXME12] FIXME12, FIXME URL NAME .
[FIXME13] FIXME13, FIXME URL NAME .
[FIXME14] FIXME14, FIXME URL NAME .
[FIXME15] FIXME15, FIXME URL NAME .
[FIXME16] FIXME16, FIXME URL NAME .
[FIXME17] FIXME17, FIXME URL NAME .
[FIXME18] FIXME18, FIXME URL NAME .
[FIXME19] FIXME19, FIXME URL NAME .
[FIXME20] FIXME20, FIXME URL NAME .
[FIXME21] FIXME21, FIXME URL NAME .
[FIXME23] FIXME23, FIXME URL NAME .
[FIXME24] FIXME24, FIXME URL NAME .
[FIXME25] FIXME25, FIXME URL NAME .
[FIXME26] FIXME26, FIXME URL NAME .
[FIXME27] FIXME27, FIXME URL NAME .
[FIXME28] FIXME28, FIXME URL NAME .
[FIXME29] FIXME29, FIXME URL NAME .
[FIXME30] FIXME30, FIXME URL NAME .
[FIXME31] FIXME31, FIXME URL NAME .