tolias85 Δημοσ. 29 Απριλίου 2009 Δημοσ. 29 Απριλίου 2009 ΓΕΙΑ ΣΑΣ ΠΑΙΔΙΑ...εχω να παραδωσω μια εργασια και δεν ξερω απο που να ξεκινησω....Η ασκηση που εχω ειναι η εξης: Η άσκηση αυτή μας ζητά να υλοποιήσετε ένα διαμοιραζόμενο C πρόγραμμα με κατάλληλη χρήση των IPC shared memory calls. Οι κλήσεις αυτές χρησιμοποιούνται για να επιτρέπουν την κοινή χρήση τμημάτων μνήμης από διαφορετικές διεργασίες. Οι διεργασίες θα δημιουργηθούν με χρήση της fork. Γράψτε δύο προγράμματα main και compute. Το πρώτο δεν παίρνει κανένα argument και το δεύτερο παίρνει δύο command line arguments, Row και Column. Το πρόγραμμα main πρέπει να κάνει τα εξής. Να διαβάζει δύο πίνακες Α και Β σε μια κοινή μνήμη. Έστω λ Χ μ και μ Χ ν οι διαστάσεις των δύο πινάκων. 2. Να εκτυπώνει τους δύο πίνακες. 3. Κατόπιν, η main δημιουργεί λ * ν διεργασίες, μια για κάθε είσοδο του προϊόντος του πίνακα C = Α * Β. Κάθε μία από τις διεργασίες αυτές τρέχει το πρόγραμμα compute με τα κατάλληλα ορίσματα χρησιμοποιώντας την execvp. 4. Η main περιμένει να τελειώσουν όλες οι άλλες διεργασίες και μετά εκτυπώνει τον πίνακα C. Το πρόγραμμα compute πρέπει να κάνει τα εξής. 1. Όταν το πρόγραμμα compute τρέχει, λαμβάνει έναν αριθμό γραμμής Row και ένας αριθμός στήλης Column από την γραμμή εντολών. 2. Κατόπιν, εκτελεί τον πολλαπλασιασμό της γραμμής με την στήλη και γράφει το αποτέλεσμα στην κατάλληλη θέση του πίνακα C. 3. Μετά από αυτό, πρόγραμμα compute τερματίζει. Το πρόγραμμα main θα λαμβάνει ως είσοδο ένα αρχείο με την εξής μορφή. l m <--------------------- # of rows and columns of matrix A a11 a12 a13 ... a1m <--------- row 1 of A a21 a22 a23 ... a2m <--------- row 2 of A ................ al1 al2 al3 ... alm <--------- row l of A u v <--------------------- # of rows and columns of matrix B b11 b12 b13 ... b1v <--------- row 1 of B b21 b22 b23 ... b2v <--------- row 2 of B ................ bu1 bu2 bu3 ... buv <--------- row u of B οποιος γνωριζει κατι ας απαντησει. thanks!!!
narbi Δημοσ. 1 Μαΐου 2009 Δημοσ. 1 Μαΐου 2009 Ξεκίνα με το να διαβάσεις προσεκτικά τη θεωρία με τις εντολές που σας δίνει στο Pdf ο καθηγητής μαζί με την άσκηση... Αυτές είναι και το κλειδί για την επίλυση της άσκησης... Μετά σκέψου κάποιο τρόπο για το πως θα μπορέσεις από ένα txt της μορφής που σας δίνει να αντλήσεις τα δεδομένα που χρειάζεσαι για να γεμίσεις τους πίνακές σου..
T-spoilerGR Δημοσ. 5 Μαΐου 2009 Δημοσ. 5 Μαΐου 2009 Τωρα αρχισα να κοιταζω αυτη την ασκηση και απο οτι βλεπω ειναι αρκετα βατη.Το μονο που θα με δυσκολεψει παρα πολυ ειναι το πως να παιρνω απο το αρχειο ολες τις πληροφοριες που χρειαζονται με fopen να κανω το προγραμμα να αναγνωριζει πως να συμπεριφερεται μετα τα κενα και τα new lines και γενικα ολα αυτα οποτε και θα χρειαστω μαλλον λιγη βοηθεια narbi αν δεν τα καταφερνω
narbi Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 Ρε T-spoilerGR δε ξέρω γιατί το κάνει αυτό,αλλά πραγματικά είναι ίδιον του χαρακτήρα αυτού του καθηγητή να βάζει ασκήσεις που ο μεγαλύτερος βαθμός δυσκολίας τους να προέρχεται από μια σπαζοκεφαλιά διαβάσματος αρχείου και σχεδόν τίποτα άλλο.. Τελικά, όμως το διάβασμα του αρχείου είναι πολύ πιο εύκολο από όσο φαίνεται...
DarkLord22 Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 παιδεια μπορει κανεις να μου εξηγηση τη κανει η shared_memory=(char *) shmat (id, NULL, 0); [/color]command argument τι ειναι? υποuετω πως δεν θελει scanf αλλα θα τα βαλουμε με command argument? int main() { int i,j; int A[5,5] B[5,5]; size=malloc(size of char*80); segment_id= shmget(IPC_PRIVATE,size,S_IRUSR|S_IWUSR); /*Dimiourgia tmimatos koinis mnimis*/ scanf((shared_memory,"askisi2.txt"); for(i=0; i<5; i++) { for(j=0; j<5; j++); { printf(shared_memory,A[i,j]); } } for(i=0; i<5; i++) { for(j=0; j<5; j++); { printf(shared_memory,B[i,j]); } } for(i=0; i<5; i++) { for(j=0; j<5; j++); { C[i,j]=A[1]*B[1][j]; } } δεν ξερω αν το παω καλα...
DarkLord22 Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 iδια execv() τι κανει? δεν μπορω να καταλαβω απο την εξηγηση!
DarkLord22 Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 Κατόπιν, η main δημιουργεί λ * ν διεργασίες, μια για κάθε είσοδο του προϊόντος του πίνακα C = Α * Β. Κάθε μία από τις διεργασίες αυτές τρέχει το πρόγραμμα compute με τα κατάλληλα ορίσματα χρησιμοποιώντας την execvp. for(i=0; i<5; i++) { int x=count; C[i,j]=A[x]*B[x][j]; count=count+1; } προσπαθω να κανω τον πολλαπλασιασμο αλλα δεν μου βγαινει. θελει καθε φορα να πολλαπλασιαζουμε γραμμη με στηλει ολες μια μια.. με μπερδευη τη πρεπει να κανω εδω...
T-spoilerGR Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 βασικα εχεις τρεξει το προγραμμα αυτο πουθενα η απλα γραφεις κωδικα?
DarkLord22 Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 νομιζω οτι τα καταφερα σε γενικους τομης . εκανα 2 διαφορετικα προγραματα η main ειναι αυτη: #include<stdio.h> #include <sys/shm.h> #include <stdlib.h> #include <unistd.h> int main() { int i,j; int A[5,5] B[5,5]; size=malloc(size of char*80); segment_id= shmget(IPC_PRIVATE,size,S_IRUSR|S_IWUSR); /*Dimiourgia tmimatos koinis mnimis*/ scanf((shared_memory,"askisi2.txt"); for(i=0; i<5; i++) { for(j=0; j<5; j++); { printf(shared_memory,A[i,j]); } } for(i=0; i<5; i++) { for(j=0; j<5; j++); { printf(shared_memory,B[i,j]); } } for(i=0; i<25; i++) { compute (5,5); } return(0); } και η compute ειναι :#include<stdio.h> #include <sys/shm.h> #include <stdlib.h> #include <unistd.h> int compute(Row,Column){ int C[5,5]; for(i=0; i<5; i++) { int x=count; C[i,j]=A[x]*B[x][j]; count=count+1; } return(0); } δεν ξερω πως πρεπει να κανω την execv ακομα...το ψαχνω...
T-spoilerGR Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 διαβασε καλα την εκφωνιση και μην παιδευεσαι!τους πινακες τους διαβαζεις απο αρχειο και το αρχειο μπορει να εχει πινακες σε οποιο μεγεθος θελει ο καθενας οχι απαραιτητα 5*5
narbi Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 Οι δισδιάστατοι στη C νομίζω είναι Α[j] κι όχι A[i,j]...
DarkLord22 Δημοσ. 6 Μαΐου 2009 Δημοσ. 6 Μαΐου 2009 απο αρχειο τους διαβαζω στο main αν δεις scanf((shared_memory,"askisi2.txt"); askisi2.txt ειναι το αρχειο ο κυριος ειπε να το γραψουμε ετσι.. l m <--------------------- # of rows and columns of matrix A a11 a12 a13 ... a1m <--------- row 1 of A a21 a22 a23 ... a2m <--------- row 2 of A ................ al1 al2 al3 ... alm <--------- row l of A u v <--------------------- # of rows and columns of matrix B b11 b12 b13 ... b1v <--------- row 1 of B b21 b22 b23 ... b2v <--------- row 2 of B ................ bu1 bu2 bu3 ... buv <--------- row u of B εγω το εγραψα ετσι.. αλλα δεν ξερω πως θα βαλω μεταβλητες στο προγραμμα.. ενοω οτι δεν ξερω πως και που πρεπει να γραψω της μεταβλητες.. μεσα στο αρχειο txt? να βαλω δικες μου μεσα στο προγραμμα? και πως θα της συνδεο με το αρχειο ? 5 5 a11 a12 a13 a14 a15 a21 a22 a23 a24 a25 a31 a32 a33 a34 a35 a41 a42 a43 a44 a45 a51 a52 a53 a54 a55 5 5 b11 b12 b13 b14 b15 b21 b22 b23 b24 b25 b31 b32 b33 b34 b35 b41 b42 b43 b44 b45 b51 b52 b53 b54 b55
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.