System Programming Ch1 - Ch2
๐กย Chap_1
/etc/passwd composed of seven colon-separated fields
๐ (๋จ๋ตํ) ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ 7๊ฐ์ ํ๋๋ก ๊ตฌ๋ถํด์ ๊ฐ์ง๊ณ ์๋ ํ์ผ๋ช
์ ๋ฌด์์ธ๊ฐ?
โ passwd ๋๋ /etc/passwd (full path)
๋ฆฌ๋ ์ค ๋ช ๋ น์ด
โ / โ : root directory
โ . โ : ํ์ฌ ๊ฒฝ๋ก
โ pwd โ : ํ์ฌ ๊ฒฝ๋ก / ์ต์์ ๊ฒฝ๋ก๋ถํฐ ๋ด๊ฐ ์ผํ๋ ๊ณต๊ฐ๊น์ง์ path๋ฅผ ๋ค ์๋ ค์ค (path working directory)
๐ (์์ ํ) Unbuffered I/O์ Standard I/O์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ๊ณ ๋ฒํผ๋ง์ ํ๋ ์ด์ ๋ฅผ ์์ ํ์์ค.
answerย ยป Unbuffered I/O๋ ๋ฒํผ๋ง์ ์์ ์ํ๋ ๊ฒ์ผ๋ก open, read, write โฆ ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , Standard I/O๋ ํ์ค์ ๋ง๋ค์ด์ผ๋๋ ๊ธฐ๊ด์์ ๋ฐฐํฌํ๋ I/O๋ก ๋ฒํผ๋ง์ ํ๋ค. fopen, fgetc, printfโฆ ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
๋ฒํผ๋ง์ ๋ชฉ์ ์ ์์คํ
์ ๋ถํ๋ฅผ ์ค์ด๊ณ ์
์ถ๋ ฅ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํจ์ด๋ค.
- ๋ฒํผ๋ง์ ์ข
๋ฅ์๋ 3๊ฐ์ง๊ฐ ์๋ค.
- Fully buffered : ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐฐ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค ์ ์ถ๋ ฅ์ ์ํ
- Line buffered : ๋ผ์ธ ๋จ์๋ก ์ ์ถ๋ ฅ์ ์ํ
- Unbuffered : ๋ฒํผ๋ง ์ํจ (๋ฒํผ๋ง ์ํ๋ ๊ฒ๋ ๋ฒํผ๋ง์ด๋ผ๊ณ ํจ)
Process control: fork, exec, and waitpid (๊ทธ๋ฆผ ์์ธ์๋ ๋จ)
fork
- ๋ญ๊ฐ๋ฅผ ๋ถ๊ธฐํ์ฌ branch(๊ฐ์ง)๊ฐ ์๊น
- ์๋ ํ๋ก๊ทธ๋จ์ด ์ํํ๋ ๊ฒ ๋ง๊ณ ๋ค๋ฅธ ํ๋ฆ์ ๋ง๋ค์ด๋
- Main์์ ๋๊ณ ์๋ ๊ฑด parent process๊ฐ ํ๋ ๊ฒ, ์ฌ๊ธฐ์ fork๋ฅผ ์ฐ๋ฉด child process๊ฐ ์๊น, ์ด child process์์ ๋ค๋ฅธ ์ผ์ ์ํ ๊ฐ๋ฅ
exec
- child process๊ฐ ์ผ์ ์ํํ ๋ ์ฐ๋ ํจ์
waitpid
- parent process๊ฐ ๋จผ์ ์ข ๋ฃ๊ฐ ๋๋ฉด child process๊ฐ ๋ฏธ์๊ฐ ๋จ(๋ฏธ์/ ์ข๋น ํ๋ก์ธ์ค)
- ๋ถ๋ชจ๊ฐ ๋จผ์ ์ข ๋ฃ๋์ง ์๋๋ก ์์ ํ๋ก์ธ์ค๊ฐ ์ํํ๋ ์ผ์ด ๋๋ ๋๊น์ง ์ข ๋ฃํ์ง ๋ง๊ณ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ๋ ์ฐ๋ ํจ์
Threads (๋ฌธ์ ๊ฐ ๋์จ ์ ์ ์์ง๋ง ์ค์ํ ๊ฐ๋ )
- Thread๋ ๋ถ๊ธฐ๋ผ๋ ๊ฐ๋ ์ ๊ฐ์ง
- (๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๋ ๋ณต์ ๋ค, ์ฆ ํ๋ก์ธ์ค๊ฐ ํ๋ ๋ ์๊ธฐ๋ ๊ฒ์)
- ๊ทผ๋ฐ ์ฐ๋ ๋๋ ํ๋ก์ธ์ค๋ ํ๋์ง๋ง, ๊ทธ ์์์ ๋ถ๊ธฐ๊ฐ ์ผ์ด๋๋ ๊ฒ, ์ฆ ๊ณต์ ํ๋ ๊ฒ์ด ๋น์ฐํ ์๊ธธ ์๋ฐ์ ์์
- thread๋ process์ ๊ณต์ ํ๋ ๊ฒ์ด 3๊ฐ์ง๊ฐ ์์
- Address space
- File descriptors
- process-related attributes
Stack(์ฐ๋ ๋ ์ฐ์ฐ์ด ๋ฌ๋ผ์ ธ์ผ๋๋ ๊ฒ์ ์ฝ๋ฉํ ๋ ์ฐ๋ ๊ฒ์ด stack, ์ฆ ๋ฌ๋ผ์ ธ์ผ๋จ)
- process์ thread์ ์ฐจ์ด์ ์ค๋ช ํ๋ ๊ฒ ์ค์ (๋ฉด์ ๊ฐ์ ๋ฐ์์)
- thread๋ ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ๋ถ๊ธฐ๋ฅผ ๊ฐ์ง, process๋ณด๋ค thread๊ฐ ๋ ๋ง์ ๊ฒ์ ๊ณต์ ํจ
๐ (๋จ๋ตํ) ๋ค์ ์ค 1970๋ 1์ 1์ผ 0์ 0๋ถ 0์ด ์ดํ๋ก ์ผ๋ง๋งํผ์ ์๊ฐ(์ด ๋จ์)์ด ์ง๋ฌ๋์ง์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ตฌ์กฐ์ฒด๋ ๋ฌด์์ธ๊ฐ?
โ time_t
- UTC : ์ธ๊ณํ์คํ์ ์, 1970๋ ์ด๋ผ๊ณ ๋๊ธฐํ ์ํด
clock_t
- cpu๋ ํ๋์ ์์๋ก ๋์ด์์, ์์ ์์๋ ํธ๋์ง์คํฐ๊ฐ ์์
- ํธ๋์ง์คํฐ๋ ๋ฌผ๋ฆฌ์ ์ธ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํจ
- ํธ๋์ง์คํฐ์ ์ฑ๋ฅ์ ์ด์ผ๊ธฐํ ๋ GHz๋ก ๋งํจ , ์ด๋น ์ผ๋ง๋งํผ์ ๋ช ๋ น์ด๋ฅผ ์ํํ ์ ์๋๋ฅผ ๋งํจ
- ๊ทธ๋์ ์ด๋ฅผ ๊ณ์ฐํ ๋ ๋ฐ์๋ฅผ ํ ๋ฒ์ฉ ์ณ์ค, ์ด ๋ฐ์์น๋ ์ฃผ๊ธฐ(์คํฑ์์น)๋ฅผ clock_t๋ผ๊ณ ํ๋ค.
- ์ด ๋ฐ์๋ฅผ tick์ด๋ผ ํจ
- process time in clock tick
๐กย Chap_2
Limits
- ํ์ผ ๋ด์ง๋ ๋๋ ํ ๋ฆฌ๋์ ์๊ด์๋ runtime limit
๐ (๋จ๋ตํ)ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ์ ๊ด๊ณ์์ด ๋ฐํ์๋ฆฌ๋ฏธํธ๋ฅผ ์ค์ ํ ์ ์๋ ํจ์๋ ๋ฌด์์ธ๊ฐ?
โ sysconf function
- ๋ฐํ์๋ฆฌ๋ฏธํธ: ๋ฐํ์(๋ฌด์ธ๊ฐ๋ฅผ ์ํํ ๋) ์ค์ ์ ํ์ ๊ฑฐ๋ ๊ฒ, ํ๋ก์ธ์ค๋ผ๋ ๋จ์๋ก ์ํ์ด ๋ ๋ ์ ํ์ ๊ฑธ์ด๋๋ ๊ฒ, ํ๋ก์ธ์ค์ํฌ๊ธฐ, ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ธ๋ค ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ต๋์น ๋ฑ
- ํ๋ก์ธ์ค์ ์ ํ์ ๊ฑฐ๋ ๊ฒ์ด๋ฏ๋ก file, directory์๋ ๊ด๊ณ๊ฐ ์์
๐ (๋จ๋ตํ)ํ์ผ, ๋๋ ํ ๋ฆฌ์ ๊ด๋ จ๋ ๋ฐํ์๋ฆฌ๋ฏธํธ๋ ๋ฌด์์ธ๊ฐ?
โ pathconf, fpathconf function
- ํ์ผ๋ช ์ ํฌ๊ธฐ, ํ์ผ์ ์ ์ฅํ ์ ์๋ ๋ฌธ์ ์ ์ ํ, ๋๋ ํ ๋ฆฌ ์์ ๋ค์ด๊ฐ ์ ์๋ ํ์ผ์ ๊ฐ์ ๋ฑ ์ ํ
- fpathconf๋ standard i/o, ์ธ์๊ฐ ๋ค๋ฆ
- pathconf๋ posix, fpathconf๋ iso ํ์ค๊ธฐ๊ตฌ์์ ๊ตฌํํ library