Explorar o código

creating scenario to transfer data from one worker to another

max %!s(int64=8) %!d(string=hai) anos
pai
achega
e09720da9b
Modificáronse 7 ficheiros con 109 adicións e 16 borrados
  1. 2 1
      CMakeLists.txt
  2. 1 1
      src/myco-agent.c
  3. 3 2
      src/myco-daemon.c
  4. 7 8
      test/mycoagent.c
  5. 51 0
      test/mycoagent2.c
  6. 15 4
      test/mycoworker.c
  7. 30 0
      test/mycoworker2.c

+ 2 - 1
CMakeLists.txt

@@ -4,5 +4,6 @@ project (Mycorrhiza)
 
 add_executable(mycoagent test/mycoagent.c)
 add_executable(mycoagent2 test/mycoagent2.c)
-add_executable(worker test/worker.c)
+add_executable(mycoworker test/mycoworker.c)
+add_executable(mycoworker2 test/mycoworker2.c)
 add_executable(mycodaemon test/mycodaemon.c)

+ 1 - 1
src/myco-agent.c

@@ -16,7 +16,7 @@
 #include "myco-agent.h"
 #include "../src/myco-memory.c"
 
-#define DEBUG 1
+#define DEBUG 0
 
 int myco_agent_register(const char *agent_name) {
     int agent_message_queue_id;

+ 3 - 2
src/myco-daemon.c

@@ -330,12 +330,12 @@ int myco_daemon_request_list(message msg, pid_t pid) {
     if (current_resource == NULL) {
         sprintf(msg.message, "ERROR: no resources\n");
         myco_send(msg.agent_message_queue_id, msg);
+        return -1;
     }
     while (current_resource != NULL) {
         resource_size += strlen(current_resource->name) + strlen(current_resource->agent) + strlen("1");
         resource_size += strlen("(,,,);");
         resource_size += 18;
-        printf("%s %d\n", current_resource->name, resource_size);
         current_resource = current_resource->next;
     }
     
@@ -373,7 +373,8 @@ int myco_daemon_request_list(message msg, pid_t pid) {
     if (strcmp(msg.message, "RESOURCE LIST GRANTED\n") == 0) {
         myco_free(resource_pointer);
     } else {
-        fprintf(stderr, "ERROR: myco_daemon_request_list: %s\n", strerror(errno));
+        fprintf(stderr, "ERROR: resource list was not granted: %s\n", strerror(errno));
+        myco_free(resource_pointer);
         return -1;
     }
 

+ 7 - 8
test/mycoagent.c

@@ -21,34 +21,33 @@ int main() {
     while (myco_worker_is_running(worker_pid) == 0) {
         myco_agent_request_resource_list(message_queue_id);
 
-        //printf("%d is still alive.\n", worker_pid);
 
         // check for messages
         msg = myco_receive(message_queue_id);
         if (strncmp(msg.message, "WORKER: ALLOCATED MEMORY OF SIZE", 20) == 0) {
+            if (DEBUG) {
+                printf("%s", msg.message);
+            }
             split_count = 0;
             split = strtok(msg.message, " ");
             while (split != NULL) {
                 split_count += 1;
                 if (split_count == 6) {
                     resource_size = atoi(split);
-                    printf("%d\n", resource_size);
                 }
                 if (split_count == 8) {
-                    resource_pointer = (void *)split;
-                    printf("%p\n", resource_pointer);
+                    sscanf(split, "%lx", &resource_pointer);
                 }
                 split = strtok(NULL, " ");
             }
 
             myco_agent_register_resource(message_queue_id, "MYAGENT_1", "RESOURCE_1", RESOURCE_NOT_TRANSACTIONAL, worker_pid, resource_size, resource_pointer);
-            myco_agent_register_resource(message_queue_id, "MYAGENT_1", "RESOURCE_2", RESOURCE_NOT_TRANSACTIONAL, worker_pid, resource_size, resource_pointer);
-            printf("%s", msg.message);
         }
         if (strncmp(msg.message, "WORKER: FREED MEMORY AT", 20) == 0) {
-            printf("%s", msg.message);
+            if (DEBUG) {
+                printf("%s", msg.message);
+            }
             myco_agent_unregister_resource(message_queue_id, "RESOURCE_1");
-            myco_agent_unregister_resource(message_queue_id, "RESOURCE_2");
         }
         //myresource = myco_agent_request_resource(message_queue_id, "RESOURCE_1");
         sleep(1);

+ 51 - 0
test/mycoagent2.c

@@ -3,8 +3,59 @@
  */
 
 #include "../src/myco-agent.c"
+#include "../src/myco-worker.c"
 
 int main() {
+    struct resource myresource;
+    pid_t worker_pid;
+    int message_queue_id, mqi2;
+    message msg;
+    char *split;
+    int split_count;
+    int resource_size;
+    void *resource_pointer;
+
+    message_queue_id = myco_agent_register("MYAGENT_1");
+    worker_pid = myco_worker_start(message_queue_id);
+
+    while (myco_worker_is_running(worker_pid) == 0) {
+        myco_agent_request_resource_list(message_queue_id);
+
+
+        // check for messages
+        msg = myco_receive(message_queue_id);
+        if (strncmp(msg.message, "WORKER: ALLOCATED MEMORY OF SIZE", 20) == 0) {
+            if (DEBUG) {
+                printf("%s", msg.message);
+            }
+            split_count = 0;
+            split = strtok(msg.message, " ");
+            while (split != NULL) {
+                split_count += 1;
+                if (split_count == 6) {
+                    resource_size = atoi(split);
+                }
+                if (split_count == 8) {
+                    sscanf(split, "%lx", &resource_pointer);
+                }
+                split = strtok(NULL, " ");
+            }
+
+            myco_agent_register_resource(message_queue_id, "MYAGENT_1", "RESOURCE_1", RESOURCE_NOT_TRANSACTIONAL, worker_pid, resource_size, resource_pointer);
+        }
+        if (strncmp(msg.message, "WORKER: FREED MEMORY AT", 20) == 0) {
+            if (DEBUG) {
+                printf("%s", msg.message);
+            }
+            myco_agent_unregister_resource(message_queue_id, "RESOURCE_1");
+        }
+        //myresource = myco_agent_request_resource(message_queue_id, "RESOURCE_1");
+        sleep(1);
+
+    }
+
+    myco_agent_unregister("MYAGENT_1", message_queue_id);
+
 
     return EXIT_SUCCESS;
 }

+ 15 - 4
test/worker.c → test/mycoworker.c

@@ -10,6 +10,7 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <time.h>
 #include "../src/myco-ipc.c"
 #include "../src/myco-memory.c"
 
@@ -20,19 +21,29 @@ int main(int argc, char **argv) {
     message msg;
     message_queue_id = atoi(argv[0]);
 
-    resource_size = 1024;
+    resource_size = 4096;
     resource_pointer = myco_malloc(resource_size);
 
     sprintf(msg.message, "WORKER: ALLOCATED MEMORY OF SIZE %d AT %p\n", resource_size, resource_pointer);
     myco_send(message_queue_id, msg);
 
-    sleep(5);
+
+    // Write dummy data to memory
+    srand(time(NULL));
+    int i;
+    int *ptr;
+    ptr = resource_pointer;
+
+    for (i = 0; i < resource_size/sizeof(int); i++) {
+        ptr[i] = rand();
+        printf("%p: %d\n", &ptr[i], ptr[i]);
+    }
+
+    sleep(2);
 
     myco_free(resource_pointer);
     sprintf(msg.message, "WORKER: FREED MEMORY AT %p\n", resource_pointer);
     myco_send(message_queue_id, msg);
 
-//    printf("Worker is shutting down\n");
-
     return 0;
 }

+ 30 - 0
test/mycoworker2.c

@@ -0,0 +1,30 @@
+/*  
+ * worker.c
+ *
+ * This is a worker process. The user is going to write his code in here.
+ *
+ * It will be parsed and compiled by the myco-parser later. Right now i'll
+ * write the already translated code here.
+ *
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include "../src/myco-ipc.c"
+#include "../src/myco-memory.c"
+
+int main(int argc, char **argv) {
+    void *resource_pointer;
+    int resource_size;
+    int message_queue_id;
+    message msg;
+    message_queue_id = atoi(argv[0]);
+
+    sprintf(msg.message, "WORKER: REQUESTING RESOURCE RESOURCE_1\n");
+    myco_send(message_queue_id, msg);
+
+    sleep(2);
+
+    return 0;
+}