B.4. Beberapa Tugas yang Ditangani oleh Kernel
B.4.1. Menggerakkan Perangkat Keras
Kernel ini, pertama dan terutama, bertugas mengendalikan bagian-bagian perangkat keras, mendeteksi mereka, menyalakannya ketika komputer dihidupkan, dan seterusnya. Ini juga membuat mereka tersedia untuk perangkat lunak tingkat yang lebih tinggi dengan antarmuka pemrograman yang disederhanakan, sehingga aplikasi dapat memanfaatkan perangkat tanpa harus khawatir tentang detail seperti slot ekstensi mana tempat dipasangnya kartu opsi. Antarmuka pemrograman juga menyediakan lapisan abstraksi; ini memungkinkan perangkat lunak video-conferencing, misalnya, untuk menggunakan webcam tanpa tergantung kepada merek dan modelnya. Perangkat lunak ini hanya dapat menggunakan antarmuka Video for Linux (V4L), dan kernel menerjemahkan panggilan fungsi antarmuka ini ke perintah perangkat keras sebenarnya yang dibutuhkan oleh webcam tertentu yang digunakan.
Kernel mengekspor banyak rincian tentang perangkat keras yang terdeteksi melalui sistem berkas virtual /proc/
dan /sys/
. Bebearpa perkakas meringkas rincian itu. Di antara mereka, lspci
(dalam paket pciutils) menampilkan daftar perangkat PCI, lsusb
(dalam paket usbutils) menampilkan daftar perangkat USB, dan lspcmcia
(dalam paket pcmciautils) menampilkan daftar kartu PCMCIA. Peralatan ini sangat berguna untuk mengidentifikasi model eksak dari suatu perangkat. Identifikasi ini juga mengizinkan pencarian yang lebih presisi pada web, yang pada gilirannya, mengarah ke lebih banyak dokumen yang relevan.
Contoh B.1. Contoh dari informasi yang disediakan oleh lspci
dan lsusb
$
lspci
[...]
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation 6th-9th Gen Core Processor PCIe Controller (x16) (rev 05)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
00:14.2 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem (rev 31)
[...]
02:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTL8411B PCI Express Card Reader (rev 01)
03:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 12)
04:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
$
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0bda:5621 Realtek Semiconductor Corp. HD WebCam
Bus 001 Device 002: ID 04ca:3016 Lite-On Technology Corp.
Bus 001 Device 018: ID 145f:01bc Trust GXT 155 Gaming Mouse
Bus 001 Device 004: ID 04f3:0c03 Elan Microelectronics Corp. ELAN:Fingerprint
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Program-program ini memiliki pilihan -v
, yang mencantumkan informasi lebih rinci (tapi biasanya tidak perlu). Akhirnya, perintah lsdev
(dalam paket procinfo) menampilkan daftar sumber daya komunikasi yang digunakan oleh perangkat.
Aplikasi sering mengakses perangkat melalui berkas khusus yang dibuat di dalam
/dev/
(lihat bilah sisi
KEMBALI KE DASAR Hak akses perangkat). Ini adalah berkas-berkas khusus yang mewakili disk drive (sebagai contoh,
/dev/hda
dan
/dev/sdc
), partisi (
/dev/hda1
atau
/dev/sdc3
), tetikus (
/dev/input/mouse0
), papan ketik (
/dev/input/event0
), kartu suara (
/dev/snd/*
), port serial (
/dev/ttyS*
), dan seterusnya.
Sistem berkas adalah salah satu aspek yang paling menonjol dari kernel. Sistem Unix menggabungkan semua penyimpanan berkas ke dalam hirarki tunggal, yang memungkinkan pengguna (dan aplikasi) untuk mengakses data hanya dengan mengetahui lokasinya di dalam hierarki itu.
Titik awalk dari pohon hirarkis ini disebut root, /
. Direktori ini bisa memuat subdirektori-subdirektori yang dinamai. Sebagai contoh, subdirektori home
dari /
bernama /home/
. Subdirektori ini, pada gilirannya, memuat subdirektori lain, dan seterusnya. Setiap direktori juga bisa mengandung berkas, dimana data sebenarnya akan disimpan. Maka, nama /home/rmas/Desktop/hello.txt
mengacu ke sebuah berkas bernama hello.txt
yang disimpan di dalam subdirektori Desktop
dari subdirektori rmas
subdirektori dari direktori home
yang ada dalam root. Kernel menerjemahkan antara sistem penamaan ini dan penyimpanan fisik yang sebenarnya pada suatu disk.
Tidak seperti sistem lain, hanya ada satu hirarki seperti itu, dan itu bisa mengintegrasikan data dari beberapa disk. Salah satu dari disk ini dipakai sebagai root, dan yang lainnya ”dikait” pada direktori dalam hirarki (perintah Unix-nya bernama mount
); disk-disk lain ini maka kemudian teredia di bawah ”titik-titik kait” ini. Ini mengizinkan menyimpan direktori rumah pengguna (secara tradisional disimpan di bawah /home/
pada disk ke dua, yang akan memuat direktori rhertzog
dan rmas
. Sekali disk dikait pada /home/
, direktori-direktori ini menjadi dapat diakses pada lokasi biasa, dan path seperti /home/rmas/Desktop/hello.txt
tetap berjalan.
Ada banyak format sistem berkas, terkait dengan banyaknya cara bagaimana secara fisik menyimpan data pada disk. Yang paling dikenal adalah ext3 dan ext4, tapi yang lain juga ada. Sebagai contoh, vfat adalah sistem yang secara historis dipakai oleh sistem operasi Windows dan DOS, yang mengizinkan memakai hard disk di bawah Debian maupun di bawah Windows. Bagaimanapun, suatu sistem berkas mesti disiapkan pada suatu disk sebelum itu dapat dikait dan operasi ini dikenal sebagai ”memformat”. Perintah seperti mkfs.ext3
(dimana mkfs
merupakan kependekan dari MaKe FileSystem (buat sistem berkas) menangani pemformatan. Perintah-perintah ini memerlukan, sebagai suatu parameter, sebuah berkas peranti yang mewakili partisi yang akan diformat (sebagai contoh, /dev/sda1
). Operasi ini merusak dan mesti hanya dijalankan sekali, kecuali bila seseorang dengan sengaja menghendaki membersihkan suatu sistem berkas dan memulai dari awal.
Ada juga sistem berkas jaringan, seperti
NFS, dimana data tidak tersimpan pada disk lokal. Sebaliknya, data ditransmisikan melalui jaringan ke server yang menyimpan dan mengambil mereka saat diminta. Abstraksi sistem berkas melindungi pengguna dari keharusan untuk perawatan: berkas tetap dapat diakses dalam cara hirarkis mereka yang biasa.
Karena sejumlah fungsi yang sama dipakai oleh semua perangkat lunak, layak untuk memusatkan mereka di dalam kernel. Sebagai contoh, penanganan sistem berkas bersama mengizinkan sebarang aplikasi sekedar membuka suatu berkas berdasarkan nama, tanpa perlu khawatir di mana berkas disimpan secara fisik. Berkas dapat disimpan di dalam beberapa potongan yang berbeda pada suatu hard disk, atau dipecah ke beberapa hard disk, atau bahkan disimpan pada suatu server berkas jarak jauh. Fungsi-fungsi komunikasi bersama dipakai oleh aplikasi-aplikasi untuk bertukar data secara independen dari cara data dipindahkan. Sebagai contoh, transpor bisa melalui sebarang kombinasi dari jaringa lokal atau nirkabel, atau melalui jalur telepon.
Suatu proses adalah sebuah instansi program yang sedang berjalan. Ini membutuhkan memori untuk menyimpan program itu sendiri dan data operasinya. Kernel bertugas menciptakan dan melacak mereka. Ketika sebuah program berjalan, kernel terlebih dahulu menyisihkan sebagian memori, kemudian memuat kode yang dapat dieksekusi dari sistem berkas ke dalamnya, dan kemudian memulai menjalankan kode. Kernel menyimpan informasi tentang proses ini, yang paling terlihat adalah nomor identifikasi yang dikenal sebagai pid (process identifier).
Kernel Unix-like (termasuk Linux), seperti kebanyakan sistem operasi modern lainnya, mampu ”multi-tasking”. Dengan kata lain, mereka memungkinkan menjalankan banyak proses ”pada saat yang sama”. Sebenarnya hanya ada satu proses yang berjalan pada satu waktu, tetapi kernel memotong waktu menjadi irisan-irisan kecil dan menjalankan setiap proses secara bergantian. Karena irisan waktu ini sangat pendek (dalam rentang milidetik), mereka menciptakan ilusi proses yang berjalan secara paralel, meskipun sebenarnya hanya aktif selama beberapa interval waktu dan menganggur di sisa waktu. Tugas kernel adalah menyesuaikan mekanisme penjadwalannya untuk menjaga ilusi itu, sambil memaksimalkan kinerja sistem global. Jika irisan waktu terlalu panjang, aplikasi mungkin tidak tampak responsif seperti yang diinginkan. Terlalu pendek, dan sistem kehilangan waktu karena beralih tugas terlalu sering. Keputusan-keputusan ini dapat disesuaikan dengan prioritas proses. Proses prioritas tinggi akan berjalan lebih lama dan dengan irisan waktu yang lebih sering daripada proses prioritas rendah.
Tentu saja, kernel memungkinkan menjalankan beberapa instansi independen dari program yang sama. Tetapi masing-masing hanya dapat mengakses irisan waktu dan memorinya sendiri. Data mereka dengan demikian tetap independen.
Sistem mirip Unix juga multi-pengguna. Mereka menyediakan sistem manajemen hak yang mendukung pengguna dan kelompok terpisah; itu juga memungkinkan kontrol atas tindakan berdasarkan izin. Kernel mengelola data untuk setiap proses, memungkinkannya untuk mengontrol perizinan. Seringkali, suatu proses diidentifikasi oleh pengguna yang memulainya. Proses itu hanya diizinkan untuk mengambil tindakan yang tersedia bagi pemiliknya. Misalnya, mencoba membuka berkas memerlukan kernel untuk memeriksa identitas proses terhadap izin akses (untuk detail lebih lanjut tentang contoh khusus ini, lihat
Bagian 9.3, “Mengelola Hak”).