ν”„λ‘œκ·Έλž¨?

  • ν”„λ‘œκ·Έλž¨μ΄λž€? μ‹€ν–‰κ°€λŠ₯ν•œ(executable) 파일
    • μ‹€ν–‰νŒŒμΌ, μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ΄ˆκΈ°κ΅¬λ™ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” 파일
    • 보쑰기얡μž₯μΉ˜μ— μ €μž₯λ˜μ–΄μžˆλŠ” 정적인 μƒνƒœ -> μš΄μ˜μ²΄μ œκ°€ μ‹€ν–‰κ°€λŠ₯ν•œ νŒŒμΌμ„ μ½μ–΄λ“€μ—¬μ„œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰

ν”„λ‘œμ„ΈμŠ€?

  • μ‹€ν–‰νŒŒμΌμ΄ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ˜μ–΄ μ‹€ν–‰λœ μƒνƒœ
  • μ£ΌκΈ°μ–΅μž₯μΉ˜μ— μƒμ£Όλœ ν”„λ‘œκ·Έλž¨μ΄ cpu에 μ˜ν•΄μ„œ μ²˜λ¦¬λ˜λŠ” μƒνƒœ
  • 싀행을 μœ„ν•΄ λ©”λͺ¨λ¦¬μ— 올라온 동적인 μƒνƒœ
  • PCB(process control block)의 μ‘΄μž¬λ‘œμ„œ λͺ…μ‹œλ˜λŠ” 것
  • ν”„λ‘œμ„Έμ„œκ°€ ν• λ‹Ήλ˜λŠ” κ°œμ²΄λ‘œμ„œ, λ””μŠ€νŒ¨μΉ˜κ°€ κ°€λŠ₯ν•œ λ‹¨μœ„
  • 비동기적 ν–‰μœ„λ₯Ό μΌμœΌν‚€λŠ” 주체
  • cpuκ°€ ν• λ‹Ήλ˜λŠ” 싀체
  • μš΄μ˜μ²΄μ œκ°€ κ΄€λ¦¬ν•˜λŠ” μ΅œμ†Œμ˜ λ‹¨μœ„
  • ν”„λ‘œκ·Έλž¨κ³Ό 달리 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°–λŠ” λŠ₯동적인 객체

ν”„λ‘œκ·Έλž¨ μ—¬λŸ¬κ°œ μ‹€ν–‰ β†’ 닀쀑 ν”„λ‘œκ·Έλž˜λ°

  • μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ™μ‹œμ— λ©”λͺ¨λ¦¬μ— μžˆμ„ 수 있음
  • ν”„λ‘œμ„ΈμŠ€λŠ” μƒν˜Έ 독립적인 λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ μ‹€ν–‰
  • 닀쀑 μΈμŠ€ν„΄μŠ€
    • 같은 ν”„λ‘œκ·Έλž¨μ΄μ–΄λ„ 싀행될 λ•Œλ§ˆλ‹€ 독립적인 ν”„λ‘œμ„ΈμŠ€ 생성
    • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ…λ¦½λœ λ©”λͺ¨λ¦¬ 곡간을 가지고, λ³„κ°œμ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ μ·¨κΈ‰

Loading

  • μ‹€ν–‰νŒŒμΌμ΄ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€λŠ” κ³Όμ •
  • λ‘œλ”(loader) : λ©”λͺ¨λ¦¬μ— Load(적재) ν•΄μ£ΌλŠ”κ²ƒ
  • Memory allocation(ν”„λ‘œκ·Έλž¨μ„ μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간 ν• λ‹Ή) β†’ Linking(μ™ΈλΆ€ 라이브러리 μ°Έμ‘°) β†’ Relocation(μƒλŒ€μ£Όμ†Œμ˜ μ ˆλŒ€μ£Όμ†Œλ‘œμ˜ λ³€ν™˜) β†’ Loading(μ‹€μ œ ν”„λ‘œκ·Έλž¨κ³Ό 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— 적재)
  • μ ˆλŒ€ λ‘œλ”(Absolute loader)
    • 항상 κ³ μ •λœ μœ„μΉ˜μ—λ§Œ λ‘œλ”©λ¨, 재배치 및 링킹이 μ—†μŒ
    • 닀쀑 ν”„λ‘œκ·Έλž˜λ° x
  • 재배치 λ‘œλ”(Relocation loader)
    • μ£ΌκΈ°μ–΅μž₯치의 μƒνƒœμ— 따라 λͺ©μ  ν”„λ‘œκ·Έλž¨μ„ μ£ΌκΈ°μ–΅μž₯치 μž„μ˜μ˜ 곡간에 적재
  • 동적 λ‘œλ”(Dynamic loader)
    • ν•„μš”ν•œ λΆ€λΆ„λ§Œ μ£ΌκΈ°μ–΅μž₯치둜 μ μž¬ν•˜κ³  λ‚˜λ¨Έμ§€ 뢀뢄은 보쑰기얡μž₯μΉ˜μ— μ €μž₯

