. SISTEM OPERASI
a. Fungsi dasar
Sistem
komputer pada dasarnya terdiri dari empat komponen utama, yaitu perangkat-keras,
program aplikasi, sistem-operasi, dan para pengguna. Sistem operasi berfungsi
untuk mengatur dan mengawasi penggunaan perangkat keras oleh berbagai program
aplikasi serta para pengguna. Sistem operasi berfungsi ibarat pemerintah dalam
suatu negara, dalam arti membuat kondisi computer agar dapat menjalankan
program secara benar. Untuk menghindari konflik yang terjadi pada saat pengguna
menggunakan sumber-daya yang sama, sistem operasi mengatur pengguna mana yang
dapat mengakses suatu sumber-daya. Sistem operasi juga sering disebut resource
allocator. Satu lagi fungsi penting sistem operasi ialah sebagai program
pengendali yang bertujuan untuk menghindari kekeliruan (error) dan
penggunaan komputer yang tidak perlu.
b. Tujuan
mempelajari system operasi
Tujuan mempelajari sistem operasi
agar dapat merancang sendiri serta dapat memodifikasi sistem yang telah ada
sesuai dengan kebutuhan kita, agar dapat memilih alternatif sistem operasi,
memaksimalkan penggunaan sistem operasi dan agar konsep dan teknik sistem
operasi dapat diterapkan pada aplikasi-aplikasi lain.
c.
Sejarah system operasi
Menurut
Tanenbaum, sistem operasi mengalami perkembangan yang sangat pesat, yang dapat
dibagi kedalam empat generasi:
• Generasi Pertama (1945-1955)
Generasi pertama merupakan awal perkembangan sistem komputasi elektronik
sebagai pengganti sistem komputasi mekanik, hal itu disebabkan kecepatan
manusia untuk menghitung terbatas dan manusia sangat mudah untuk membuat
kecerobohan, kekeliruan bahkan kesalahan. Pada generasi ini belum ada sistem
operasi, maka sistem komputer diberi instruksi yang harus dikerjakan secara langsung.
• Generasi Kedua (1955-1965)
Generasi kedua memperkenalkan Batch Processing System, yaitu Job
yang dikerjakan dalam satu rangkaian, lalu dieksekusi secara berurutan.Pada
generasi ini sistem komputer belum dilengkapi sistem operasi, tetapi beberapa
fungsi sistem operasi telah ada, contohnya fungsi sistem operasi ialah FMS dan
IBSYS.
• Generasi Ketiga (1965-1980)
Pada generasi ini perkembangan sistem operasi dikembangkan untuk melayani
banyak pemakai sekaligus, dimana para pemakai interaktif berkomunikasi lewat
terminal secara on-line ke komputer, maka sistem operasi menjadi multi-user (di
gunakan banyak pengguna sekali gus) dan multi-programming (melayani
banyak program sekali gus).
• Generasi Keempat (Pasca 1980an)
Dewasa ini, sistem operasi dipergunakan untuk jaringan komputer dimana
pemakai menyadari keberadaan komputer-komputer yang saling terhubung satu sama
lainnya. Pada masa ini para pengguna juga telah dinyamankan dengan Graphical
User Interface yaitu antar-muka komputer yang berbasis grafis yang sangat
nyaman, pada masa ini juga dimulai era komputasi tersebar dimana komputasi-komputasi
tidak lagi berpusat di satu titik, tetapi dipecah dibanyak komputer sehingga tercapai
kinerja yang lebih baik.
d. Layanan system operasi
Sebuah sistem operasi yang baik menurut
Tanenbaum harus memiliki layanan sebagai berikut: pembuatan program, eksekusi
program, pengaksesan I/O Device, pengaksesan terkendali terhadap berkas pengaksesan
sistem, deteksi dan pemberian tanggapan pada kesalahan, serta akunting.
Pembuatan program yaitu sistem operasi
menyediakan fasilitas dan layanan untuk membantu para pemrogram untuk menulis
program; Eksekusi Program yang berarti Instruksi-instruksi dan data-data harus
dimuat ke memori utama, perangkat-parangkat masukan/ keluaran dan berkas harus
di-inisialisasi, serta sumber-daya yang ada harus disiapkan, semua itu harus di
tangani oleh sistem operasi.
Pengaksesan I/O Device, artinya
Sistem Operasi harus mengambil alih sejumlah instruksi yang rumit dan sinyal
kendali menjengkelkan agar pemrogram dapat berfikir sederhana dan perangkat pun
dapat beroperasi.
Pengaksesan terkendali terhadap berkas
yang artinya disediakannya mekanisme proteksi terhadap berkas untuk mengendalikan
pengaksesan terhadap berkas.
Pengaksesan sistem artinya pada pengaksesan digunakan bersama (shared
system). Fungsi pengaksesan harus menyediakan proteksi terhadap sejumlah
sumber-daya dan data dari pemakai tak terdistorsi serta menyelesaikan
konflik-konflik dalam perebutan sumber-daya.
Deteksi dan
Pemberian tanggapan pada kesalahan, yaitu jika permasalahan muncul pada sistem
komputer maka sistem operasi harus memberikan tanggapan yang menjelaskan
kesalahan yang terjadi serta dampaknya terhadap aplikasi yang sedang berjalan.
Dan Akunting
yang artinya Sistem Operasi yang bagus mengumpulkan data statistik penggunaan
beragam sumber-daya dan memonitor parameter kinerja.
II.
LAYANAN
DAN ANTARMUKA
a.
Jenis Layanan
Seperti yang telah kita ketahui bersama, tujuan dari
sebuah sistem operasi adalah sebagai penghubung antara user dan hardware,
dimana sistem operasi memberikan kemudahan-kemudahan agar user tidak
harus mengakses hardware secara langsung dalam bahasa mesin, tetapi dalam
bentuk layanan-layanan yang diberikan oleh sistem operasi. Layanan sistem operasi dirancang untuk membuat
pemrograman menjadi lebih mudah.
1.
Pembuatan Program
Sistem
operasi menyediakan berbagai fasilitas yang membantu programer dalam membuat
program seperti editor. Walaupun bukan bagian dari sistem operasi, tapi layanan
ini diakses melalui sistem operasi.
2.
Eksekusi
Program
Eksekusi program adalah kemampuan
sistem untuk "load" program ke memori dan menjalankan program.
Operasi I/O: pengguna tidak dapat secara langsung mengakses sumber daya
perangkat keras, sistem operasi harus menyediakan mekanisme untuk melakukan
operasi I/O atas nama pengguna. Sistem manipulasi berkas dalah kemampuan
program untuk operasi pada berkas (membaca, menulis, membuat, and menghapus
berkas).
Komunikasi adalah pertukaran data/
informasi antar dua atau lebih proses yang berada pada satu komputer (atau
lebih). Deteksi error adalah menjaga kestabilan sistem dengan mendeteksi
"error", perangkat keras mau pun operasi.
Efesisensi
penggunaan sistem:
•
Resource allocator adalah
mengalokasikan sumber-daya ke beberapa pengguna atau job yang jalan pada
saat yang bersamaan.
•
Proteksi
menjamin akses ke sistem sumber daya dikendalikan (pengguna dikontrol aksesnya
ke sistem).
•
Accounting
adalah merekam kegiatan
pengguna, jatah pemakaian sumber daya (keadilan atau kebijaksanaan).
3.
Antarmuka
Sistem
operasi menyediakan berbagai fasilitas yang membantu programmer dalam membuat
program seperti editor. Walaupun bukan bagian dari sistem operasi, tapi
layanan ini diakses melalui sistem operasi.
4.
Operasi Masukan/Keluaran
Pada dasarnya, tugas utama komputer adalah processing dan
Masukan/Keluaran. Bahkan, sebagian besar waktunya digunakan untuk mengolah Masukan/Keluaran
sedangkan processing hanya bersifat insidental. Jadi, pada konteks
Masukan/Keluaran, peranan sistem operasi adalah mengatur dan mengontrol
perangkat Masukan/Keluaran dan operasi Masukan/Keluaran. Perangkat Masukan/Keluaran
sangat bervariasi. Oleh karena itu, bagaimana cara mengontrol
perangkat-perangkat tersebut mendapat perhatian besar dalam organisasi
komputer. Bayangkan, perangkat Masukan/Keluaran yang sangat banyak jumlahnya
dan setiap perangkat memiliki fungsi dan kecepatan sendiri-sendiri, tentunya
memerlukan metode yang berbeda pula. Oleh karena itu, dikenal klasifikasi
perangkat Masukan/Keluaran menjadi perangkat blok dan perangkat karakter,
walaupun ada perangkat yang tidak termasuk ke dalam satupun dari kedua golongan
ini. Perangkat terhubung ke komputer melalui port, diatur oleh device
controller dan berkomunikasi dengan prosesor dan perangkat lain melalui
bus.
Perangkat berkomunikasi dengan prosesor melalui dua
pendekatan yaitu memory mapped dan instruksi Masukan/Keluaran langsung. Bila
prosesor ingin mengakses suatu perangkat, dia akan terus mengecek perangkat
untuk mengetahui statusnya, apakah mengizinkan untuk diakses. Cara ini
dilakukan berulang-ulang yang disebut dengan polling. Sedangkan bila
perangkat ingin memberitahu prosesor ketika siap diakses, maka perangkat akan
menggunakan interupsi. Kedua cara ini mempunyai kelebihan dan kelemahan
masing-masing.
Adanya Direct Memory Access (DMA) dapat mengurangi
beban CPU karena terjadinya transfer data antara perangkat dan memori tanpa
melalui CPU. Perbedaan detil untuk setiap alat akan dienkapsulasi pada modul
kernel yang disebut device driver. Sedangkan untuk mengetahui waktu dan
lama suatu proses digunakan clock dan timer.
Program yang sedang dijalankan kadang kala membutuhkan Masukan/Keluaran.
Untuk efisiensi dan keamanan, pengguna biasanya tidak bisa mengatur piranti masukan/keluaran
secara langsung, untuk itulah sistem operasi harus menyediakan mekanisme dalam
melakukan operasi masukan/keluaran.
5.
Manipulasi Sistem Berkas
Program harus membaca dan menulis berkas, dan kadang kala
juga harus membuat dan menghapus berkas.
Sebuah berkas adalah jenis data abstrak. Untuk
mendefinisikan berkas secara tepat, kita perlu melihat operasi yang dapat
dilakukan pada berkas tersebut. Sistem operasi menyediakan system calls untuk
membuat, membaca, menulis, mencari, menghapus, dan sebagainya.
Berikut dapat kita lihat apa yang harus dilakukan sistem operasi pada
keenam operasi dasar pada berkas.
• Membuat
sebuah berkas
Ada dua cara dalam membuat berkas: Pertama, tempat baru di dalam system berkas
harus di alokasikan untuk berkas yang akan dibuat. Kedua, sebuah direktori
harus mempersiapkan tempat untuk berkas baru, kemudian direktori tersebut akan
mencatat nama berkas dan lokasinya pada sistem berkas.
• Menulis
pada sebuah berkas: Untuk menulis pada berkas, kita menggunakan system
call beserta nama berkas yang akan ditulisi dan informasi apa yang akan
ditulis pada berkas. Ketika diberi nama berkas, sistem mencari ke direktori
untuk mendapatkan lokasi berkas. Sistem juga harus menyimpan penunjuk tulis
pada berkas dimana penulisan berikut akan ditempatkan. Penunjuk tulis harus
diperbaharui setiap terjadi penulisan pada berkas.
• Membaca
sebuah berkas: Untuk dapat membaca berkas, kita menggunakan system call beserta
nama berkas dan di blok memori mana berkas berikutnya diletakkan. Sama seperti
menulis, direktori mencari berkas yang akan dibaca, dan sistem menyimpan
penunjuk baca pada berkas dimana pembacaan berikutnya akan terjadi. Ketika
pembacaan dimulai, penunjuk baca harus diperbaharui. Sehingga secara umum,
suatu berkas ketika sedang dibaca atau ditulis, kebanyakan sistem hanya mempunyai
satu penunjuk, baca dan tulis menggunakan penunjuk yang sama, hal ini menghemat
tempat dan mengurangi kompleksitas sistem.
• Menempatkan
kembali sebuah berkas: Direktori yang bertugas untuk mencari berkas yang bersesuaian,
dan mengembalikan lokasi berkas pada saat itu. Menempatkan berkas tidak perlu melibatkan
proses Masukan/Keluaran. Operasi sering disebut pencarian berkas.
• Menghapus
sebuah berkas: Untuk menghapus berkas kita perlu mencari berkas tersebut di
dalam direktori. Setelah ditemukan kita membebaskan tempat yang dipakai berkas
tersebut (sehingga dapat digunakkan oleh berkas lain) dan menghapus tempatnya
di direktori.
• Memendekkan
berkas: Ada suatu keadaan dimana pengguna menginginkan atribut dari berkas
tetap sama tetapi ingin menghapus isi dari berkas tersebut. Fungsi ini
mengizinkan semua atribut tetap sama tetapi panjang berkas menjadi nol, hal ini
lebih baik dari pada memaksa pengguna untuk menghapus berkas dan membuatnya
lagi.
Enam operasi dasar ini sudah mencakup operasi minimum
yang di butuhkan. Operasi umum lainnya adalah menyambung informasi baru di
akhir suatu berkas, mengubah nama suatu berkas, dan lain-lain.
Operasi dasar ini kemudian digabung untuk melakukan
operasi lainnya. Sebagai contoh misalnya kita menginginkan salinan dari suatu
berkas, atau menyalin berkas ke peralatan Masukan/Keluaran lainnya seperti printer,
dengan cara membuat berkas lalu membaca dari berkas lama dan menulis ke berkas
yang baru.
Hampir semua operasi pada berkas melibatkan pencarian
berkas pada direktori. Untuk menghindari pencarian yang lama, kebanyakan sistem
akan membuka berkas apabila berkas tersebut digunakan secara aktif. Sistem
operasi akan menyimpan tabel kecil yang berisi informasi semua berkas yang
dibuka yang disebut "tabel berkas terbuka". Ketika berkas sudah tidak
digunakan lagi dan sudah ditutup oleh yang menggunakan, maka sistem operasi
mengeluarkan berkas tersebut dari tabel berkas terbuka.
Beberapa sistem terkadang langsung membuka berkas ketika
berkas tersebut digunakan dan otomatis menutup berkas tersebut jika program
atau pemakainya dimatikan. Tetapi pada sistem lainnya terkadang membutuhkan
pembukaan berkas secara tersurat dengan system call (open)
sebelum berkas dapat digunakan.
Implementasi dari buka dan tutup berkas dalam lingkungan
dengan banyak perngguna seperti UNIX, lebih rumit. Dalam sistem seperti itu
pengguna yang membuka berkas mungkin lebih dari satu dan pada waktu yang hampir
bersamaan. Umumnya sistem operasi menggunakan tabel internal dua level. Ada
tabel yang mendata proses mana saja yang membuka berkas tersebut, kemudian
tabel tersebut menunjuk ke tabel yang lebih besar yang berisi informasi yang
berdiri sendiri seperti lokasi berkas pada disk, tanggal akses dan ukuran
berkas.
Biasanya tabel tersebut juga memiliki data berapa banyak
proses yang
membuka berkas tersebut. Jadi, pada dasarnya ada beberapa informasi yang
terkait dengan pembukaan berkas yaitu:
•
Penunjuk
Berkas: Pada sistem yang
tidak mengikutkan batas berkas sebagai bagian dari system call baca dan tulis,
sistem tersebut harus mengikuti posisi dimana terakhir proses baca dan tulis
sebagai penunjuk. Penunjuk ini unik untuk setiap operasi pada berkas, maka dari
itu harus disimpan terpisah dari atribut berkas yang ada pada disk.
•
Penghitung
berkas yang terbuka: Setelah
berkas ditutup, sistem harus mengosongkan kembali tabel berkas yang dibuka yang
digunakan oleh berkas tadi atau tempat di tabel akan habis. Karena mungkin ada
beberapa proses yang membuka berkas secara bersamaan dan sistem harus menunggu
sampai berkas tersebut ditutup sebelum mengosongkan tempatnya di tabel.
Penghitung ini mencatat banyaknya berkas yang telah dibuka dan ditutup, dan
menjadi nol ketika yang terakhir membaca berkas menutup berkas tersebut barulah
sistem dapat mengosongkan tempatnya di tabel.
•
Lokasi
berkas pada disk: Kebanyakan
operasi pada berkas memerlukan sistem untuk mengubah data yang ada pada berkas.
Informasi mengenai lokasi berkas pada disk disimpan di memori agar menghindari
banyak pembacaan pada disk untuk setiap operasi. Beberapa sistem operasi
menyediakan fasilitas untuk memetakan berkas ke dalam memori pada system memori
virtual. Hal tersebut mengizinkan bagian dari berkas ditempatkan pada suatu
alamat di memori virtual. Operasi baca dan tulis pada memori dengan alamat
tersebut dianggap sebagai operasi baca dan tulis pada berkas yang ada di alamat
tersebut. Menutup berkas mengakibatkan semua data yang ada pada alamat memori
tersebut dikembalikan ke disk dan dihilangkan dari memori virtual yang
digunakan oleh proses.
6.
Komunikasi
Kadang kala sebuah proses memerlukan informasi dari
proses lain. Ada dua cara umum dimana komunikasi dapat dilakukan. Komunikasi
dapat terjadi antara proses dalam satu komputer, atau antara proses yang berada
dalam komputer yang berbeda tetapi dihubungkan oleh jaringan komputer.
Komunikasi dapat dilakukan dengan share-memory atau message-passing,
dimana sejumlah informasi dipindahkan antara proses oleh sistem operasi.
7.
Deteksi Error
Sistem operasi harus selalu waspada terhadap kemungkinan error.
Error dapat terjadi di CPU dan memori perangkat keras, masukan/keluaran,
dan di dalam program yang dijalankan pengguna. Untuk setiap jenis error sistem
operasi harus bisa mengambil langkah yang tepat untuk mempertahanan jalannya
proses komputasi, misalnya dengan menghentikan jalannya
program, mencoba kembali melakukan operasi yang dijalankan, atau melaporkan
kesalahan yang terjadi agar pengguna dapat mengambil langkah selanjutnya.
Disamping pelayanan di atas, terdapat juga
layanan-layanan lain yang bertujuan untuk mempertahankan efisiensi sistem itu
sendiri. Layanan tambahan itu yaitu:
• Alokasi
Sumber Daya: Ketika
beberapa pengguna menggunakan sistem atau beberapa program dijalankan secara
bersamaan, sumber daya harus dialokasikan bagi masing-masing pengguna dan program
tersebut.
• Accounting:
Kita menginginkan agar
jumlah pengguna yang menggunakan sumber daya, dan jenis sumber daya yang
digunakan selalu terjaga. Untuk itu maka diperlukan suatu perhitungan dan
statistik. Perhitungan ini diperlukan bagi seseorang yang ingin merubah
konfigurasi system untuk meningkatkan pelayanan.
• Proteksi:
Layanan proteksi memastikan bahwa
segala akses ke sumber daya terkontrol; dan tentu saja keamanan terhadap
gangguan dari luar sistem tersebut. Keamanan bisa saja dilakukan dengan terlebih
dahulu mengindentifikasi pengguna. Ini bisa dilakukan dengan meminta password
bila ingin menggunakan sumber daya.
b.
Antarmuka
Antarmuka (interface) adalah
salah satu layanan yang disediakan sistem operasi sebagai sarana interaksi
antara pengguna dengan sistem operasi. Antarmuka adalah komponen system operasi
yang bersentuhan langsung dengan pengguna. Terdapat dua jenis antarmuka, yaitu Command
Line Interface (CLI) dan Graphical User Interface (GUI).
1. Command Line Interface (CLI)
CLI adalah tipe antarmuka dimana pengguna berinteraksi
dengan sistem operasi melalui text-terminal. Pengguna menjalankan
perintah dan program di sistem operasi tersebut dengan cara mengetikkan
baris-baris tertentu. Meskipun konsepnya sama, tiap-tiap sistem operasi
memiliki nama atau istilah yang berbeda untuk CLI-nya.
UNIX memberi nama CLI-nya sebagai bash, ash, ksh, dan
lain sebagainya. Microsoft Disk Operating System (MS-DOS) memberi nama
command.com atau Command Prompt. Sedangkan pada Windows Vista, Microsoft
menamakannya PowerShell. Pengguna Linux mengenal CLI pada Linux sebagai terminal,
sedangkan pada Apple namanya adalah commandshell.
2.
Graphical User Interface (GUI)
GUI
adalah tipe antarmuka yang digunakan oleh pengguna untuk berinteraksi dengan
sistem operasi melalui gambar-gambar grafik, ikon, menu, dan menggunakan
perangkat penunjuk (pointing device) seperti mouse atau track
ball. Elemen-elemen utama dari GUI bisa diringkas dalam konsep WIMP (window,
icon, menu, pointing device).

