Back to IF2130 Sistem Operasi
Layanan dan Interaksi Dasar OS
Questions/Cues
Apa saja layanan fungsional OS?
Apa saja layanan efisiensi OS?
Apa itu System Call?
Apa peran API?
Bagaimana cara melewatkan parameter ke system call?
Apa saja tipe-tipe system call?
Apa itu System Programs?
Reference Points
- Slides 2-4, 16-33, IF2130-02-2025-OS-Structure.pdf
Layanan Sistem Operasi untuk Pengguna & Program
OS menyediakan serangkaian layanan untuk memberikan fungsionalitas dan kemudahan. Layanan ini dibagi menjadi dua kategori utama.
1. Layanan Fungsional (Untuk Pengguna):
User Interface (UI): Menyediakan cara bagi pengguna untuk berinteraksi, baik melalui GUI (Graphical User Interface), CLI (Command-Line Interface), maupun touch screen.
Eksekusi Program: Memuat, menjalankan, dan mengelola siklus hidup program.
Operasi I/O: Mengabstraksi interaksi dengan perangkat keras seperti disk atau printer.
Manipulasi Sistem File: Mengelola pembuatan, pembacaan, penulisan, dan penghapusan file/direktori.
Komunikasi: Memfasilitasi pertukaran data antar proses (IPC) atau antar komputer dalam jaringan.
Deteksi Error: Mendeteksi dan merespons error dari hardware, jaringan, atau program.
2. Layanan Efisiensi Sistem:
Alokasi Sumber Daya: Mengalokasikan sumber daya (CPU, memori) kepada banyak pengguna atau proses secara adil.
Akuntansi (Accounting): Melacak penggunaan sumber daya oleh setiap pengguna.
Proteksi dan Keamanan: Mengontrol akses ke sumber daya dan melindungi sistem dari ancaman internal maupun eksternal.
System Call: Jembatan ke Kernel
System Call adalah mekanisme terprogram yang disediakan oleh OS agar sebuah aplikasi (yang berjalan di user mode) dapat meminta layanan dari kernel (yang berjalan di kernel mode). Ini adalah satu-satunya “pintu” masuk yang sah bagi aplikasi untuk mengakses sumber daya yang dilindungi atau melakukan operasi-operasi khusus.
Application Program Interface (API): Programmer jarang sekali menulis system call secara langsung. Mereka menggunakan API (seperti Win32 API, POSIX API, atau Java API) yang menyediakan fungsi-fungsi pustaka (library) yang lebih mudah digunakan. Fungsi API inilah yang kemudian akan “membungkus” dan memanggil system call yang sesungguhnya di latar belakang. Contoh: fungsi
printf()di C pada akhirnya akan memanggil system callwrite()untuk menampilkan teks ke layar.Parameter Passing untuk System Call
Seringkali, sebuah system call butuh parameter (misalnya, nama file yang akan dibuka). Ada tiga cara umum untuk melewatkan parameter dari program ke kernel:
Melalui Register: Cara tercepat, namun terbatas oleh jumlah register CPU yang tersedia.
Melalui Blok Memori: Parameter disimpan dalam sebuah tabel/blok di memori, dan alamat blok tersebut yang dilewatkan melalui register. Digunakan oleh Linux & Solaris.
Melalui Stack: Parameter di-push ke dalam stack oleh program, lalu di-pop oleh kernel. Fleksibel dan tidak membatasi jumlah parameter.
Tipe-Tipe System Call
System call dapat dikelompokkan berdasarkan fungsinya:
Kontrol Proses:
create,terminate,load,execute,wait.Manajemen File:
create,delete,open,close,read,write.Manajemen Perangkat:
request device,release device,read,write.Pemeliharaan Informasi:
get_time,set_time,get_system_data.Komunikasi:
create_connection,send_message,shm_create(shared memory).Proteksi:
chmod,set_permissions.System Programs
Sebagian besar pengguna tidak berinteraksi langsung dengan system call, melainkan dengan System Programs. Ini adalah program-program yang menyediakan lingkungan yang nyaman untuk pengembangan dan eksekusi. Contohnya termasuk: file manager, text editor, compiler, dan background services (dikenal sebagai daemons di UNIX atau services di Windows).
Sistem Operasi menyediakan serangkaian layanan untuk fungsionalitas pengguna (UI, eksekusi program) dan efisiensi sistem (alokasi sumber daya, keamanan). Aplikasi mengakses layanan ini melalui System Call, sebuah antarmuka terprogram yang menjadi jembatan antara user mode dan kernel mode. Programmer biasanya berinteraksi dengan System Call secara tidak langsung melalui API yang lebih sederhana, sementara pengguna akhir berinteraksi dengan OS melalui System Programs yang menyediakan lingkungan kerja yang utuh.
Additional Information
Pendalaman Teknis 1: Contoh Alur System Call
open()
User Space: Sebuah program memanggil fungsi
open("file.txt", O_RDONLY). Ini adalah panggilan ke fungsi library (misalnya,libc).Library: Fungsi
open()di library menyiapkan parameter. Ia menempatkan nomor system call untukopen(misalnya, nomor 2 di Linux) ke dalam register%eaxdan pointer ke string “file.txt” dan flagO_RDONLYke register lain.Trap: Library kemudian mengeksekusi instruksi khusus (misalnya,
int 0x80atausyscall) yang menyebabkan trap atau software interrupt.Mode Switch: CPU beralih dari user mode ke kernel mode dan menyimpan konteks program.
Kernel Space: CPU mencari nomor system call (nomor 2) di system call table dan melompat ke fungsi kernel yang mengimplementasikan
sys_open().Eksekusi Kernel: Kernel melakukan tugasnya: memeriksa izin, mencari file di sistem file, menyiapkan struktur data internal (file descriptor), dll.
Return: Setelah selesai, kernel menempatkan hasil (misalnya, file descriptor nomor 3) di register
%eaxdan mengeksekusi instruksi untuk kembali ke user mode.User Space: Kontrol kembali ke fungsi library, yang kemudian mengembalikan hasil (
3) ke program aplikasi.Pendalaman Teknis 2: MS-DOS vs. UNIX Program Execution
MS-DOS (Single-tasking): Ketika Anda menjalankan program, shell (command.com) akan memuat program tersebut ke memori, menimpa sebagian besar dari dirinya sendiri. Hanya kernel yang tersisa. Ketika program selesai, shell harus dimuat ulang dari disk. Tidak ada konsep penciptaan proses yang sesungguhnya.
UNIX/Linux (Multi-tasking): Shell menggunakan system call
fork()untuk membuat proses anak yang identik dengan dirinya. Proses anak ini kemudian menggunakan system callexec()untuk mengganti program di dalam memorinya dengan program baru yang ingin dijalankan. Shell (proses induk) bisa menunggu (wait()) proses anak selesai atau terus berjalan. Ini adalah model yang jauh lebih kuat dan fleksibel.Eksplorasi Mandiri
Gunakan
strace(Linux) ataudtruss(macOS): Ini adalah tools command-line yang sangat kuat untuk melacak system call yang dibuat oleh sebuah program. Coba jalankanstrace lsdi terminal Linux. Anda akan melihat daftar semua system call (open,read,write,mmap,close, dll.) yang dipanggil oleh programlsyang tampaknya sederhana.Sumber & Referensi Lanjutan:
Dokumentasi:
man 2 introdi terminal Linux/macOS akan memberikan pengantar ke system call.man 2 openakan memberikan detail spesifik tentang system callopen.Buku: The C Programming Language (K&R) Bab 8, “The UNIX System Interface,” memberikan contoh klasik bagaimana API C berinteraksi dengan system call UNIX.