rosieblue
article thumbnail
[OS/System Programming] pthread (1)

๋…ธ์…˜์— ์ •๋ฆฌํ•˜๋ ค๋‹ค๊ฐ€ ๊ทธ๋ƒฅ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•œ๋‹ค.. ๊ฐ‘์ž๊ธฐ ์ด๊ฑธ ํ•˜๋Š” ์ด์œ ๋Š” ๋žฉ์—์„œ ๋‚˜ํ•œํ…Œ ํ•˜๋ผ๊ณ  ํ•˜์‹  ์ผ์ด ์Šค๋ ˆ๋“œ ๊ด€๋ จ์ด์–ด์„œ ๋จผ์ € ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ข€ ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด๊ณ  ์ผ์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.. ์ฐธ๊ณ ๋กœ pthread๊ด€๋ จ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ, 'undefined reference to `pthread_create' ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด๊ฑธ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ปดํŒŒ์ผ ํ•  ๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ -lpthread ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค! gcc -o pthread pthread.c -lpthread pthread_create ํ•จ์ˆ˜ int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); /* ์ฒซ๋ฒˆ..

article thumbnail
[OS/Linux] ํ”„๋กœ์„ธ์Šค ๊ถŒํ•œ, ID, ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ์ •๋ณด ๊ด€๋ จ ํ•จ์ˆ˜

ํ”„๋กœ์„ธ์Šค์—์„œ์˜ UID User ID(UID)๋Š” 32bit์˜ ์ •์ˆ˜๊ฐ’! ์ด๊ฑธ๋กœ user๋ฅผ ์‹๋ณ„! ruid : Real User ID!! ์ฆ‰ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ '์‹œ์ž‘'ํ•œ ์œ ์ €์˜ ์•„์ด๋”” euid : '๊ถŒํ•œ ๊ฒ€์‚ฌ'ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” id. ๋ณดํ†ต์€ ruid์™€ ๊ฐ™๊ฒ ์ง€๋งŒ SetUID๋น„ํŠธ ๋“ฑ์ด ์„ค์ •๋œ ๊ฒฝ์šฐ, ํŒŒ์ผ ์†Œ์œ ์ž์˜ ์•„์ด๋””๋กœ ๋ฐ”๋€œ. ๋”ฐ๋ผ์„œ ์–˜๋ฅผ root๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด root๊ถŒํ•œ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€ suid : Saved User ID!! Privileged Process(๋ณดํ†ต root๊ฐ€ ์‹คํ–‰ํ•œ ํ”„๋กœ์„ธ์Šค)๊ฐ€ ๋ชจ์ข…์˜ ์ด์œ ๋กœ ๊ถŒํ•œ์„ ๋‚ฎ์ถฐ์•ผํ•˜์ง€๋งŒ ๋‹ค์‹œ ๋Œ์•„์˜ฌ๋•Œ ํ•„์š”ํ•œ ์•„์ด๋”” Non-root process๊ฐ€ ์ž์‹ ์˜ euid๋ฅผ ๋ฐ”๊พธ๋ ค๊ณ  ํ•  ๋•Œ, euid๋Š” ํ˜„์žฌ์˜ ruid, euid, suid๋กœ ๋ฐ–์— ์„ค์ •ํ•  ์ˆ˜ ์—†์Œ eui..

article thumbnail
[OS] ํ”„๋กœ์„ธ์Šค Process (2) - ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ž์› ๊ณต์œ  (IPC)

IPC (Inter-Process Communication) ์ด์ „ ํฌ์ŠคํŠธ์—์„œ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด์— ๋น„๊ตํ•ด์„œ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์Šคํƒ ์™ธ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋“ค์€ ๊ณต์œ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ž์›๊ณต์œ ๊ฐ€ ์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ์˜ ์ž์›(๋ณ€์ˆ˜, ์ž๋ฃŒ๊ตฌ์กฐ ๋“ฑ)์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๋“ค์€ ์„œ๋กœ ์˜์›ํžˆ ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ผ๊นŒ? ๋ถ„๋ช… ์•„๋‹ ๊ฒƒ์ด๋‹ค. ์˜ค๋Š˜์€ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ž์› ๊ณต์œ ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์› ๊ณต์œ  ์ธก๋ฉด์—์„œ ๊ตฌ๋ถ„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. Independant : ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๋ฅผ ์•„์˜ˆ ํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค Cooperating : ๋‹ค๋ฅธ ..

article thumbnail
[OS] ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ vs ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ

๐Ÿ’ก๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ ์˜ค๋Š˜์€ ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ๊ณผ ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. ๋จผ์ € ๋™๊ธฐ์‹, ๋น„๋™๊ธฐ์‹ ์–ด์›๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž. ๋™๊ธฐ์‹์€ ์˜์–ด๋กœ Synchronized์ธ๋ฐ, ๋”ฑ๋”ฑ ์‹œ๊ฐ„์— ๋งž์ถฐ์ง„๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฝ์‹ฑํฌ์—์„œ ์‹ฑํฌ๋„ Sync์ด๋‹ค. ์ž…๋ชจ์–‘๊ณผ ๋…ธ๋ž˜ ์†Œ๋ฆฌ๋ฅผ ์‹œ๊ฐ„์— ๋งž์ถ”๋Š” ๊ฒƒ์ด๋‹ˆ ๋ฆฝ'์‹ฑํฌ'๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด IO์—์„œ synchronize ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์Šจ ์˜๋ฏธ์ผ๊นŒ? ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์ž. ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ (Synchronized IO)๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์ž…์ถœ๋ ฅ์ด ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๊ณ , ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ (Asynchronized IO)์—์„œ๋Š” ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์€์ฑ„ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์ด ์ˆœ์„œ๋ฅผ ์ง€์ผœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋™๊ธฐ์ (Synchronized), ๊ทธ๊ฒƒ์„ ๋ณด์žฅํ•ด์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋น„๋™๊ธฐ์ (Asynchrono..

article thumbnail
[OS] ์Šค๋ ˆ๋“œ(Thread)

์Šค๋ ˆ๋“œ(Thread)๋ž€? ์Šค๋ ˆ๋“œ(Thread)๋Š” ํ”„๋กœ์„ธ์Šค(Process) ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ•˜๋‚˜์˜ ์ฃผ์ฒด์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ (์ฐธ๊ณ  : [๐Ÿ–ฅ๏ธ Computer Science/OS] - [OS] ํ”„๋กœ์„ธ์Šค vs ํ”„๋กœ๊ทธ๋žจ)์ด๋ผ๋ฉด, ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์ง„ํ–‰๋˜๋Š” ์‹คํ–‰์˜ ํ๋ฆ„์ด๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์˜ค์ง ํ•œ ํ”„๋กœ์„ธ์Šค ์•ˆ์—๋งŒ ์†ํ•ด์žˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ง•์„ ์ง€๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๋Ÿ‰ ํ”„๋กœ์„ธ์Šค(lightweight process)๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์Šค๋ ˆ๋“œ๊นŒ์ง€ ๊ท€์ฐฎ๊ฒŒ ๋˜ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (์ด ์˜ˆ์‹œ๋Š” ์ธํŒŒ๋‹˜ ๋ธ”๋กœ๊ทธ์˜ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•˜์˜€์Œ์„ ๋ฐํžŒ๋‹ค.) ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๋กฌ์ด๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด..

article thumbnail
[OS] Thread Local Storage (TLS)

TLS(Thread Local Storage)๋ž€? TLS๋Š” Thread Local Storage์˜ ์•ฝ์ž๋กœ thread๋ณ„๋กœ ๊ณ ์œ ํ•œ ์ „์—ญ/์ •์  ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์›๋ž˜ ์Šค๋ ˆ๋“œ ๋ณ„๋กœ ๊ณ ์œ ์˜ ์Šคํƒ์„ ๊ฐ€์ง€์ง€๋งŒ, ์ „์—ญ/์ „์  ๋ณ€์ˆ˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ „์—ญ/์ •์  ๋ณ€์ˆ˜๋ฅผ ์Šค๋ ˆ๋“œ ๋ณ„๋กœ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ TLS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๋”ฐ๋ผ์„œ TLS์— ๋“ค์–ด์žˆ๋Š” ์• ๋“ค์€ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ํ•จ์ˆ˜ above์—์„œ ๋‹ค visibleํ•˜๋‹ค) TLS๋Š” ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค fs๋Š” TLS๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด fs:0x28์—๋Š” ์Šคํƒ ์นด๋‚˜๋ฆฌ์˜ ๊ฐ’์œผ๋กœ ์“ฐ์ด๋Š” ๋žœ๋คํ•œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค. ๋Œ€์ถฉ tls ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜์ž„ ์•„๋ž˜๋Š” ใ…‡ใ…‡ static void * init_tls (v..