λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⭐ Group_Study/Operating System

[2μ£Όμ°¨] Thread Management

by ν¬μŠ€νŠΈμ‰μ΄ν¬ 2022. 12. 12.

Thread Management

ν”„λ‘œμ„ΈμŠ€(Process)와 μŠ€λ ˆλ“œ(Thread)

βœ” ν”„λ‘œμ„ΈμŠ€λŠ” μžμ›μ„ ν• λ‹Ήλ°›μ•„ λͺ©ν‘œλ₯Ό 이루기 μœ„ν•΄ 할당받은 μžμ›μ„ μ œμ–΄ν•œλ‹€.

βœ” μžμ›μ˜ μ œμ–΄ 과정을 μŠ€λ ˆλ“œ(Thread)라고 λΆ€λ₯Έλ‹€
βœ” μŠ€λ ˆλ“œλŠ” μ—¬λŸ¬ κ°œκ°€ 쑴재 ν•  수 μžˆλ‹€(μ—¬λŸ¬ 개의 μžμ›μ„ ν• λ‹Ήλ°›μ•„ 각각 μ œμ–΄ν•  수 있음)

μŠ€λ ˆλ“œ(Thread)의 κ°œλ…

βœ” SP: stack pointer
βœ” PC: program counter

βœ” 지역 데이터: μ œμ–΄λ₯Ό μœ„ν•΄ μ‚¬μš© (νŠΉμ • μ§€μ—­μ—μ„œλ§Œ μœ νš¨ν•œ 데이터)
βœ” μŠ€νƒ(Stack): 지역 데이터 μ €μž₯

βœ” ResourceλŠ” κ³΅μœ ν•œλ‹€

  • ν•˜λ‚˜μ˜ resourceλ₯Ό μ œμ–΄ν•˜λŠ” μ—¬λŸ¬ 개의 processκ°€ μ‘΄μž¬ν•  수 μžˆλ‹€

βœ” 각 threadλ§ˆλ‹€ 자기만의 μž‘μ—… μ˜μ—­(Stack)을 ν• λ‹Ήλ°›λŠ”λ‹€
βœ” 각자의 PC(program counter)λ₯Ό 톡해 μž‘μ—…μ˜ 흐름 μ œμ–΄

Threadλž€

βœ” Light Weight Process (LWP): μžμ›μ€ κ³΅μœ ν•˜κ³  μ œμ–΄λΆ€λΆ„λ§Œ 가지고 μžˆλ‹€.
βœ” ν”„λ‘œμ„Έμ„œ(e.g, CPU) ν™œμš©μ˜ κΈ°λ³Έ λ‹¨μœ„
βœ” κ΅¬μ„±μš”μ†Œ

  • Thread ID
  • Register set (PC, SP λ“±)
  • Stack (i.e. local data)

βœ” μ œμ–΄ μš”μ†Œ μ™Έ μ½”λ“œ, 데이터 및 μžμ›λ“€μ€ ν”„λ‘œμ„ΈμŠ€ λ‚΄ λ‹€λ₯Έ μŠ€λ ˆλ“œλ“€κ³Ό 곡유
βœ” 전톡적 ν”„λ‘œμ„ΈμŠ€ = 단일 μŠ€λ ˆλ“œ ν”„λ‘œμ„ΈμŠ€

Single-thread vs Multi-threads

single

multi

μŠ€λ ˆλ“œμ˜ μž₯점

βœ” μ‚¬μš©μž 응닡성(Responsiveness)

  • 일뢀 μŠ€λ ˆλ“œμ˜ μ²˜λ¦¬κ°€ μ§€μ—°λ˜μ–΄λ„, λ‹€λ₯Έ μŠ€λ ˆλ“œλŠ” μž‘μ—…μ„ 계속 처리 κ°€λŠ₯

βœ” μžμ› 곡유 (Resource Sharing)

  • μžμ›μ„ κ³΅μœ ν•΄μ„œ νš¨μœ¨μ„± 증가(μ»€λ„μ˜ κ°œμž…μ„ ν”Όν•  수 μžˆλ‹€)
    • ex) 동일 address spaceμ—μ„œ μ—¬λŸ¬ 개 μŠ€λ ˆλ“œ
    • μžμ›μ„ κ³΅μœ ν•˜μ§€ λͺ»ν•˜λ©΄ context switching을 ν•΄μ•Ό ν•œλ‹€.(λΉ„μš© ↑)

βœ” κ²½μ œμ„± (Economy)

  • ν”„λ‘œμ„ΈμŠ€μ˜ 생성, context switch에 λΉ„ν•΄ 효율적

βœ” λ©€ν‹° ν”„λ‘œμ„Έμ„œ(multi-processor) ν™œμš©

  • λ³‘λ ¬μ²˜λ¦¬λ₯Ό 톡해 μ„±λŠ₯ ν–₯상

