βοηθεια σε ασκηση στα λειτουργικα....!!!!!

...IDE, compilers, κλπ

Συντονιστής: konnn

βοηθεια σε ασκηση στα λειτουργικα....!!!!!

Δημοσίευσηαπό marialina » 05 Μάιος 2010, 17:32

ΕΧΕΙ ΚΑΝΕΙΣ ΙΔΕΑ ΠΩΣ ΛΥΝΕΤΑΙ ΑΥΤΗ Η ΕΡΓΑΣΙΑ:
:problem: :problem: :problem: :problem:
Να υλοποιηθει ενα διαμοιραζομενο C προγραμμα με καταλληλη χρηση των IPC shared memory calls.Γραψτε ενα προγραμμα σε C χρησιμοποιωντας το ποποι θα δημιουργει ενα χωρο κοινησ μνημης,στο οποιο θα αποθηκευει ενα πινακα απο 20 αριθμους,στη συνεχεια θα δημιουργει μια διεργασια παιδι, ηοποια θα εκτελει δυαδικη αναζητηση στον πινακα αυτον για ενα συγκεκριμενο αριθμο.Καντε τη γονικη διεργασια να καλεσει την κληση wait() ωστε να περιμενει τον τερματισμο τησ θυγατρικης διεργασιας προτου να βγει απο το προγραμμα.η θυγατρικη διεργασια θα γραφει στην κοινη μνημη την θεση του πινακα στην οποια βρεθηκε ο αριθμος ή -1 στην περιπτωση που δεν βρεθηκε.η γονικη διεργασια θα διαβαζει την πληροφορια αυτη απο την κοινη μνημη και θα τυπωνει το αποτελεσμα που εγραψε η θυγατρικη διεργασια.ο ζητουμενοσ αριθμοσ θα περνιεται σαν ορισμα απο την γραμμη εντολησ του προγραμματοσ.το προγραμμα σασ να εκτελει τουσ απαραιτητους ελενχουσ και να εκδιδει καταλληλα μηνυματα σφαλματος.
marialina
babeTUX
babeTUX
 
Δημοσιεύσεις: 7
Εγγραφή: 05 Μάιος 2010, 17:09
Εκτύπωση

Re: βοηθεια σε ασκηση στα λειτουργικα....!!!!!

Δημοσίευσηαπό idomeneas » 06 Μάιος 2010, 16:51

Χωρίς να 'μαι ο πιο ειδικός σε αυτη την περιοχή, αυτό που θες έχει να κάνει με δυο διαδικασίες που η μια θα γράφει μια διαταξη από ακεραίους σε μια περιοχή κοινής μνήμης, και η άλλη θα διαβάζει και θα κάνει τη δυαδική αναζήτηση. Με τη λέξη ποποι τι ακριβώς εννοείς ; Αυτό που γράφω φτιάχνει μια περιοχή κοινης μνήμης και βάζει 20 τιμές σε αυτή, οι οποίες έχουν ζητηθεί από το χρήστη. Μετά κάνει μέσα της μια δυαδική αναζήτηση με τη βοήθεια της qsort() & bsearch() (binarysearch συνάρτηση), και σου επιστρέφει τη θέση που βρίσκεται η τιμή που αναζητάς ή -1. Αυτή μάλλον θα πρέπει να μπει σαν θυγατρική διαδικασία. Ένας κώδικας που ίσως σε βοηθήσει είναι αυτός
Κώδικας: Επιλογή όλων
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
int intcompare(const void* v1,const void* v2);
int binsearch(int n,int* arr,int keyval);
int main(){
int* array=0; /*the array has 20 values*/
int nval=20,i,keyval,keyid; /**/

int id_shmem=0;
key_t ipc_key;
ipc_key=5456;

id_shmem = shmget(ipc_key, sizeof(int)*nval, IPC_CREAT|0666);
printf("%d = id_shmem\n",id_shmem);
if (id_shmem<0){
perror("shmget error");
exit(1);
}

array = (int*)shmat(id_shmem,0,0);

if (array==(int*) -1){
perror("shmat error");
exit(1);
}
printf("Enter %d values\n",nval);
for (i=0;i<nval;i++)
scanf("%d",&array[i]);

printf("Enter value for binary search in array\n");

scanf("%d",&keyval);
keyid=binsearch(nval,array,keyval);
if (keyid==-1) printf("%d value not found\n",keyval);
else printf("%d value found at %d in sorted array\n",keyval,keyid);

return 0;
}