Gambar 2.1. Contoh GUI
Pengguna
komputer yang awam seringkali menilai sebuah sistem operasi dari GUI-nya.
Sebuah sistem operasi dianggap bagus jika tampilan luarnya (GUI-nya) bagus.
Padahal, seperti telah dijelaskan sebelumnya, komponen sistem operasi tidak
hanya GUI, sehingga penilaian terhadap sebuah sistem operasi tidak bisa hanya
dari satu komponen saja. Karena GUI adalah kesan pertama pengguna dengan sistem
operasi itu, setiap pengembang sistem operasi berlomba-lomba mengembangkan
GUI-nya dengan keunggulannya masing-masing.
Sejarah
mencatat bahwa Xerox PARC (Palo Alto Research Center) yang pertama kali meriset
tentang GUI. Pada tahun 1984, Apple merilis Macintosh yang menggunakan GUI
hasil riset Xerox PARC. Beberapa
tahun kemudian, Microsoft merilis sistem operasi Windows-nya yang juga
menggunakan GUI. Apple mengklaim bahwa Microsoft mencuri ide dari Apple.
Seperti halnya CLI, tiap-tiap sistem operasi juga memiliki nama tersendiri
untuk komponen GUI-nya. Pada Apple Mac OS X, GUI-nya disebutAqua. Microsoft
memberi nama GUI Windows XP sebagai Lunar dan GUI Windows Vista sebagai Aero.
Pada Linux, ada dua pengembang utama desktop
environment pada Linux, yang masing-masing menghasilkan produk KDE (K Desktop
Environment) dan GNOME. KDE
digunakan pada beberapa distro seperti SuSE dan Mandrake, sedangkan GNOME
dipakai pada beberapa distro seperti Fedora Core dan Ubuntu.
c.
System
Calls
Komputer
digunakan untuk melakukan suatu proses yang dikehendaki user. Oleh
karena itu harus ada suatu bentuk komunikasi antara user dan hardware.
Komunikasi itu terjadi dalam bentuk system calls. Sistem operasi melalui shell-nya akan menangkap
perintah dari user yang kemudian akan dikomunikasikan melalui system
calls. Disinilah peran Sistem Operasi sebagai jembatan komunikasi antara user
dan hardware itu terjadi.
System
calls itu sendiri umumnya ditulis dalam bahasa C dan C++. Mengenai shell,
shell itu sendiri secara umum adalah layer yang berfungsi sebagai
interface antara user dan inti dalam sistem operasi (kernel). Melalui shell,
user dapat memberi
perintah-perintah yang akan dikirim ke sistem operasi,
sehingga shell ini merupakan layer yang menerima interaksi dari
user secara langsung. Shell
dalam Sistem Operasi secara
umum dibagi menjadi 2, Command Line (CLI) dan Graphical (GUI). Jadi dengan kata lain, system calls berperan
sebagai interface dalam layanan-layanan yang disediakan oleh sistem
operasi.
Untuk lebih
jelasnya lihat gambar berikut. Contoh di bawah adalah sytem calls di
dalam program yang membaca data dari satu file lalu meng-copy-nya
ke file lain.