ν”„λ‘œμ„ΈμŠ€μ˜ 생λͺ…μ£ΌκΈ°

  • ν”„λ‘œμ„ΈμŠ€λŠ” 생λͺ… μ£ΌκΈ°λ™μ•ˆ μ—¬λŸ¬ μƒνƒœλ‘œ λ³€ν•˜λ©΄μ„œ 싀행됨

    생λͺ…μ£ΌκΈ°

보λ₯˜μƒνƒœ

  • ν”„λ‘œμ„ΈμŠ€κ°€ μ–΄λ– ν•œ 이유둜 싀행이 미뀄지고, λ©”λͺ¨λ¦¬μ—μ„œ μ«’κ²¨λ‚œ μƒνƒœ == μ €μž₯μž₯μΉ˜μ— λ†“μž„

ν”„λ‘œμ„ΈμŠ€ 관리

  • ν”„λ‘œμ„ΈμŠ€λŠ” 생성뢀터 μ’…λ£ŒκΉŒμ§€ 컀널(운영체제)에 μ˜ν•΄ 관리됨
  • ν”„λ‘œμ„ΈμŠ€ 생성주기 관리
  • ν”„λ‘œμ„ΈμŠ€ 메타데이터 관리
  • ν”„λ‘œμ„ΈμŠ€ 톡신, 동기화
  • μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­(context switching, λ¬Έλ§₯κ΅ν™˜)

PCB(Process Control Block)

  • μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰
  • ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ 고유의 PCBκ°€ 생성

PCB의 ꡬ쑰

  • μš΄μ˜μ²΄μ œλŠ” PCB듀을 PCB table λ˜λŠ” Process tableμ΄λΌλŠ” 곳을 톡해 관리
  • ν”„λ‘œμ„ΈμŠ€μ˜ Context(ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ, Program Counter, PID λ“±)

닀쀑 ν”„λ‘œκ·Έλž˜λ°μ˜ 원리

  • μ‹œλΆ„ν• (Time-slicing)
    • ν”„λ‘œμ„ΈμŠ€λ“€μ—κ²Œ λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ CPUλ₯Ό μ‚¬μš©ν•˜κ²Œ ν•˜μž
    • β€˜μ–΄λ–€ μˆœμ„œβ€™λ‘œ λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μž‘μ—…ν•˜κ²Œ ν•  것인가? β†’ μŠ€μΌ€μ₯΄λ§ 문제
    • μ–΄λ–»κ²Œ λ²ˆκ°ˆμ•„ κ°€κ²Œ ν•˜μ§€? β†’ Context Switching

λ¬Έλ§₯ κ΅ν™˜(Context Switching)

  • ν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‘œ CPUλ₯Ό λ„˜κ²¨μ£ΌλŠ” κ³Όμ •
    • μ‹€ν–‰ μƒνƒœμ—μ„œ λ‚˜κ°€λŠ” ν”„λ‘œμ„ΈμŠ€ : PCB에 ν˜„μž¬κΉŒμ§€ μž‘μ—…λ‚΄μš©μ„ μ €μž₯
    • μ‹€ν–‰μƒνƒœλ‘œ λ“€μ–΄μ˜€λŠ” ν”„λ‘œμ„ΈμŠ€ : PCB λ‚΄μš©μœΌλ‘œ CPUκ°€ λ‹€μ‹œ μ„ΈνŒ…

