Bunun Burada Ne İşi Var?
Dün şehre inmek için Sayın Menderes Türel’in zamanında Hafif Metro ...
Bu sene Doç. Dr. Aylin Kantarcı hocamızın verdiği İşletim Sistemleri 2 dersinde, süreçleri (processler) ve nasıl işlediklerini ayrıntılı bir şekilde öğrendik.
Bize verilen ödevde, iki matrisin çarpma işleminin her satırını bir sürece yaptıracağımız bir program istendi. Ödevin daha sonra değiştirilen ve kontrolü iptal edilen ilk sürümünde, henüz IPC’leri görmediğimizden süreçler arası bilgi aktarımını süreçleri aynı adres sahasında farklı program counterlar ile çalıştırarak sağlamıştık. (vfork)
Zaten sonra IPC’lere dönüştürmek 15 dakikamı ya aldı ya almadı.
Vfork bir linux sistem çağrısıdır. (system call) Onun için aşağıdaki kod Windows’ta çalışmaz.
Kaynak kodlarını, örnek girdi dosyasını ve ödev metnini aşağıdan indirebilirsiniz. Kaynak kodunu indirmek istemezseniz yazının devamına göz atabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> int main() { /* Acilis yazilari BASLANGICI */ printf("Umut BENZER\n"); printf("05-06-7670\n"); printf("Ege Universitesi Bilgisayar Muhendisligi 3. Sinif\n"); printf("http://www.ubenzer.com\n"); printf("Processes\n\n"); /* Acilis yazilari SONU */ int m; int n; int k; int pid; pid = fork(); if (pid == 0) { /* B süreci */ FILE *fp; if((fp=fopen("input.txt","r")) == NULL) { printf ("Dosya acilamadi."); exit(-1); } fscanf(fp,"%d %d %d",&m, &n, &k); int matrisA[m][n]; int matrisB[n][k]; int matrisC[m][k]; int i; int j; for(i=0;i<m;i++) { for(j=0;j<k;j++) { matrisC[i][j] = 0; } } /* A MATRISINI OKU */ for(i=0;i<m;i++) { for(j=0;j<n;j++) { fscanf(fp,"%d",&matrisA[i][j]); } } /* B MATRISINI OKU */ for(i=0;i<n;i++) { for(j=0;j<k;j++) { fscanf(fp,"%d",&matrisB[i][j]); } } fclose(fp); /* EKRANA MATRISLERI YAZDIR */ printf("Matris A:\n"); for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%d\t", matrisA[i][j]); } printf("\n"); } printf("\nMatris B:\n"); for(i=0;i<n;i++) { for(j=0;j<k;j++) { printf("%d\t", matrisB[i][j]); } printf("\n"); } int pidler[m]; for(i=0;i<m;i++) { pidler[i] = vfork(); if (pidler[i] == 0) { int ic1,ic2; for(ic1=0; ic1<k; ic1++) { for(ic2=0; ic2<n; ic2++) { matrisC[i][ic1] += matrisA[i][ic2] * matrisB[ic2][ic1]; } } exit(0); } else if(pid < 0){ fprintf(stderr, "Fork yapamadim. %d\n", errno); exit(EXIT_FAILURE); } } for(i=0;i<m;i++) { wait(pidler[i]); } printf("\nMatris C:\n"); for(i=0;i<m;i++) { for(j=0;j<k;j++) { printf("%d\t", matrisC[i][j]); } printf("\n"); } exit(0); } else if (pid > 0) { wait(); } else { fprintf(stderr, "Fork yapamadim. %d\n", errno); exit(EXIT_FAILURE); } } |
Twitler yükleniyor... 5 saniye sonra
Bıdı bıdı bıdı bıdı dıdı dıdı dudu dudu hıdı hıdı hödü hödü yüklüyoruz öhüm öhüm bıdı bıdı vs vs... 6 nanosaniye önce
Yüklenmenin geç olmasının sebebi ben değilim, Twitter API'sinin yavaş olması. Gudu gudu hıdı hödö büdü büdü... 25697 asır önce
Ha tabi bunları okumuşsan, bu sitenin çok gizli bir özelliğini bulmuşsun demektir. ;) Tebrikler. Bu "sürpiz yumurta"yı bulduğunu bana da haber verir misin? Tıkla! 6 dinazor önce
Sizin ödev basitmiş…
Bir de bizimkisine bir bakınız…"Aman hocam kavur balıkları,akşama getireceğim kabadayıları" cinsinden