Gambar
2.2. Contoh System Call
System
call menyediakan
interface antara program (program pengguna yang berjalan) dan bagian Sistem
Operasi. System call menjadi jembatan antara proses dan sistem operasi. System
call ditulis dalam bahasa assembly atau bahasa tingkat tinggi yang
dapat mengendalikan mesin (C). Contoh: UNIX menyediakan system call: read,
write => operasi I/O untuk berkas.
Sering pengguna program harus memberikan data (parameter)
ke OS yang akan dipanggil. Contoh pada UNIX: read (buffer, max_size, file_id).
Tiga cara memberikan parameter dari program ke sistem operasi:
• Melalui registers (sumber daya di
CPU).
• Menyimpan
parameter pada data struktur (table) di memori, dan alamat table tsb ditunjuk
oleh pointer yang disimpan di register.
• Push (store) melalui "stack"
pada memori dan Sistem Operasi mengambilnya melalui pop pada stack tsb.

Gambar
2.3. Memberikan parameter melalui tabel
d. Jenis System Calls
Berikut
ini adalah tipe system calls:
•
Manajemen Proses
System Calls untuk managemen proses diperlukan untuk mengatur
proses-proses yang sedang berjalan. Kita dapat melihat penggunaan system calls untuk
managemen proses pada Sistem Operasi Unix. Contoh yang paling baik untuk
melihat bagaimana system calls
bekerja untuk managemen proses adalah Fork.
Fork adalah satu satunya cara
untuk membuat sebuah proses baru pada system Unix. Fork membuat duplikasi yang
mirip dengan proses aslinya, termasuk file descriptor, register, dan lainnya.
Setelah perintah Fork, child akan
mengeksekusi kode yang berbeda dengan parentnya. Bayangkan yang terjadi pada
shell. Shell akan membaca command dari terminal, melakukan fork pada child, menunggu
child untuk mengeksekusi command tersebut, dan membaca command lainnya ketika child
terminate.
Untuk menunggu child selesai,
parent akan mengeksekusi system call waitpid, yang hanya akan menunggu sampai
child selesai. Proses child harus mengeksekusi command yang dimasukkan oleh user
(pada kasus shell). Proses child melakukannya dengan menggunakan system calls exec.
Dari ilustrasi tersebut kita dapat
mengetahui bagaimana system calls
dipakai untuk managemen proses. Kasus lainnya bukan hanya pada Fork, tetapi
hampir setiap proses memerlukan system
calls untuk melakukan management proses.
•
Manajemen Berkas
System calls yang berhubungan dengan berkas sangat diperlukan. Seperti ketika kita
ingin membuat atau menghapus suatu berkas, atau ketika ingin membuka atau
menutup suatu berkas yang telah ada, membaca berkas tersebut, dan menulis
berkas itu. System calls juga diperlukan ketika kita ingin mengetahui
atribut dari suatu berkas atau ketika kita juga ingin merubah atribut tersebut.
Yang termasuk atribut berkas adalah nama berkas, jenis berkas, dan lain-lain.
Ada juga system calls yang menyediakan mekanisme lain yang berhubungan
dengan direktori atau sistem berkas secara keseluruhan. Jadi bukan hanya
berhubungan dengan satu spesifik berkas. Contohnya membuat atau menghapus suatu
direktori, dan lain-lain.
• Manajemen
Piranti
Program yang sedang dijalankan kadang kala memerlukan
tambahan sumber daya. Jika banyak pengguna yang menggunakan sistem dan
memerlukan tambahan sumber daya maka harus meminta peranti terlebih dahulu.
Lalu setelah selesai, penggunaannnya harus dilepaskan kembali dan ketika sebuah
peranti telah diminta dan dialokasikan maka peranti tersebut bisa dibaca,
ditulis, atau direposisi.
• System
Call Informasi/Pemeliharaan
Beberapa system calls disediakan untuk membantu pertukaran
informasi antara pengguna dan sistem operasi, contohnya adalahsystem calls untuk
meminta dan mengatur waktu dan tanggal atau meminta informasi tentang sistem
itu sendiri, seperti jumlah pengguna, jumlah memori dan disk yang masih bisa
digunakan, dan lain-lain. Ada juga system calls untuk meminta informasi
tentang proses yang disimpan oleh sistem dan system calls untuk merubah
informasi tersebut.
•
Komunikasi
Dua
model komunikasi:
Ø Message-passing. Pertukaran informasi dilakukan melalui fasilitas
komunikasi antar proses yang disediakan oleh sistem operasi.
Ø
Shared-memory.
Proses menggunakan memori yang
bisa digunakan oleh berbagai proses untuk pertukaran informasi dengan membaca
dan menulis data pada memori tersebut. Dalam message-passing, sebelum
komunikasi dapat dilakukan harus dibangun dulu sebuah koneksi. Untuk itu
diperlukan suatu system calls dalam pengaturan koneksi tersebut, baik
dalam menghubungkan koneksi tersebut maupun dalam memutuskan koneksi tersebut
ketika komunikasi sudah selesai dilakukan. Juga diperlukan suatu system
calls untuk membaca dan menulis pesan (message) agar pertukaran
informasi dapat dilakukan.
Dalam contoh program sederhana diatas, dibutuhkan
setidaknya ribuan system calls per detik. Oleh karena itu Kebanyakan
programmer membuat aplikasi dengan menggunakan Application Programming
Interface (API). Dalam API itu terdapat fungsi-fungsi/perintah-perintah
untuk menggantikan bahasa yang digunakan dalam System Calls dengan
bahasa yang lebih terstruktur dan mudah dimengerti oleh programmer. Fungsi yang
dibuat dengan menggunakan API tersebut kemudian akan memanggil system calls
sesuai dengan sistem operasinya. Tidak tertutup kemungkinan nama dari system
calls sama dengan nama di API.
Keuntungan memprogram dengan menggunakan API
adalah:
• Portabilitas
Programmer yang menggunakan API dapat
menjalankan programnya dalam sistem operasi mana saja asalkan sudah ter-install
API tersebut. Sedangkan system calls berbeda antar sistem operasi, dengan catatan dalam
implementasinya mungkin saja berbeda.
• Lebih Mudah Dimengerti
API menggunakan bahasa yang lebih terstruktur dan
mudah dimengerti daripada bahasa system calls. Hal ini sangat penting dalam
hal editing dan pengembangan. System calls interface ini berfungsi sebagai
penghubung antara API dan system calls yang dimengerti oleh sistem operasi.
System calls interface ini akan menerjemahkan perintah dalam API dan kemudian
akan memanggil system calls yang diperlukan. Untuk membuka suatu file
tersebut user menggunakan program yang telah dibuat dengan menggunakan bantuan API,
maka perintah dari user tersebut diterjemahkan dulu oleh program menjadi perintah
open(). Perintah open() ini merupakan perintah dari API dan bukan perintah yang
langsung dimengerti oleh kernel Sistem Operasi. Oleh karena itu, agar keinginan
user dapat dimengerti oleh sistem operasi, maka perintah open() tadi diterjemahkan
kedalam bentuk System Calls oleh system call interface. Implementasi
perintah open() tadi bisa bermacam-macam tergantung dari sistem operasi yang kita
gunakan.
III. GNU
(General Public License)/LINUX
Linux adalah sebuah sistem operasi yang dikembangkan oleh
Linus Benedict Torvalds dari Universitas Helsinki Finlandia sebagai proyek hobi
mulai tahun 1991. Ia menulis Linux, sebuah kernel untuk prosesor 80386,
prosesor 32-bit pertama dalam kumpulan CPU Intel yang cocok untuk PC. Baru pada
tanggal 14 Maret 1994 versi 1.0 mulai diluncurkan, dan hal ini menjadi tonggak sejarah
Linux.
Linux merupakan clone dari UNIX yang telah di-port
ke beragam platform, antara lain: Intel 80x86, AlphaAXP, MIPS, Sparch,
Power PC, dsb. Sekitar 95% kode sumber kernel sama untuk semua platform perangkat
keras. Linux termasuk sistem operasi yang didistribusikan secara open source,
artinya kode sumber Linux diikutsertakan sehingga dapat dipelajari dan
dikembangkan dengan mudah.
Selain
itu Linux dikembangkan oleh GNU (General Public License). Linux dapat
digunakan untuk berbagai keperluan, seperti: jaringan, pengembangan software,
dan sebagai end-user platform. Selama ini Linux menjadi sistem operasi
yang menjadi banyak perhatian karena kecanggihan dan harganya yang relatif
murah dibanding dengan sistem operasi yang lain.
Macam-macam
distribusi Linux antara lain: Stackware, Debian, RedHat, S.u.s.e., Caldera, dan
Turbo Linux. Istilah Linux atau GNU/Linux (GNU) juga digunakan sebagai rujukan
kepada keseluruhan distro Linux (Linux distribution), yang didalamnya selalu
disertakan program-program lain yang mendukung sistem operasi ini. Contoh
program-program tersebut adalah Web Server, Bahasa Pemrograman, Basis
Data, Tampilan Desktop (Desktop Environment) (seperti GNOME dan KDE), dan aplikasi/software
perkantoran (office suite) seperti OpenOffice.org, KOffice, Abiword,
Gnumeric, dan lainnya.
Distro
Linux telah mengalami pertumbuhan yang pesat dari segi popularitas, sehingga
lebih populer dari versi UNIX yang menganut sistem lisensi dan berbayar (proprietary)
maupun versi UNIX bebas lain yang pada awalnya menandingi dominasi Microsoft
Windows dalam beberapa sisi.
Linux
mendukung banyak Perangkat keras Komputer, dan telah digunakan di dalam
berbagai peralatan dari Komputer pribadi, Superkomputer dan Sistem Benam
(Embedded System) seperti Telepon Seluler Ponsel dan Perekam Video pribadi Tivo.
Pada mulanya, Linux dibuat, dikembangkan dan digunakan
oleh peminatnya saja. Kini Linux telah mendapat dukungan dari perusahaan besar
seperti IBM, dan Hewlett-Packard dan perusahaan besar lain. Para pengamat
teknologi informatika beranggapan kesuksesan ini dikarenakan Linux tidak bergantung
kepada vendor (vendor-independence), biaya operasional yang
rendah, dan kompatibilitas yang tinggi dibandingkan versi UNIX proprietari,
serta faktor keamanan dan kestabilannya dibandingkan dengan Microsoft Windows. Ciri-ciri
ini juga menjadi bukti atas keunggulan model pengembangan perangkat lunak
sumber terbuka opensource software.
Pada pentium, Linux hanya menggunakan 6 segmen:
o
Segmen untuk kode kernel
o
Segmen untuk data kernel
o
Segmen untuk kode pengguna
o
Segmen untuk data pengguna
o
Segmen Task-State
o
Segment default untuk LDT
Segmen untuk kode
pengguna dan data pengguna terbagi dengan semua proses yang running pada
pengguna mode, karena semua proses menggunakan ruang alamat logis yang sama dan
semua descriptor segmen terletak di GDT. TSS ( Task-State Segment )
digunakan untuk menyimpan context hardware dari setiap proses selama context
switch. Tiap proses
mempunyai TSS sendiri, dimana descriptor -nya terletak di GDT. Segment default LDT normalnya berbagi dengan semua
proses dan biasanya tidak digunakan. Jika suatu proses membutuhkan LDT-nya,
maka proses dapat membuatnya dan tidak menggunakan default LDT. Tiap selector
segmen mempunyai 2 bit proteksi. Maka, pentium Mengizinkan proteksi 4
level. Dari 4 level ini, Linux hanya mengenal 2 level, yaitu pengguna mode dan
kernel mode. Berikut ini merupakan tiga level penghalaman dalam
Linux.

