Modul ini membahas tentang proses dan thread dalam sistem operasi. Terdapat penjelasan tentang konsep dasar proses dan thread beserta cara membuat dan mengelola proses serta thread. Modul ini juga berisi contoh kode program dan langkah-langkah praktikum untuk mempelajari proses dan thread secara langsung.
1. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
MODUL 04
SISTEM OPERASI
LABORATORIUM TEKNIK INFORMATIKA
UNIVERSITAS PASUNDAN
BANDUNG
2014
2. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
Praktikum IV
Process dan Thread
I. Dasar Teori
I.1. Proses
Proses adalah program yang sedang dieksekusi. Setiap kali menjalankan suatu
program, Sistem UNIX melakukan suatu fork(), yaitu melakukan beberapa urutan operasi
untuk membuat suatu proses konteks dan kemudian mengeksekusi program tersebut dalam
konteks yang sudah dibuat. Setiap proses yang dijalankan akan memiliki PID (Process ID).
Kita dapat melihat proses yang sedang berjalan dengan perintah ps. Dengan fork() sistem call
akan membuat proses baru yang identik dengan proses induk kecuali proses ID. Proses
dicopy ke memory dari proses parent dan strukture proses baru ditangani oleh kernel.
Lingkungan, resource limits, umask, controlling terminal, direktori tempat eksekusi, root
direktori, signal mask, dan resource proses lainnya digandakan dari proses induk oleh proses
fork.
I.2. Thread
Operasi thread meliputi pembuatan thread, penghentian, sikronisasi, penjadwalan,
managemen, dan pengulangan proses.
Thread tidak mengatur pembuatan thread lain, atau mengetahui sebuah thread laen
telah dibuat.
semua thread dengan sebuah proses saling berbagi pakai address space.
Thread pada satu proses yang sama saling berbagi pakai:
- Process instructions
- Most data
- open files (descriptors)
- signals and signal handlers
- current working directory
- User and group id
setiap thread merupakan unik
- Thread ID
- set of registers, stack pointer
- stack for local variables, return addresses
- signal mask
- priority
- Return value: errno
fungsi pthread memberikan nilai #0# jika OK
Tujuan Praktikum :
1. Mengerti konsep proses dan thread
2. Mampu membuat proses dan thread
3. Mmampu memanajemen proses
3. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
Contoh membuat dan mengakhiri thread
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_message_function( void *ptr );
main()
{
pthread_t thread1, thread2;
char *message1 = "Thread 1";
char *message2 = "Thread 2";
int iret1, iret2;
/* Create independent threads each of which will
execute function */
iret1 = pthread_create( &thread1, NULL,
print_message_function, (void*) message1);
iret2 = pthread_create( &thread2, NULL,
print_message_function, (void*) message2);
/* Wait till threads are complete before main
continues. Unless we */
/* wait we run the risk of executing an exit
which
will terminate */
/* the process and all threads before the threads
have completed. */
pthread_join( thread1, NULL);
pthread_join( thread2, NULL);
printf("Thread 1 returns: %dn",iret1);
printf("Thread 2 returns: %dn",iret2);
exit(0);
}
void *print_message_function( void *ptr )
{
char *message;
message = (char *) ptr;
printf("%s n", message);
}
4. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
II.MATERI PRAKTIKUM
1. Login ke sistem GNU/Linux kemudian buka terminal.
2. Pelajari dan lakukan percobaan terhadap perintah-perintah berikut :
Percobaan 1 : Melihat Memory Komputer
Percobaan 2 : Melihat Keseluruhan Proses yang berjalan
Percobaan 3 : Mejadwalkan Proses dan Pembatalkanya
Percobaan 4 : Mengecek Proses yang berjalan di sistem
$ free -okt
$ top
1. Menggunakan instruksi at :
a. $ date
b. $ at <waktu yang mendekati waktu saat ini>
misal : $ at 17:15
c. Akan muncul prompt 'at'
d. dmesg > simpanan
e. Tekan ENTER kemudian CTRL+D
f. Lihatlah daftar antrian dengan mengetikkan
: $at –l
2. Membatalkan proses
$ at -d nomorjobid, misal : $at -d 12
$ jobs
$ jobs -l
5. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
Percobaan 5 : Membuat Background dan Foreground Proses
1. Ketik Sorcode ini lalu simpanlah dengan nama proses.sh
#! /bin/sh
i=0
while [ true ];
do
i=$(($i+1))
done
echo $i
2. Ubah hak Aksesnya
$ chmod +x proses.sh
3. Eksekusilah program proses.sh
$ ./proses.sh
4. Suspend Prosesnya
Ketik : CTRL + Z
5. Lihat NomorJOB proses yang kita suspend
$ jobs
6. Jalankan Proses di Background
$ bg %nomorjobs_padaProses
7. Lihat Apakah proses sudah berjalan lagi
$ jobs
8. Jalankan Proses di Foreground
$ fg %nomorPIDpadajobs
Suspend Prosesnya
$ Ketik CTRL + Z
9. Lihat PID proses foreground
$ ps
10. Hentikan Proses tersebut
$ kill -9 <NoPID>
6. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
Percobaan 6 : Membuat Fork di dalam Proses
#include <stdio.h> /* printf, stderr, fprintf */
#include <unistd.h> /* _exit, fork */
#include <stdlib.h> /* exit */
#include <errno.h> /* errno */
int main(void)
{
pid_t pid;
/* Output from both the child and the parent process
* will be written to the standard output,
* as they both run at the same time.
*/
pid = fork();
if (pid == 0)
{
/* Child process:
* When fork() returns 0, we are in
* the child process.
* Here we count up to ten, one each second.
*/
int j;
for (j = 0; j < 10; j++)
{
printf("child: %dn", j);
sleep(1);
}
_exit(0); /* Note that we do not use exit() */
}
else if (pid > 0)
{
/* Parent process:
* When fork() returns a positive number, we are in
the parent process
* (the fork return value is the PID of the newly-
created child process).
* Again we count up to ten.
*/
int i;
for (i = 0; i < 10; i++)
{
printf("parent: %dn", i);
sleep(1);
}
exit(0);
}
7. Modul Praktikum Sistem Operasi
Praktikum IV
Ferry Mulyanto , ST
Untuk Percobaan 6 ikuti langkah – langkah berikut ini :
A) Simpan source code dengan nama fork.c
B) Lalu kompile sorce code tersebut dengan perintah
$ gcc -o fork fork.c
C) Running file hasil kompile dengan perintah
$ ./fork
III. TUGAS PRAKTIKUM
A. Tugas Praktikum
else
{
/* Error:
* When fork() returns a negative number, an error
happened
* (for example, number of processes reached the
limit
).
*/
fprintf(stderr, "can't fork, error %dn", errno);
exit(EXIT_FAILURE);
}
}