Anda di halaman 1dari 15

SISTEM OPERASI Inter Process communication (IPC)

Oleh : Kelompok 09 Baiq Sofia Hadra Muhammad Ridwan Satrio 1208605006 1208605028

PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN ILMU KOMPUTER FMIPA UNIVERSITAS UDAYANA Bukit Jimbaran 2013

KATA PENGANTAR Puji dan Syukur kami panjatkan ke Hadirat Tuhan Yang Maha Kuasa, karena berkat limpahan Rahmat dan Karunia-nya sehingga kami dapat menyusun laporan ini dengan baik dan tepat pada waktunya. Dalam laporan ini kami membahas mengenai Inter Process
communication (IPC).

Laporan ini dibuat dengan berbagai observasi dan beberapa bantuan dari berbagai pihak untuk membantu menyelesaikan tantangan dan hambatan selama mengerjakan makalah ini. Oleh karena itu, kami mengucapkan terima kasih yang sebesar-besarnya kepada semua pihak yang telah membantu dalam penyusunan makalah ini. Dalam laporan ini banyak kekurangan yang terdapat di dalamnya. Oleh karena itu kamiharapkan bapak/ibu dosen untuk memberikan saran serta kritik yang dapat membangun kami. Kritik konstruktif dari pembaca sangat kami harapkan untuk penyempurnakan laporan selanjutnya. Akhir kata semoga laporan ini dapat memberikan manfaat bagi kita sekalian.

Jimbaran,20 November 2013

penulis

DAFTAR ISI KATA PENGANTAR 1. 2. 3. 4. 5. PENDAHULUAN ..................................................................................................... 4 ANALISIS PERMASALAHAN ............................................................................... 5 Desain System .......................................................................................................... 5 Implementasi ............................................................................................................ 7 Hasil ....................................................................................................................... 11

DAFTAR ISI

1. PENDAHULUAN
Soal 1 (25%) Terdapat sebuah file data set (data_nilai.txt) yang merupakan kompilasi data nilai suatu mata kuliah. Data dalam bentuk tabular yang terdiri dari 5 kolom data yang dipisahkan dengan karakter tab "\t". Kolom pertama merupakan ID dari mahasiswa, yang diawali karakter '#'. Kolom kedua adalah nilai1, dan seterusnya nilai2, nilai3 dan nilai4. Untuk mengetahui nilai akhir dari setiap mahasiswa, maka harus dihitung dengan rumus. Nilai Akhir = 10% nilai1 + 20% nilai2 + 20% nilai3 + 50% nilai4 Hasil dari perhitungan tersebut kemudian disimpan dalam sebuah file (nilai_akhir.txt) dengan format tabular dipisahkan karakter tab. Hanya saja, tiap baris data terdiri dari 2 kolom, ke-1 : id mahasiswa, ke-2 : nilai akhir (2 digit precision). Contoh isi nilai_akhir.txt #1 81.84 #2 85.55 dst Untuk menyelesaikan permasalahan diatas, buatlah 2 buah program terpisah yang berkomunikasi satu dengan yang lain.

program A : berfungsi untuk membaca setiap baris dari data set program B : berfungsi untuk menghitung nilai akhir setiap baris data set dan menyimpan dalam file nilai_akhir.txt

Soal 2 (25%) Berkaitan dengan soal sebelumnya, nilai akhir tiap mahasiswa kemudian di konversi menjadi nilai huruf, dengan skala A > 80, 60 < C <= 70, 70 < B <= 80, 50 < D <= 60, E <= 50

Untuk mengetahui siapa saja yang mendapatkan nilai A, B, C, D dan E, maka setiap nilai akan dibuatkan satu buah file yang nantinya berisi ID peserta (satu baris satu peserta) sesuai dengan skala yang ada. A = nilaiA.txt, B=nilaiB.txt dst Contoh isi file nilaiA.txt #1 #5 #7

