From 220553c3b8a0ef9e0e4a29230bb230f1934c71c7 Mon Sep 17 00:00:00 2001 From: CGH0S7 <776459475@qq.com> Date: Thu, 27 Feb 2025 11:11:09 +0800 Subject: [PATCH] primes finished --- .gitignore | 1 + Makefile | 1 + mkfs/mkfs | Bin 21088 -> 21088 bytes user/primes.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) mode change 100644 => 100755 mkfs/mkfs create mode 100644 user/primes.c diff --git a/.gitignore b/.gitignore index 4527a96..cc22819 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ user/usys.S xv6.out* .vagrant/ submissions/ +mkfs/mkfs ph barrier /lab-*.json diff --git a/Makefile b/Makefile index 77ecadc..b7593a7 100644 --- a/Makefile +++ b/Makefile @@ -190,6 +190,7 @@ UPROGS=\ $U/_zombie\ $U/_sleep\ $U/_pingpong\ + $U/_primes\ diff --git a/mkfs/mkfs b/mkfs/mkfs old mode 100644 new mode 100755 index f849fd57cb9cef4c42fc40f621b17d550952ba71..7a0d222844918e60422e1d94f3f7fa14a66aede2 GIT binary patch delta 1627 zcmZWpeQZ-z6o2=X=hi}P*Y2%bKi0w6bb&axGUgZ^8_n3m%w;6vqJm?83>7pHoq(W| zInZ=31@3R6c<|%||I+IUu#7hk#_sB6W~!SwTY3YS~Q6fLfk;q7r$EKOAymisJ-@ z5|G-_Q2Y_?zynHqm`~dQuUKarpGDg*IdO+7rNIuX+cU6G5CXNLD*b{A=~JbH3!{Sk&&F%b@6bDN19UN%;zsk{JT2 zw&GO|K7gOGl%VaoN2${Kt67y|NbyUKa{P{MThPnGmortaD*;)Ak<_9&Z!mfw5NDuD z9k@kN<$VnNMDZ_6MrV7%`3029r8!3&EEEo{$7DGB5j!&nQ2T>x5pC!$r7$Mj;fUNj z!@!-V*y-$rmbAu#u5qk`x9&;YQNn}aP+KBZea2L(Oe4^4PGGxOZ=DXO&-Q5#Zo{>7$Mc^T%aY4?%^u*bfi5LoD#wR}m@LuIet{C`=uoG5!2^Qw}J8y+cZxb;xk zd#Mm~%r&&nV|Rx5<(+WJu~yV>zzfd&#rdf`Sz=V787et)9TpxIFip;%}6DCJLavi&u8epR74v-#b&T>t! zh)+H0s$f^v0@F`VZzaoOqm&L}|K%}C05{o5O*PN z{F~Clh?dKgo<)3ljMAHki(sf=?Myvpt!Edc;&JoGqR;r4_|lA|WI=GE>wWww&`{_m zozPO~ARFLI)X%`N!ff&l#0s;;1`Rq2)4=ITCPyL1<0kW=5@kI!da_0LKfyN75`(@R zhr(7IhQ0YD8q}BV){*V-RYf=11WOlJk)`k{$|ww@?1z~?8`%aWzHag@#C%r^toSh4 z+MEC(2mf6xf>CJ1N6FTdf6k9i%&WpmKLIX@`oMe0?;F^Mz>ey_$=< F{{RV(KjZ)a delta 1615 zcmZWpdu)?c6#s6^M;~motnD6stlj320SRn%Oc>o9wewpt5ex(cd=T7-k`Rm&vY>l7 z<|rT4z(G+13xq{{%zzXPE3mE8w2}ZRB7d+*82H$SP8n>&x!3jF+bzDnq~~|;IluEe z_nz;5?P(!BE#!oj=-P||f7*hx$Ql*Vz>Dev^9v_Sue>v;{qe~UH52y8M`vsH7|MdD z)MIMmg3mQ6Bo;icc|%9Ofbv4NhV+p-&qYiNuew)D4W1DXx|08= zszgclyjvug1!_?+rfj5?M#L6ml4l@0$wf9nY0`Sq4M&r9kY~YZdicQ#sKT(5XV9B|O@~qeW=>&T`Sg9Yqy8&+cYftEZeneiE~ZMrJKDnH3kp zXXccGIvXFrX>27ZXGSTN8ooBlB0-8@EPMpd(O8F3mi{$e=DrlLWWuO9f8HKO4+Q!d z$YOgTD#?}(27V&>S86fX77vDCoux4QD(@8zZ9_4f{iu~OBj}BDFRBcUPznjjR=8^E zOqk1qm)P4m3rCVGawC6YAG~IBu;OW+42O2drE1frq(0zYRH;TXY)y6;+S%4oB!0qA zU}MVRX=THh?6;(XGqsTHgLSDkQVH8rn@s8K*iq$WHBO(^DUM;7m1bLYx&Ys9T<8+! zH~c}Vym~BrOYi?yS{$n~;EwjD@HR?0-T_%`!U9QtygwvNV_{Y_b|1IzVQbFc1a)a% z)ye`mYjwb_wD(oyKD=)AkhO5edYELudRyk|%KU$|H4Oc~ZLuZZb_8{0F&_*5({?Tv z{iChT0#|JF^=%KaJ45`I6QHwiR%r)en|;BuC(K+dKC12kO6$*kk1v-x1)+vb{ZpO~ zhwieG2E+>{MrSY38!uEM&}-lCION7DvhWE`m>m7+J>0!m5AQj$Ne8q$-pX9a)8Wtz z{P2+NOPZ1!=3Z1OhAru{^}7~L?zI-0)64YvQ_J~qH(k>IfJf#h=?1U!0{IP$t^m0K z%`V4`4gFIe^`>CNwZyPb?>f0~Cs`Tpp)`g^aNVS|AMqff5%(bXQaT@Txy-H-UxFO;4_yodN5VqqVpgNRPJn!7pU_6te=4Gi$6ll&%2D@8J4nnruNs_^bwiqhhSt{BW z-0d#a>s&Y&_Qc?tX8~yq>WU7i$rdBser}aV`LZH z^xnxGNR5~8h=Y)ge=tcxqTs{tl08%Ld6V&JKzu2r6ViNdlcwOuz5`lP4JFGL=vrNz MFSG`$m-njw0xR1*(*OVf diff --git a/user/primes.c b/user/primes.c new file mode 100644 index 0000000..d65494e --- /dev/null +++ b/user/primes.c @@ -0,0 +1,61 @@ +#include "kernel/types.h" +#include "user/user.h" + +void redirect(int n, int pd[]) { + close(n); + dup(pd[n]); + close(pd[0]); + close(pd[1]); +} + +void primes() { + int previous, next; + int fd[2]; + + while (read(0, &previous, sizeof(int))) { + printf("prime %d\n", previous); + + if (pipe(fd) < 0) { + fprintf(2, "pipe failed\n"); + exit(1); + } + + if (fork() == 0) { + redirect(1, fd); + while (read(0, &next, sizeof(int))) { + if (next % previous != 0) { + write(1, &next, sizeof(int)); + } + } + exit(0); + } else { + close(fd[1]); + redirect(0, fd); + } + } +} + +int main(int argc, char *argv[]) { + int fd[2]; + + if (pipe(fd) < 0) { + fprintf(2, "pipe failed\n"); + exit(1); + } + + if (fork() == 0) { + redirect(1, fd); + for (int i = 2; i < 36; i++) { + write(1, &i, sizeof(int)); + } + exit(0); + } else { + close(fd[1]); + redirect(0, fd); + primes(); + } + + exit(0); +} + +