int intcompare(const void* v1,const void* v2){
return (*((int*)v1)-*((int*)v2));
}

int binsearch(int n,int* arr,int keyval){
int i;
int* parr=0;
qsort(arr,n,sizeof(int),intcompare);

printf("sorted array\n");
for (i=0;i<n;i++)
printf("%d\n",arr[i]);

parr=(int*)bsearch(&keyval,arr,n,sizeof(int),intcompare);

if (parr) return (parr-arr);
else return -1;

}

Αυτό βεβαίως δεν υλοποιεί τη θυγατρική διαδικασία, και η binarysearch πρέπει να υλοποιηθεί στη θυγατρική. Δηλαδή κάποιες αλλαγές θα πρέπει να κάνεις και να βάλεις μια wait function. Επίσης ίσως χρειαστείς να δεσμεύσεις +1 int θέση για την επιστρεφόμενη τιμή. Δεν ξέρω αν βοήθησαν αυτά που αναφέρω.
Λειτουργικό ⇛ Ubuntu 10.04 64 bit σε HP Pavilion dv7-3110ev
Προδιαγραφές φορητού ⇛ Core i3 2.13 GHz │ 3 GB │ nVidia G105M │ Broadcom 4357 │ Bluetooth ? │ Realtek HD Audio │ 17.3"
Λειτουργικό ⇛ Ubuntu 10.04 32 bit/Win XP σε desktop
Προδιαγραφές desktop ⇛ Pentium 4 3 GHz │ 2 GB DDR │ Sapphire ATi Radeon HD3450 512MB AGP │ Μητρική: Asus P5V800-MX
idomeneas
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 738
Εγγραφή: 09 Απρ 2010, 15:47
Εκτύπωση

Re: βοηθεια σε ασκηση στα λειτουργικα....!!!!!

Δημοσίευσηαπό marialina » 07 Μάιος 2010, 16:12

Εκανα λαθος το οποιο εννοουσα...με βοηθησες πολυ απλα δεν εχω καταλαβει τι κανει αυτο το σημειο κωδικα:
int intcompare(const void* v1,const void* v2){
return (*((int*)v1)-*((int*)v2));
}
:?
marialina
babeTUX
babeTUX
 
Δημοσιεύσεις: 7
Εγγραφή: 05 Μάιος 2010, 17:09
Εκτύπωση

Re: βοηθεια σε ασκηση στα λειτουργικα....!!!!!

Δημοσίευσηαπό idomeneas » 07 Μάιος 2010, 17:21

marialina έγραψε:απλα δεν εχω καταλαβει τι κανει αυτο το σημειο κωδικα:
int intcompare(const void* v1,const void* v2){
return (*((int*)v1)-*((int*)v2));
}

Μια συνάρτηση είναι η οποία απαιτείται από την qsort(). Επειδή είναι τύπου void οι δείκτες τους κάνουμε cast σε int* και μετά τη μεταατροπή γίνεται αποαναφοροποίηση για να πάρουμε τη διαφορά των τιμών που περιέχονται. Αν θες δες πως δουλεύει η συνάρτηση βιβλιοθήκης qsort.
Λειτουργικό ⇛ Ubuntu 10.04 64 bit σε HP Pavilion dv7-3110ev
Προδιαγραφές φορητού ⇛ Core i3 2.13 GHz │ 3 GB │ nVidia G105M │ Broadcom 4357 │ Bluetooth ? │ Realtek HD Audio │ 17.3"
Λειτουργικό ⇛ Ubuntu 10.04 32 bit/Win XP σε desktop
Προδιαγραφές desktop ⇛ Pentium 4 3 GHz │ 2 GB DDR │ Sapphire ATi Radeon HD3450 512MB AGP │ Μητρική: Asus P5V800-MX
idomeneas
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 738
Εγγραφή: 09 Απρ 2010, 15:47
Εκτύπωση


Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού