From 28ccfa72acc2e0e35676ab2545128d2999287535 Mon Sep 17 00:00:00 2001 From: Sytnyk Yehor Date: Tue, 27 May 2025 23:23:28 +0300 Subject: [PATCH] OS lb-7 mark --- semester-4/ОС/lb-7/README.md | 2 +- semester-4/ОС/lb-7/src/editor/analizer.c | 16 ++++++++++------ semester-4/ОС/lb-7/src/matrix-calc/main.c | 4 ++-- semester-4/ОС/lb-7/src/threads/main.c | 5 ++++- .../lb-7/Лр_7_Ситник_Малишкін_ПЗПІ_23_2.pdf | Bin 370052 -> 370039 bytes .../lb-7/Лр_7_Ситник_Малишкін_ПЗПІ_23_2.typ | 4 ++-- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/semester-4/ОС/lb-7/README.md b/semester-4/ОС/lb-7/README.md index db06797..1f9f5e6 100644 --- a/semester-4/ОС/lb-7/README.md +++ b/semester-4/ОС/lb-7/README.md @@ -1,7 +1,7 @@ > [!NOTE] > Викладач: Мельникова Р. В. > -> Оцінка: in progress +> Оцінка: 92 > [!TIP] > Виконано для Linux в команді. diff --git a/semester-4/ОС/lb-7/src/editor/analizer.c b/semester-4/ОС/lb-7/src/editor/analizer.c index 35aa6d8..f5de30a 100644 --- a/semester-4/ОС/lb-7/src/editor/analizer.c +++ b/semester-4/ОС/lb-7/src/editor/analizer.c @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Error: please provide time in UNIX timestamp format.\n"); return 1; } - time_t norm_time = mktime(&tm); + time_t mtime = mktime(&tm); char *paths[] = {CWD, NULL}; FTS *fts = fts_open(paths, FTS_NOCHDIR, NULL); @@ -134,10 +134,11 @@ int main(int argc, char *argv[]) { char *buf = (char *)malloc(1024 * sizeof(char)); - for (FTSENT *ent = fts_read(fts); ent != NULL; ent = fts_read(fts)) { + FTSENT *ent; + while ((ent = fts_read(fts)) != NULL) { switch (ent->fts_info) { case FTS_F: - if (ent->fts_statp->st_mtime > norm_time) { + if (ent->fts_statp->st_mtime > mtime) { printf(RED); printf("--------------------------------\n"); @@ -167,6 +168,12 @@ int main(int argc, char *argv[]) { Encoding enc = get_encoding(buf, bytes_read); printf("Lines length:"); + + if (enc != ENC_UTF8) + buf = to_utf8(buf, bytes_read, enc); + + enc = ENC_UTF8; + size_t lines = 0; size_t line_len = 0; for (size_t i = (enc == 2 || enc == 1) ? 2 : 0; i < bytes_read; i++) { @@ -204,9 +211,6 @@ int main(int argc, char *argv[]) { } printf("\nTotal lines: %zu\n", lines); - if (enc != ENC_UTF8) - buf = to_utf8(buf, bytes_read, enc); - printf(NORMAL); printf("%s\n", buf); diff --git a/semester-4/ОС/lb-7/src/matrix-calc/main.c b/semester-4/ОС/lb-7/src/matrix-calc/main.c index e26e18a..bec6525 100644 --- a/semester-4/ОС/lb-7/src/matrix-calc/main.c +++ b/semester-4/ОС/lb-7/src/matrix-calc/main.c @@ -3,7 +3,7 @@ #include #include -#define MATRIX_SIZE 512 +#define MATRIX_SIZE 12 typedef struct { double **a; @@ -134,7 +134,7 @@ int main() { double sequential_time = measure_time_seq(mul_seq, a, b, r_seq, MATRIX_SIZE); printf("time: %f secinds\n", sequential_time); - int num_threads = 32; + int num_threads = 8; printf("\nperforming parrallel multiplication (%d threads)...\n", num_threads); double parallel_time = diff --git a/semester-4/ОС/lb-7/src/threads/main.c b/semester-4/ОС/lb-7/src/threads/main.c index 41c93d7..5b323c0 100644 --- a/semester-4/ОС/lb-7/src/threads/main.c +++ b/semester-4/ОС/lb-7/src/threads/main.c @@ -4,12 +4,15 @@ #define NUM_THREADS 10 +volatile size_t count = 0; + void *thread_function(void *thread_id) { long tid = (long)thread_id; printf("Begin\t%ld\n", tid); for (int i = 0; i < 100000; ++i) ; printf("End\t%ld\n", tid); + count++; pthread_exit(NULL); } @@ -23,7 +26,7 @@ int main() { void *status; pthread_join(threads[0], &status); - printf("Main thread completed execution\n"); + printf("Main thread completed execution\nCount: %zu\n", count); return 0; } diff --git a/semester-4/ОС/lb-7/Лр_7_Ситник_Малишкін_ПЗПІ_23_2.pdf b/semester-4/ОС/lb-7/Лр_7_Ситник_Малишкін_ПЗПІ_23_2.pdf index a3b60233e7004db12e927c44f069b45e6bb9b197..180e8d88ff52be77eeb701fc3d41f37521d61f37 100644 GIT binary patch delta 6694 zcmZu!byO70yCz(^yQOo1?VzM%0TKBK3F(k#F+k7-M7kU4?vfH|5Ty|TMM5N{8>EEm z_q+F=>%lw!%sJ1z^*r;=oSDD@rl0*xeu4Ob1c8KsH|hXkB!mzUJekJ~Ab^`Np7rE_ zQ{dX$txUS$NdC(9TR}X7`5OKN1v&l%l+3;kU|R|IK*S6#&`AB!GQVkrP9JVeBtJWN$+RVs zFwm+?jQ-(!t#LK@V)>VFn;b780Z*rjE=+-_VbFsD3ra%I84rQnsatF8)5s!`cn-_( zGKKMIL;1UqCPCQqI0R>f>Tn`g=9s(L=!MtGYs`|u*M`g{iwNQJvQEoiwie5MuQX%i zy+KZE&YRp2jW^h}jwl@4i7gF~PjQx1<3)Hs7 zM5o#}pAm=eKT5XgD}##))wzZ)@Kgq#3g$_FE}e`-bsu77VgoJ#l@xik%K5D#1x>Ocix1U}concg z0&Ry7$B4!;u0!3@C_?^20low)N#JT6{qx(;-q4PZT$JN-*ZAsmJ@I=gN}7uKueZbb3#xm2QW*t#3Z5L;$!v0V+)6~E-Bb17Y-?FF1e61uLyb)zD@_A`^!JY96 zXltHJ7Mhv91QfogB+ldyN+S2xC9jF!zL_`w;!_+>WbqlJtPxQb-qgmbCGUmo+Xw>? zK-IqbjkSFnt&_Hxl*R)G)whmjUt3&X5aaogg}hF9#JdEGxBWI<8EF5UgZ
    aRSq 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 IijL}k0X}GidjJ3c delta 6720 zcmZvAbyyYcyS0?UMnFv1#c}rP*|+NP~oQcPNc?NT)Q2fFLC(AROQG zo$va+2haR7*R`H!*1Ffa@0n|6E`}(AhbjDnF@iCJv4XMdaUyZCKuAOiMko#|dIq)Z z`dRWJx}&3;ceeq-lJWb7lFfuo2|&j24A)4)(;vKDl9sz2a!bEp>D|GyD&X7$%&OG$ zE=a1MbYwk<2<^!x#R!@U^kncky*$`EBeK2mxmXez-M`>oX+`_i3HtWYlmrG>Y>ro|)1Lc46E2;>U)yD#{cEcKj|DVWV@E8Id1_3F$a|NwcHC!84T)*5zhh z-n;#dmEJdRqtWi0qlX`4DQUhasg9l1JH9_Q;Pdx~xf#E;-5-`}{+j(7U8Eo@mbj(f z8i6eiT2I0gBxPHChjOmphc9rf$PRuUE3MWj8B8)kanAR2(z@$MSe?f$bv5=#ak0pJ z+$h!fF>zl<9_fQ~yKXT{Y;V|381M(%WFM*)Eqe?uyef}&C6?gT( z`$Iu`3YMGL3D(_73V1Y;=p$$8BwmUG#;ybwkId76B|}&BzK=d(5x~_IvLc1O9<}_Z zi_oKlrirPiKcCxNN$wq%a3=S^6Y89()f%9TZQ%R@vP?BlzOM!B=uA>heW0chyq&)^ zMZ)MUde|DFo-=?4#NWY4kzSz0Ybnj33>|z+)%kSgMNm1xH{2%ocWB_#SH*Jc*7Dll zZ&#o3x~z2?VKidG&MKUSie&2~Rv+l%q8T5NXhC?(mBeJJN4#vD0Qbx)gAnKK)qyC_ zSXe27RFST6m)J-?ke&P$2a=B*f02U;!px}zY@RjcpOw z-#3f3gZs>4KG#zUp{)kO%E|heD=*9Ggl)q7pb3Y!w!9ZT{3}hR~>~C+gKti|RIzB68D<-A7;yEf$namfjU%^8Fsl zIvpo@Jbs4KF%0tc-88L??4E)JN3X8V5$ogYH z)-rPRMG3}SJ+vAM>r4h?C^!*k>URZdu883_dzB#4)M@(rLA~_-;n=256oK31TH3E^ zjU_KL`_QH9an`H>Rc&ti=UmU;eApT%}r=ZFd zqnMLozu-mFnm1a`H=K6qtJu_n)vn2j#H7sw{Cc~3MXu*8V%jBwx|36FpVbvpIB)>T zyVkO);f=~o1q9@hpTQ2n%%@ipT^@-K9#f;_F~3q*JL}t}K{&`iC<956^bPYhAELLo zZtA9eW2jlAUDWGxjy^C8snGIjyXbL)hR=(dXLvPGn89dnEYED1p}FXSnqQPUs*B7c z#hG%~4v)A)(HkL0YW1<+=D|X$oCg<=yd+HEYzHkdaj zAJ2sdOjvoSh7T4JP-UHecy_$^a8voR-uiNjv7-bp<%~vE0b(6J=PP^=ae-feNP&7k zSq&$*7Ry72U({Vt5f`#AzIp4VXZbC8zqB9nV)O&;7!mGUyKBlsfYQjbbm<`2A(pp# zrEfc3PVSm`c%^R=pR2w*WR0M>H>l3n!WmBY3I(vzoi_`?j+t!`u{Ewlp&e|T-;#_@ z%_opklrnQ{6xpVFX{meLvlni&TQ>y(HH{J_prY$Dv31qsA$*)1x?a!%C%@6miM$5ucVZ@GRw^KU7qJtEH-9A z>94!wIK%MuIqBrz+qqz@Pa0ATtju8@`?a_=yztHBlF}^n*!0ukm(i6fcP(=Xdhsd& zL;TpeyPfp0HYa%gYP?HjR}{KV#DO!Q;epOBdq7xuSfXjlzGG*^<6|nQsx+)Z8JmBS zMkg#cx+*z%IIc7g3V)m=L(J%|wH`yvr0N6wP7ugTcMWPZHwNacC5e3#WI6L-R&AB?^t6B0Wpe<&!G zFmLl!JpcfsAgY+6jv_k9oPE<&yl!h^)?9S2jPB@5M|hg=!Qdt4QT3sj6rwCHrvMfA=NRoyHGv3TysW|PPf(e?cUdiK=*T-16BRZ~6iprK7qU2?9uejaMQ(mIv7R%@;iCL{& zQ$0F9gz2bcV6m`IeqUTV0r-t+)9{To259H3;^8Q5qjlyN=&lK;y6d9SS3a6&X>OaB zEC-Va;!?$vg)LZIqr&i+=DQY3CD{%DND7B}FRJ+)s-=xWhAk@Zhg zb6!(Xf9;R*7dvJJ&ExiGvy2K@0Bvg@0^;Oby0 z#auj*Hbp~-S65xog~WIm;(Zru&E)($)B@ce$wrzpzz~y-MX;^RSS#0^o-+M9U?^jv> z9L{-!?jOwsKefE{b)!DDrxtuK@?vWiwJtV@TYz3upEu&xEN_!fqBtt$a)$tx2icf7 zMX@)9kR2WGY3^@qY)=>JA4HR>Z!V6D-wf8aSZB8QXMFc{(5$hkV|am{eTUL z3NLgvc~6?9dgAKN&Doe)Xo=d|_VPsZ=d6jdsLy?r6t8Jz+aLS(bL10+dv?ZiP05TG z9N*g}4o&zXt5wGxkx5I5owJdg@Oq1L$n^{7gUY&XPI#@j_0Dsi9Ros|c7y7D8x~f% zn3htKi%!|_h!?N8MK%g=D#jHFOZ0wqvp%;(r#v2X%bW4;u3Y*8#)o-o5=$evl!{2| zbGS=_=d>2oCapC#OZ09tLq!VK_f7nLOsC~jcl>9m+xTiW2Cf96vgEW%iY8x{NNo37 z#WfJZ9;M;x%&amDGSHxt^(VIb?nN@rGdt-PEx$-Pt~F4 zXiwY0#1FKCg=}SA*3pYCs}n4WX=*2#yA1C@vU-m9Mzs zc6cwQwJ=6cV?1og{ysGxGGauq>aTa35{6GkR*+xKn0PswJ59TcExjHn4TimXnocCYjN$PqX1=Y?<`n?VY?tONO9}>HYG}tw?T>+vg>bxbO2)%4L5_6dSq8S9}2|B1`UF=vlHYVQZIx>B}Qx4 z*^+dLCA)7o{0gfx((#d$JE*aecg`hY3hX(8P>xE5+s_7m7qMYUj^hiCM(g|_#5D$N z>l?)ityqmDqZ%3OIO_#4!n4ty7>GUu|cv62qdqe%TX2;%v3y?AG#Po)Wi#1FB`t6eLP0DVs zXxr6&sqX@W>Y+cz57DPH)fd0;2A@E1^5tZ^6~u0VmEafQ=UgGB{#LrtVRS6m=Hg^O z^gc03j%YjYii+o8neGH@PEKXKwowU0;B+%Hoddg3pHsLQBxUINGFA*_MY#>)4Ut4dr^@+E4p<4ixwt#AIv$y|7VGv~`{T6|+t zv5fhcAW8=PU_Sd13Rx*dPBM9lpf|c@zbEs23c30{>(NF9tpvT<5gIQY+*ZkgzeNo= z@UqR91B|cpsE{jkoKeqss^6;N^wDuzg5LDZP?5NiOp&|3UzBh!{Jmq{tn_%bfLPhK ztvO7vMU*pOOumV#(=CV0_I`csiiw@>5oV^^;Z&1()}&!&f$>bu#EPhGfLhAAQhTWb zljGu%F%g=X!)`%u>;#I+DP>v;-i47iRV{xDI8b<|ZF?{ppUcasT0#(B)qfc!qDEt} zsWjXrZd{lATR0ExKfZ>hjyVr(1xr806l^-H=Z!JQ22S(`>?^-)i>VY;8Cxt&90>Ck zdFlPMBu=qTZR$-wk0!QU_%EYrx{PsSCQKCn!x{8zh6BfH!WiNxs14}%z@sy~XSRu2 zxzZSL&nJF!SH}GHRNegAdQ*(F{;UZfWHv2$z@kr=^XV4xLx{ia=$QHPxY&I&iqoSs z(2sCxn;gSdho#Ik1ipVYTe-l5>(wViU`KDaZYs@2XKt`1Zhd7JTtbz|EIw^x(=r%p z8)1$%eCz-lZJ5@m=w0E?FN}L1Gc3%wSJSJF6Vy`hCbvejP*E_(qUm8V!gyDFp>DLb zsv@DH%FEt(B?VArK>5H-tF~RRnXK)~!nDooYuSA@+Nqd>U>hGrA0MvrrI1nZxRM=S zl}DL^^>ZctfY?>#nCc2lK`(EBuraCr;8rP`N7#V4lDj`-^k@RWkMblDLx!V_L zCTnm%tCH^b#;a&gjBTebGEL9tg+2?849!kV*>jIW2?O)l$+S1+Q?_`26)=f%GIA)n ziv%h=W(R2K@e}uscpU9BKa6G$fr=q$-E9;9e33xhI4na=jF`R)4LyD^6dNZ|+1NqB zZ0g;HMPimgA*Xvt9(aPqfN+)G0rIGDQU3v6qR=z9#;F0ZTCMo0FU=KHNdQt>1 zYmubvv+2FSkGlT#C1e`ACmf(tde2fo^=W{^r^Q`v6_FH|Px?by^q7Kz%T)++bW5#6 zK}fUCYz4!+1evo7hkWbl)U#>shNZ8f1*P8dcy(IC1_s^b4Ur!3D(;3CTDEeqOS3fax7FE>n;5Q|g zCyNPsaS;Q9{bZd~UGjv9pFARdp+ggPhAcb1G5WZgBZ8&bcc*vu2~7-ik+#YTRuB6) zWESD2j$ks;*fa!bBGeA)E75%63Ay{GEPUn!)% z;0G6{bp>vm@g8T1IZMjCRcj50;a0q{Coa-TiV!=B_mFHqfJp;}y=nGnfP0QYJtoSqg{KoQngft$U|J1>92iwf;VejQijfZ-WMmO z&-F9BW->A|%`4L6gfAw!$bUo!(~Punq*@NO$(}WiwBg>1)9W#NLBMw*@0gPSYHO{7 z{d!{ILXh|7QsJS>L0TOTV64$4zHKkC+Zs!3!0;s~?8v;Xd2G&@m6)lGxy{G5w@q<4 z`<7@qtoLV1O&AVY(<(jAu?sE?#s@`$kf5gd1f041>>wBj0fj+8C{6$)BfpZPnWTxE zIU|RpAQ%XS0b&1txoI{PM<0s<3X(=hBEfK7aj+G?m4t(Zf|ibyT9a%h4m}1w2&M@_ z2tr|k5KxM977o|Hfu_PNoF^C*2m~YWpM%kX0PxQl0*63>(3F+8I09(oANU{aKZ_7J z5DdMG3BZx?I~Wv#1j6oO2oUTp1_Oe?;5++ZKqLh64~G7iFbo8N-4%vGfq!E#sK8%@ zNCXmjM+6Q+LhkN^gAw5W7XBaICh{Dd9SlsUK*~)n4iXI#fP(I@K;R(6U1kUjCUDm# z1cn6t6{P?Yd^dY2L;xmmM*|9hApXJrr176VKp`-Jf0z1a4FW}g1@86%1_ZQ>UH2*R32m5b#{~JR9 z?