TUGAS MANDIRI ORGANISASI KOMPUTER DAN SISTEM OPERASI
PROGRAM THREAD
Disusun oleh :
Zulfannullah (064001600015)
Devi Febrita Sari H. (064001600020)
Tri Cendekia Dewi (065001600014)
Novenia Tika (065001600015)
TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS TRISAKTI
2017
DESKRIPSI
Membuat program komunikasi antar thread menggunakan Linux versi Ubuntu 64-bit.
KOMPETENSI DASAR
1. Memahami Komunikasi antar Thread dalam sistem operasi Linux Ubuntu 64-bit.
2. Memahami fungsi Komunikasi antar Thread
3. Memahami bahasa pemrograman pada terminal Linux
TUJUAN
Laporan ini dibuat untuk menyelesaikan praktikum sebelas matakuliah Organisasi computer dan Sistem Operasi. Selain itu, hal ini juga beguna sebagai panduan umum penggunaan fungsi thread terminal pada operasi sistem linux.
TEORI PERCOBAAN
Thread dalam sistem operasi dapat diartikan sebagai sekumpulan perintah (instruksi) yang dapatdilaksanakan (dieksekusi) secara sejajar dengan ulir lainnya, dengan menggunakan cara time slice (ketika satu CPU melakukan perpindahan antara satu ulir ke ulir lainnya) atau multiprocess(ketika ulir-ulir tersebut dilaksanakan oleh CPU yang berbeda dalam satu sistem).
Ulir sebenarnya mirip dengan proses, tapi cara berbagi sumber daya antara proses dengan ulir sangat berbeda. Multiplethread dapat dilaksanakan secara sejajar pada sistem komputer. Secaraumum multithreading melakukan time-slicing (sama dengan time-division multipleks), dimana sebuah CPU bekerja pada ulir yang berbeda, di mana suatu kasus ditangani tidak sepenuhnya secara serempak, untuk CPU tunggal pada dasarnya benar-benar melakukan sebuah pekerjaan pada satu waktu.
Thread saling berbagi bagian program, bagian data dan sumber daya sistem operasi denganthread lain yang mengacu pada proses yang sama. Thread terdiri atas ID thread, program counter, himpunan register, dan stack. Dengan banyak kontrol thread proses dapat melakukan lebih darisatu pekerjaan pada waktu yang sama.
LAB SETUP
· 1 buah PC.
· Sistem Operasi Linux (Ubuntu 64-bit).
CARA PERCOBAAN
1. Buka terminal pada Linux
2. Buka file yang sudah dibuat dengan cara tulis:
$ nano threadtm.c, tekan enter.
3. Tulis sourcodenya seperti gambar berikut.
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
/*
Struktur dibawah ini mengandung informasi yang dibutuhkan untuk mengakses fungsi dotprod untuk mengakses data yang diinputnya dan menaruh outputnya kedalam struktur.
Struktur ini tidak berubah dari bentuk sekuensial. Program ini adalah program thread yang mengeluarkan output dari variabel mutexnya
*/
typedef struct
{
double *a;
double *b;
double sum;
int veclen;
} DOTDATA;
/* Mendefinisikan variabel yang bisa diakses secara global atau member variabel dan jg mutex*/
#define NUMTHRDS 10
#define VECLEN 1000
DOTDATA dotstr;
pthread_t callThd[NUMTHRDS];
pthread_mutex_t mutexsum;
/*
Fungsi dotprod diaktifkan ketika thread itu telah dibuat.
Seperti sebelumnya, semuainput untuk rutin ini diperoleh dari struktur dengan tipe DOTDATA dan semua output dari fungsi ini ditulis kedalam struktur ini. Keuntungan dari keluaran ini adalah bagi program multithread: ketika thread dibuat kita melewati satu argumen untuk fungsi yg diaktifkan biasanya argumen ini adalah angka thread. Semua informasi lainnya yang dibutuhkan oleh fungsi diakses dari struktur global.
*/
void *dotprod(void *arg)
{
/* Mendefinisikan dan menggunakan local variabel demi kemudahan*/
int i, start, end, len ;
long offset;
double mysum, *x, *y;
offset = (long)arg;
len = dotstr.veclen;
start = offset*len;
end = start + len;
x = dotstr.a;
y = dotstr.b;
/*
Perform the dot product and assign result
to the appropriate variable in the structure.
*/
mysum = 0;
for (i=start; i<end ; i++)
{
mysum += (x[i] * y[i]);
}
/*
Lock a mutex prior to updating the value in the shared
structure, and unlock it upon updating.
*/
pthread_mutex_lock (&mutexsum);
dotstr.sum += mysum;
printf("Thread bagian %ld melakukan %d untuk %d=\nJumlah=%f\nTotal=%f\n\n",offset,start,end,mysum,dotstr.sum);
pthread_mutex_unlock (&mutexsum);
pthread_exit((void*) 0);
}
/*
The main program creates threads which do all the work and then
print out result upon completion. Before creating the threads,
The input data is created. Since all threads update a shared structure, we
need a mutex for mutual exclusion. The main thread needs to wait for
all threads to complete, it waits for each one of the threads. We specify
a thread attribute value that allow the main thread to join with the
threads it creates. Note also that we free up handles when they are
no longer needed.
*/
int main (int argc, char *argv[])
{
long i;
double *a, *b;
void *status;
pthread_attr_t attr;
/* Assign storage and initialize values */
a = (double*) malloc (NUMTHRDS*VECLEN*sizeof(double));
b = (double*) malloc (NUMTHRDS*VECLEN*sizeof(double));
for (i=0; i<VECLEN*NUMTHRDS; i++) {
a[i]=1;
b[i]=a[i];
}
dotstr.veclen = VECLEN;
dotstr.a = a;
dotstr.b = b;
dotstr.sum=0;
pthread_mutex_init(&mutexsum, NULL);
/* Buat thread untuk melakukan dotprodak */
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
for(i=0;i<NUMTHRDS;i++)
{
/* Setiap thread bekerja dalam himpunan data yang berbedaEach thread works on a different set of data.
* Offsetnya dispesifikasikan oleh 'i'. Ukuran datanya tiap thread diindikasikan oleh VECLEN
*/
pthread_create(&callThd[i], &attr, dotprod, (void *)i);
}
pthread_attr_destroy(&attr);
/* Tunggu thread lainnya*/
for(i=0;i<NUMTHRDS;i++) {
pthread_join(callThd[i], &status);
}
/* Setelah bergabung, print output hasilnya dan bersihkan.*/
printf ("Sum = %f \n", dotstr.sum);
free (a);
free (b);
pthread_mutex_destroy(&mutexsum);
pthread_exit(NULL);
}
4. Keluar dari editor dan save.
5. Compile file threadtm.c dengan cara ketik:
$ gcc threadtm.c -o threadtm2orkom.c -lpthread, tekan enter.
6. Jalankan threadtm2orkom.c dengan mengetikkan:
$ ./threaddd.c, lalu tekan enter.
7. Lihat outputnya.
8. Selesai
DATA PERCOBAAN
KESIMPULAN
Thread adalah unit dasar dari utilitas CPU. Di dalamnya terdapat ID thread, program counter, register, dan stack. Dan saling berbagi dengan thread lain dalam proses yang sama. dengan apa yang kita kerjakan diatas, maka anda telah berhasil menjalankan Komunikasi antar Thread.
Full Video On Youtube : Tugas Mandiri THREAD
Full Video On Youtube : Tugas Mandiri THREAD
0 komentar:
Posting Komentar