diff --git a/ex1/Makefile b/ex1/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..a2fbb7abb48df37bed5388965ffbe0507da261b4
--- /dev/null
+++ b/ex1/Makefile
@@ -0,0 +1,10 @@
+L1:
+	gcc -c l1.c -o libmylib1.a
+	gcc T3.c -o t3_case1.o -L. -lmylib1
+L2:
+	gcc -c l2.c -o libmylib2.a
+	gcc T3.c -o t3_case2.o -L. -lmylib2
+L3:
+	gcc -o t3_case3.o T3.c l1.c
+clean:
+	rm *.o
\ No newline at end of file
diff --git a/ex1/T1.c b/ex1/T1.c
new file mode 100644
index 0000000000000000000000000000000000000000..71b497e4fa4de469151566d717cf36071b16d7f4
--- /dev/null
+++ b/ex1/T1.c
@@ -0,0 +1,43 @@
+#include<stdlib.h>
+#include<stdio.h>
+
+int get_frequency(int *, int, int);
+void display_results(int param1);
+
+int main(int argc, char *argv[]){
+ int total_size=1000;
+ int search_size=1000;
+ int target=5;
+ // allocation
+ int * input_data = (int *) malloc(total_size * sizeof(int));
+ 
+ // initialization
+ for(int i=0;i<total_size;i++)
+	input_data[i]=1;
+ 
+ // usage 1
+ printf("Search for target %d\n",5);
+ int res=get_frequency(input_data, 10, 5);
+ display_results(res); // could not find target
+
+ // usage 2
+ printf("Search for target %d\n",1);
+ res=get_frequency(input_data, 1000, 1);
+ display_results(res); // target has been found 1000
+ free(input_data); 
+
+ return 0;
+}
+
+int get_frequency(int * in, int size, int target){
+ // TODO implement get_get_frequency here
+}
+void display_results(int param1){
+	switch(param1){
+	case -1:
+		printf("could not find target\n");
+		break;
+	default:
+		printf("target has been found %d\n", param1);
+	}
+}
diff --git a/ex1/T2.c b/ex1/T2.c
new file mode 100644
index 0000000000000000000000000000000000000000..544697c8a82a92cf632f5c2d2f2d9e08a60f9b98
--- /dev/null
+++ b/ex1/T2.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+
+int main(int argc, char * argv[]){
+
+ if(argc<3){
+ printf("Usage ./T2.o folder_path link_name\n");
+ }
+
+//TODO -- implement your code here;
+
+ return 0;
+}
diff --git a/ex1/T2.sh b/ex1/T2.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ba1d888c7f9a4c36b0c3709586ea96fea6a080c3
--- /dev/null
+++ b/ex1/T2.sh
@@ -0,0 +1,13 @@
+#!/bin/bash/
+#the following command returns the number of arguments
+#hint $? will be 0 if there are no errors after any bash command
+ 
+args=$#
+if [ $args -lt 2 ]
+then
+	echo Usage sh T2.sh folder_path link.
+	exit
+fi
+folder_path=$1
+link=$2
+#your implementation goes here
diff --git a/ex1/T3.c b/ex1/T3.c
new file mode 100644
index 0000000000000000000000000000000000000000..481ca4c500e2b370bd0ab883f5d8d2f36a85b204
--- /dev/null
+++ b/ex1/T3.c
@@ -0,0 +1,18 @@
+#include "sort.h"
+#include <stdio.h>
+int main ()
+{
+	int size=5;
+	int input [] ={5, 9, 1, 2, 3};
+	printf("input array:");
+	for(int i=0;i<size;i++){
+		printf(" %d",input[i]);
+	}
+	printf("\nafter sort");
+	sort(input, size);
+	printf("\ninput array after sort:");
+        for(int i=0;i<size;i++){
+                printf(" %d",input[i]);
+        }
+	printf("\n");
+}
diff --git a/ex1/l1.c b/ex1/l1.c
new file mode 100644
index 0000000000000000000000000000000000000000..e84f75201345232785e2b979d6d0ad28aef2101e
--- /dev/null
+++ b/ex1/l1.c
@@ -0,0 +1,17 @@
+void swap(int *xp, int *yp)
+{
+    int temp = *xp;
+    *xp = *yp;
+    *yp = temp;
+}
+
+void sort(int arr[], int size)
+{
+   int i, j;
+   for (i = 0; i < size-1; i++)      
+  
+       // Last i elements are already in place   
+       for (j = 0; j < size-i-1; j++) 
+           if (arr[j] > arr[j+1])
+              swap(&arr[j], &arr[j+1]);
+}
diff --git a/ex1/l2.c b/ex1/l2.c
new file mode 100644
index 0000000000000000000000000000000000000000..a1f8abd8e4d388e74922640d60780fb0d0c93c47
--- /dev/null
+++ b/ex1/l2.c
@@ -0,0 +1,17 @@
+void swap(int *xp, int *yp)
+{
+    int temp = *xp;
+    *xp = *yp;
+    *yp = temp;
+}
+
+void sort(int arr[], int size)
+{
+   int i, j;
+   for (i = 0; i < size-1; i++)    
+  
+       // Last i elements are already in place   
+       for (j = 0; j < size-i-1; j++) 
+           if (arr[j] < arr[j+1])
+              swap(&arr[j], &arr[j+1]);
+}
diff --git a/ex1/libmylib1.a b/ex1/libmylib1.a
new file mode 100644
index 0000000000000000000000000000000000000000..796f089e64151efdb0be24117db7a48fc2c362a8
Binary files /dev/null and b/ex1/libmylib1.a differ
diff --git a/ex1/os-exercise-1.pdf b/ex1/os-exercise-1.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6340dade87a8f8395ad515dd50e6e089789e665b
Binary files /dev/null and b/ex1/os-exercise-1.pdf differ
diff --git a/ex1/sort.h b/ex1/sort.h
new file mode 100644
index 0000000000000000000000000000000000000000..bcb5f1489ff5a5ae29661379dd5ad530da70064b
--- /dev/null
+++ b/ex1/sort.h
@@ -0,0 +1,5 @@
+#ifndef SORT
+#define SORT
+void sort(int input[], int size);
+#endif
+