Siapa saya?
Nama: Nono Heryana
Web: http://sites.unsika.ac.id/nono
Kontak:
Telegram: nonohry
Github: sitelmi
Email: nono@unsika.ac.id
ABET
Menurut ABET, Anda tidak akan mampu melakukan debug yang efektif
tanpa:
Kemampuan untuk meracang, melakukan percobaan, menganalisis
data dan menginterpretasikan data
Booting
Interupsi Perangkat
Kernel SO perlu berkomunikasi dengan perangkat keras secara fisik
Perangkat beroperasi secara asinkronus dari CPU
polling : kernel menunggu sampau I/O selesai
Interrupts : kernel melakukan pekerjaan lain untuk sementara
Interupsi Perangkat
Bagaimana interupsi perangkat bekerja?
Dimana CPU dijalankan setelah interupsi?
Apakah interupsi handler ditulis dalam bahasa? C? Java?
Apa stack (tumpukan) yang digunakan?
Apakah pekerjaan yang telah dilakukan CPU sebelum interupsi akan hilang
selamanya?
Jika tidak, bagaimana CPU tahu bagaimana untuk melanjutkan pekerjaan
sebelumnya?
Challenge: Protection
Bagaimana kita menjalankan kode dengan privilage terbatas?
Entah, karena kode ini buggy atau mungkin berbahaya
Beberapa contoh:
Skrip yang berjalan pada web browser
Sebuah program yang baru saja anda download dari internet
Sebuah program yang anda tulis dan belum diuji oleh anda
Masalah
Point Utama
Konsep Proses
Sebuah Proses adalah abstraksi SO untuk menjalankan program dengan hak
terbatas
Abstraksi Proses
Proses, turunan dari sebuah program, berjalan dengan hak terbatas
Thread, urutan instruksi dalam proses
Potensi banyak thread per proses (untuk saat ini 1:1)
Address space, mengatur hak dari sebuah proses
Berfikir Eksperimen
Bagaimana menerapkan eksekusi dengan hak istimewa terbatas
(limited privilege)?
Menjalankan setiap instruksi program dengan simulator
Jika instruksi diijinkan maka lakukan instruksi
Jika tidak hentikan proses
Model dasar ada di javascript dan bahasa interpreter lainnya
Kernel mode
Eksekusi dengan hak penuh dari hardware
read/write ke memory, mengakses perangkat I/O, read/write ke disk sector,
send/read semua paket
Timer
Untuk memperoleh kembali kontrol dari user program dalam loop
Cara aman untuk beralih dari user mode ke kernel mode, atau
sebaliknya
Privileged Instruksi
Apa yang akan terjadi jika user program mencoba mengeksekusi
privileged instruction?
Pertanyaan
Untuk program sederhana seperti Hello World, kernel harus mencopy
string dari user program memory ke dalam screen memory
Mengapa tidak diijinkan program untuk menulis langsung ke dalam
screen buffer memory?
Virtual Address
Masalah dengan base dan bounds?
Virtual Address
Translasi dilakukan di hardware,
dalam bentuk tabel
Tabel di set up oleh kernel
sistem operasi
Contoh
#include <stdio.h>
#include <unistd.h>
int staticVar = 0;
//variabel statis
main() {
staticVar += 1;
sleep(10); // sleep untuk x detik
printf ("static address: %x, value: %d\n", &staticVar, staticVar);
}
Apa yang terjadi jika kita menjalankan dua contoh dari program ini pada
saat yang sama?
Bagaimana jika kita mengambil alamat dari local variabel prosedur
dalam dua salinan program yang running pada waktu yang sama?
Pertanyaan
Dengan bahasa pemrograman berorientasi objek dan compiler, hanya
objek method yang bisa mengakses internal data dalam sebuah
objek. Jika sistem operasi hanya berjalan pada program yang ditulis
pada bahasa pemrograman tersebut, akan kah masih
membutuhkan hardware memory address protection?
Bagaimana jika konten dari setiap objek itu enkripsi kecuali ketika
method sedang berjalan, termasuk SO?
Hardware Timer
Perangkat keras secara berkala melakukan interupsi terhadap
prosesor
Mengembalikan kotrol ke handler kernel
Frekuensi interupsi di set oleh kernel
Bukan oleh user code
Interupsi dapat ditangguhkan sementara
Bukan oleh user code
Penangguhan interupsi penting dilakukan untuk mengimplementasikan mutual
exclusion
Mode Switch
Interrupts
Dipicu oleh timer dan perangkat I/O
Exceptions
Dipicu oleh perilaku program yang tak terduga
Atau perilaku yang berbahaya
Pertanyaan
Contoh dari Exceptions?
Contoh dari System Calls?
Mode Switch
Dari mode kernel ke mode user
Proses/thread baru start
Langsung ke instruksi pertama dalam program/thread
Kembali dari interrupt, exception, system call
Melanjutkan eksekusi yang ditangguhkan
Proses/thread context switch
Melanjutkan beberapa proses lain
User-level upcall (UNIX signal)
Notifikasi asinkranus ke user program
Interrupt Vector
Tabel di set up oleh kernel SO, pointer ke kode untuk menjalankan
berbagai aktifitas
Interrupt Stack
Per-prosesor, terletak di kernel (bukan user) memory
Biasanya proses/thread memiliki keduanya: kernel dan user stack
Interrupt Stack
Interrupt Masking
Interupt handler berjalan dengan interrupts off
Re-enable ketika interupsi komplit
Interrupt Handlers
Non-blocking, berjalan sampai selesai
Minimum yang diperlukan perangkat untuk mengambil interupsi berikutnya
Limited duration
Wake up other threads to do any real work
Linux: semaphore
Before Interrupt
During Interrupt
After Interrupt
Pertanyaan
Mengapa stack pointer disimpan dua kali pada interrupt stack?
Petunjuk: itu stack pointer yang sama?
At end of handler
Handler restores saved registers
Atomically return to interrupted process/thread
Restore program counter
Restore program stack
Restore processor status word/condition codes
Switch to user mode
Upcalls vs Interrupts
Signal handlers = interrupt vector
Signal stack = interrupt stack
Automatic save/restore registers = transparent resume
Signal masking: signals disabled while in signal handler
Upcall: Before
Upcall: during
Copy Arguments
Dari user memory ke kernel memory
Menghindari kernel dari kode berbahaya
Validasi Arguments
Melindungi kernel dari error di user code