Gambar 3.1. Memori Virtual

Gambar 3.2. Logo Linux
a. Kernel
Bagian
ini akan menjelaskan kernel secara umum dan sejarah perkembangan Kernel Linux.
Kernel adalah suatu perangkat lunak yang menjadi bagian utama dari sebuah
sistem operasi. Tugasnya melayani bermacam program aplikasi untuk mengakses
perangkat keras komputer secara aman. Karena akses terhadap perangkat keras
terbatas, sedangkan ada lebih dari satu program yang harus dilayani dalam waktu
yang bersamaan, maka kernel juga bertugas untuk mengatur kapan dan berapa
lama suatu program dapat menggunakan satu bagian perangkat keras tersebut.
Hal tersebut dinamakan sebagai multiplexing.
Akses
kepada perangkat keras secara langsung merupakan masalah yang kompleks, oleh
karena itu kernel biasanya mengimplementasikan sekumpulan abstraksi hardware.
Abstraksi-abstraksi tersebut merupakan sebuah cara untuk menyembunyikan
kompleksitas, dan memungkinkan akses kepada perangkat keras menjadi mudah dan
seragam. Sehingga abstraksi pada akhirnya memudahkan pekerjaan programer.
Untuk menjalankan
sebuah komputer kita tidak harus menggunakan kernel sistem operasi. Sebuah program
dapat saja langsung di-load dan dijalankan diatas mesin 'telanjang'
komputer, yaitu bilamana pembuat program ingin melakukan pekerjaannya tanpa
bantuan abstraksi perangkat keras atau bantuan sistem operasi. Teknik ini
digunakan oleh komputer generasi awal, sehingga bila kita ingin berpindah dari
satu program ke program lain, kita harus mereset dan meload kembali
program-program tersebut.
Ada 4 kategori kernel:
1.
Monolithic kernel
Kernel yang menyediakan abstraksi perangkat keras yang
kaya dan tangguh.
2.
Microkernel
Kernel
yang menyediakan hanya sekumpulan kecil abstraksi perangkat keras sederhana,
dan menggunakan aplikasi-aplikasi yang disebut sebagai server untuk
menyediakan fungsi-fungsi lainnya.
3. Hybrid
(modifikasi dari microkernel)
Kernel
yang mirip microkernel, tetapi ia juga memasukkan beberapa kode tambahan di
kernel agar ia menjadi lebih cepat.
4. Exokernel
Kernel
yang tidak menyediakan sama sekali abstraksi hardware, tapi ia menyediakan sekumpulan
pustaka yang menyediakan fungsi-fungsi akses ke perangkat keras secara langsung
atau hampir-hampir langsung.
Dari keempat kategori kernel yang disebutkan diatas, kernel Linux termasuk
kategori monolithic kernel. Kernel Linux berbeda dengan sistem Linux.
Kernel Linux
merupakan sebuah perangkat lunak orisinil yang dibuat oleh komunitas Linux,
sedangkan sistem Linux, yang dikenal saat ini, mengandung banyak komponen yang
dibuat sendiri atau dipinjam dari proyek pengembangan lain. 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 (sistem UNIX kecil yang dikembangkan oleh Andy
Tanenbaum). Tetapi, kernel tersebut sudah mengimplementasi proses UNIX secara
tepat.
Pada tanggal 14
Maret 1994 dirilis versi 1.0, yang merupakan tonggak sejarah Linux. Versi ini adalah
kulminasi dari tiga tahun perkembangan yang cepat dari kernel Linux. Fitur baru
terbesar yang disediakan adalah jaringan. Versi 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 juga diberikan
terhadap modul kernel yang loadable dan unloadable secara
dinamis.
Satu tahun kemudian dirilis kernel versi 1.2. Kernel ini
mendukung variasi perangkat keras yang lebih luas. Pengembang telah
memperbaharui networking stack untuk menyediakan support bagi
protokol IPX, dan membuat implementasi IP lebih lengkap dengan memberikan fungsi
accounting dan firewalling. Kernel 1.2 ini merupakan kernel Linux
terakhir yang PC-only. Konsentrasi lebih diberikan pada dukungan perangkat
keras dan memperbanyak implementasi lengkap pada fungsi-fungsi yang ada.
Pada bulan Juni 1996, kernel Linux 2.0 dirilis. Versi ini
memiliki dua kemampuan baru yang penting, yaitu dukungan terhadap multiple
architecture dan multiprocessor architectures. Kode untuk manajemen
memori telah diperbaiki sehingga kinerja sistem berkas dan memori virtual
meningkat. Untuk pertama kalinya, file system caching dikembangkan
ke networked file systems, juga sudah didukung writable memory mapped
regions. Kernel 2.0 sudah
memberikan kinerja 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.
Semenjak Desember 2003, telah diluncurkan Kernel versi
2.6, yang dewasa ini (2007) telah mencapai patch versi 2.6.21.1
(http://kambing.ui.edu/kernel-linux/v2.6/). Hal-hal yang berubah dari versi 2.6
ini adalah:
• Subitem
M/K yang dipercanggih.
•
Kernel yang pre-emptif.
• Penjadwalan Proses yang dipercanggih.
•
Threading yang
dipercanggih.
•
Implementasi ALSA (Advanced
Linux Sound Architecture) dalam kernel.
•
Dukungan sistem berkas seperti:
ext2, ext3, reiserfs, adfs, amiga ffs, apple macintosh hfs, cramfs, jfs,
iso9660, minix, msdos, bfs, free vxfs, os/2 hpfs, qnx4fs, romfs, sysvfs, udf,
ufs, vfat, xfs, BeOS befs (ro), ntfs (ro), efs (ro).
Sistem
Linux terdiri dari tiga bagian kode penting:
• Kernel: Bertanggung-jawab memelihara
semua abstraksi penting dari sistem operasi, termasuk hal-hal seperti memori
virtual dan proses-proses.
• 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.
• Utilitas
sistem: adalah program yang melakukan pekerjaan managemen secara individual.
Walaupun berbagai sistem operasi modern telah mengadopsi
suatu arsitektur message-passing untuk kernel internal mereka, Linux tetap
memakai model historis UNIX: kernel diciptakan sebagai biner yang tunggal dan
monolitis. Alasan utamanya adalah untuk meningkatkan kinerja, karena semua
struktur data dan kode kernel disimpan dalam satu address space, alih konteks
tidak diperlukan ketika sebuah proses memanggil sebuah fungsi sistem operasi
atau ketika interupsi perangkat keras dikirim. Tidak hanya penjadualan inti dan
kode memori virtual yang menempati address space ini, tetapi juga 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
menyediakan layanan sistem untuk memberikan pengaturan dan proteksi akses ke
sumber daya perangkat keras. Kernel mengimplementasi semua fitur yang
diperlukan supaya dapat bekerja sebagai sistem operasi. Namun, jika sendiri,
system 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 ditangani
langsung oleh kernel, akan tetapi aplikasi membuat panggilan (calls)
keperpustakaan sistem, yang kemudian memanggil layanan sistem operasi yang
dibutuhkan.
b. Distro
Distro Linux
(singkatan dari distribusi Linux) adalah sebutan untuk sistem operasi komputer
mirip Unix yang menggunakan kernel Linux. Distribusi Linux bisa berupa
perangkat lunak bebas dan bisa juga berupa perangkat lunak komersial seperti
Red Hat Enterprise, SuSE, dan lain-lain.
Ada banyak distribusi atau distro
Linux yang telah muncul. Beberapa bertahan dan besar, bahkan sampai
menghasilkan distro turunan, contohnya adalah :
• Debian GNU/Linux
Debian
GNU/Linux adalah distro non-komersial yang dihasilkan oleh para sukarelawan
dari seluruh dunia yang saling bekerjasama melalui Internet. Distro ini
menginginkan adanya semangat open-source yang harus tetap ada pada
Debian. Kedinamisan distro ini membuat setiap rilis paket-paketnya di-update
setiap waktu dan dapat diakses melalui utilitas apt-get. Apt-get adalah sebuah
utilitas baris-perintah yang dapat digunakan secara dinamis untuk meng-upgrade
sistem Debian GNU/Linux melalui apt-repository jaringan archive Debian yang
luas. Milis dan forum debian selalu penuh dengan pesan-pesan baik mengenai bug,
masalah, sharing, dll. Dengan adanya sistem komunikasi ini bug dan
masalah keamanan pada tiap paket dapat dilaporkan oleh para pengguna dan
pengembang Debian dengan cepat. Keuntungan dari Debian adalah upgradability,
ketergantungan antar paket didefinisikan dengan baik, dan pengembangannya
secara terbuka. Beberapa proyek dan turunan Debian GNU/Linux:
1. De2, http://de2.vlsm.org/
2. Knoppix,
http://www.knoppix.org/
3. Debian JP, http://www.debian.linux.or.jp/
4. Libranet.
5. dan
lain-lain
• Red Hat Linux
Red Hat adalah distro yang cukup
populer dikalangan pengembang dan perusahaan Linux. Dukungan-dukungan secara
teknis, pelatihan,sertifikasi, aplikasi pengembangan, dan bergabungnya para hacker
kernel dan free-software seperti Alan Cox, Michael Johnson, Stephen
Tweedie menjadikan Red Hat berkembang cepat dan digunakan pada perusahaan. Poin
terbesar dari distro ini adalah Red Hat Package Manager (RPM). RPM adalah
sebuah perangkat lunak untuk memanajemen paket-paket pada sistem Linux kita dan
dianggap sebagai standar de-facto dalam pemaketan pada distro-distro
turunannya dan yang mendukung distro ini secara luas.
• Slackware
Distronya
Patrick Volkerding yang terkenal pertama kali setelah SLS. Slackware dikenal
lebih dekat dengan gaya UNIX, sederhana, stabil, mudah di-custom, dan
didesain untuk komputer 386/486 atau lebih tinggi. Distro ini termasuk distro
yang cryptic dan manual sekali bagi pemula Linux, tapi dengan
menggunakan distro ini beberapa penggunanya dapat mengetahui banyak cara kerja
sistem dan distro tersebut. Debian adalah salah satu distro selain Slackware
yang masuk dalam kategori ini. Sebagian besar aktivitas konfigurasi di
Slackware dilakukan secara manual (tidak ada tool seperti Yast pada S.U.S.E
ataupunLinuxconf pada RedHat).
• S.u.S.E.
S.u.S.E. adalah
distro yang populer di Jerman dan Eropa, terkenal akan dukungan driver VGA-nya
dan YasT. S.u.S.E tersedia secara komersial dan untuk versi GPL-nya dapat
diinstal melalui ftp di situs S.u.S.E. Instalasi berbasis menu grafis dari CD-ROM,
disket boot modular, 400-halaman buku referensi, dukungan teknis, dukungan driver-driver
terutama VGA dan tool administrasi sistem S.u.S.E., YaST, membuat
beberapa pengguna memilih distro ini. S.u.S.E. juga terlibat dalam pembuatan X
server (video driver) untuk proyek XFree86 sehingga X server distro ini
mendukung kartu grafis baru. S.U.S.E. menggunakan dua sistem pemaketan yaitu
RPM (versi lama) dan SPM, S.U.S.E. Package Manager (versi baru).
• Turbo Linux
TurboLinux
menargetkan pada produk berbasis Linux dengan kinerja tinggi untuk pasar
workstation dan server terutama untuk penggunaan clustering dan orientasinya ke
perusahaan. Beberapa produk-produknya: TurboLinux Workstation untuk
dekstopnya, TurboLinux Server untuk backend server dengan kinerja tinggi
terutama untuk penggunaan bisnis di perusahaan, e-commerce dan transaksi
B2B (Business-to-Business). Salah satu produknya TurboCluster Server ditargetkan
untuk pembuatan server cluster yang berskala luas dan dapat digunakan 25
cluster node atau lebih.TurboCluster server ini pernah memenangkan
poling Best Web Solution dari editor Linux Journal. enFuzion, satu lagi produk yang
berbasis pada konsep sederhana dan powerful yang dinamakan 'parametric execution'.
enFuzion akan merubah jaringan komputer perusahaan menjadi super computer
dengan kecepatan tinggi dan 'fault tolerant'. Pengguna produk dan
layanan TurboLinux terbanyak adalah perusahaan dan perorangan di Jepang dan
Asia. Untuk mendapatkan distro linux, anda dapat mendownloadnya langsung dari
situs distributor distro bersangkutan, atau membelinya dari penjual lokal.
c. Lisensi
Kernel Linux terdistribusi di bawah
Lisensi Publik Umum GNU (GPL), dimana peraturannya disusun oleh Free Software
Foundation. Linux bukanlah perangkat lunak domain publik: Public Domain berarti bahwa pengarang telah
memberikan copyright terhadap perangkat lunak mereka, tetapi copyright
terhadap kode Linux masih dipegang oleh pengarang-pengarang kode tersebut.
Linux adalah perangkat lunak bebas,
namun: bebas 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.
d. Prinsip
Rancangan Linux
Dalam rancangan keseluruhan, Linux
menyerupai implementasi UNIX nonmicrokernel yang lain. Ia adalah sistem yang multiuser,
multitasking dengan seperangkat lengkap alat-alat yang kompatibel dengan
UNIX. Sistem berkas Linux mengikuti semantik tradisional UNIX, dan model
jaringan standar UNIX diimplementasikan secara keseluruhan. Ciri internal
rancangan Linux telah dipengaruhi oleh sejarah perkembangan sistem operasi ini.
Walaupun Linux dapat berjalan pada berbagai macam platform, pada awalnya dia
dikembangkansecara eksklusif pada arsitektur PC. Sebagian besar dari
pengembangan awal tersebut dilakukan oleh peminat individual, bukan oleh
fasilitas riset yang memiliki dana besar, sehingga dari awal Linux berusaha
untuk memasukkan fungsionalitas sebanyak mungkin dengan dana yang sangat terbatas.
Saat ini, Linux dapat berjalan baik
pada mesin multiprocessor dengan main memory yang sangat besar
dan ukuran disk space yang juga sangat besar, namun tetap mampu
beroperasi dengan baik dengan jumlah RAM yang lebih kecil dari 4 MB. Akibat
dari semakin berkembangnya teknologi PC, kernel Linux juga semakin lengkap
dalam mengimplementasikan fungsi UNIX. Tujuan utama perancangan Linux adalah
cepat dan efisien, tetapi akhir-akhir ini konsentrasi perkembangan Linux lebih
pada tujuan rancangan yang ketiga yaitu standarisasi. Standar POSIX terdiri
dari kumpulan spesifikasi dari beberapa aspek yang berbeda kelakuan sistem
operasi. Ada dokumen POSIX untuk fungsi sistem operasi biasa dan untuk ekstensi
seperti proses untuk thread dan operasi real-time.
Linux dirancang agar sesuai dengan dokumen
POSIX yang relevan. Sedikitnya ada dua distribusi Linux yang sudah memperoleh
sertifikasi ofisial POSIX. Karena Linux memberikan antarmuka
standar ke programer 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 pustaka yang berbeda
tersedia untuk mengimplementasi semantik BSD di tempat dimana kedua kelakuan
sangat berbeda.
Ada banyak standar lain di dunia
UNIX, tetapi sertifikasi penuh dari 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.
Bagaimana pun juga mendukung aplikasi yang luas adalah penting untuk suatu
sistem operasi, sehingga sehingga standar implementasi merupakan tujuan utama
pengembangan Linux, walaupun 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.
Sistem Linux terdiri dari tiga
bagian kode penting:
• Kernel
Bertanggung-jawab
memelihara semua abstraksi penting dari sistem operasi, termasuk hal-hal seperti
memori virtual dan proses-proses.
Walaupun berbagai sistem operasi modern
telah mengadopsi suatu arsitektur message-passing untuk kernel internal mereka,
Linux tetap memakai model historis UNIX: kernel diciptakan sebagai biner yang
tunggal dan monolitis. Alasan utamanya adalah untuk meningkatkan kinerja,
karena semua struktur data dan kode kernel disimpan dalam satu address space,
alih konteks tidak diperlukan ketika sebuah proses memanggil sebuah fungsi
sistem operasi atau ketika interupsi perangkat keras dikirim. Tidak hanya
penjadwalan inti dan kode memori virtual yang menempati address space ini,
tetapi juga 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 menyediakan layanan sistem untuk
memberikan pengaturan dan proteksi akses ke sumber daya 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 ditangani langsung oleh kernel, akan tetapi aplikasi
membuat panggilan (calls) ke perpustakaan sistem, yang kemudian memanggil
layanan sistem operasi yang dibutuhkan.
• Pustaka 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.
Pustaka sistem menyediakan berbagai
tipe fungsi. Pada level yang paling sederhana, mereka membolehkan aplikasi
melakukan permintaan pada layanan sistem kernel. Membuat suatu system calls melibatkan transfer kontrol
dari mode pengguna yang tidak penting ke mode kernel yang penting; rincian dari
transfer ini berbeda pada masing-masing arsitektur. Pustaka bertugas untuk mengumpulkan
argumen system-call dan, jika perlu, mengatur argumen tersebut dalam bentuk khusus
yang diperlukan untuk melakukan system
calls. Pustaka juga dapat menyediakan versi lebih kompleks dari system call
dasar. Contohnya, fungsi buffered file-handling dari bahasa C semuanya
diimplementasikan dalam pustaka sistem, yang memberikan kontrol lebih baik
terhadap berkas M/K daripada system calls
kernel dasar. Pustaka 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 pustaka
sistem.
• Utilitas sistem
Program yang
melakukan pekerjaan manajemen secara individual.
Sistem Linux mengandung banyak
program-program pengguna-mode: utilitas sistem dan utilitas pengguna.
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
pengguna login, koneksi jaringan yang masuk, dan antrian printer. Tidak semua
utilitas standar melakukan fungsi administrasi sistem yang penting. Lingkungan pengguna
UNIX mengandung utilitas standar dalam jumlah besar untuk melakukan pekerjaan sehari-hari,
seperti membuat daftar direktori, memindahkan dan menghapus file, atau
menunjukkan isi dari sebuah file. Utilitas yang lebih kompleks dapat melakukan
fungsi text-processing, seperti menyusun data tekstual atau melakukan pattern
searches pada input teks. Jika digabung, utilitas-utilitas tersebut membentuk
kumpulan alat standar yang diharapkan oleh pengguna pada sistem UNIX mana saja;
walaupun tidak melakukan fungsi sistem operasi apa pun, utilitas tetap merupakan
bagian penting dari sistem Linux dasar.
e. Modul Kernel
Linux
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 maupun
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.
1. 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 simbol-simbol 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.
2. 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 bertanggung-jawab untuk
mendaftarkan fungsi modul baru tersebut.
Hal-hal yang masuk
dalam tabel registrasi adalah:
• device
driver
• sistem berkas
• protokol
jaringan
• format binari
3. 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
M/K 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.
Tidak ada komentar:
Posting Komentar