Computer Science/OS

**๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐ** 1์žฅ. ๋ฆฌ๋ˆ…์Šค ๊ฐœ์š”

์ฑ”๐Ÿป 2024. 1. 29. 08:43

์ถœ์ฒ˜: ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐ

๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐ - ์˜ˆ์Šค24
์„ ๋ฐฐ๊ฐ€ ์˜†์—์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์•Œ๋ ค์ฃผ๋“ฏ ์นœ์ ˆํžˆ ์„ค๋ช…ํ•ด์ฃผ๋Š”์‹ค์Šต๊ณผ ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ์ง€์‹์˜ ๋ชจ๋“  ๊ฒƒ * Go ์–ธ์–ด์™€ Python, Bash ์Šคํฌ๋ฆฝํŠธ ์‹ค์Šต ์ฝ”๋“œ ์ œ๊ณต* ์ด ๋„์„œ๋Š” ใ€Ž์‹ค์Šต๊ณผ ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๋ฆฌ๋ˆ…์Šค ๊ตฌ์กฐใ€์˜ ๊ฐœ์ •ํŒ์ž…๋‹ˆ๋‹ค.๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์ฑ…์˜ ๋‘๊ป˜์™€ ๊นŠ์ด์— ...
https://www.yes24.com/Product/Goods/122109062

10/5(๋ชฉ)

ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ”„๋กœ์„ธ์Šค

ํ”„๋กœ๊ทธ๋žจ : ๋ช…๋ น๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์€ ๊ฒƒ. ์ปดํŒŒ์ผ ์–ธ์–ด๋ฉด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ์‹คํ–‰ํŒŒ์ผ์„ ํ”„๋กœ๊ทธ๋žจ, ํŒŒ์ด์ฌ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ์†Œ์Šค์ฝ”๋“œ ์ž์ฒด๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์ปค๋„๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ์ข…์ž„

ํ”„๋กœ์„ธ์Šค : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ

์ปค๋„

์ปค๋„์ด ํ•„์š”ํ•œ ์ด์œ 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปค๋„์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ํ•˜๋“œ์›จ์–ด์— ์ง์ ‘ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ์— ๋ช…๋ น ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ œ์–ดํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

CPU ๋ชจ๋“œ

์ปค๋„์€ CPU ๋ชจ๋“œ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋“œ์›จ์–ด์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ํ•œ๋‹ค.

  1. ์ปค๋„ ๋ชจ๋“œ : ๋ชจ๋“  ๋ช…๋ น ์‹คํ–‰ ๊ฐ€๋Šฅ.
  1. ์‚ฌ์šฉ์ž ๋ชจ๋“œ : ํŠน์ • ๋ช…๋ น์€ ์‹คํ–‰ ๋ถˆ๊ฐ€. ํ”„๋กœ์„ธ์Šค๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋œ๋‹ค.

์ปค๋„์€ ์ปค๋„ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ํ•˜๋“œ์›จ์–ด ์ œ์–ด, ์‹œ์Šคํ…œ ์ž์› ๊ด€๋ฆฌ ๋ฐ ๋ฐฐ๋ถ„ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹œ์Šคํ…œ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด ์•ˆ์ •์ ์ธ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

์‹œ์Šคํ…œ ์ฝœ

: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปค๋„์— ์š”์ฒญํ•˜๋Š” ๊ฒƒ, ์ปค๋„์˜ ๋„์›€์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ˆ˜ํ•œ ๋ช…๋ น์ผ ๋•Œ ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ, ์‚ญ์ œ
  • ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด, ํ•ด์ œ
  • ํ†ต์‹  ์ฒ˜๋ฆฌ
  • ํŒŒ์ผ ์‹œ์Šคํ…œ ์กฐ์ž‘
  • ์žฅ์น˜ ์กฐ์ž‘

ํ”„๋กœ์„ธ์Šค๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด CPU ๋ชจ๋“œ๊ฐ€ ์ปค๋„ ๋ชจ๋“œ๋กœ ๋ฐ”๋€Œ๊ณ  ์ปค๋„ ์ฒ˜๋ฆฌ๊ฐ€ ๋™์ž‘ํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์‹œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

์‹œ์Šคํ…œ ์ฝœ

๐Ÿ’ก์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์Šค์—์„œ ์ง์ ‘ CPU ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.(์žˆ๋‹ค๊ณ  ํ•˜๋ฉด ์ปค๋„์ด ์กด์žฌํ•  ์˜๋ฏธ X)

์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœ ํ™•์ธํ•ด ๋ณด๊ธฐ

strace : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ

+) -T ์˜ต์…˜ ์‚ฌ์šฉ ์‹œ ์‹œ์Šคํ…œ ์ฝœ ์†Œ์š”์‹œ๊ฐ„์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.(์–ด๋–ค ์‹œ์Šคํ…œ ์ฝœ์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ ์”€)

package main

import (
	"fmt"
)

func main() {
	fmt.Println("hello world")
}

์‹œ์Šคํ…œ ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„ ๋น„์œจ

sar : ๋…ผ๋ฆฌ CPU๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๋ช…๋ น ๋น„์œจ ํ™•์ธ

sar -P 0 1 1
1. ๋…ผ๋ฆฌ CPU 0์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
2. 1์ดˆ๋งˆ๋‹ค ์ˆ˜์ง‘
3. ํ•œ๋ฒˆ๋งŒ ์ˆ˜์ง‘