μŠ€λ ˆλ“œ μ‚¬μš©μ˜ 예

βœ” ν•˜λ‚˜μ˜ κ²Œμž„μ— λŒ€ν•΄μ„œ ν™”λ©΄μΆœλ ₯, μ‚¬μš©μž μž…λ ₯, μŠ€ν”Όμ»€/λ§ˆμ΄ν¬μ— λŒ€ν•œ 각각의 μŠ€λ ˆλ“œ μ‚¬μš©

μŠ€λ ˆλ“œμ˜ κ΅¬ν˜„

μ‚¬μš©μž μˆ˜μ€€ μŠ€λ ˆλ“œ (User Thread)

βœ” μ‚¬μš©μž μ˜μ—­μ˜ μŠ€λ ˆλ“œ 라이브러리둜 κ΅¬ν˜„

  • μŠ€λ ˆλ“œμ˜ 생성, μŠ€μΌ€μ€„λ§ λ“±
  • POSIX threads, Win32 threads, Java thread API...

βœ” λ‹€λŒ€μΌ 맀핑: 컀널 μˆ˜μ€€ μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μΈλ° μ‚¬μš©μž μˆ˜μ€€ μŠ€λ ˆλ“œλŠ” μ—¬λŸ¬ κ°œμ΄λ‹€.

βœ” 컀널은 μŠ€λ ˆλ“œμ˜ 쑴재λ₯Ό λͺ¨λ₯Έλ‹€

  • μž₯점: μ»€λ„μ˜ 관리(κ°œμž…) x
    • 생성 및 κ΄€λ¦¬μ˜ λΆ€ν•˜κ°€ 적음, μœ μ—°ν•œ 관리
    • 이식성 (portability) λ†’μŒ: ν•΄λ‹Ή 라이브러리만 있으면 ν•΄λ‹Ή λ©€ν‹°μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž¨ κ·ΈλŒ€λ‘œ μ‚¬μš© κ°€λŠ₯ (ex: JVM)
  • 단점: 컀널은 ν”„λ‘œμ„ΈμŠ€ λ‹¨μœ„λ‘œ μžμ› ν• λ‹Ή
    • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ block μƒνƒœκ°€ 되면, λͺ¨λ“  μŠ€λ ˆλ“œκ°€ λŒ€κΈ°ν•œλ‹€.(single threaded kernel)

컀널 μˆ˜μ€€ μŠ€λ ˆλ“œ (Kernel Threads)

βœ” OS(Kernel)이 직접 관리
βœ” 컀널 μ˜μ—­μ—μ„œ μŠ€λ ˆλ“œμ˜ 생성, 관리 μˆ˜ν–‰

  • (μŠ€λ ˆλ“œ μ‚¬μ΄μ˜)Context switching λ“± λΆ€ν•˜(Overhead)κ°€ 크닀

βœ” 컀널이 각 μŠ€λ ˆλ“œλ₯Ό κ°œλ³„μ μœΌλ‘œ 관리

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄ μŠ€λ ˆλ“œλ“€μ΄ 병행 μˆ˜ν–‰ κ°€λŠ₯

Multi-Threading Model

βœ” λ‹€λŒ€λ‹€ λͺ¨λΈμ„ 톡해 절좩!

ν˜Όν•©ν˜• (N:M) μŠ€λ ˆλ“œ

βœ” n개 μ‚¬μš©μž μˆ˜μ€€ μŠ€λ ˆλ“œ - m개의 컀널 μŠ€λ ˆλ“œ (n > m)

  • μ‚¬μš©μžλŠ” μ›ν•˜λŠ” 수만큼 μŠ€λ ˆλ“œ μ‚¬μš©
  • 컀널 μŠ€λ ˆλ“œλŠ” μžμ‹ μ—κ²Œ ν• λ‹Ήλœ ν•˜λ‚˜μ˜ μ‚¬μš©μž μŠ€λ ˆλ“œκ°€ block μƒνƒœκ°€ λ˜μ–΄λ„ λ‹€λ₯Έ μŠ€λ ˆλ“œ μˆ˜ν–‰ κ°€λŠ₯ (병행 처리)

βœ” νš¨μœ¨μ μ΄λ©΄μ„œλ„ μœ μ—°

'⭐ Group_Study > Operating System' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[2μ£Όμ°¨] Scheduling Algorithms  (0) 2022.12.14
[2μ£Όμ°¨] Process Scheduling  (0) 2022.12.13
[1μ£Όμ°¨] Process Management: Interrupt, Context Switching  (0) 2022.12.07
[1μ£Όμ°¨] Process Management  (1) 2022.12.06
[1μ£Όμ°¨] OS Overview  (1) 2022.12.05

λŒ“κΈ€