[์šด์˜์ฒด์ œ ์ •๋ฆฌ] ํŒŒ์ผ & ํŒŒ์ผ์‹œ์Šคํ…œ
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 3. 08:18

ํŒŒ์ผ ์‹œ์Šคํ…œ ์ •๋ฆฌ ๊ฐœ์š” ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ €์žฅ๋˜์–ด์•ผํ•˜๋Š” ์ •๋ณด์˜ ์ €์žฅ์—๋Š” ๋ช‡๊ฐ€์ง€ ์กฐ๊ฑด์ด ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ ํ›„์—๋„ ์ •๋ณด๊ฐ€ ์œ ์ง€๋˜๋Š” ๋น„ํœ˜๋ฐœ์„ฑ ๋งŽ์€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํฐ ์šฉ๋Ÿ‰ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ ‘๊ทผ์„ฑ ์˜ค๋žœ ๊ธฐ๊ฐ„๋™์•ˆ ํฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์žฅ์น˜ ์ค‘ ํ•˜๋‚˜์ธ Disk๋Š” ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ block๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ๋“ค์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. Disk์— ์ €์žฅํ•œ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„ ๊ฒƒ์ธ๊ฐ€? ์ •๋ณด์˜ ์–‘์ด ๋ฐฉ๋Œ€ํ•ด์„œ ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค. ๋นˆ ๊ณต๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์‚ฌ์šฉ์ž ๋ณ„ ๊ถŒํ•œ์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€? ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•ด์•ผํ•œ๋‹ค. ์ด ํ•ด๋‹ต์€ ํŒŒ์ผ ๊ณผ ํŒŒ์ผ์‹œ์Šคํ…œ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ผ ํŒŒ์ผ์€ ์ €์žฅ ์žฅ์น˜์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜..

[c++] CAS ๊ตฌํ˜„ ๋ฐ ABA ๋ฌธ์ œ ํ•ด๊ฒฐ :: ABA ํ•ด๊ฒฐ_4. ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 2. 19:45

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ lock free ๊ตฌํ˜„ ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„(+ Hazard pointer) Counter ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค mutex lock(spin lock)๊ณผ์˜ ๋น„๊ต ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค DCAS _InterlockedCompareExchange128 ์‚ฌ์šฉ ์œ„์˜ Counter ๊ธฐ๋ฒ•๊ณผ ๋น„์Šทํ•˜๋‹ค. 64bit๋ฅผ ๋ชจ๋‘ ์ด์šฉํ•˜์—ฌ ์ฃผ์†Œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” CPU์—์„œ๋Š” ์œ„์˜ Counter ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ c++์˜ _InterlockedCompareExchange128 ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜์—ฌ ์ด๋ฅผ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์—ฐ์‚ฐ์€ 64bit ์ž๋ฃŒํ˜• 2๊ฐœ๋ฅผ ๋ฌถ์–ด์„œ 128bit๋กœ CAS ์—ฐ์‚ฐ์„ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ 64bit ์”ฉ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. lock ๋ณ€์ˆ˜ ์ด์šฉ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๊นŒ์ง€ ๋ณด๋ฉด lock-fr..

[c++] CAS ๊ตฌํ˜„ ๋ฐ ABA ๋ฌธ์ œ ํ•ด๊ฒฐ :: ABA ํ•ด๊ฒฐ_3. Counter ๊ตฌํ˜„
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 2. 19:43

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ lock free ๊ตฌํ˜„ ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„(+ Hazard pointer) Counter ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค mutex lock(spin lock)๊ณผ์˜ ๋น„๊ต Counter #include #include #include #include #include #include using namespace std; class Node { public: int value; Node* next; Node() : value(0) { next = NULL; } Node(int k_value) { next = NULL; value = k_value; } }; int node_n; //random ๊ตฌํ˜„ random_device rd; mt19937 gen(rd()); uniform_int_distribut..

[c++] CAS ๊ตฌํ˜„ ๋ฐ ABA ๋ฌธ์ œ ํ•ด๊ฒฐ :: ABA ํ•ด๊ฒฐ_2. hazard pointer
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 2. 19:41

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ lock free ๊ตฌํ˜„ ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„(+ Hazard pointer) Counter ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค mutex lock(spin lock)๊ณผ์˜ ๋น„๊ต Hazard Pointer https://m.blog.naver.com/PostView.nhn?blogId=jjoommnn&logNo=130127286459&proxyReferer=https:%2F%2Fwww.google.com%2F ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€๋‹ค. ๋ฌธ์ œ์  ๋จผ์ € delete๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋ฉด, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋˜ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๊ณ  ๊ฐ์ฒด๊ฐ€ ์‚ญ์ œ๋œ ์ฃผ์†Œ์— ๋‹ค์‹œ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜์–ด ABA ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ƒˆ๋กœ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” list๊ฐ€ ์•„๋‹ˆ๋‹ค. 1๋ฒˆ ๋ฌธ์ œ๋ฅผ ..

[c++] CAS ๊ตฌํ˜„ ๋ฐ ABA ๋ฌธ์ œ ํ•ด๊ฒฐ :: ABA ํ•ด๊ฒฐ_1. intํ˜• ๊ตฌํ˜„
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 2. 19:37

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ lock free ๊ตฌํ˜„ ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„(+ Hazard pointer) Counter ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค mutex lock(spin lock)๊ณผ์˜ ๋น„๊ต ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„ ABA ๋ฌธ์ œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ intํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ์ ์€ ์กด์žฌํ•œ๋‹ค(๋’ท๋ถ€๋ถ„์— ์–ธ๊ธ‰). ์ฝ”๋“œ #define _CRT_SECURE_NO_WARNINGS #define NULL_INT -1 // NULL ๊ฐ’ #include #include #include #include #include // #include #include using namespace std; struct Node { int data; Node* next_node; }; int node_n; atomic free_l..

[c++] CAS ๊ตฌํ˜„ ๋ฐ ABA ๋ฌธ์ œ ํ•ด๊ฒฐ :: ๋ฌธ์ œ ์ •์˜, ๊ธฐ๋ณธ CAS ๊ตฌํ˜„
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 2. 19:27

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ lock free ๊ตฌํ˜„ ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„(+ Hazard pointer) Counter ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค mutex lock(spin lock)๊ณผ์˜ ๋น„๊ต ๋ฌธ์ œ ์ •์˜ ๋ฌธ์ œ Linked List ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ push()์™€ pop() ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•œ๋‹ค. Linked List๋Š” FreeList์™€ HeadList ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‘ ๊ฐœ์˜ List๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ push, pop ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์Šค๋ ˆ๋“œ๋“ค์ด ๊ฐ๊ฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” List๋“ค์— ๋Œ€ํ•œ ์ƒํ˜ธ๋ฐฐ์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•ด์„ ์ƒํ˜ธ ๋ฐฐ์ œ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. lock ๋ณ€์ˆ˜์˜ ์กฐ๊ฑด์„ ์ฒดํฌํ•˜๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๊ณ  ์žˆ๋Š” spin lock๊ณผ, lock ๋ณ€์ˆ˜ ์—†์ด ๊ณ„์† ์‹œ๋„ํ•˜๋ฉด์„œ ์ ์ ˆํ•œ ๋•Œ์— ๋™์ž‘์„ ์ˆ˜ํ–‰..