CPU μ£Όμ†Œ 곡간(CPU address space)

  • CPU Bus 크기에 μ˜ν•΄ κ²°μ • == Word == CPU 아킀텍쳐 크기

ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œ 곡간(μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ‚˜λˆ  μ¨μ•Όν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간)

  • ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰ 쀑에 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν—ˆμš©ν•œ μ£Όμ†Œμ˜ μ΅œλŒ€ λ²”μœ„ β†’ Segmantation
    • ν• λ‹Ήλœ 곡간에 λŒ€ν•œ 경계 λ ˆμ§€μŠ€ν„°μ™€ ν•œκ³„ λ ˆμ§€μŠ€ν„°λ₯Ό λ²—μ–΄λ‚˜λŠ”μ§€ κ°μ‹œ
    • CPU의 관점
  • ν”„λ‘œμ„ΈμŠ€ κ΄€μ μ—μ„œλŠ” 가상 λ©”λͺ¨λ¦¬ κ°œλ… 적용 β†’ ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹ μ΄ CPU μ£Όμ†Œ 곡간 전체λ₯Ό λ…μ ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž„
    • λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹ λ§Œμ˜ 가상 μ£Όμ†Œ 곡간을 가짐
    • 32bit CPUλŠ” λ…Όλ¦¬μ μœΌλ‘œ 4GB λ©”λͺ¨λ¦¬λ₯Ό 할당받은 κ²ƒμ²˜λŸΌ λ³΄μž„
  • ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œ 곡간은 2λΆ€λΆ„μœΌλ‘œ λ‚˜λ‰˜μ–΄μ§
    • μ‚¬μš©μž 곡간 User space : μ½”λ“œ, 데이터, νž™, μŠ€νƒ μ˜μ—­
    • 컀널 곡간 Kernel Space
      • ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμŠ€ν…œ ν˜ΈμΆœμ„ 톡해 μ‚¬μš©ν•˜λŠ” 컀널 곡간
      • 컀널 μ½”λ“œ, 컀널 데이터, 컀널 μŠ€νƒ
      • 컀널 곡간은 λͺ¨λ“  μ‚¬μš©μž ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ 곡유

μ™œ 가상 곡간을 μ‚¬μš©ν• κΉŒ?

  • λ©”λͺ¨λ¦¬μ— λŒ€ν•œ ν™•μž₯μ„±
    • 물리적 λ©”λͺ¨λ¦¬λŠ” ν•œμ •μ μ΄μ§€λ§Œ, 가상 λ©”λͺ¨λ¦¬λŠ” 더 큰 κ³΅κ°„μœΌλ‘œ ꡬ성 κ°€λŠ₯
    • μ΄ˆκ³Όν•œ λ©”λͺ¨λ¦¬λŠ” 보쑰기얡μž₯치 등을 ν™œμš©, 가상 곡간은 μ €μž₯μž₯치의 ꡬ뢄 없이 ν•˜λ‚˜μ˜ 가상 κ³΅κ°„μœΌλ‘œ ν™œμš© κ°€λŠ₯ β†’ PageSwap ν•„μš”
  • λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ— λŒ€ν•œ λ™μΌν•œ λ©”λͺ¨λ¦¬ 곡간 제곡
    • 각 ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹ κ²½ μ“Έ ν•„μš” μ—†μŒ
    • 각 ν”„λ‘œμ„ΈμŠ€κ°„ λ©”λͺ¨λ¦¬ 격리 β†’ 보호
    • RTOS(Real Time Operation System) 등은 가상 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  직접 μ ‘κ·Όν•˜κΈ°λ„ 함

