Nim : 1605551016.
Dosen : I Putu Agus Eka Pratama ST., MT.
Matakuliah : Network Operating System.
Kampus : Universitas Udayana, Fakultas Teknik, Program Studi Teknologi Informasi.
Materi yang akan saya bahas kali ini mengenai kernel dan kernel linux berbeda dengan materi yang saya bahas pada post sebelumnya yaitu mengenai Scheduling. Bahasan materi ini mengenai Kernel, Kernel Linux, dan Bagian Kernel.
Definisi Kernel
Sebuah sistem operasi mempunyai sebuah bagian sangat penting yang disebut dengan kernel. Kernel adalah inti dari sistem operasi dan bagian yang pertama kali di-load ke memori ketika sistem mulai dan tetap berjalan sampai sistem berhenti. Servisnya diperlukan oleh bagian dari sistem operasi lainnya dan program aplikasi. Kernel
menjalankan servis dasar dari sistem operasi seperti manajemen memori,
manajemen proses, manajemen file, dan manajemen i/o (input/output).
Ketika menjalankan servis-servis tersebut, kernel terdiri dari bermacam
isi tergantung dari sistem operasinya, tetapi umumnya ada
scheduler, supervisor, interrupt handler, dan memory manager. Berikut ini merupakan pengertian isi dari sistem operasi :
1. Scheduler berfungsi untuk mengatur pembagian waktu dan urutan dari proses-proses yang ingin mendapatkan servis dari kernel.
2. Supervisor berfungsi untuk memberikan servis oleh kernel kepada proses yang sudah dijadwalkan.
3. Interrupt handler berfungsi untuk menangani seluruh permintaan dari hardware yang ingin mendapatkan servis dari kernel.
4. Memori manager berfungsi untuk mengatur alokasi alamat di memori.
Kernel yang didisain untuk linux hanya akan dipakai oleh sistem operasi tersebut. Linux mempunyai kernel yang didisain untuknya tetapi user bisa memodifikasinya sesuai kebutuhannya masing-masing. Hal tersebut juga yang membuat kernel lebih dikenal di linux karena sifat kernelnya yang open source, berbeda dengan sistem operasi lainnya yang kernelnya tidak bisa dimodifikasi.
Bagian Kernel
Sistem operasi mengembangkan kernel yang dapat dibagi menjadi 4 bagian yang berbeda secara desain, berikut ini merupakan bagian-bagian tersebut :
1. Kernel Monolithic, yaitu mengintegrasikan banyak fungsi di dalam kernel dan menyediakan lapisan abstraksi perangkat keras secara penuh terhadap perangkat keras yang berada di bawah sistem operasi. Kernel monolithic memiliki seluruh servis dasar dari sistem operasi didalamnya. Kelebihan dari disain monolithic adalah efisiensi, sehingga performa sistem juga meningkat. Hal ini dikarenakan keseluruhan proses yang memerlukan fungsi kernel terjadi didalam kernel itu sendiri. Monolithic juga memiliki kelemahan, salah satunya dalam hal stabilitas, dimana kemungkinan sistem crash lebih besar. Contoh kernel berdisain monolithic yang paling dikenal terdapat dalam sistem operasi linux dan microsoft windows 9x.
2. Kernel Microkernel, berfungsi menyediakan sedikit saja dari abstraksi perangkat keras dan menggunakan aplikasi yang berjalan di atasnya (yang disebut dengan server) untuk melakukan beberapa fungsionalitas lainnya. Disain microkernel hanya mengimplemetasikan servis dasar minimal yang diperlukan, yaitu manajemen pengalamatan memori, manajemen proses/thread, dan inter-process communication. Kelebihan microkernel adalah stabilitas sistem lebih terjaga dan kekurangannya adalah komunikasi antara proses menjadi lebih rumit sehingga sistem menjadi tidak efisien. Contoh kernel berdisain microkernel terdapat dalam sistem operasi mac os x, minix, qnx ,dan lain-lain.
3. Kernel Hibrida, adalah pendekatan desain microkernel yang dimodifikasi. Pada kernel hibrida, terdapat beberapa tambahan kode di dalam ruangan kernel untuk meningkatkan performa. Disain hibrida kernel menyerupai microkernel tetapi dengan tambahan kode yang menyebabkan hybrid kernel dapat berjalan lebih cepat dari microkernel. Hal tersebut yang juga merupakan kelebihan dari hybrid kernel. Contoh kernel berdisain hybrid kernel terdapat dalam sistem operasi microsoft windows nt, windows 2000, dan windows xp.
4. Kernel Exo-kernel, menyediakan hardware abstraction secara minimal, sehingga program dapat mengakses hardware secara langsung. Dalam pendekatan desain Exo-kernel, library yang dimiliki oleh sistem operasi dapat melakukan abstraksi yang mirip dengan abstraksi yang dilakukan dalam desain monolithic kernel. Disain exo-kernel masih merupakan disain eksperimental dan dalam tahap penelitian sehingga belum dipakai secara luas. Perbedaan konsep disain exo-kernel dengan disain kernel lainnya adalah exo-kernel memiliki fungsi perlindungan dan pembagian resource untuk hardware. Kelebihan exo-kernel adalah bisa dimasukkan library sistem operasi lebih dari satu sehingga bisa menjalankan program-program untuk sistem operasi yang berbeda secara bersamaan. Contoh exo-kernel terdapat pada nemesis, masih sistem operasi konsep, ditulis oleh university of cambridge, university of glasgow, citrix systems, dan the swedish institute of computer science.
Kernel Linux
Kernel Linux adalah kernel yang digunakan dalam sistem operasi GNU/Linux. Kernel ini merupakan turunan dari keluarga sistem operasi UNIX, dirilis dengan menggunakan lisensi GNU General Public License (GPL), dan dikembangkan oleh pemrogram di seluruh dunia. Linux merupakan contoh utama dari perangkat lunak bebas dan sumber terbuka. Linux pada awalnya dibuat oleh seorang mahasiswa Finlandia yang bernama Linus Torvalds. Dulunya Linux merupakan proyek hobi yang diinspirasikan dari Minix, yaitu sistem UNIX kecil yang dikembangkan oleh Andrew Tanenbaum. Linux versi 0.01 dikerjakan sekitar bulan Agustus 1991. Kemudian pada tanggal 5 Oktober 1991, Linus mengumumkan versi resmi Linux, yaitu versi 0.02 yang hanya dapat menjalankan shell bash (GNU Bourne Again Shell) dan gcc (GNU C Compiler). Berikut ini merupakan bagan mengenai kompleksnya Kernel Linux.
Praktek Membedah Kernel Linux
Saya mencoba membuka source code kernel linux versi awal. Berikut ini merupakan beberapa direktori yang akan coba saya jelaskan.
1. Direktori boot
File yang terdapat pada direktori ini ada 2 yaitu boot.s dan head.s. boot.s merupakan file yang berfungsi untuk menjalankan startup BIOS. head.s merupakan file yang berfungsi sebagai kode startup 32-bit pada linux.
2. Direktori lib
File yang terdapat pada direktori ini ada 11 yaitu _exit.c, close.c, ctype.c, dup.c, errno.c, execve.c, open.c, setsid.c, string.c, wait.c, dan write.c.
- File _exit.c ini menjalan fungsi _exit(int exit_code)
- File close.c ini menjalankan fungsi syscall1(int,close,int,fd)
- File dup.c ini menjalankan fungsi yang sama dengan file close.c namun parameternya berbeda yaitu syscall1(int,dup,int,fd)
- File ctype.c ini menggunakan library ctype.h yang berfungsi untuk menguji dan mengkonversi karakter.
- File execve.c ini menjalankan fungsi _syscall3(int,execve,const char*, file, char **, argv, char **, envp)
- File open.c ini menggunakan library stdarg. yang berfungsi mengakses berbagai jumlah argumen dilewatkan ke fungsi. File ini menjalankan fungsi open.
- File setsid.c ini menjalankan fungsi _syscall0(pid_t,setsid)
- File string.c ini menggunakan library string.h dan mendeklarasikan fungsi extern, inline, dan __LIBRARY__
- File wait.c ini menggunakan library sys/wait.h dan menjalankan fungsi wait.
- File write.c ini menjalankan fungsi _syscall3(int,write,intfd,const char*, buf, off_t, count)
Referensi
[1] I Putu Agus Eka Pratama. "PPT Network Operating System Pertemuan 8". 2018.
0 Komentar