๐ป (31) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Simple Diary - (1) ์ค๋ณต ์ ๊ฑฐ (state, onChange ํฉ์น๊ธฐ) ๋์์ด ๋น์ทํ state ํ๋๋ก ๋ฌถ๊ธฐ before const [author, setAuthor] = useState(""); const [content, setContent] = useState(""); return ( ์ค๋์ ์ผ๊ธฐ์ฅ { setAuthor(event.target.value); }} > { setContent(event.target.value); }} > ); after - ๊ฐ์ฒด๋ก ๋ง๋ค์ด ์๋ก์ด ๊ฐ์ฒด๋ฅผ setState๋ก ์ ๋ฌ const [state, setState] = useState({ author: "", content: "", }); return ( ์ค๋์ ์ผ๊ธฐ์ฅ { setState({ author: event.target.value, content: state.content, }).. [์ด์์ฒด์ ] Synchronization - 3. Spin lock๊ณผ Mutex lock, Mutex์ Semaphore mutex lock - lock์ ์ก๊ธฐ ์ํด ์ค๋ ์๊ฐ์ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ ๊ฐ์ผ๋ฉด ๋ค๋ฅธ ์์ ์ ๋์์ ์งํํ ์ ์๋ค. - busy waiting ํ์ง ๋ง๊ณ , blocking ๋์ด ๊ธฐ๋ค๋ฆฌ์. - ์์์ ๋จ์๊ฐ์ ์ป์ ์ ์๊ฒ ๋๋ ๊ฒฝ์ฐ ์ฐจ๋ผ๋ฆฌ spin lock์ด ํจ๊ณผ์ ์ด๋ค. context switching์ ๋ ํฐ ์์์ ๋ญ๋นํ๊ฒ ๋ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ด๋ํ๋ค. spin lock - ๋ฌธ๋งฅ ๊ตํ(context switching)์ด ์ผ์ด๋์ง ์๋๋ค. - ๋ค๋ฅธ ์์ ์ ๋์์ ์งํํ์ง ๋ชปํ๊ณ ์ง์ ๊ฐ๋ฅํ ๋ ๊น์ง ๊ณ์ ๊ธฐ๋ค๋ฆฌ๋ busy waiting ๋ฐฉ์์ด๋ค. - lock์ ์ก์ ๋ ๊น์ง ๋์์๋ ๋ฌดํ ๋ฃจํ๋ฅผ ํตํด critical section์ ์ง์ ์ ์ฌ์๋ํ๊ธฐ ๋๋ฌธ์, ํ๋์ ์ค๋ ๋๊ฐ ๊ณ์ CPU๋ฅผ ์ ์ ํ๊ณ ์.. [์ด์์ฒด์ ] Synchronization - 2 Spinlock : ์ก์ผ๋ ค๋ lock์ด avaliable ํด ์ง ๋ ๊น์ง ๊ณ์ ๋ฃจํ๋ฅผ ๋๋ฉฐ ์ง์ ์ ์ฌ์๋ํ๋ค. ์ด๋ฅธ๋ฐ ๋ฐ์๊ฒ ๊ธฐ๋ค๋ฆฌ๋ busy waiting์ ํ ์ข ๋ฅ์ด๋ค. Busy waiting : lock์ ์ก๊ธฐ ์ํด ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์๊ณ ๊ณ์ํด์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ. Sofrware-only Algorithm Peterson's Algorithm ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฒ์์ผ๋ก ๊ณ ์๋ ๋ฐฉ๋ฒ ์ค์ง ๋๊ฐ์ context๋ง์ด ์กด์ฌํ๋ ์ํฉ์ ๊ฐ์ ํ๋ค. ์ ์ญ๋ณ์ flag, turn ์ ์ธ flag: critical section์ ๋ค์ด๊ฐ ์ค๋น๊ฐ ๋์๋์ง, flag[0] = true; turn: ๋๊ฐ critical section์ ๋ค์ด๊ฐ ์ฐจ๋ก์ธ์ง ๋ฌธ์ ์ ๋๊ฐ์ context๋ง ์กด์ฌํ๋ ์ํฉ์์๋ง ๊ฐ๋ฅ .. [์ด์์ฒด์ ] Synchronization - 1 ํ๋์ address space์ ์๋ก ๋ค๋ฅธ ์ค๋ ๋๋ค์ด ๋์์ ์ ๊ทผํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. Race Condition ๋ ๊ฐ ์ด์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ shared resource์ ๋์์ concurrentํ๊ฒ ์ ๊ทผํจ์ผ๋ก์จ ๊ฒฐ๊ณผ ๊ฐ์ด ํ์ ๋์ง๊ฐ ์๊ณ , ๊ทธ๋ ๊ทธ๋ ์คํํ ๋๋ง๋ค ์กฐ๊ธ์ฉ ๋ฐ๋๋ ํ์ ๋ ๊ฐ ์ด์์ concurrent ํ ํ๋ก์ธ์ค, ์ค๋ ๋๋ค์ด ๊ณต์ ์์์ ์ ๊ทผ ํ ๋ ๋๊ธฐํ ํด๊ฒฐ ๊ณผ์ ์์ด ์ํํ๋ ์ํฉ race condition์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ธฐ๋ฒ → synchronization Critical Section ์ฝ๋์์ ๋๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ ๊ตฌ๊ฐ. ๊ฐ ํ๋ก์ธ์ค์์ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋ ๋ถ๋ถ. ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์ํ๋๋ ํ๋ก๊ทธ๋จ์์ ๊ฐ ํ๋ก.. [์ด์์ฒด์ ] Real-time System์ด๋? Real-time Task : ์์คํ ์ด ์ฒ๋ฆฌํ๋ ์ผ์ด deadline์ด ์กด์ฌํ๊ฑฐ๋ ์๊ฐ์ ๋ํด์ ์ด๋ ์๊ฐ ๋ด๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๊ทธ๋ฐ ๋ฅ์ specification์ด ์ ํด์ง๋ ์ผ๋ค. Real-time Task๋ค์ด ์๋ System => Real-time System Soft real-time systems ex) linux real-time task ์ Non-real-time task๋ค์ด ํผ์ฌ๋์ด ์๋ ์ํฉ์์, ์์คํ ์ด real-time task๋ฅผ ์กฐ๊ธ ๋ ์ ๊ฒฝ์จ์ ์ฒ๋ฆฌํด ์ฃผ๊ธฐ๋ ํ์ง๋ง, ๋ฌด์กฐ๊ฑด deadline์ ๋ง์ถฐ์ ๋๋ด์ค๊ฑฐ๋ผ๋ ๋ณด์ฅ์ด ์๋ ์์คํ . real-time task๋ฅผ ์กฐ๊ธ ๋ ๊ณ ๋ ค ํ๊ฒ ์ผ๋, 100ํผ ๋ณด์ฅ ๋ชปํจ. real-time์ ์์ ์ ๊ณตํ์ง ์์ง ์์. Hard real-time s.. [ERROR] - git push ์๋๋ ๊ฒฝ์ฐ error: failed to push some refs to / fatal: refusing to merge unrelated histories ๋ณํฉ -> git push origin ๋ธ๋ฐ์น๋ช git pull origin ๋ธ๋ฐ์น๋ช --allow-unrelated-histories ํ(Heap) ์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก ์ฐ์ ์์ ํ๋ฅผ ์ํ์ฌ ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ฝ๊ฒ ์ถ์ถํ ์ ์๋ ๊ตฌ์กฐ ์ต๋ํ๊ณผ ์ต์ํ ์์_์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์์๋ค์ ๋๋์ผ๋ก ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๊ตฌํ๋ ๋ฐฉ๋ฒ for(int i = 2; i ์ด์ 1 2 3 4 ๋ค์