Untuk permasalahan ini, buatlah 3 buah program (modifikasi soal no 1)

terpisah yang berkomunikasi satu dengan yang lain. Program A dan Program B memiliki fungsi yang sama seperti soal sebelumnya. Sedangkan Program C berfungsi untuk mengelompokkan mahasiswa yang mendapatkan nilai A, B dst pada file yang bersesuaian. Tanggung jawab setiap file nilai(nilaiA dst) dibebankan kepada sebuah proses anak dari program C, sehingga akan terdapat 5 child process yang dibuat pada program C.
2. ANALISIS PERMASALAHAN Pada tugas kali ini kami akan membuat 2 program yang berfungsi untuk membaca setiap baris dari data set dan untuk menghitung nilai akhir setiap baris data set dan menyimpan dalam file nilai_akhir.txt,

dimana tiap baris data terdiri dari 2 kolom yaitu kolom 1 berisi : id mahasiswa, dan kolom 2 berisi
nilai akhir. Setelah program di buat akan di konversi menjadi nilai huruf dengan skala yang sudah di tentukan pada soal no 2 di atas.setelah di ketahui mahasiswa yang mendapatkan nilai A, B, C, D dan E, maka akan di buat sebuah file yang nantinya berisi ID peserta sesuia dengan skala.

3. Desain System desain system soal 1 : pada permasalahan pertama kami membuat dua program yang berkomunikasi satu sama lain, pada program pertama yaitu program A1 merupakan program berfungsi untuk membaca setiap baris dari data set, lalu pada program kedua yaitu program B1 merupakan progam berfungsi untuk
menghitung nilai akhir setiap baris

berikut ini diagram solusi dari permasalahan 1 atau soal 1 :

Program A1 Write only Scan Data1

Program B1 Read only cetak

nilai.txt

Nilai_akhir.txt

pada pdiagram diatas dijelaskan bahwa program A1 mebaca file data nilai.txt lalu menampung dan menulis kan ke data1 sebagai datapipe. Lalu program B1 mengambil data dari data1 sebagai datapipe tadi dan memproses nilai-nilai dengan perhitungan nilai akhir seperti pada soal sehingga menghasilkan data-data nilai akhir yang kemudian di cetak di file text dengan nama nilai_akhir.txt

desain system soal 2 : pada permasalahan kedua kami memodifikasi programA1 dan programB1 dan menambahkan program c sebagai pengelompokan nilai sehingga outputnya berupa nilai dalam bentuk abjad berikut ini diagram solusi dari permasalahan 2 atau soal 2 : Program A2 scan Nilai.txt Data 2 read Program 2 cetak write only read only Data 1 write Program B2

A.txt

B.txt

D.txt

E.txt

C.txt

pada diagram diatas dijelaskan bahwa program A2 mebaca file data nilai.txt lalu menampung dan menulis kan ke data1 sebagai datapipe. Lalu program B1 mengambil data dari data1 sebagai datapipe tadi lalu disimpan ke data2 sebagai datapipe yang baru, lalu data-data yang ada pada data2 di proses oleh program C2 sehingga menghasilkan output berupa text yang merupakan pengelompokan nilainilai tersebut yang berisi id yang merupakan yang mendapatkan nilai A dan seterusmya

4. Implementasi program A1 dan A2 #include <stdio.h> #include <stdlib.h> #include <sys/shm.h>


#include <sys/stat.h> //untuk penggunaan variable S_IRGRP, dimana file akan dibuat dengan mode pembacaan untuk group.

//standar input / devinisi output

#include <sys/types.h> #include <unistd.h>


#include <fcntl.h>

//definisi fungsi
//untuk

UNIX standar

menggunkan fungsi open().

#include <string.h>

//definisi fungsi string

