Batasan antara kode kernel dan kode level user dibatasi oleh proteksi dari hardware. Kernel beroperasi pd suatu alamat yang tidak dapat diakses oleh proses level user. Operasi-operasi yang terproteksi seperti pengawalan suatu proses I/O dan pemberhentian CPU hanya terdapat pada sisi kernel. Aplikasi-aplikas i hanya mengajukan pelayanan atau servis dari kernel melalui fungsi "System Call". System call dipakai agar kernel menjalankan operasi2 yang rumit, spt: menuliskan data kedalam storage kedua, dan operasi yang sederhana spt: mengembalikan nilai waktu saat sekarang. Semua system call tampak sinkron pada aplikasi-aplikasi. Aplikasi tidak berjalan sementara kernel melakukan action yang berhubungan dengan sebuah system call. Kernel menyelesaikan beberapa operasi yang menyatu dengan sebuah system call setelah hal tsb mengembalikan nilai. Sbg contoh: sebuah system call untuk fungsi penulisan akan meng-copy data untuk dituliskan dari proses level user kedalam buffer kernel sementara menunggu proses selesai, tetapi hal tsb biasanya kembali dari system-call sebelum buffering kernel dituliskan kedalam disk.
Sebuah system-call biasanya diimplementasikan sbg hardware-trap yang mengubah model eksekusi CPU dan pemetaan ruang pengalamatan yang sedang berjalan. Parameter-parameter disuplai oleh user pd system-call dicheck sah atau tidak oleh kernel sebelum dipakai. Pengecekan-pengecekan tersebut untuk memastikan integritas system tersebut. Semua parameter yang ditujukan ke kernel dicopy kedalam ruang alamat milik kernel untuk memastikan bahwa keabsahan semua parameter tidak berubah akibat suatu efek samping dari system-call. Hasil dari fungsi system-call dikembalikan oleh kernel, baik dalam registrasi hardware maupun dengan peng-copy-an pd alamat-alamat memori level user. Seperti parameter-parameter yang ditujukan kepada kernel, alamat-alamat digunakan untuk pengembalian hasil bahwa mereka merupakan bagian dari lingkup pengalamatan sebuah aplikasi. Jika kernel mengalami suatu error sementara sedang melakukan proses system-call, kernel akan mengembalikan sebuah kode error ke user. Untuk bahasa program C, kode error disimpan dalam variabel global: errno, dan fungsi yang mengeksekusi system-call akan mengembalikan nilai: -1.
Masing-masing: aplikasi-aplikasi user dan kernel berjalan secara bebas. FreeBSD tidak menyimpan blok-blok pengontrol I/O atau struktur data sistem operasi lain dalam lingkup alamat aplikasi. Setiap aplikasi level user diberikan lingkup alamat dimana dia berjalan. Kernel membuat hampir semua perubahan bagian, spt: menghentikan sementara suatu proses sementara yang lain sedang berjalan. menjadi tampak pd proses yang terlibat.
Cerita Bersambung : Design & Implementasi Operating System - FreeBSD
Senin, 05 November 2007
2.3. Servis - Servis Kernel
Diposting oleh
binto widodo
di
20.13
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar