Sesi 1 & 2 – Proses
Perbedaan Program dengan Proses:
- Program merupakan kumpulan dari instruksi-instruksi untuk melakukan suatu tugas
- Proses merupakan proses pelaksanaan pada suatu program
Karakteristik dari suatu proses:
- Identifier
- State
- Priority
- Program counter
- Memory pointer
- Context data
- I/O status information
- Accounting information
Beberapa hal yang perlu diperhatikan dalam pembuatan proses:
- Menetapkan identifier proses yang unik
- Mengalokasikan ruang untuk proses
- Menginisialisasi proses kontrol blok
- Mengatur link yang tepat
- Buat dari memperluas struktur data lainnya
Suatu proses akan dihentikan apabila terjadi seperti kondisi-kondisi sebagai berikut:
- Proses selesai secara normal
- Batas waktu terlampaui
- Memori tidak tersedia
- Pelanggaran bound
- Protection error
- Kesalahan aritmatika
- Proses telah menunggu lebih lama dari batas maksimum yang ditentukan untuk sebuah acara
- I/O gagal
- Instruksi tidak valid
- Instruksi istimewa
- Penyalahgunaan data
- Intervensi sistem operasi
- Proses induk berakhir sehingga proses anak dihentikan
- Permintaan induk
Tabel Proses:
- Tabel proses menunjukan dimana proses terletak
- Tabel proses merupakan atribut yang diperlukan untuk manajemen seperti ID proses, proses state, dan lokasi di memori
Lokasi proses meliputi:
- Kumpulan program yang akan dijalankan
- Proses kontrol blok
- Proses gambar
Tahap-Tahap dalam Proses Kontrol Blok:
- Identifikasi proses
- Prosesor informasi keadaan, dalam proses ini dilakukan:
- User-visible register
- Register kontrol dan status
- Stack pointer
- Proses informasi kontrol
Model Lima Proses Keadaan:
Beberapa alasan untuk mengalihkan proses:
- Jam terganggu
- I/O terganggu
- Kesalahan memori
- Perangkap
- Panggilan supervisor
Penyebab dari suspensi suatu proses:
- Swapping
- Alasan sistem operasi lain
- Permintaan pengguna interaktif
- Timing
- Permintaan proses induk
Mode-Mode Eksekusi:
- User mode
- System mode, control mode, atau kernel mode
Cara Kerja Proses Panggilan Sistem Manajemen – fork():
- Menciptakan proses baru, yaitu proses anak
- Induk dan anak mengeksekusi secara bersamaan
- Setiap proses dapat fork proses lain sehingga menciptakan hirarki proses
- Suatu proses dapat memilih untuk menunggu anak untuk mengakhiri
Hasil nilai fungsi fork():
- Mengembalikan nilai -1 jika tidak berhasil
- Mengembalikan nilai 0 pada anak
- Mengembalikan angka positif dari PID anak di dalam induk
Proses eksekusi fungsi fork():
- Ketika fungsi fork() dijalankan, dua salinan identik dari ruang alamat akan dibuat
- Kedua proses mulai dijalankan setelah
- Induk dan anak berjalan secara independen
Beberapa catatan yang diperlukan untuk fungsi fork():
- Urutan eksekusi dari induk dan anak dapat berbeda pada berbagai platform
- Proses induk dan anak dijadwalkan secara independen
- Di Ubuntu Linux, 1-2-3-4 (anak kemudian kembali ke induk)
- Di Solaris, 1-3-4-2 (induk kemudian anak)
- Secara umum, kita tidak pernah tau apakah anak mulai mengeksekusi sebelum induk atau sebaliknya. Hal ini tergantung pada penjadwalan algoritma yang digunakan oleh kernel.
- Fungsi fork() dipanggil sekali tetapi mengembalikan dua kali
- Nilai kembali pada anak adalah 0
- Nilai kembali pada induk adalah PID anak
- Baik anak dan induk terus mengeksekusi dengan instruksi yang mengikuti panggilan untuk fungsi fork() secarra independen
- Implementasi saat ini tidak melakukan salinan lengkap dari data induk, stack dan heap; teknik yang disebut copy on-write (COW) yang digunakan untuk membuat salinan bagian dari memori dimodifikasi oleh salah satu proses dan wilayah memori bersama dengan induk dan anak dilindungi oleh kernel untuk read-only.
- Fungsi fork() sering diikuti dengan fungsi exec()
Fungsi system():
- Mengeksekusi perintah dari dalam program sebanyak jika perintah itu telah diketik ke shell
- Membuat subproses menjalankan standard Bourne shell (/bin/sh) dan menyerahkan perintah ke shell untuk dijalankan; tunduk pada fitur, keterbatasan dan keamanan shell; pada kebanyakan sistem GNU/Linux, menunjuk ke bash.
Contoh pemakaian fungsi system():
#include <stdlib.h>
int main(){
int return_value;
return_value = system(“ls –l /”);
return return_value;
}
Panggilan sistem keluarga exec():
- Memanggil salah satu keluarga exec() akan mengakhiri program yang sedang berjalan dan mulai mengeksekusi yang baru yang ditentukan dalam parameter exec dalam konteks proses yang ada.
- ID proses tidak berubah
- int execl(const char *path, const char *arg, …);
- int execv(const char *path, char *const argv[]);
- int execle(const char *path, const char *arg, …, char *const envp[]);
- int execlp(const char *file, const char *arg, …);
- int execvp(const char *file, char *const argv[]);
Contoh pemakaian fungsi fork() dan exec():
Fungsi system yang lain:
- exit()
- wait()
- getpid()
- getppid()