int main(void) { float data[69][5]; int read, i, k=0, t;

kode program di atas menginisialisasikan array dua dimensi yang mempunyai alokasi data 69 baris dan 5 kolom, int fd=open("data1", O_WRONLY); FILE *fifo=fopen("nilai.txt","r");

kode program diatas dengan perintah fd=open membuka data pipe yang bernama data1 yang hanya dapat di write only ke data1 dari data nilai.txt for(i=0;i<=69;i++) { read=fscanf(data1,"#%f %f %f %f %f\n",&data[i][0],&data[i][1],&data[i][2],&data[i][3],&da ta[i][4]);

kode program diatas merupakan perulangan untuk pengecekan / menerima data dari nilai.txt sehingga di tampung pada array dinamis yang terdiri dari 69 baris dan masing baris terdapat 5 kolom. while(k<i){ for(t=0;t<5;t++) { write(fd,&data[k][t],sizeof(data)); }k++; } fclose(data1);

Kode program diatas perulangan untuk menulis atau write data yang sudah ditampung dari nilai.txt yang selanjutnya di bawa ke fd yaitu data1. Lalu di tutup dengan perintah fclose. Program B1 int main(void) { float data[69][5], hasil[69]; int ID[69], i=0,k=0,t; kode program diatas merupakan inisialisasi array dua dimensi untuk menampung nilai dan inisialisasi array satub dimensi yang dapat mengalokasikan 69 data yang bertipe float. int fd=open("data1",O_RDONLY); FILE *data1=fopen("nilai_akhir.txt","w+"); mkfifo("data1",0660);

kode program diatas merupakan membuka pipe dengan nama database sebelumnya yaitu data1, dan dengan mode Read Only. Lalu membuat dan membuka file baru dengan nama nilai_akhir.txt. Sedangkan perintah mkfifo untuk membuat file pipe dengan nama data1, dan 0660 adalah file permission untuk file databasenya yang berarti write dan read.

while(b<69) { for(c=0;c<5;c++) { read(fd,&data[b][c],sizeof(data)); } ID[b]=data[b][0]; hasil[b]=0.1*data[b][1]+0.2*data[b][2]+0.2*data[b][3]+0.5 *data[b][4]; fprintf(fifo,"| #%d | %f |\n",ID[b],hasil[b]); b++; }

Kode program diatas merupakan perulangan untuk memproses dan mencetak nilai akhir, pertamatama membaca nilai-nilai pada pipe lalu diproses secara aritmatik dengan rumus yang ada di kode program tersebut, setelah melakukan proses operational untuk nilainya maka akan di tampung dan ditulis pada nilai_akhir.tx PROGRAM B2 pada program B2 hampir mirip dengan B1 namun pada program B2 output hasilnya di tampung pada datapipe yang baru yaitu data2. Seperti kode program dibawah ini fd1=open("data1",O_RDONLY); fd2=open("data2",O_WRONLY);

PROGRAM C2 Berikut ini potongan kode program C2 beserta penjelasan int fd2=0; int pid,k=0; float hasil[100],ID[100]; FILE *fp1,*fp2,*fp3,*fp4,*fp5; unlink("data2"); mkfifo("data2",0660);

Pada program diatas FILE *fp1,*fp2,*fp3,*fp4,*fp5 merupakan pendeklarasian operasi file dan unlink("data2") berfungsi menghapus datapipe dari file system. Dan mkfifo("data2",0660) berfungsi memanggila datapipe yang telah ada yaitu 'data1' fd1=open("data1",O_RDONLY); fd2=open("data2",O_WRONLY);

kode program diatas merupakan pembuatan file-file dengan fd (file descriptor), untuk membuat filefile text untuk menampung kelompok-kelompok nilai, fp1=fopen("A.txt","w+") berfungsi

untuk membuat file baru yang bernama A.txt berdasarkan nilai lebih dari 80. fp2=fopen("B.txt","w+") berfungsi untuk membuat file baru yang bernama B.txt berdasarkan nilai antara 70 dan 80. fp3=fopen("C.txt","w+") berfungsi untuk membuat file baru yang bernama C.txt berdasarkan nilai antara 60 dan 70. fp4=fopen("D.txt","w+") berfungsi untuk membuat file baru yang bernama D.txt berdasarkan nilai antara 50 dan 60. fp5=fopen("E.txt","w+") berfungsi untuk membuat file baru yang bernama E.txt berdasarkan nilai kurang dari 50.

if(hasil[k]>80) { fprintf(fp1,"#%d\n",(int)ID[k]); } else if(hasil[k]<=80 && hasil[k]>70) { fprintf(fp2,"#%d\n",(int)ID[k]); } else if(hasil[k]>60 && hasil[k]<=70) { fprintf(fp3,"#%d\n",(int)ID[k]); } else if(hasil[k]<=60 && hasil[k]>50) { fprintf(fp4,"#%d\n",(int)ID[k]); } else { fprintf(fp5,"#%d\n",(int)ID[k]); } k++; }

} close(fd2); fclose(fp1); fclose(fp2); fclose(fp3); fclose(fp4); fclose(fp5); Pada kode program diatas selama k < 80 , maka dilakukan pembacaan ID mahasiswa(hasil nili akhir) dari dapipe 2. Jika nilai > 80 cetak ID pada file A.txt. jika nilai akhir antara 70 dan 80 cetak ID file B.txt, nilai 60 dan 70 cetak ID pada file C.txt, nilai akhir antara 50 dan 60 cetak ID file D.txt nilai akhir < 50 cetak ID file E.txt jika perulangan sudah selesai maka fd2,fp1,fp2,fp3,fp4 dan fp5 diclose.

5. Hasil
Screenshot pada saat di jalankan program A1 dan program B1.

Program di jalankan pada 2 buah terminal, saat menjalankan program, A1 harus lebih dahulu di eksekusi atau di jalankan baru setelah itu program B1 di jalankan. Seperti terlihat pada gambar di atas. Untuk menjalankan program pada terminal 1 dapat di ketik perintah gcc o main 1 program A1, maka keluarnya atau output main1. Begitu juga untuk membuat main2. Berikut syntak-syntak yang di gunakan di terminal pada saat menampilkan program : $ cd Desktop Berfungsi untuk mengantarkan ke alamat ke direktory desktop. $ ls Melihat isi file dari direktori yang aktif. $ gcc o nama_file nama_file.c berfungsi meng-kompile C program pada terminal $ ./program_a1 untuk menampilkan atau menjalankan program A1. $ ./program_b2 untuk menampilkan atau menjalankan program B1.

Berikut adalah hasil compile dalam program A1 dan B1

Setelah semua synatk di jalankan di terminal, baik terminal A1 atau B1 akan terlihat hasil akhir .txt Dimana akan menampilkan semua nilai yang terdapat di dalamnya.

Tampilan nilai akhir dari program nilai_akhir.txt.

Screenshot pada saat di jalankan program A2 dan program B2 serta C2.

Berikut adalah hasil compile dalam program A2 dab B2

Hasil dari program .txt A.B.C.D.E.

Kesimpulan
Dari program yang kami buat, dapat kami simpulkan bahwa dengan mempelajari IPC maka kami mampu membuat beberapa program yang dapat melakukan interaksi dan berkomunikasi antar program dimana terdapat beberapa program berfungsi untuk membaca dan menulis serta memproses dalam suatu file data.

DAFTAR PUSTAKA http://people.na.infn.it/~garufi/didattica/CorsoAcq/SerialProgrammingInPosixOSs.pdf http://docs.oracle.com/cd/E26502_01/html/E35299/svipc-posixipc.html http://menehune.opt.wfu.edu/Kokua/More_SGI/007-2478-008/sgi_html/ch02.html http://www.advancedlinuxprogramming.com/alp-folder/alp-ch03-processes.pdf www.cs.cf.ac.uk/Dave/C/node25.html#SECTION002540000000000000000