taskset ๋ช…๋ น์–ด๋กœ ์ง€์ •ํ•œ CPU์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

getppid() : ๋‹จ์ˆœ ์‹œ์Šคํ…œ ์ฝœ

์‹œ์Šคํ…œ ์ฝœ์„ ๋Š์ž„์—†์ด ํ˜ธ์ถœํ•ด์„œ %system์ด ๋งŽ์•„์ง„ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์ฃฝ์ด๊ธฐ

apm(application performance monitoring)

ex) ์ œ๋‹ˆํผ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํ”„๋กœ์„ธ์Šค์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ณ„์ธต

ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

C ํ”„๋กœ๊ทธ๋žจ์€ libc๋ฅผ ๋งํฌํ•œ๋‹ค.

ldd : ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

p.38
lib๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒจํ‚ค์ง€ ์ฐพ๊ธฐ (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฐพ๋Š” ๊ฑฐ)

์‹œ์Šคํ…œ ์ฝœ ๋ž˜ํผ ํ•จ์ˆ˜

์‹œ์Šคํ…œ ์ฝœ ๋ž˜ํผ ํ•จ์ˆ˜ : ๋‚ด๋ถ€์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœ

libc๋Š” ํ‘œ์ค€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ์ฝœ ๋ž˜ํผ ํ•จ์ˆ˜๋„ ์ œ๊ณตํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ฝœ์€ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋‹ค๋ฅด๊ฒŒ C์–ธ์–ด ๊ฐ™์€ ๊ณ ๊ธ‰ ์–ธ์–ด์—์„œ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

๋งŒ์•ฝ libc๊ฐ€ ์—†๋‹ค๋ฉด ์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์•„ํ‚คํ…์ฒ˜์— ์˜์กดํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•จ.

OS์˜ ๋„์›€, libc๊ฐ€ ์—†๋‹ค๋ฉด
์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ๋ž˜ํผ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋

์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ณต์œ (๋™์ ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ ์‹œ์— ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์ดํ›„ ๋งํฌ ๋‹จ๊ณ„์—์„œ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งํฌํ•ด์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  1. ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๋งํฌ ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ”„๋กœ๊ทธ๋žจ์— ์ง‘์–ด๋„ฃ์Œ. ์‹คํ–‰ ํŒŒ์ผ์˜ ํฌ๊ธฐๅคง
  1. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : ๋งํฌ ์‹œ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋Ÿฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ์ •๋ณด๋งŒ ์‹คํ–‰ ํŒŒ์ผ์— ํฌํ•จ. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ณ  ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์‹คํ–‰ ํŒŒ์ผ ํฌ๊ธฐๅฐ

    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ • ๋ฒ„์ „์œผ๋กœ ๊ต์ฒดํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์–˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด์žˆ์Œ

    ex) .dll(Dynamic Link Library)

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์†์„ฑ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
ํŒŒ์ผ ํฌ๊ธฐํฌ๋‹ค (์‹คํ–‰ ํŒŒ์ผ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ ํฌํ•จ)์ž‘๋‹ค (์‹คํ–‰ ํŒŒ์ผ์— ํ˜ธ์ถœ ์ •๋ณด๋งŒ ํฌํ•จ)
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—…๋ฐ์ดํŠธ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•จ. ๋ณ€๊ฒฝ์— ๋ถˆ๋ฆฌ.๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•˜๋‚˜๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋จ. ๋ณ€๊ฒฝ์— ์œ ๋ฆฌ.
์‹คํ–‰ ๋ฐฉ์‹๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ํŒŒ์ผ์— ํฌํ•จ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋…๋ฆฝ์ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜๊ณ  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋จ

#include <unistd.h>

int main(void) {
	pause();
	return 0;
}

์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(libc.a)

  • ํ”„๋กœ๊ทธ๋žจ ํฌ๊ธฐ : 900KiB, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋งํฌ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
$ cc -static -o pause pause.c
$ ls -l pause
-rwxrwxr-x 1 chaemin chaemin 646632 Oct  6 01:22 pause // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ค์–ด๊ฐ€์„œ ์‚ฌ์ด์ฆˆ ํผ
$ ldd pause
not a dynamic executable // ์ปดํŒŒ์ผ ๋์œผ๋‚˜ ๋งํ‚น ์•ˆ ๋ผ์„œ ์‹คํ–‰ ๋ถˆ๊ฐ€

๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(libc.so)

  • ํŒŒ์ผ ํฌ๊ธฐ๋Š” 16KiB๋กœ libc ์ •์  ๋งํฌ๋ณด๋‹ค ํ›จ์”ฌ ์ž‘์Œ
  • libc(/lib/aarch64-linux-gnu/libc.so.6)๋ฅผ ๋™์  ๋งํฌํ•จ
$ cc -o pause pause.c
$ ls
pause  pause.c
$ ls -l pause
-rwxrwxr-x 1 chaemin chaemin 8848 Oct  6 01:30 pause
$ ldd pause
	linux-vdso.so.1 (0x0000ffff8ea99000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff8e880000)
	/lib/ld-linux-aarch64.so.1 (0x0000ffff8ea60000)

+) ldd ๋ช…๋ น์–ด๋กœ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํŒŒ์ผ์— ์–ด๋–ค ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งํฌ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ


Uploaded by N2T