- Timestamp:
- Apr 21, 2012, 12:24:25 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Makefile
r2 r15 1 CFLAGS=-m322 LDFLAGS=-m32 1 TARGET_ARCH=-m32 2 ASM=nasm 3 3 4 4 mioboot: mioboot.asm 5 nasm-l $@.lst -o $@ $<5 $(ASM) -l $@.lst -o $@ $< 6 6 7 7 mioboot-nobios: mioboot-nobios.asm 8 nasm-l $@.lst -o $@ $<8 $(ASM) -l $@.lst -o $@ $< 9 9 10 10 mioboot-nobios-simple: mioboot-nobios-simple.asm 11 nasm-l $@.lst -o $@ $<11 $(ASM) -l $@.lst -o $@ $< 12 12 13 13 14 esercizio: esercizio.asm 15 nasm -f elf $< 16 gcc -o $@ esercizio.o 14 esercizio.o: esercizio.asm 15 $(ASM) -felf $< 16 17 esercizio: esercizio.o 18 19 pthreads-pc : LDFLAGS=-lrt 17 20 18 21 pthreads-pc: pthreads-pc.c 19 cc -pthread pthreads-pc.c -o pthreads-pc20 22 21 23 fork-pc: fork-pc.c 22 cc fork-pc.c -o fork-pc23 24 24 tsl: tsl.asm 25 nasm -felf tsl.asm 26 gcc tsl.o -o tsl 25 tsl.o: tsl.asm 26 $(ASM) -felf tsl.asm 27 28 tsl: tsl.o 27 29 28 30 enter.o: enter.asm 29 nasm-felf enter.asm31 $(ASM) -felf enter.asm 30 32 31 33 threads-tsl: threads-tsl.o enter.o -
trunk/threads-isolated.c
r2 r15 10 10 int run(void* s) 11 11 { 12 int* shared = (int*)s; / * alias per comodita` */12 int* shared = (int*)s; // alias per comodit\`a 13 13 while (shared[0] < 10) { 14 14 sleep(1); … … 28 28 29 29 int shared[2] = {0 , 0}; 30 31 30 /* int clone(int (*fn)(void *), 32 31 * void *child_stack, … … 40 39 malloc(4096)+4096, /* lo stack del nuovo processo 41 40 * (cresce verso il basso!) */ 42 SIGCHLD, / * in questo caso la clone e` analoga alla fork */41 SIGCHLD, // in questo caso la clone \`e analoga alla fork 43 42 shared) < 0){ 44 perror("Errore nella creazione"); 45 exit(1); 43 perror("Errore nella creazione");exit(1); 44 } 45 if (clone(run, malloc(4096)+4096, SIGCHLD, shared) < 0){ 46 perror("Errore nella creazione");exit(1); 46 47 } 47 48 48 if (clone(run, malloc(4096)+4096, SIGCHLD, shared) < 0){ 49 perror("Errore nella creazione"); 50 exit(1); 51 } 49 /* Isolati: ciascuno dei figli esegue 10 volte. */ 50 // Per il padre shared[0] \`e \textbf{sempre} 0 */ 52 51 53 /* Isolati: ciascuno dei figli esegue 10 volte. Per il padre 54 * shared[0] e` sempre 0 */ 55 56 while(1) { 52 while(shared[0] == 0) { 57 53 sleep(1); 58 54 printf("Processo padre. s = %d\n", shared[0]); -
trunk/threads-peterson.c
r2 r15 26 26 int run(const int p, void* s) 27 27 { 28 int* shared = (int*)s; /* alias per comodita` */ 29 while (enter_section(p, &shared[1], &shared[2]), 30 shared[0] < 10) { 28 int* shared = (int*)s; // alias per comodit\`a 29 while (enter_section(p, &shared[1], &shared[2]), shared[0] < 10) { 31 30 sleep(1); 32 31 printf("Processo figlio (%d). s = %d\n", … … 37 36 } 38 37 shared[0] += 1; 39 leave_section(p, &shared[2]); 38 leave_section(p, &shared[2]); 40 39 } 40 leave_section(p, &shared[2]);// il test nel while \`e dopo enter\_section 41 41 42 return 0; 42 43 } … … 61 62 malloc(4096)+4096, /* lo stack del nuovo processo 62 63 * (cresce verso il basso!) */ 63 CLONE_VM | SIGCHLD, /* la (virtual) memory e`condivisa */64 CLONE_VM | SIGCHLD, /* la (virtual) memory \`e condivisa */ 64 65 shared) < 0){ 65 66 perror("Errore nella creazione"); … … 73 74 74 75 /* Memoria condivisa: i due figli nell'insieme eseguono 10 o 75 * 11 volte : e` possibile una corsa critica. Il padre76 * 11 volte con possibili corse critiche. Il padre 76 77 * condivide shared[0] con i figli */ 77 78 -
trunk/threads-shared.c
r2 r15 10 10 int run(void* s) 11 11 { 12 int* shared = (int*)s; / * alias per comodita` */12 int* shared = (int*)s; // alias per comodit\`a 13 13 while (shared[0] < 10) { 14 14 sleep(1); … … 28 28 29 29 int shared[2] = {0 , 0}; 30 31 30 /* int clone(int (*fn)(void *), 32 31 * void *child_stack, … … 40 39 malloc(4096)+4096, /* lo stack del nuovo processo 41 40 * (cresce verso il basso!) */ 42 CLONE_VM | SIGCHLD, / * la (virtual) memory e` condivisa */41 CLONE_VM | SIGCHLD, // (virtual) memory condivisa 43 42 shared) < 0){ 44 perror("Errore nella creazione"); 45 exit(1); 43 perror("Errore nella creazione");exit(1); 46 44 } 47 45 48 46 if (clone(run, malloc(4096)+4096, CLONE_VM | SIGCHLD, shared) < 0){ 49 perror("Errore nella creazione"); 50 exit(1); 47 perror("Errore nella creazione");exit(1); 51 48 } 52 49 53 50 /* Memoria condivisa: i due figli nell'insieme eseguono 10 o 54 * 11 volte: e`possibile una corsa critica. Il padre51 * 11 volte: \`e possibile una corsa critica. Il padre 55 52 * condivide shared[0] con i figli */ 56 53 57 while( 1) {54 while(shared[0] < 10) { 58 55 sleep(1); 59 56 printf("Processo padre. s = %d\n", shared[0]); -
trunk/threads-tsl.c
r2 r15 10 10 11 11 void enter_section(int *s); /* in enter.asm */ 12 void leave_section(int *s){ *s = 0; } 12 13 13 void leave_section(int *s){ 14 *s = 0; 15 } 16 17 int run(const int p, void* s) 18 { 19 int* shared = (int*)s; /* alias per comodita` */ 20 while (enter_section(&shared[1]), 21 shared[0] < 10) { 22 sleep(100); 14 int run(const int p, void* s){ 15 int* shared = (int*)s; // alias per comodit\`a 16 while (enter_section(&shared[1]), shared[0] < 10) { 17 sleep(1); 23 18 printf("Processo figlio (%d). s = %d\n", 24 19 getpid(), shared[0]); … … 31 26 sched_yield(); 32 27 } 28 leave_section(&shared[1]); // il test nel while \`e dopo enter\_section 33 29 return 0; 34 30 } … … 53 49 malloc(4096)+4096, /* lo stack del nuovo processo 54 50 * (cresce verso il basso!) */ 55 CLONE_VM | SIGCHLD, /* la (virtual) memory e`condivisa */51 CLONE_VM | SIGCHLD, /* la (virtual) memory \`e condivisa */ 56 52 shared) < 0){ 57 53 perror("Errore nella creazione"); … … 65 61 66 62 /* Memoria condivisa: i due figli nell'insieme eseguono 10 o 67 * 11 volte: e`possibile una corsa critica. Il padre63 * 11 volte: \`e possibile una corsa critica. Il padre 68 64 * condivide shared[0] con i figli */ 69 65 -
trunk/tsl.asm
r2 r15 7 7 call stampa 8 8 lock bts dword [x], 0 9 jc salta ; gi a`settato9 jc salta ; gi\`a settato 10 10 call stampa 11 11 salta: lock bts dword [x], 0
Note:
See TracChangeset
for help on using the changeset viewer.