ν”„λ‘œμ„ΈμŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ

  • μ½”λ“œ μ˜μ—­(크기가 compiled time 결정됨)
    • 싀행될 ν”„λ‘œκ·Έλž¨ μ½”λ“œκ°€ μ μž¬λ˜λŠ” μ˜μ—­
      • μ‚¬μš©μžκ°€ μž‘μ„±ν•œ λͺ¨λ“  ν•¨μˆ˜μ˜ μ½”λ“œ 및 ν˜ΈμΆœν•œ 라이브러리 ν•¨μˆ˜λ“€μ˜ μ½”λ“œ
  • 데이터 μ˜μ—­(크기가 compiled time 결정됨)
    • μ „μ—­ λ³€μˆ˜ 곡간, 정적 데이터(Static) 곡간
    • ν”„λ‘œμ„ΈμŠ€ 적재 μ‹œ ν• λ‹Ή, μ’…λ£Œμ‹œ μ†Œλ©Έ
  • νž™ μ˜μ—­(크기가 runtime μ‹œ 결정됨)
    • ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰ 도쀑 λ™μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν• λ‹Ήλœ 곡간
    • malloc() λ“±μœΌλ‘œ ν• λ‹Ή λ°›λŠ” 곡간은 νž™ μ˜μ—­μ—μ„œ ν• λ‹Ή
    • νž™ μ˜μ—­μ€ μ•„λž˜λ²ˆμ§€λ‘œ λ‚΄λ €κ°€λ©΄μ„œ ν• λ‹Ή
  • μŠ€νƒ μ˜μ—­(크기가 runtime μ‹œ 결정됨)
    • ν•¨μˆ˜κ°€ 싀행될 λ•Œ, μ‚¬μš©λ  데이터λ₯Ό μœ„ν•΄ ν• λ‹Ήλœ 곡간
      • λ§€κ°œλ³€μˆ˜λ“€, μ§€μ—­λ³€μˆ˜λ“€, ν•¨μˆ˜ μ’…λ£Œ ν›„ λŒμ•„κ°ˆ μ£Όμ†Œλ“±
      • ν•¨μˆ˜λŠ” 호좜될 λ•Œ, μŠ€νƒ μ˜μ—­μ—μ„œ μœ„μͺ½μœΌλ‘œ 곡간 ν• λ‹Ή

    적재

μ™œ μ΄λ ‡κ²Œ μƒκ²Όμ„κΉŒ?

  • Code μ˜μ—­μ΄ κ΅¬λΆ„λœ 이유
    • ν”„λ‘œκ·Έλž¨ CodeλŠ” ν”„λ‘œκ·Έλž¨μ΄ λ§Œλ“€μ–΄μ§€κ³ λ‚˜μ„œλŠ” λ°”λ€” 일이 μ „ν˜€ μ—†μŒ β†’ Read-Only
    • 같은 ν”„λ‘œμ„ΈμŠ€κ°€ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ‘œμ„œ μ‹€ν–‰λœλ‹€λ©΄? β†’ μ½”λ“œ μ˜μ—­μ„ κ³΅μœ ν•¨μœΌλ‘œμ„œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄일 수 있음
  • Data μ˜μ—­μ΄ κ΅¬λΆ„λœ 이유
    • μ „μ—­ λ³€μˆ˜μ™€ 정적 λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” μ˜μ—­ β†’ λ³€μˆ˜λ‹ˆκΉŒ Read-Write
    • μ „μ—­ 및 정적 λ³€μˆ˜ β†’ ν”„λ‘œκ·Έλž¨ ꡬ동 도쀑 항상 μ ‘κ·Ό κ°€λŠ₯ν•΄μ•Ό 함 β†’ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰κ³Ό 관련없이 독립적인 곡간 ν•„μš”
  • Heap μ˜μ—­μ΄ κ΅¬λΆ„λœ 이유
    • ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 도쀑에 ν•„μš”ν•  λ•Œλ§ˆλ‹€ ν• λ‹Ή λ°›λŠ” 곡간 β†’ μ–Όλ§ˆλ‚˜ ν•„μš”ν• μ§€ λͺ¨λ¦„
    • Stack μ˜μ—­λ„ λ§ˆμ°¬κ°€μ§€λ‘œ μ–Όλ§ˆλ‚˜ μ‚¬μš©λ μ§€ λͺ¨λ¦„ β†’ 동적 κ³΅κ°„μ—μ„œ μœ μ—°ν•˜κ²Œ ν™œμš©
  • Stack μ˜μ—­μ΄ κ΅¬λΆ„λœ 이유
    • ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ λ‹¨μœ„
    • μŠ€νƒ ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ 호좜 μˆœμ„œμ™€ λ°˜ν™˜ λŒ€μƒ λ“±μ˜ 관리가 νŽΈν•¨