MODUL 2
PRAKTIKUM SISTEM OPERASI I
TUJUAN
Setelah melaksanakan kegiatan praktikum ini diharapkan mahasiswa dapat:
1. Mahasiswa memahami konsep manajemen proses pada system operasi
2. Mahasiswa memahami manajemen proses di OS Windows
DASAR TEORI
Manajemen Proses
Proses merupakan program yang sedang dalam keadaan dieksekusi, atau juga merupakan unit kerja
terkecil yang secara individu memiliki sumber daya dan dijadwalkan oleh sistem operasi.
Konsep pembuatan proses:
- Setiap proses diberi nomor khusus sebagai identifikasi yang disebut process identification atau PID
berupa angka integer unik.
- Jika proses selesai (Terminated) maka semua sumber daya yang digunakan termasuk PID dibebaskan
kembali.
- Proses dibuat menggunakan system call fork() yang sering disebut forking proses
- System call fork() mengkopi proses pemanggil sehingga akan terdapat 2 proses yaitu :
1. Proses pemanggil disebut PARENT
2. Proses hasil kopian disebut CHILD
- Proses CHILD identik dengan proses PARENT-nya tetapi memiliki PID yang berbeda.
- Setelah proses baru (child) berhasil dibuat eksekusi dilanjutkan secara normal di masingmasing
proses pada baris setelah pemanggilan system call fork().
- Proses pemanggil (PARENT) dapat melakukan forking proses lebih dari satu kali sehingga
memungkinkan terdapat banyak proses CHILD yang dieksekusi.
- Proses CHILD dapat melakukan forking proses seperti halnya PARENT sehingga dapat terbentuk
struktur pohon proses.
Setiap proses di Windows direpresentasikan oleh sebuah blok executive process (EPROCESS). Disamping
berisi banyak atribut yang berhubungan dengan sebuah proses, sebuah blok EPROCESS terdiri dari dan
menunjuk pada sejumlah struktur data lain yang berhubungan.
#include <Windows.h>
#include <process.h>
#include <stdio.h>
main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
GetStartupInfo(&si);
printf("Running Notepad with CreateProcess\n");
CreateProcess(NULL, "notepad", // Name of app to launch
NULL, // Default process security attributes
NULL, // Default thread security attributes
FALSE, // Don't inherit handles from the parent
0, // Normal priority
NULL, // Use the same environment as the parent
NULL, // Launch in the current directory
&si, // Startup Information
&pi); // Process information stored upon return
printf("Done.\n");
exit(0);
}
Script di atas memulai sebuah proses baru yaitu membuka program notepad.
#include <Windows.h>
#include <process.h>
#include <stdio.h>
void main()
{
printf("Running Notepad with spawnlp\n");
_spawnlp( _P_NOWAIT, "notepad", "notepad", NULL );
printf("Done.\n");
exit(0);
}
#include <Windows.h>
#include <stdio.h>
GetStartupInfo(&structSInfo);
return 0;
}
Hasilnya adalah:
#include <Windows.h>
#include <process.h>
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD tstat;
GetStartupInfo(&si);
printf("Running ps with CreateProcess\n");
CreateProcess(NULL, "notepad", // Name of app to launch
NULL, // Default process security attributes
NULL, // Default thread security attributes
FALSE, // Don't inherit handles from the parent
0, // Normal priority
NULL, // Use the same environment as the parent
NULL, // Launch in the current directory
&si, // Startup Information
&pi); // Process information stored upon return
// Suspend our execution until the child has terminated.
WaitForSingleObject(pi.hProcess, INFINITE);
// Obtain the termination code.
GetExitCodeProcess(pi.hProcess, &tstat);
printf("Child process %d terminated with code %d.\n",
pi.dwProcessId, tstat);
exit(0);
}
4. Creating a Thread
Di Windows, threads dibuat menggunakan fungsi CreateThread.
Setelah thread dibuat, thread ID dapat digunakan untuk mengelola thread tersebut (misalnya:
mengambil nilai atau mengatur priority) sampai thread tersebut selesai eksekusi. Contoh script
berikut merupakan penggunaan fungsi CreateThread untuk membuat sebuah single thread.
5. Thread Scheduling
Setiap thread mempunyai priority level yang ditentukan oleh nilai priority dan kelas priority. OS
menggunakan priority level dari semua executable threads untuk menentukan thread mana
yang mendapatkan jatah CPU. Thread dijadwalkan menggunakan algoritma round robin, dan
penjadwalan thread pada nilai priority yang lebih rendah hanya akan terjadi jika tidak ada
executable thread yang memiliki nilai priority yang lebih tinggi.
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_THREADS 5
DWORD WINAPI thread_function(LPVOID arg) {
int t_number = *(int *)arg;
int rand_delay;
printf("thread_function running. Arg was %d\n", t_number);
// Seed the random-number generator with
// current time so that the numbers will
// be different each time function is run.
srand((unsigned)time(NULL));
// random time delay from 1 to 10
rand_delay = 1 + (rand() % 10);
Sleep(rand_delay*1000);
printf("See Ya from thread #%d\n", t_number);
return 100;
}
main()
{
HANDLE a_thread[NUM_THREADS];
int multiple_threads;
for(multiple_threads = 0; multiple_threads <
NUM_THREADS; multiple_threads++)
{
// Create a new thread.
a_thread[multiple_threads] =
CreateThread(NULL, 0, thread_function,(LPVOID)
&multiple_threads, 0,NULL);
if (a_thread[multiple_threads] == NULL)
{
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
Berikut hasilnya:
REFERENSI
Windows Developing Phase: Process and Thread Management
https://technet.microsoft.com/en-us/library/bb497007.aspx