3 Commits

Author SHA1 Message Date
ec2eea05ad ajout lecteur redacteur 2023-05-10 12:23:04 +02:00
7f40538bc4 Merge branch 'makefile_demo' into 'main'
Updated makefile to add demos

See merge request simpleos/burritos!20
2023-05-10 09:20:19 +00:00
20af365080 Updated makefile to add demos 2023-05-10 11:19:08 +02:00
4 changed files with 87 additions and 4 deletions

View File

@ -1,6 +1,13 @@
TOPDIR=. TOPDIR=.
include $(TOPDIR)/Makefile.config include $(TOPDIR)/Makefile.config
#
# Demo vars
#
FLAGS=--offline -r --
CARGO=RUSTFLAGS=-Awarnings cargo run ${FLAGS}
all: dumps user_lib instruction_tests syscall all: dumps user_lib instruction_tests syscall
# #
@ -29,3 +36,20 @@ clean:
$(MAKE) clean -C test/ $(MAKE) clean -C test/
$(RM) -rf $(TOPDIR)/target $(RM) -rf $(TOPDIR)/target
#
# Demo targets
#
halt: syscall
${CARGO} -x ./target/guac/halt.guac -d3
pc: syscall
${CARGO} -x ./target/guac/producteur_consommateur.guac -d2
matmult: syscall
${CARGO} -x ./target/guac/matmult.guac -d2
lr: syscall
${CARGO} -x ./target/guac/lecteur_redacteur.guac -d2
prints: syscall
${CARGO} -x ./target/guac/prints.guac -d2

View File

@ -1,4 +1,4 @@
PROGRAMS = halt.guac prints.guac producteur_consommateur.guac join.guac matmult.guac PROGRAMS = halt.guac prints.guac producteur_consommateur.guac lecteur_redacteur.guac join.guac matmult.guac
TOPDIR = ../.. TOPDIR = ../..
include $(TOPDIR)/Makefile.rules include $(TOPDIR)/Makefile.rules

View File

@ -0,0 +1,60 @@
#include "userlib/syscall.h"
#include "userlib/libnachos.h"
SemId red;
SemId mutex;
SemId util;
int nblect = 0;
int nbWrite = 0;
void lecteur() {
while(1) {
P(red);
P(mutex);
if (nblect == 0) {
V(util);
}
nblect++;
V(mutex);
V(red);
n_printf("Lecture de l'information \n");
if(nbWrite == 10)
return;
P(mutex);
nblect--;
if(nblect == 0) {
V(util);
}
V(mutex);
}
Exit(nblect);
}
void redacteur() {
while(1) {
P(red);
P(util);
V(red);
n_printf((char*)"Ecriture de l'information\n");
nbWrite++;
if(nbWrite == 10)
return;
V(util);
}
Exit(nbWrite);
}
int main() {
red = SemCreate((char*)"redacteur", 1);
mutex = SemCreate((char*)"mutex lecteur redacteur", 1);
util = SemCreate((char*)"Mutex util lecteur redacteur", 1);
ThreadId lecteurTh = threadCreate((char*)"Lecteur", (VoidNoArgFunctionPtr) lecteur);
ThreadId lecteur1 = threadCreate((char*)"Lecteur", (VoidNoArgFunctionPtr) lecteur);
ThreadId lecteur2 = threadCreate((char*)"Lecteur", (VoidNoArgFunctionPtr) lecteur);
ThreadId redacteurTh = threadCreate((char*)"redacteur", (VoidNoArgFunctionPtr) redacteur);
Join(lecteurTh);
Join(lecteur1);
Join(lecteur2);
Join(redacteurTh);
return 0;
}

View File

@ -12,10 +12,9 @@ SemId splein;
void producteur() { void producteur() {
for(int i = 0; i < 10; i++) for(int i = 0; i < 10; i++)
{ {
// n_printf("batir une information\n"); n_printf("batir une information\n");
P(svide); P(svide);
iplein = (iplein + 1) % N; iplein = (iplein + 1) % N;
n_printf("Envoie de l'information\n");
// n_printf("communique une information : %d\n", i); // n_printf("communique une information : %d\n", i);
tab[iplein] = i; tab[iplein] = i;
V(splein); V(splein);