From fb7e6b56835491f7ecff3def6c31dcc1fee883c1 Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Thu, 8 Apr 2021 17:58:03 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[OS]=20CPU=20=EC=8A=A4=EC=BC=80=EC=A4=84?= =?UTF-8?q?=EB=A7=81=20FCFS,=20SJF,=20RR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/operating-system/README.md | 48 ++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index e92fba0..bc84e95 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -171,7 +171,53 @@ Context-Switching 이란, **CPU 코어를 다른 프로세스로 전환하기 ## CPU 스케줄링 -> 내용 추가 예정 +CPU 스케줄링은 Ready Queue에 있는 프로세스들을 대상으로 이루어진다. + +### 선점 / 비선점 스케줄링 (Preemptive and Non-preemptive Scheduling) + +CPU 스케줄링은 다음의 4가지 상황에 대하여 발생할 수 있다. + +1. 프로세스가 running → waiting 상태로 전환 (ex. I/O 요청 또는 하위 프로세스 종료를 위한 wait() 호출) +2. 프로세스가 running → ready 상태로 전환 (ex. interrupt 발생) +3. 프로세스가 waiting → ready 상태로 전환 (ex. I/O 완료) +4. 프로세스 종료 + +스케줄링 시 상황 1, 4에서는 선택권 없이 새 프로세스를 선택해야 한다. 하지만 상황 2, 3에서는 다음과 같은 선택권이 있다. + +- **비선점 스케줄링** : CPU가 할당된 어떤 프로세스는 종료 / waiting 상태로 전환하여 CPU를 해제할 때까지 CPU를 유지하고, 다른 프로세스는 그 때까지 CPU를 사용할 수 없다. +- **선점 스케줄링** : 어떤 프로세스가 CPU를 점유하고 있을 때 다른 프로세스가 CPU를 선점할 수 있다. Windows, macOS, Linux 및 UNIX를 포함한 거의 모든 최신 운영체제는 선점 스케줄링 알고리즘을 사용한다. + +### 스케줄링 알고리즘 + +#### FCFS (First-Come, First-Served) Scheduling + +- **비선점 스케줄링** +- 먼저 CPU를 요청하는 프로세스에 먼저 CPU가 할당된다. +- FIFO queue 를 사용해 쉽게 구현할 수 있다. +- 문제점) **convoy effect** : 먼저 들어온 어떤 프로세스의 CPU 처리 시간이 길 경우 다른 모든 프로세스들이 기다림으로서 더 짧은 프로세스가 먼저 진행될 수 있는 경우보다 CPU 및 장치 사용률이 낮아지는 현상 + +#### SJF (Shortest-Job-First) Scheduling + +- **비선점 스케줄링 방식** : CPU burst time이 가장 작은 프로세스에게 먼저 CPU를 할당한다. 만일 CPU burst time이 같다면, FCFS 방식을 적용한다. +- **선점 스케줄링 방식 (SRTF (Shortest-Remaining-Time-First) Scheduling)** : 새로 들어온 프로세스의 CPU burst time이 현재 실행 중인 프로세스의 남은 burst time 보다 작다면 현재 실행 중인 프로세스를 새로 들어온 프로세스가 선점한다. +- 주어진 프로세스 집합에 대해 **최소 평균 대기 시간**을 제공한다는 점에서 최적의 알고리즘이다. 하지만 CPU burst time을 알 수 있는 방법이 없기 때문에 CPU 스케줄링 수준에서 구현할 수 없다. 이에 대한 한 가지 접근 방식은 SJF 스케줄링을 근사화하는 것이며, 이전 CPU burst time 지수 평균으로 예측할 수 있다. +- 문제점) **starvation** : CPU 처리 시간이 긴 프로세스는 계속 Ready Queue의 뒤로 밀려나기 때문에 무한정 기다리는 상황이 발생할 수 있다. + +#### RR (Round-Robin) Scheduling + +- **선점 스케줄링** +- 각 프로세스는 **time quantum (or time slice)** 이라는 작은 시간 단위(10-100ms)를 갖게 된다. 프로세스는 1 time quantum 동안 스케줄러에 의해 CPU를 할당 받고, 시간이 끝나면 interrupt를 받아 Ready Queue의 tail에 배치된다. +- Ready Queue는 Circular FIFO queue 형태이다. +- RR의 평균 대기 시간은 긴 편이다. 하지만 공정하다. `n`개의 프로세스가 있고 time quantum이 `q`일 때, 어떤 프로세스도 `(n-1) x q` 시간 단위 이상 기다리지 않는다. + +Time quantum 설정 시 주의할 점 + +- Time quantum이 너무 크다면 : FCFS와 같아진다. +- Time quantum이 너무 작다면 : Context Switching이 너무 빈번하게 일어나 overhead가 발생한다. + +위와 같이 RR 알고리즘의 성능은 time quantum의 크기에 좌우될 수 있으므로 적절히 선정해야 하며, 이는 context-switch time보다 큰 것이 좋으며, 또 너무 커서는 안 된다. (경험적으로 CPU burst의 80프로는 time quantum보다 짧은게 좋다고 함) + +#### Priority Scheduling --- From c8894c692bd7d4940efd0c6321c6c391e385c903 Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Thu, 6 May 2021 23:42:10 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[OS]=20=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4?= =?UTF-8?q?=20=EC=83=81=ED=83=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/operating-system/README.md | 10 ++++++++++ .../materials/process-state-diagram.png | Bin 0 -> 77946 bytes 2 files changed, 10 insertions(+) create mode 100644 contents/operating-system/materials/process-state-diagram.png diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index bc84e95..33fb7dd 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -151,6 +151,16 @@ Context-Switching 이란, **CPU 코어를 다른 프로세스로 전환하기 - 멀티 프로그래밍 (multiprogramming) : CPU 사용률을 최대화하기 위해 항상 프로세스를 실행하도록 한다. 어떤 프로세스가 CPU를 사용하다가 I/O 작업 등 CPU를 필요로 하지 않는 순간이 오면 다른 프로세스가 CPU를 사용할 수 있도록 한다. - 시분할 (time sharing) : 각 프로그램이 실행되는 동안 사용자들이 상호작용할 수 있도록 프로세스 간 CPU 코어를 자주 전환하는 것이다. CPU가 하나의 프로그램을 수행하는 시간을 매우 짧은 시간(ms)으로 제한하여 프로그램을 번갈아 수행하도록 하면 CPU가 하나인 환경에서도 여러 사용자가 동시에 사용하는 듯한 효과를 가져올 수 있다. +### 프로세스 상태 + +![image](materials/process-state-diagram.png) + +- **New** : 프로세스가 생성됨 +- **Running** : Instruction이 실행됨 +- **Waiting** : (I/O 작업 완료나 신호 수신과 같은) 이벤트가 발생하기를 기다림 +- **Ready** : 프로세서에 할당되기를 기다림 +- **Terminated** : 프로세스가 실행을 끝냄 + ### 스케줄링 큐 #### Ready Queue diff --git a/contents/operating-system/materials/process-state-diagram.png b/contents/operating-system/materials/process-state-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..d44326ccae2974c19430ce96e12868e5bb59b7dc GIT binary patch literal 77946 zcmeGEWmsIxwgw6#jR%L|P9wqHJ;B}GAz0(?5`w$CySrO(Ptf2F3GObpv(MRkt@C|r z|GIx~KXX1kd)BO3Rij1?dB>;@QmBPI zA|1*d&rM6!)!oEJ+k{sA22r5Y*JAxHlJv2jafDt8J1pq;ihh`2=OGVE7LV#X6#>Le zX(MC|uDoBmAP3|FYh(Q9zW{ik zm$>|G0(K)m=Hf*%`P*bsQeHSya?a_aZ8}I#BB|P=ayU!NTv7#9#n1`SO!K~^pV7tkNCWJ4lK?}q>#G{^-DyB`K$S4jKr z-O36sE~PEmfa*RA^LYz1vkjkWtY#v-8^jJ*@;18(1$@SEc0j<*>DyZl2QKbUYF6gw ztoygOv%$BwH@$c4Z=BHm0n!lXmBE_cdhap9e)$#H6Ia-zp}KW@ffd7Ix04UrScO zuUfQJ)pXXBljSwB12Gzz+8LWMx`XWhRDs}k=LKJa%$$u#-9a|CPQ2~{Bz-V*6%kk#0=t`?Ax=FH;j~OV%}^w>ja8lKy~yK6;}NKDzDHH~gX$hWh8j5MFU~kRaf{ z)jvT{9NoK3iNz*`#Q4V}H$LJH0wMMv5C0X+-1zYmCNjGJ*19kd=j^|{m=v;wS{RtJ zVj!yi-$v&z&A1Nz&%+XivQ+>VxAc6e{Ku~SxtXNf3HQ%r^9QVEgNtqb5VZbl?>@A- zqyF=-ArM*xAV0LNzGBq>7orP8sXAT||06xYH|@Q^#ceM@Q<(qOyVBilf&WI*&09d} zuH%!;2;zV19eBdM{u@bq|Gx?UXFewd&*=Y~31VYkbj(_h4nDvJ^(Wco`g~u}?$>J+5-LYwbWT+x0{p-qgA&lgGO5TypL0!3b)p z1Ykm;RD!f)q>JP}R}Qa>l~e|2RiRvh_)M|P=jO0qm*@BYXKigF174MYbMqA%J}a=k zCqYNc>cV`RRIngS!$^-toZQ`T$*}hf>6DVOy)6uzi&T=uAV4EB^Ur12Wkz8F$Q5NU zH-F5x6nhg2B!yG}+8<02@p#=^}{e8#+v&)CgdRxK_!as$0ZT8`AV=@^CX5Y zfh{(wQj)Z5=`5Kw~EAH{pHQN83Fzk5p4W`XuFCHaj^8Rs8#&I^i z$6E{A>Xl(~rgTsvo8QA5j)a75DvhmVU_ON<`2UD~{v?P_4p}b<5cDh~xA8LK-Py*K z#vY&?S9FCmtr<=^^)^6{K%}QgrBI6c7r>3fqx7cLRcQrw89Wf!?pX^G-Q*07nh__y zV4_vxyz}}dQ>~zmF~3yv0MDKJUhF z+>bppT&_-M;&&;vIUOV$4~9$CZ4VZ;qPVy95vGg&AL)B44&hL9d$Mw{!uj2`&lN;L ziWLUDz@TJ5fow!NUV%#;=2b}adwY?nHfXo7M%6qC9A8#%t*%bhL=_>dg@Qqnb^sAz z%|n8qofB0gd$ay1#wm?ynK2ZNF1-%d(FFz_)1!r|de91Io7;2?4s5d4lJ}*|tv3v% zOm=5Huq8&xyv;a9Mpch-0H@Xc@Jptkqhv^sqxYLWPrbvfhvX_>!`0*xl1!|g2n7GfF3g5-F;Yvp|)rBZxhynvs`Xfh56ngm3!%dt)n zK>U4N{oB*daa}>Np8aF3-OA>3*be8Q1}w6l@dl?qH9X%y*D;mD)uHm}-agKE%!ruv z)GR)?v9HJkrUfXqKfkd`jyeAZYV?uEtAywVhf5Y`wy__L&}D~`i5>yQ89V2qPuGAF zcgOK2yxm2~hOzD!J2Imfz(Sj)dS&qtC>TV^NZbh}^gNs|aMXX(p!U)bSt~lKX~C|L z%W!b0#8}ST`6_&33pU*+P_vvgAIj!4f)MdaaG~|?@3)|5(WC!7H+*-3-uh8A9;m=* zCY{200@aA>xH}>;6fm;H#oDl{%+2 zNT22p4whIT5QWRstFq@rmFnz|wKX_eEOPR6I&~1PH|bUDbKA)$F&l}}YE);cR;o&U zP_LwcHQYzLcjn)|3e9V9lgCUBqz=#xus{RNzOf=f@^;O@ul7i*6QZkbc zm5fWP{kle8pnuGRbaL`DP(R6=mr^QjCZe=eT@8KWvbTA%-tUNtr`0E7wR?+TK&az( zUA0DCuKZ9@l%d;VZ%=zMs_1Y1b)$g58Bn9s7-I$DRO&WK+itX*@piJAj#q;MXO;!s z)h^%D(K_r<+qaZ^eDpwnyL%2ZsaIHmfpZoPxi5f2ohzVf$NHeFS#H?@A-3M>VY#=5 zuCdxhCjw0IG7xI{@X{ZGYF5pv2g<-e{-KUh(cH^p5FzZR(p$sR==#gZoxCS&afZTqmU3Ojj*Lg zi;PdbhFM+To<}Z4u#4T|yD&bdjYWNjgtUk|2F4#PaKRah28F|@8(XGQJTh0NvNx7Q z7f2sE_(3&!X5KnYKMj|~M0~`<Shm$IU~YK0a`9xb1c$~1bq2cihLWQPx?DABOMrbi(8zzrF>KWUs$ z6rRaM^xM2p<7#k(bde`=k?MRpMuwjSnep#v0-^8jhy=;>iSt+HX^jJQb3`{);!%Yr z!_k4){aAlDxz0%a?QzCam{M2@B*wwxkRx0q-=j-w77;;K2^7A>nx=w4s^LJ|A6X7| z0$lheP)dxx*5+l2gmo$V9tt5aNb9Hy6Y<4Tna$o)KvMLvjL+f@1lIoid zr6-FSD8-ryiPaR;sqO*MXB%`8CGv?Nx)emL?9i3@E(z3&iwlHTkyhZ}+!}u!^j^0O z0Y`UjJGDGO{qR~yUf zWIeECO=h>8`7$l#j)ief0rq+9f|=2UYbIJAp;mJH$agH86Fxj%mala-d87sZ?p<9n zfzO5e{QAW}78OMo&w8Pfmc;u$Z+ARp+T?H~{4cZKzXj9Z(Yo*Xfz^8ep2u@H6an9$ zuX)y-@9}^D5f;WI=AGNJc`O5{(h8juCMp z*WF^ldUzz3Ow69Wq8Hm6rJKp#hk z#_hJ9Izb?$&dH>cUtL)v8R52(WLthLofN*{TW#;N+V&3Y0A0;T1lH$pJBY&i+$4F# zk;xcWnO7C=uP{(nYde6~H8&d}u#2@}02*%WRIh{5to{1Zd_`Wl+ttVD>qne6VOzz>h!TadV*~N=VzUUKd?xqI z@2mQ}nW3$Ip0z65*5e-1Dl^gvL`p^i%gZr7%vkZZqPE97(`y;C0=s|Q z3Y0yYn;5~m)N}#A>0USu$BbPo^_v~E&*LWwCS9MtgpJM-3wT~LlVrf1GyX9Y7jIA; zKwCO*!*gYq^SL69U~`(*pdy?7bXCvi7>|^BfVnM51uA7KGro)>WHh>o4ygBdefe;Z zBXhFclw~^}{CDGCNn-OyfyCv@NF1wpLzztDuc3+p{R&qMYW?R@I;`nqB>>9FDwWDt z)VKuvjtav((aW1f1DQDTPyFT4m9hgEx$$(y5A8QUVk~+`Vmy5)S6b{62p^E7#$%o& zZ#!XD+vVvyk1&3=m=(z4KPKraChUDss~Fqt3j%h1=%V>QJy9^6Oy{^9rOp{yV*6ZZ zx_3C!c|aXc&JYwV@sf1Wi9t%RlMdr#x*W4H`oh;zWLBYm`MV@%Ciuq{qsy1MQ0Z#; zzQc7mpV#NMNMepLQ@KcN>T34i%PQri4-V|<;q7<9E$4T_Gjw?c+7_W7pKCC59&GIRAA+H*BM?f&M2|@y2f`o zeAjP!)2S7&-oS+NcFIR0N%PSmT zuD~7)AW!HmYAD$|n0^|G6W}YdYO-SWzPFbGTj{3n0}jallG-)YwP3UIcRq^>lWuG7 z(i~X0GYSBkVc|+*g-tQITTLpSFFzTyd0uojS})2!UZ2p_foGOw0vDDtqE zVnC@mUF$g%FOCxbvL|OMofNOB5DUE3ju%9(-#h}pTH}7A& zF8fOaV3u&@J$ZI)QSO^;&!UEpE3myQ9Py}@Kq3{S2x#nJ^^UAO9ll`RqIKO3)^ z9&RdpG5E}7AGG-T#*<2pDkJprX_!!wbd`J&@|z(Pas-o3A2Bkx+^Q3+U)!C3afMQi zD0xY_yHW$t>>W+dvKZ$zjf_#Z=V&n`kp4wSReZvHX!Ae7x2mf!}zR zFZOvz92r{S6rTman8{DJadSw%$fzHiXI1&5&~i4E2R-I68KD1zG!S~VewW@k6@e7S z-g;8?;%>uloB*_*u#j_|fLo4U66;@q9$HjKGPY1j!BwLlr={YT;&d=2b#pjh_RFye zY4GwtL}+CQh`?cz?uSL*9SFmm@z~^2?qW%JYdsmfJ`bdpPM00)*4KzWUM5qamSfh! z0Y7`X)ntAXDB~|(y%~R5dt%r(FO98xv`{^NuahJF!b!9wvtzXQbG96Myvi8+!}#oQ zjOi(f%5LX}cB{G4zNdv*M)o7Ie+ziD-+*e}He)PZ945VF)E)wc!4K-u*R1DXDA6#W z>WqiuW;m=ye~ZDHJ?@6Zb2}K*YFBDXqV$0T62X8Pv8NGq#X=AM_l^p4DXn(rG9~+Y z@29n1&I4WydpxKg`JWP?YLb&AP>Dx6EmigcqUqGicUkvLME>&Cd)MGsJKPlTxvVHZ zvyXe$Y?%}am(852!z3@tAar6-d`+xW7LzCbNj>YAL$B3fj!i;B!c^2}r31*upJZSe)mdm)g*ZeT&AvP3EMA!3jn?bD>)I$eFFL?Z?m4}}8-LS9LiuHMIH3wVxzZI=F>TK=yDf56Wu zCVh)=LF)y2ysF>+E%lg{Gj2~vfa>0X$U_MO`uVQCLuGUT2=&FX?A>l_K3eQhMK7U z^$F)~B#uJ)=w=blJK`$E^l5An3hSNd`ht}Gnq8hvJPP2cru4c!M)#dM=k2=%t?Z_o7Y3?UX{#Bt zhDp@^Xuonnbp^JOA;b!oBAg46&;1Hqb=dkAJQQA`{PJ~XtAQzKHJbp;+?d>M&!yLP zYpR#KqZC*BlRI~*6$Z8NA4nM5$l)t1h~5Y6^SK>T)|46_z4Y~$ZGu^T;POkj@bky8 z!lzhtM~x&sW`)w(j1D*%c zJCoyZZcP(HE{4)fc0^`W;G6X3B-eT@q1BQazkel-{}sddI7ufnSd0NqI82ko0e=NoORkJIa2 zUV4?z^zx=?;Qp}ENL=v9=kNlBUhfMM-K)wwwNGwn7?Bkeptclp)fh`j5meb ze4bqIbNnSDv7jVhbPFZX*$U+ohBkOejzaFi?%Uqse8p?B4x30-OY_dp8+d^0TEDV3 zKxIfEXltQL$A~9!_*6!m*vnF&+&JJx;=D)5ImL4{9#}8h&)*3)Sfp|$eMF(ZR5!1V z6CgA`w$=T)pZ5igH-cbouXr40t$$rEk+-8?-8-L`f5C&GY;a7;@e%hSldgH zD`N3ftdtd(9cDM&-FAV%kEzzK3~x*_GsQup)S-xS3g6Q{BAv;=IXqTrFl=E^ z8QEL*MJj$wCu=?B!oZL5ii2~Jz^)rF;PXzNUK9jFo9;>Y7bg$!%BF|^pjGu_C7vAA zZZF7-Dgjk3M(Wias9f*plE!QlsC$P5amrg1@iV?xdapMCy54b58k7F@TQCwC@77=h zj@f*Ey!?CZ_igTncNQFR;|Hs&wENqcm;$LAEPA5y5n;~ zSXVp1XM!X5JiLBK);{Fw3B8^SrTxd=b8$woeFGo&u zAH{ZqykF?h{A(3m^4C2@;-<4brxK9v0(~k`nTyv+lz2R+iuuEB$CcG+&htEsBv zrx%XU?-oFq1(Y0Lav}eix(dfiOm;>`+F4vTx6PZQkzeM94gQ zfx(selCKNRh`7R1#ZVX!L{fCB8Gsqz`I^ihY5szN@VecVf`p znm_W*g>MJj9_w_=O{K~dyE}P=Sdolhj+eSgSnX59)fel{#-(SA<%)c}Jhuz*>^yIe zEvu7W!g3pHqd`e|az_j1OJEFrqFAw1YbBQ+%+5lBfyd;jzI{+IvNknt>%J?ANYCqM z3zMx)OLlfb$b(}9H%Bs4ggk||S-dm9s#@Oh&HX-JYPijC=;wsR?|tL8Xu z>X{p>k^McR+^x&wRI}Cnt;u?$I%~Dnq2E=V#=DNBx(Qey5yd)g-$e*yzk|^wv7g@I zH}HOKTkZ6i<@egV794hJ-977>gmX~@cWrIMZ$o|BKmN1q(+=tir}~1*F`wtP#fl@% zT@N1XN5tJ}CJyVl*yOWrx+DXy$@53B4OQDFCptFLOhGN#8zU^4lYz%({_}J`-l{3$ zO;sXb2LG<|X7%mRZG-nI27c79XUC({$M;x4NGd%tt;iYc3-d$1kCUZdcd2v5OL~jJ zSILSVE;hftB#lDb@mohxK4XnaO?1l%kNi?+@e5|Cgj(>Q!SqMy~jYvDVwS1Sven!S&@q~5yc{P zW(!+nXFM)TF-!0C6Z5%FoQp{e>%NFL`6=8z9kXTJ7)@pJ6nR9vH`n?6hTivbcJ~;u z2Vt0Ep2=6LzA`EFt13>G{EgsunYO3UkGI={yjpy>((v)gp~W)@cWmMK;_Eje^rYY$ z)BV0J?b{n()|;n1Rng$OvQ57l0qV-hfk@H;=~n2_N2w*Ay3cmKQPbUZ&pAy6{kZD7u^I+GYU^qh z=!q~=jE2BKSV8=`*hb6QbXL=eRHcPqbqq2cMOG()#E)PBnsJi(;{1Dci3W2hhQtp4 z!2-?avCPi9FVM>6{hTM^Rs9F}b#)}-aqL-%DnG-)BtbFQ+1&KPWWS&08{IyEHY&H_ zEnqkqH#lq0IE_w&u`EyBv6ghX_zriqFRw87BR%B!hac^W+e1-w78Y-hM>YHUL2B@V zhB_5{1`9Szg)twzbHAilPeT=g-6m!Evx~;ZNKK67r*FKlL&@{xr+(}cSNHdlu9Lqk znEIB6e4oC{?xaPbQ+$004N;>?G_qc(=9p&3`qA^74M0~@?0E*4qGU1F=fj^NY>|`k zv(983_0hLfrK7o*+^wU%I%d{Q2^{i3X4c$)1v}*C_-7R)^N*}x&;jz>yD2|Ee?G6? z@DBU~8t^hBt41)!B#X9ON_P?MWO9Sg6s{KiWVZQn!%cou#}Q>25?QQq+cqD1c&QdZ(M&vn& z`sBhNm0yApvEy~p%`l{CXe@IjMK|@~=?ldzcls~}Xe~+^W0HlXAY>TF^}cHpe{W4| zH%BJooM>*3{ZP57Y%T?>MoE_HJ(fs2nV()x+FlvXEi?KRS1*9JEmyHT&r387AoHH4 zt-UmG8iP=%_U7kl2#IekZR=ra1sT4!g}sO(@f_r7h(ru=(w-F=T#*_WMw#%muhreU z+#mm(=y&m)ed1}A_FZ0Y&q}q%wu9K5`t>6`!FZ)0JT zc52j|DWMoFDrdyz`p=Kp-F;@JL?I>^weVl|+C+vwPNNFO=52VJpm1qoQuNi6dtB~b zD%I#O(C+r53ME1vsuQOIZfxOg3=}lEKI$bHaYVg!#(E#oFE)!z1qK5h>UV7e$SOA$ zVn_tP+g@IBT7gQtbvms3l`Jl#GL&k|MA)d97yp%%1?}s%#HExvFNX9rP~58jESh zJu@gVug=ej%37EABVN$m$)o+SqmMwOJ)tJyI?7M!jWexIsI(g6ZAb5$bp)?aUv@H$ zUgs__f^$>o#cl~_KHf1XcgJgeCF%SQ3&u+KXDvtvx`pJJXBSZQ3rV=DE0Phqo7qTw zxumhpJ*wu-JDrEH(uB4&*w!u!1eLd&%3l|}p56(r#?G6Ew`Y;X^5Q2mAwPh&8O{7Wvw*d7wdJBUnlnqpepO_-2S9%tt5K1c9quD$`bNh*WPu0 z*U}A%A2Xt_$Vii2=_8~(P9xK22GY>RMoEr8dTw)C*oMa|s8*T(1_u>9Qft@KMB7@4 zneW{-&-;!=-!OpF;Tzz$kfFa8NDIx#d>|Cvn6`C7`eigzE62p8?%}>5rt%Y^1O(*g zJACn;n~;O-8!ny8B~n-38yZ4!4wGr1!W; zGMX(Xibw<7zS4Hq1kqAp^z++J+wbD)<6pA=D}=i7US*$Tp98E+eGw zl#YeVsPXygvjgQ;Ss1?ql+l)^rkzWzS<}nFS7$p91&udo!-yu?!7$wr>|!t)cwfyWWU z=qvxVRR!17r_9@6!c>1-CJmDY=$@z`qoL`4JnXvddJAl}*;=7Wa85cc7tf#hw~OXVk_-I2|X6y;pmPBpcWuXZQs7S?@;JII6Qa z%1F~+RQ}KpEGqiQ#z2G!UxuBaQ+ux5WqiLXrVO5$Uy65yNzl&0m-UN8hF|^C3 zv3@1W25I*6l|O-8Bz#-UWM(0E+yMjIfxRoF^?TL68JdWUN2?3Z4Z{kRpN0s?3pW-P zrfO~LquZQLq#sT)m|k3TO*)QJ7}G(UAeKTMFCLelDPb<}BHezwadvO8l?P*0`VsCe z4_>hz2TjeKrEI*=+8-a?YgYYY@W{VwQ>*5W%u}MS81$BUG!2FL z-n`$_HMzjcRXgOG>nn!c{i>A!DTW1-MHWw zU+5lbR4KRCbo9ie@(?lcgNeTBuLtgWuMn&X#Un$gReX&9vB2S^6{1S=cMOfFV$=5Ly(7RY8G0(29vqii6)1qovq zWLS}XhkIX(+f6>~Nz1nTUVTHP(<+I}mnWQi74omb!gu)FhJ*8Or=OSEh%perD%U-m z5aptUaM47Ndxd+2iE7?=qx6hLp6=orWYB78Jq>jj7Enkd>DqGiTGpFT>KuW;6_y%TUF;> z#cZPZ;P&RWEfb>hk7m+T>a9*?%hvCSR+Qeqv5cxGtNvyiTRE$^DQKp(*Ha+;N$vM~ z-IcrZTHY>Ly|}YzJ->cTfH&bFzyO1ziy5I&PW~XB$m#7`tpoJps^U5!t6*Ke4r7(d zB1^~=*jcHLs24pSh!gL<(FVn-yPR<=iBeP5tSeo`&a*aaUwPj=(Mx5}Mu3JjD!LiZ z7OTk5=R+P&_MAS?Av1<(#dvgnA^n5jDoDIo)jy`eJgSuWie)ibc{119T+D^d{C3(% zr3oHaW0q#5AC6#P2IA0n7-GZTNsL^)c*&~c%i=I|)W*R=-d zeq*M#x})6CnV^d zo7j-Zd3)nkC=i~kNz%R0`GR|znSAd{tmDKq6s-ksQ0c*f{gX%E2HQbpK|)~4|D7Ig zAO>9oQRO>&gmU7|Pr#HP#~|k;?YTt)-Wi}@EgX{ z8-z99FeMrx)Yii)`y6+ueN>C_VqbatD}f!L1edr4S@*8m`n~Z$#mCi&kaAg(5Nuru= z>R*pp$}MJmeuMDiEloYp50i;LUDfT_DDceU)jKVIN@}KhJ>EZP!Yg+;P96i~EWem3 zj`%!IWtiXm5a_6!6lJe|Hm9&$9M(VxA?kx&{1g02+sO@D(H{-=fKQb48J5TTqFe`% zuA#?Y*zJeyUU+$Gv8_+y%1@&h7z+&R-cnJ_zV(57L^=!P?TtS=`yJqxs_hc?%Rv-G zK)B|@maovi(*X|-=Iic?epF?NRSLvl5BN&d{-|PagnE6NSgzb}UhaMJ%_9Ts2G9XY zLOPdj1^f^h8x;M@xooK_=IQYunYhZ1bdls1Gf5pVXjR)gfBOUg7q|3QswSf@4|n@s z%!!#8u19(S4-;|y`$gf{aLu4Pkii#eMgpW^grjZ=Lv7Q3B+1PoShlw{d;&n<5=$n( z$0cwOU63+v1QHs+sH`?OpWhBkSfiLHTBuF6_1w>)$c;Wt%bd#c9U{w%Ox4~ z!z+Ii?+cI+D;U>=dxt9~n&ZjMR`M{$T{oGozTrjwHE<+F)BPBc9G>NLKk^jq?>HODYEGs5a#8G|kT0yM%&D z-5w})i8a&t`7DJ~LJ~`6)J2V9@OZDxwY3is0Rj4tnaF85=LLC@vejpQ)?7nAtBo_q zO+Vpgr)m8T(jLY6CtrlYYUS{7y_lZF78U+H6wt^br=gUQZ<@pr9GDBvOw&1mq$8F7 z4%ig^B^$rO;h4kki+(n!EN+w&euK}wGEY-)*o*|knMmJyp9V&Nc8uXQ`e!9jMt}E* zu&3@ptCbF>m^`_z=pN&{cp8Y`yo?ayFh(ZRav3{|pbbY{w7x?u5lVJZQCv_TsSVK- z!lf5k_;!MyiuZexMciI@cnHk)4q3(Os<^S+gtm~Oqbh3H1_3ZWO;hN}Ech@x!!cYT z{w_b5dR`CNL-!jXRyk%ZhZJR|9tSh(_fLk0p&X7HHm2rF*v!UE>GET=H_6a^?SUeJ z0IIJzrwE#sA}l8p`AA*o)C%7Lf~~rGMjc?GfUfoGe_FSxi9k+Q`r?=7!*h~z(|8yy zM;7oM4Zh|8wtB~pH;jPC=o>)fK=o4xeNi6mXVuf7yS_S;VcCNvL1dsmfIAc#OI1S3 zV%$dSGfcD4c4V`~4^cD%tKn#(%QHVFom#kNKhr8C@S-=tqno$JHMQaTyzwe^!b(R@ zP_QRuL_`v<-zxOY7%}kdDONHXDmYU+nanc2s5DS{T;H&3PuAX+CT4*?)5Kbcdxf#q z%*ZI(R6Ds>W-yI(0txE6CR3n)=}=PdcBAJJxnwbBo9K^?aefp@dXU(QunDvOtHSOC zo!XY)dS>HicZwM}zWKVaG~H{rfl)Z$RH(RwC_V}Uq@2jQfbu^g2Ow6m&RdTrZi(&Q zMjbgSP9|D&SOeit;XmO5R`|NzClOz9p%#43=xIC^L(x(@>tQX2AVg}WiJQ)~dyIlA z4O*sXx+}TmG*MHU!5CN?UC>lIon*tab(x|iS4_4VDH!@#(*A@WEg~oI^cB3lad7YphS|ss56;C&q`NMqeh>h zrt3D{g?q()n%IRxy+Szr2@U?p2VIGyEB{p5l8C;_aInd9zMNDctWpX2x@TDF`>*VS z15f0Z(QSO|SW&1vGBo1pNn~Uk!K6H>k;$}mrFPSudxp=HOMqlk``k`aZkCJ zrUz45-9#qk!plXo(WgOuJVLyChQMgg9UZ7TIu`K>k*9}yUc0J(KWO6&7|L2*@l{63 z^1cQk-&O90-xN)P^$MO?-(Tap_`z=c?Vel;u;S%dW;Vd*NrwOq>yFbEoM&s@(>sJ$ zzvtYJPh?@A^CdWyEkM+|z}#P`keC#lxuL$d0Mq93vMdvDlXXJyv%Z$Or_e~3zV2I_ z=GE6>u+#>sIk~DgTVk+0e4#ELU`|f z!%B`QQRHvYxl@0#PcB#%s`cn()Gq3b9~=YJQh>Gh=^WO{c=omfI36-P(O4f;N0uok zOuSdOP2k6HTlqGjSL#@54f~+9u!Rd+g#)0JYYjz~I^1d=m?dI(v7Bz9iu8n^R_t)F zXG^*0Z=mXDoODsg-?vthZ$68-$OYdB?+is5eBiBD?lS{iPVq58b(72SCF;hW&B{XU505*lPm%a&)x?sf4%93pH8Qec_kN|;#Di;Th9TDTW+%3(LFXY!areG*$v<7RbiMo#hI3OIMS&E2eD{Tyf6QsvsXxfbSz@)`tA8GhJ! z+YKS{dxvf_{Pv1=LKqnJgRI`;%ACz+xm5|JEGgMcfcU3TB!*1GwfPJsP*ODzGT8z5 z^LMf?ZLJV?*9~DcwEXqkz&p&uwJMHZ-ufwJ7nqIsmg_L9KLi5$y=4q!l?bSh<8 zQ<`tjG8Kgn6ex(@QeXZn)^C_C1d3p=0~Qy^V)=Z_DNU#&9)Krj9X_d-) zG$8wBVsiU!w~l_tnn4vmkhto>lBS{wX5Q?7|6bv0e~Ken_g7vsfaGFlE(r~qwLkA- zsn$pg!5RVtNSP{NY1xE=j9_JljTNEo8QS4>cy4{ZU9n^Jd35$8Sqo`O>Fm@yu5CV9 zmb$y!;QDm(GcU+HUpjs4&@pUtuEBgNQK>*&Yu-MMrB&=)iPPqnBCSeur4)oA%nFK) zPfE2O=;ov>T)MVGrzX2lqor!+(41SEK&5sjkWxNVbD0iP#_&f9&|00RN{iO5^yzR# zE<>8jEMym2G1EuDB6if)5;R?RgjRcskO(hDiPiy|rjoZi2WLXH$uNgjZRp`%Pq#W zq|ao0!|t+IxJ`k5S;H4(krh&fIO8eKuzIum>LCb(la{8l_3Rt3yM5$`Y7MS7uW>Fz z-g=h&EPu$+`kBv@RH38u?cOXq7wGZJAxR!HiA-4Hs8F@SVjjnOyhP6RWVE)a&4X+a zwJd6xnmZwX(iF}9gO!wVi4&ot-5BVw<|n6 zBmu)T=T=&nv9G&*K8}V@?{!F@ya#2{#QNgLFn=S zjjJAVsQvG3I_=JuY~By^8v7LP(VWsoL}nzzN1-3mzPksD0vtNlEf*$QyI|gu zBQ`VU0;XEgOLj4i96nDVogMd)%|0mW=(R(2ILo=xxMC$iiVZ7h=wwL)--kUJk;5PT z?_^j)H{43nqRUCHCHvRVSd9nZ*`CX*ahe**00=e$hhCaqD{rJH) z#>n|<-+YgLk`e9nc&BMwQSgy{!xGNJO6?uQwe79FXH>6D?KS2l=UqA;XV$?Ea9{s{ z9u&Ua@b2|LXj2s4_zeEi#$1PY|MK?LEHl4G*t z-Z(*36P;;eCt}RysutvE>#D_x&0hZCB&@$% z@_D(56M;$7BOQ_bgHy7}X?zMI>&*d!G8vIvdpEB!vLa$wBx&|_KMSh;g~~aw0uPqy z>NimUFh4u+A(|6?JNsW4*u&%8nw0o=Gwfu)dkyoNPiN~R_ zFQ;NpK6Qk)9xrN3n3^VR^mi~*kO=a}UA@gxS-ee_ihLb+=iaa9{iw=dxtt78%|WM- z;C=B|s6LJDS7Ui@&LXIGsoZ3)Z{AA<&_m^U*gjew)3h#%p{-Pu46Qq24II?B&6Rz_ zS$a=2c)^2u*t6mA=D&}AcDZQa8|P`Yhtwk5s`gE7EiI7FX@6qoBSZ1|1W28(h6q2z z`gmGM1{|82?1mI5fXw1!AMb-ao$RT|VC9_-yjt%QG;1`m-AIlyir&LYXN7B0aQD`M zb3t*_@!S7tq!U-cVRaiHh(xDAEVwzXJ=QG7O!e&>zrqik3!*I#j99|;E{a^WxMuI^ zp__f(z44@oMyJbbIHHRy}r=RCE?v?@RPM4mFNjSycpG3^Yt=Xu-_4OqTv@`J6e`^<>gp_|;Q! zs~ybh7^fySwFh<2Zwmdc%aPtop`eoHqbIVPc@@LC;_Ynfa zdryBitJ+m097aiU7l+`O&VU_pRo^7F82}J)WSECESUgbm{^Al%SLZc^E*D>6QM7^y8B!ePeA7u=a z;3`N>$3&aOTYI$-aWw~&MCD0yk5C4Ugzti0v~pEZBsa6+WN3BIaF=^!cF^XCo`Uzg z{bxRu*28=zs91I1-!EUeqIHP~=9?2xgUzi}A_Had^A!&(`890qu4A@0hxS z7!bhH8)sovV?e(s@>E^eVWs5FwTPd#grZVPh#On!nU&L0ir=m6-l$)p;vzLV5lEIr`-XO{;LO>(v4V zlZdDvGX_w`b_Okn`#e7&xuw;PpV7J>ocouA-QXj4S4S@up14oA;0ab)!k))bGVgIC zK4>zv2IgLbbw4M(EEmhVWs45GBdzVNh3)KOH~U``@{*PgN((UuT}&n%u=Z`JOb> zZ&!MoYP4?-mG$6SNqMznm+X$@XPX+YauqhZ>m8?Zl=64Mn+96Ma8F(C<%ittz{yiE z+3&V4KqvBxxjk0z?kb8V(J|Amf`9)P0J=A;vnxd}|1w^Soo-4F+$~4Y zi)9{VWYH*!p`6RvEyHisuFS@l4T!Rt+^{8j^0bs1Jp;5D>xJn8S?V{E4OGl`w}G^Wm>RX6KVJ6nOn%%Zk5}rXELS&f)k5bO|R@g z{@Dzjo%FQ2Q$F;zm8=pA;8YJJs%PVE&c34FB$%`q-qOJZZI>8-88Xj^lO0P^c^uu1 zSR+s^Y!qr~$x_nMNPXP@Y{(Z@#S|v2HDF&*=b0Rda8FfqUZQJ_T|z&7v%k?Rz{3)H zJ{OBov)5YO25-Xn*ac&DTT@W=DUP#xr9R7aoS?SI60Ca)SZg}BSEKtMlTnXXgj$)u zd*D%s%a&y59P~+Ra%f>tnA2Nd7CFfFxZG|8!Lx3>EpEVQEfK-El&bdRc?-UxTF#Yq z3`AnDG>7?!_lKIV*NSO)bgYD6P-oXzcU7VB1{gk&_&ybY(6Q3uXmJ#B*wYTt*P$<% zXxGI^)3rl4{i3(~0BF__OeZKgK9;ZV1X|0L)H$xJNfY+KTmL3xU~PkWZi07HA%SCv zzhJ1dd2Zp-UdAm7*hMGaxh2fvN5HYjn3o2p_?U~&L9=wDHB=<{rc%iyPpp*>UB*Ko zd_;pZ1$|mjgg4&eLDDA?DcLuY>McUZ#J`E@VVrIByeVsK%|y8Sgl1U|c6nJ+ zpz5Dno~@_L-Mis&TYe>NRyG~ib1Ca@aoXOc1!Q$9;_@K&RJ~xb@Uye+_dnfHwo#Rg z5vA4lI>BvuwQlXHFSt36z+rSJ`3BE@oP71LU&=Qkacfxb%jyg$hs0 zA}NlCp>S)C{b7nV3OIIqpRzgh*Gp~f)lLUa3U{bjOhZPmu2`HxSNy+wM6^2IvF zI9M)TFoR1s#+6QP7fS>gxijN~ZYn1tFm=CAbM52YYX_OD)gO{XNrX-Oqf(D^7ivpB z%9(AfL|baD#OJ#v(?WDFs%5$5DpmWpo7NzGPBQmF-})5BYGZnQEH*W~?0^eKYz!Cv{lA zZ*D@cAa**(I+3_cUnQ3&zfm&7vOFNiv9%r^cUNkcrY`+VTL^a5q;cFTGm#0NzQBP2 z;^q(HIg63;@$nEgEugz@FlZy!k$Q)BlJF=!>sPtNccyMAj0fLVds7u(njy^a-!ZP* z!m^sQ(XZItH)n9Zz8y)5^i9>YXX#yL&@7B8(iW81dn2}y4r~-uH3~<_AGnfD+h7r? z&i#e>5T$TJQfglhR)*dxV!H>H!qN5lL7vU9*+;-3)2MVZesA^jr^@@&QG63`M7_*tj+fQ0otK|5K0z(_sX2 zpV^?&$MdD6H{jFPi`-sY#3SjOnRX7Qo7`Tl{48`d9MWt`_do5Kpw;xY%ud@T4>_i+ z3b;TbxRLi_DE^|DppE;UmVOyXN?6(2FAWSn?X-^pR~T}{aA4ue;3yU%q#L6t#g?)Dss=SxBRr- z)#Wh+l9rfi5cijxbY%R`J1j?1mAA%onBHU2MD0@^`?Jb`3&w9HPt?y&VbX;N2&nb{ zaQ(a+aJ4HO4NguR`m~M2AHpe%K9b;cu-UmiVcB90_YIy^8c?|DI28Pvg6`MgeeSQT zQRUmbPn3>4TRjibNta~8u>alqL$OsrW&|qQvY34u@ZOvjGd3>!pDFh*)xcw;ObzG%!63dm;|Di8Mf*el;$$& zWH+6zdF4_2i7=wJ-KVbYrO6*=qC_XwOVQCgM*Y*F!}&Qs#)UGLRW)BU*kpcN7uc$k~1N&Jx`wSP-rHA+@jG zFpXRsMn07}gIYOrDkhmm)hP?mEZNIhbHukeDk)slLO%yxuSL|no*)hKsL&{g8cKa` zkE+m%tygE0*jBlMQoYfab_E}wAS4|neJ}6x91DRq1j6^Yt`tqHN8VNd(rl|yz_*r& zom8ZNjs|xQ50Q<`wAo*Oq49_uqJsn@G`Z6FTLlMeo3qna%0Hz+ps2gC?JBCVe;_P2 z$qV-f!n*TX^ewAqucMDBKrE5L=bGDzq9x*UMi^K34w+WYX^R8)^KnPuLkoFpCc#t+ z;-OM{$LF3k$%uRXfF`AGNwoxB6Q90wsUqbpotOFDe9DCKS*$tvKU@V!dbFdX{$Pl0 z7CMPT=_FBc6D^?s@r<`sbXf^vcliv&_#G*>ryfun zobM#MdwvXu&BktWIemA3+=>2s>Al6zVokb@mKZO(FxY(%o~%@RMv6|HY>86kJ~aUW@3|VXORw}9gO0@V-V?XQwal&dDxx?PiE)tXlX2k_pV4}698Hfl zgGq8mug@D;z@@H$>heBY2Z38rHQ)=d{4loTab%4Z@F>zw<6Xf>G`a%w-;v)(&qrFM z&tPL4$O7-xk?;#^xS7+Sqn`EhgupB=ZFpKJ_l0?n4& z`HuSHizt>Rl5m~RbzvjqOYkiC67~y$!~@Rl4;WdNzR{ zUL+uNnbokx-oSFUh^Ld<==3Woi`V&<$bw&Fy@wL~zj+B>zu6q7dExdaLD0)7*$P+T z8PJ1aLH9P_sjr;$bl#1By1-k0Soy=zmPfCy3iYHo*mfQEJYSck1&E0yOL%=Fbd1%5 zY}*O}j{lK|WF^AWDXnI6cnDl`tX1tSl$o@o5;z?Us}nP{ zz)PXu@RmT80*KYa8v9w+`F6j?{U6X#EPi43E)(!fG_a{*iysN5 zJSH;7lW3y5P-l(HvA^)OmVJ2!)N7QHMG>}5h{iKMoHIU6*5<7VNFPjn{QapvwJ>du zd@>C^-@+x!k$tX%geV0E-4=mC=LUwiz&U9C0H{ERkcfeXf6+~)={dAfEjpLU!j^It zbp&mRUAe1&?d?m%1bZWr3Ff}qB2`O>T;IXOo8o+TQg%7u%J@}L>}!*w<1$>p#g?CZ z79X}B?Sd;NHU#l<}?6ea4zUakN*KZdHpC#QE$b!<3!dkr! z6$*F>6)a+BQ|R^GW|^23f6u@+R2Y?HU`Gs3BX7qVuBVv>Nbj*UcH|}+dNVdtrZpOV zL~ZW}CJ|Ir+&jEW>?VG-)m;1ErLoS!wo+#&Q;-5KzVT;>*u8TwY0$%>lQ+jHQEO-_ zr3q)MMlE3uVgovPy>6>vEZBml3m`2n<>8^H1{Lehuaz3BXoneSi&1!4Gid}bfsuMN zBs?XmRe=o!xQNeBj;n--Vfbag_u+eaYtern1hGB6QF|#dqz0x6J{Qxv1vWo&v6yt2 zpNL%JU?t?C6v~(Fz6gW4^djbQS);?ehRELR1PE6;F5e0eR~KJ_aRP_cAFTu8XeJMC z`hYPn10;@N4LNdV*f{%$tEr=i;WcAHrM97oX=S{5Z3c)e7H}-yrKUMYqr`+ppd^ac z!?UJ#^xAPbQg~!GCSEV7eMu0LLs;qvRNjhvlGho((ahb0cLLLdf{5p`z%R;G4z0(r zM-J*x&6w-+6Rn4E6>JpzdEuxPn<=fbg6AIqG4oZ7*;%T4hBG(+!KlEs(f5?cYqCWu~_? zI*NfhYzI=u7fe$2!bb6(L?YR!ddQJPajwRR4{isU+)2z%lYN!(UFUa(|U7jq5GPR@dnXJp+ zz8ue?LucW77K#VAm(cgKSN<$IrNQgSBt-CySrVf*WARs{O3*P8^y!}dc2`G=!Joas z67!!`s~;nq3qhQmbO0?GRDLodmM{9LXbWBK?iD~JT~WE9kgnlaJ!8c?Yt-JbO|M~%c%x- zB}$$5k(-BcvYnnMZy6i=ZOv}xOO||T>+NTGkZ_vl)Qv*B6tvCUr{j_GksE)5%7}L! zpCEgIa$VS>DVN!_!zh*6gxQ{($HHtFy$PRc)ep3Y`5#)ED5wm8(xDALHDU@U%I!=hqA24aNvl78TMZwzEJY zrp0MDrc{H+`tQM~YEA_zIRf`8->7_80J*H~@@Ir;Ut+Z*pvD(Qkg-)OTo5S$PY;M2 z$C?)w=@1KIwy2L0UWuFiMpD>mW#Ii(xuI^0y=SM8-L$x?FwE=m?8FAgMZz@NQuiBf z?8SWGSD>89HA5LE{Gkh&()_OMd`yBv#!KJVSM%k==2ALAp^EkLA^AM_HjAmR7NKkS z&BRAx7-UrHFXEITUFLq>ltl{DB^vF%9>r>3U^sbwXAUsd7mQjxl^1sJEVBZs43Z31 zs323nC>KB#{3r{hv!>=5JJkSKy1O6zI^Y!OPoyyKmiKi*~c0Gj}pdEN$DBOW_M1CC4 z6XR88%)n%=lKim9qv&3LYID4mb=tw$So8X|wTf;hvRU=y!^4#o(6BY+Qes>mX%<2{ zRFEWvLc4%gz^aGESGJ{&{(!LM5n9eDImsDp}UKDAI*ELJZ!{If)j(jXr#jhdDvkQ-h4x zZ9}xb(5$&`V;;@HZKsIqNMt#dJbMOR70v?##3~6F(fBq^NxN=aJFnhAsGcyg;jv| z-@;_EWj#JBI;}LZ$|uvNSdV38q5nGHwVmEpNh2XET(L<)?A`swMV&|smk#u~Lrq&M z9>CN3_G!Ur=Yme&bw-UJ_vn&MxQTN9Z# z0wz*X3ae(n-sv~EOxLz-_0w!CAgfItw@ZO8_)6nAm22M>4E@$GWIYEq!N=>q$@MhN z!21g)m!cDyBmNYpLM1iBi?lK9qbP`d93b;k?%|ImJC>%6SR6==W%EbZ+5J*j4!m`GWahlw4~_$LE7m)hDUH2(e6T4;^- zGifI<>R`>`cVxaEwtrqxsGOA<&hC50aHt5?{Z@3Q7b-Oxi=#aD;pR0E{$<|j3`Z-* zb*(oQzS$l{d|68h)8AA6;+YX76A{ByK}qj76l5k?hZ#6^X^&-y4XLXb8?C7Anb5ak z(JJjYaI(J9gxNt5M`3MhkubN*CZT5Zz02`hs*_>%^u}(2$N}%qR5J>Xa6(j8^iyuT zZ~!>rUP}CL-%la|23r$ZbZ72jo-%U2^?%+fQiTJ;R+lYehMNW0J6Q;3O-( z!6Wz32TtB(Y`$mP<|Cxbt#p1o<-Cre!bG#f!pdgv&`>Sc%RxCiRi>XzLdfbl*7k)D z972z_XSKjb0Ur%KHhs#Vy2jy3^fYj$EcW3ab~&2#irX9c@Kruyz(y=J zT7?oXH!G8h`dXTpxQKQ~BOfZ+P-_aMbyXO*=KIuI^X!rNx7}ZF#BXi%y|F)7<_?{n z0X`wI(=${7)+BHt>-Mw7RH#HeT&!RB^*yM2Zve96ydsi3YW9VeODrOdQ`|h7c41^i z%UExfRuQmbtIiMR^CEy-*rLu3vwlrFU)+2RyHpq|5*-XR6b%E8iDI2`@Y+rymGvU9 zE>sMR-HUDze@rT%QP=3dM8+_ut_UVtA9{B8u<)E{^Sa|#zb~iB{k4YvhG*^>jJ_AP zeL6Czy>UT)$c+-3uty-z!e^ES!Zq9eMlMHTYLD9(pnS;x&2lJ6t=Jbs^jwMh-iSYF zM$evPsahM&_W6gb*^12CT+CC0&0!6F_$F$OECXsI6nufcwVsIB;+yHxj;m)l#t4)~ zipt*^D#W40HxfxsW=(@|E!#bC=xc^|YZvofEj9$86bZqF(1w68O4PR}RKL{Zc5|v& z)Gr)$g{(2u!$O#vhcin9g=}i6CiPrJF$#}`5t~lge4iT`VF2`TdlR7K8DexKDx0;$ zkDnqT)G^6$`_17P>c7A0qOiyM9< zk+Vqa#GZ(J(ydIdTEYwKP#R_p(pI@VAMOeJ2*uozVCVhN;!&d#QEu26WfcNdpj+`x zn#OC*TmXmrq%EQUBNh+LPAtFIeLC@cdyn%R12B?dhgVJjiYNv{nPK~T9IhD92ujzU zRIPd5wI^!j{xEb#G`AD`4)vgHQ6+XF|6Tyb#^#aTqvXEq)XeDb`I2x9A@L0i>1%|g?vnI@hNblC* ztx~4w!+A2Wi<>p*Wk-DX9ttauyy8e8_NLM4!Pnv>tm{I}*J||RWF4aa;`2UgA3M*; z2*ie!@re&NL!ozd##NJbsBs6sXs)==pPz$SzY-#GeKAtZ8SW)*kBX(gC4h(w`r0%s7#P||>`dA~VK{%6*ni;=XLku`P? zL8-gd^F&D)X?$1`luA1z;W}gtQ#Rn}0IZtdg!ZCGBihyH?Hf9`EXiA9%G60mR92*ry+6#3`CB7t@h+4hP&fvn zrKLOGsDEP61N}mNR)?5m0V7sLfE66*x@N)}eS{Kd02av1fJBIE>EMn7EPFssjOEgb z)@WH2`1wBj24I(jX|M0z!TeedG6fzZWBty*jbJ|Z#X$*)9Ct$F2h<^(U04NViLGVQ zYT_AY0nT9^s)p5|S&hH~Nk0=UCi&yi`@9C8?i=g@WumnT&tS=f`)4bt!03w0F%;M# zD;6qcw7o@T+Vz1@sN3xSXmhu??RLY&~DTHw!Crp8A=N zHV9B)#mZ}ua2ctkxvU{-ET)RSnH8ISCiSoOTt zIwP?7VFA`j5z9?P+tE&5RdQEmD(Z98ennXXC4`I!3nJmZs@+>A|2#d%&}Z;ye+18@ zBQOLyHS?8UFTmK4<^S{)N9u$)u)a^CL0@OCXeK21UTHt`rqnpNnt;{DaP21?ghhDB zt`M){=DK2BfqeRB^AmsAUJ%|s%@hFu?zbiE6XgkW23j>=GxlFd~)*D0h!6hc4iKOIPnpf zO!lKsq3(8!iyminR-QF-LEV?z>ne?wEtd4Y%^fjW--~82oGD9ER(@Y=FOyd$KwgWf z6iqD=*pvR+XVj23#?5R_V_|gMUKxpePVuCi!H8hO^;anZ*QTB8z0cv)>tmk ze)kmjbi|*l$E?}mve=$aUau>{1TE%d1^pg2IrRMrRor)J57#!AwYNsStGofw7N~O$ za8qc<o|vk9$Pm({=>mN>w^MLjxh-eEukqIL zTMr>oU&YBnMY>(~uNfW!_6FrYe(nZ$#qZ1)0^d38bW!Jz?uSeI34Abb)A@sxvii$x z)?6q)7N7bh8Pq^L-afZArb!V>R!T;o^|K@nv-ojjUuwZXa9zaC2U<<;A(-_a^T^AI zAaka$8n+Va65V-ZqX~vk$;Q2an*}}aX!kJ*m)mbSAI%L;Pd|MU}&F20JD7n9;>nK^@jWNoAL)T>cIL37o&{b?~O zoH=kM@UGnPBQ^yURM`F7o3qWm%1*qyCSE?IN9={K(>lPV-G&{XqiktG5}`}lxBqeFUi#Rn0)-XiOJ03Bf2woE($6*w8Ro9-rf#3l-8 z{|UjsZNV(B8B&*}!<)09I+oSD05TiFu1eI^rdSKXx7F^yj>F9p|Ko&b(ET+wo1p!E zm#k{}Ghes<+|%QORmAg&dVDVC74^+m@gIc=LI+7virQ15 z%4E}+^(if6;(4n1NyN!JlvD#uN_0y5gLmRw-twcTv06^nmo1%$a_JZs0pC)BQ7RYC z|0a5o5O#pH$eWLe5Yus?I4C2hEL#V>-rcudr!KcK1hkuV1KK<=jPLk(LqXa7IAykY z$1yJxGU$5^=cNP1{LDnMxfIF2e=vo|D6Ko#ci1#Hp6wCtOPhc&y)bTM< zAG#@`L%p+uWl#v$C{g~?e@==B$RGiJlZd|qvG|$?vZ+ zZ1b*WQTbeN>lzRT5|iWlbAu5+PZg+CL+6f@@Pkg`96T5GGR>m6Gm@qc|Jkh@MM7#9 zcXqwM#E8pBwt282SBKPK#u@zRce{6M{goy0JmEf=^^ zr;ed2;@oF`-Tn5nWz`H#T?c#Jp~b7GZ}-L-A?F`VhxwT%jm}tk=C236(K{&S4K(No-T8@p8YzD>5iow`AbV6xmjE1f%&zuNr1<1> zeN0VFh5d)%=)=8`{__S-e-9OFWSzJxEr&lKg1Fe{$M}Q_&Vbw#(LvWFiK^oP4@~e8FDY+? zA^+xy_(-aN5Zj!xAb+CN8I~QZ^h+rb^?uPIM7jSN6xL#XP8@OIlnHsa70(pXKy^YSc~n0k2sz0nC`C>UnzH!p$*SwVyWpKr9^rF~weFzaiq;GiS1 zUk?rxlt+742IQU2yQ@=(hKDGMeB89qNP0EdWwj>?P5h}ITP}$jv8B|=NYL|8s#K?( z8P^O|wQ@Lx@m21rb&{HeVQP0MydjDa$2b^|fd6U)d%POLXA365_)M2ZqQns)2YC)o zrwyl!$HjK`CG#yhkhA0B)r~3c2&hrBg z#VLerwYBMI@F-n}zgj~*R{#7dVM0k|GZmThFyzY+w#VyG+pDI)k`PuY*ZiMn_DfD^ z!sbySzo{I^FIJK;`#qR=tse&WUQW8Ue6fK7)c>?UMAq#NwM-~JxgW*|dL8PKmYB2) z1QLpps;H=>+6w`?MU@E5dSAW6t_H9*Mgh}=8hUz@ba3oF zB;}qAzz<3C1a-ssx@P!j6bt@+5rS#OsPKa@{vEq{P8aZJRFmHP+yW-nfx10c%RPXs zVgAtWdh-@AQp^&DH!S?Q6jZVT8PAJ=9i!4JaT<2FSE3jf;`QzAy6ol;F2JuIIjVKf z03KA1J9fZvwK%A#y}iBOtNhgiwiV1t}paoeBf1p;@b~?oR(3EKsI(AN>iPO8`iQ+35!c7cVbfR##ORYBLTPEW2Mv zrIl4)N6TiJiYo1ZdC=9@M>FTanLX$`eHw~h6>#TSUh$jOuyAGz*hFQB2mJYav%&p# zrs?WEbC&LX4*m>2?Bbt87}ZT_zwc1J5~u3CW2J40ofYYoEC)z(H;NG{DXCtqCkv|4 zi2$cRKcdtpF+gsqmI`B2;GO~wSq1`24IWH(Ute0XJ9PS947>e8fnWb({h~?A6p^MV zWCVp%mgFB7ic%r?qY)-epXa}?{Xt7kiW#f*HJ1VzpXIGSw!liO7rNtOT{jr|#H@YZ zj36_g`l>!^Z$a_x8CDf44AwfYS{N0ZX#?|IFm>8=yy(L_h@E$m4HY`kr%#IC!SY!~{zqamEmKrqVE?QVSt3aYA7^S;)sNr?fPd!&i~MfqVGj z?yCMOqo}AzN40HA=iv+;Fz&5m|7g(tuZrM+4rh`fAR+r_(Hw~sBJwG~+DGY|H5gf0 z^7HnDP)|57eNF7^N&)7xKwp#ioRw3F)Pp+22J5SKD-VzJ{M##S6DG;~`+N7p3Z8Pq z4bY1ATa_*ZU2LYkL^0A>yX4ir4t>sAnn}s{&-E5V64vH-6h*>*_}~0ZZVs!E#)^8f z%3%rIO#8nqD|Tc7AOyY@Zx);zGjp@&0bwSO?OP_@ik-#vZuU1@N^etfpI4-;c3qK6F!0MDZlb#OswULwdxc3?+CMGXF zyR+v5$lPYOBFA-D_`h5?M+`!ZgOdV3Ipk(k1;PNsOUQ1B`dl`Xwl3i87YoLwpN$tA z5~9LRGG_Z%R>(TRw1;0Wz=b!eOuI&!?KkikI%)Hh>DQFsy{^4w9AYva=~I8Pzk zjbZdOM!pz)N*5tP{WCjI5RJcqtMnB3Kz`FCB{h2#bWLG0JL?_RotFHseuD#7vu~cs zFZcIqSYgb2?TC7_%(h|(68w3R7GQBk6@n4BlWEU%wD4bLyRzO-Mv%6XQ)EIw*Pc|Z6z=o zPyr3cA=&cpr$LT9kp(Tv;-6DDh@rr(Go0EH|Cx@2)o+DFN;qN?l0;xfM*>4nsukW_ zL^li0yN=L&DigQ{j#s`pUKI}*>+Xie4!T1HtV~|5&5w{Lj4LFY|Bd-c63q)vYm`9E zK6;aO-!K3aeR)%)a{W75^>{28TJ8hA)8nk+vY=Y~1O}p}!$Mv0|97L9Ltuvs1orn^ zcmyrcV*Wj~A_#KJ<<@_w_RL|wdCipcjscB!EIRjzO0!#P?TdEC$Qm=XQz# z0+I8%{fW*!(GL$b^Tq~h`24$u5s0w`k*f*n&l?#<23VS*jkr@xU#25A%&oJfX7xOFxc zii@!1)6|Cw`j|rhmg3Ho2_Qnn=3} zjyl*Jmg@@5`&YIvA5WO=~5VSM6t=D%&&j7XNk|p!6y`DbJsA}B zcC#|TnmtaO!$BI8WD*m^|yTAlXBA(&VOX>pee+dSBvX4f9$JGNUnv%Qb zMqjm>IUe=f36r%sw%Y)CEv*@{{3iqfGvVIIeu_{dR|-+_Zu*ZAlAE`mpJ9dcg&F8} z_&iSY1C2`f&=53?*-HXW`5~_}_`D>76gE5-Q)!T2>JTXg@VGizU7({4ja6_1BL8>z zCG=$Z03@9>loQ@CknI3R(zOKJn`{qWodv3?7eio8$9FZKNRueBP5q6G1iztf8j8el zF6SRG6%`fz43MG|@-gFuU4LZy=Jeg|^S{5rq)6a#G#JeiB?I_i9ap?P)hw9oMI^|u zp3G!&crZfpQg3wh-`mJ8PHy`%Kb^~mqvdMn)$SqK)Zz^=HkbQr*OB@`;z<0oSJcT% zrk?^X^({$X8~*p>st91X+~!BM+{pi4fC)^oW>J53^BeURB?95dCNy24VhR5?r(Zvh z#&d;OfGv5nau#o1;KOaCz454E^i(!z7;<4Pjc>NHoL{<4(ev@~?F{()`@8R~KL*@U zF2p*~H8%x*eA#`f1gfP(7DJv9e)NAiT(0XQ0(DJMw_Dl2A3Gy0=4K}U(`x?y;ej3K zs{K#;@WG3LP+`(e=pualacS0ZdYLb^y|d+MeN&NIa~TtOK!ev^BixFQ#I$WD8IS_YCutzEF`1cX*0^lvo43(&;5MnbAT!ntWfK}O>{#&a$ zw!E0TyAQ7vW3+)+az9SWl{0Ypt(>jx@)*{ewRG0+nK}W+*RF?4{ILT+ez2!Uq;qrR zsr}@Rk}?{>0r^gy|WM0{XLq2Jw84@SjaOk$W)0i z4+sbPoq{zFH6R5B-yjS=QAT^Em^8x7vIgw$z6XPWjnUo7gp#tvly`_E=PfjQdX%^Z z^!Dk4wMCEKH|qrpCSSSt2}~F_0xYH5z9E&C)bqRj{%)@`)5Wb+X=O(OSxVRUhPfu7 z_J27xJp|HErqlc@Ep-&cL|~kYUqU>~*J>76jXQ{|(%z(4^sD;Nz~ZvY6v(HM?s8a5 zFxIQ43c)26$i2^Ju&m_aS1lf&7HQt}9q#gEaBuCEPkMg9v1D;0cCLFAv|iLO&;dPQ zM|LlC+;OXRp?h#Y70@Xg@3OMZbLg|8Lzbf&dcj7PV17KDBgpI4+(e$Xusxolcw{`) z?5zh`H99IOHiO9CVybSRX7!L{Q6FxsZJ+LK42R3ER^Z{LVXtSMuarz{_MkzU_hqKE z%R^~~x4mJPo7K$mjaGPhWaNw1b6?yhks*OgsTnT)i4WW9WxBqx$$K^9a1DO<$6pLO z+gv6F42kYTI}}S;qo9>4Uy0AK@u%&Xdjo3pztEcjiS}Fbd54h40V4vIx=t;L5-f{> zp*w%1R{1DEFq%Lk^BE|6HJMFfOq#l_lKrsRRyZ9H0Fg3k{0>ZrHTk=A13B97w zi1;A!AvA&hE1idV@<*B)r4eHVPOcOkG9b8Z*F>1NaS6uDg19mIIA zj$&NnG(?E!PQp3<=~lGbef=|v8Ayndv4q@eQa+)$EIKH_DD;(y1TqEbzhC-)pNA8% zRZy++xvWA_Bc6f|)D=)hM+QE7Yg%bP&)IK2>*n_&9T8DP!yk-DY9D+MWc;xE6V9m9 z8=995{&2e4h*t{5H0e!IOsnAV2i91y(=Kz1YW~HuD{3H8BT!eytSaPJfpDkStf z^XVh^6+h62;6#!9Z?#}q3V5Jr1URRnAus8AdN8%`O1mHL<^FsqaN6H>AyF3>xvtqB zi}06@qA>ljZf8n7-t4wG7Gb7UxVH975D<^~#>oWVz8OHg4SOpYhVM)5- zSROD~JnjeI__O)_FV0-O(=ApaEJ2^$5XC8e+yjQrFa=5e$B@<@L4R zK5N0#VFlVbMOKwsx@5}k7vqXR>Gf7st+e^F)$=b*{-744(&d6ab^V)Bk)atpI(2<`BGnP%Ag!hHQV( zb&p{qxiP`2qJ;@$oWE7EN}si#>yK?J!|ILBSIQxTQ)t<{7%8t4G%`Zoi7LINeR_`z zlXP!_Vp0Q44yw@8R6c!|VLMSs`M&?h?jebLRGFX)jEyju1gbRu%a91s;JJCFzQzst z=PFE?tHWQQ7$T~2IxujY^DQfJmcM?r{7qUd-@ylm#ZcVOZeEj=#XiU2C~MZ$;Yx*g zu@;-|@+kZ$6#jOjDqZ2xs8xjo?1du=)8eo}LY%{fKH)QdI_lJGwT`{yOQAl|$axu5 zokYKWf)@3GDP9N;dGagngeXp6N4$&MlL_$(QB}B)Npl(Za3(jCU1`1IOcfa6k-Ne& zDfXYaT>JjJYHVy!5cVd^PD83Ea%LFwIfI7@QN3z&xQ3%SXa>no3O?|-ennUcI%RLy z?LJBPh^UpN1ycv4`twCJICsCQm$ymq{?**{TcYQRFc(lD1`({&~`37N+-a
LK!_wTNF^er@qF%rBUQmZ+jnP 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 literal 0 HcmV?d00001 From 8590add4983a701615d306b99dee5a5ae63bf593 Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Wed, 12 May 2021 01:48:13 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[OS]=20=EC=9A=B0=EC=84=A0=EC=88=9C=EC=9C=84?= =?UTF-8?q?=20=EC=8A=A4=EC=BC=80=EC=A4=84=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/operating-system/README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index 33fb7dd..45a2a41 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -210,6 +210,7 @@ CPU 스케줄링은 다음의 4가지 상황에 대하여 발생할 수 있다. - **비선점 스케줄링 방식** : CPU burst time이 가장 작은 프로세스에게 먼저 CPU를 할당한다. 만일 CPU burst time이 같다면, FCFS 방식을 적용한다. - **선점 스케줄링 방식 (SRTF (Shortest-Remaining-Time-First) Scheduling)** : 새로 들어온 프로세스의 CPU burst time이 현재 실행 중인 프로세스의 남은 burst time 보다 작다면 현재 실행 중인 프로세스를 새로 들어온 프로세스가 선점한다. +- [Priority Scheduling](#priority-scheduling)의 한 예이다. (우선순위 = CPU burst time) - 주어진 프로세스 집합에 대해 **최소 평균 대기 시간**을 제공한다는 점에서 최적의 알고리즘이다. 하지만 CPU burst time을 알 수 있는 방법이 없기 때문에 CPU 스케줄링 수준에서 구현할 수 없다. 이에 대한 한 가지 접근 방식은 SJF 스케줄링을 근사화하는 것이며, 이전 CPU burst time 지수 평균으로 예측할 수 있다. - 문제점) **starvation** : CPU 처리 시간이 긴 프로세스는 계속 Ready Queue의 뒤로 밀려나기 때문에 무한정 기다리는 상황이 발생할 수 있다. @@ -229,6 +230,19 @@ Time quantum 설정 시 주의할 점 #### Priority Scheduling +- 정수로 표현된 우선순위가 더 높은 프로세스에게 CPU를 할당하는 스케줄링이다. 우선순위는 내부적/외부적으로 정의할 수 있다. + - 내부적 : 시간 제한, 메모리 요구 사항, 열린 파일 수, 평균 I/O burst 대 평균 CPU burst 비율 등 측정 가능한 수량 사용해 계산 + - 외부적 : 프로세스의 중요성, 컴퓨터 사용에 대해 지불되는 자금의 유형 및 금액, 작업을 후원하는 부서, 기타 정치적 요인 등 +- **선점 / 비선점 스케줄링** 모두 가능하다. + - 선점 방식 : 새로 도착한 프로세스의 우선 순위가 현재 실행 중인 프로세스의 우선 순위보다 높으면 CPU 선점 + - 비선점 방식 : 같은 경우 단순히 새 프로세스를 Ready Queue의 맨 앞에 둔다. +- 문제점) **indefinit blocking**, **starvation** + - 실행할 준비가 되었으나 CPU를 기다리는 프로세스는 block된 것으로 간주될 수 있다. + - 우선 순위가 낮은 일부 프로세스는 무기한 대기 상태가 될 수 있다. +- 해결 방안) **Aging**, **Round-Robin과 결합** + - Aging : 오랫동안 대기하는 프로세스의 우선순위를 점진적으로 높이는 방식으로 문제점을 해결할 수 있다. 예를 들어 대기 중인 프로세스의 우선순위를 매초 늘리는 것이다. + - RR+PS : 우선순위가 가장 높은 프로세스를 실행하는데, 동일한 우선순위의 프로세스에 대해서는 Round-Robin 스케줄링을 적용한다. + --- ## 동기와 비동기의 차이 @@ -821,7 +835,7 @@ Page fault
-리눅스 운영체제에서는 어떤 페이지 교체 알고리즘을 사용할까요? 자신이생각하는이유와 함께 알고리즘을 설명해주세요. +리눅스 운영체제에서는 어떤 페이지 교체 알고리즘을 사용할까요? 자신이 생각하는 이유와 함께 알고리즘을 설명해주세요.

LRU를 사용함. OPR에 근사하고 현실적으로 사용할 순 없기 때문에 최적 알고리즘에 가장 근사한 LRU을 사용할 것이다. From 4f406c7d94ba01c5e9ca0c1004ec39a9f896532b Mon Sep 17 00:00:00 2001 From: iaminside Date: Fri, 14 May 2021 16:10:39 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[OS]=20=EC=A7=88=EC=9D=98=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/operating-system/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index 45a2a41..fedc9c5 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -838,7 +838,9 @@ Page fault

리눅스 운영체제에서는 어떤 페이지 교체 알고리즘을 사용할까요? 자신이 생각하는 이유와 함께 알고리즘을 설명해주세요.

-LRU를 사용함. OPR에 근사하고 현실적으로 사용할 순 없기 때문에 최적 알고리즘에 가장 근사한 LRU을 사용할 것이다. +LRU(Least Recently Used Algorithm)를 사용합니다. +OPR(Optimal Page Replacement)이 제일 이상적이지만 OPR은 이론상에서만 가능하고 현실에서는 사용할 수 없기 때문에 OPR에 가장 근사한 LRU을 사용합니다. +LRU는 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법으로 오버헤드가 큰 것이 단점이지만 다른 페이지 교체 알고리즘에 비하여 제일 이상적입니다.

From ec66e2409e59318a80c57173870bfbca90c8ff12 Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Mon, 17 May 2021 22:35:06 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[OS]=20=EB=AC=B8=EC=9E=A5=20=EC=8A=A4?= =?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/operating-system/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index fedc9c5..6caf888 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -226,7 +226,7 @@ Time quantum 설정 시 주의할 점 - Time quantum이 너무 크다면 : FCFS와 같아진다. - Time quantum이 너무 작다면 : Context Switching이 너무 빈번하게 일어나 overhead가 발생한다. -위와 같이 RR 알고리즘의 성능은 time quantum의 크기에 좌우될 수 있으므로 적절히 선정해야 하며, 이는 context-switch time보다 큰 것이 좋으며, 또 너무 커서는 안 된다. (경험적으로 CPU burst의 80프로는 time quantum보다 짧은게 좋다고 함) +위와 같이 RR 알고리즘의 성능은 time quantum의 크기에 좌우될 수 있으므로 적절히 선정해야 하며 이는 context-switch time보다 큰 것이 좋지만 또 너무 커서는 안 된다. (경험적으로 CPU burst의 80프로는 time quantum보다 짧은게 좋다고 함) #### Priority Scheduling From bf718dd638348e7587c4060f0571891ce4e9d60c Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Sun, 23 May 2021 20:31:38 +0900 Subject: [PATCH 6/7] =?UTF-8?q?[OS]=20=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EB=AA=A8=ED=98=B8=ED=95=9C=20=ED=91=9C?= =?UTF-8?q?=ED=98=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/operating-system/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index 6caf888..85d4e54 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -156,7 +156,7 @@ Context-Switching 이란, **CPU 코어를 다른 프로세스로 전환하기 ![image](materials/process-state-diagram.png) - **New** : 프로세스가 생성됨 -- **Running** : Instruction이 실행됨 +- **Running** : 프로세스의 Instruction이 실행됨 - **Waiting** : (I/O 작업 완료나 신호 수신과 같은) 이벤트가 발생하기를 기다림 - **Ready** : 프로세서에 할당되기를 기다림 - **Terminated** : 프로세스가 실행을 끝냄 From e8cb45a022ed5afee9a8ea3b0a322ec804b09bd4 Mon Sep 17 00:00:00 2001 From: Seogeurim Date: Tue, 25 May 2021 02:28:07 +0900 Subject: [PATCH 7/7] Update contents/operating-system/README.md Co-authored-by: jjinny --- contents/operating-system/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/operating-system/README.md b/contents/operating-system/README.md index 85d4e54..845f8d4 100644 --- a/contents/operating-system/README.md +++ b/contents/operating-system/README.md @@ -236,7 +236,7 @@ Time quantum 설정 시 주의할 점 - **선점 / 비선점 스케줄링** 모두 가능하다. - 선점 방식 : 새로 도착한 프로세스의 우선 순위가 현재 실행 중인 프로세스의 우선 순위보다 높으면 CPU 선점 - 비선점 방식 : 같은 경우 단순히 새 프로세스를 Ready Queue의 맨 앞에 둔다. -- 문제점) **indefinit blocking**, **starvation** +- 문제점) **indefinite blocking**, **starvation** - 실행할 준비가 되었으나 CPU를 기다리는 프로세스는 block된 것으로 간주될 수 있다. - 우선 순위가 낮은 일부 프로세스는 무기한 대기 상태가 될 수 있다. - 해결 방안) **Aging**, **Round-Robin과 결합**