Contents

System Programming Ch1 - Ch2

   Oct 14, 2022     2 min read

๐Ÿ’กย Chap_1

/etc/passwd

/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๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    1. Fully buffered : ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐฐ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰
    2. Line buffered : ๋ผ์ธ ๋‹จ์œ„๋กœ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰
    3. Unbuffered : ๋ฒ„ํผ๋ง ์•ˆํ•จ (๋ฒ„ํผ๋ง ์•ˆํ•˜๋Š” ๊ฒƒ๋„ ๋ฒ„ํผ๋ง์ด๋ผ๊ณ  ํ•จ)



Process control

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๊ฐ€์ง€๊ฐ€ ์žˆ์Œ
    1. Address space
    2. File descriptors
    3. process-related attributes
    4. 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