[TIL ν”„λ‘œμ νŠΈ] 2일차 - 운영체제(OS)

2025. 4. 2. 17:41·곡뢀
728x90

1. ν”„λ‘œμ„ΈμŠ€ vs μŠ€λ ˆλ“œ

- ν”„λ‘œμ„ΈμŠ€ : μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨
- μŠ€λ ˆλ“œ : ν”„λ‘œμ„ΈμŠ€ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰λ˜λŠ” μž‘μ—… λ‹¨μœ„

κ²Œμž„ κ°œλ°œμ—μ„œ μ–΄λ–»κ²Œ μ“°μΌκΉŒ?

κ²Œμž„μ—”μ§„μ€ λ©€ν‹°μŠ€λ ˆλ”©μ„ μ‚¬μš©ν•΄μ„œ μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— 싀행함
- λ Œλ”λ§ μŠ€λ ˆλ“œ : κ·Έλž˜ν”½ μ—°μ‚° λ‹΄λ‹Ή
- 물리 μ—”μ§„ μŠ€λ ˆλ“œ : 좩돌 감지 캐릭터 μ›€μ§μž„ 계산
- AI μŠ€λ ˆλ“œ : NPC 행동 μ—°μ‚°
- μ˜€λ””μ˜€ μŠ€λ ˆλ“œ : λ°°κ²½μŒμ•…κ³Ό 효과음 처리
λ©€ν‹°μŠ€λ ˆλ”©μ„ 잘λͺ» μ“°λ©΄?
- 데이터 좩돌(레이슀 μ»¨λ””μ…˜)이 λ°œμƒ
- 동기화 문제둜 인해 μ„±λŠ₯ μ €ν•˜
ν•΄κ²° 방법 : 락(lock) μ΅œμ†Œν™”, μ“°λ ˆλ“œ μ•ˆμ „ν•œ 데이터 ꡬ쑰 μ‚¬μš©

2. μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­κ³Ό μ˜€λ²„ν—€λ“œ

- μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­(Context Switching) : CPUκ°€ μ—¬λŸ¬ μž‘μ—…μ„ λ²ˆκ°ˆμ•„ μ‹€ν–‰ν•  λ•Œ, μž‘μ—… κ°„ μ „ν™˜μ„ μœ„ν•œ μ €μž₯/볡ꡬ κ³Όμ •
- ν•˜λ‚˜μ˜ CPUκ°€ μ—¬λŸ¬ 개의 μž‘μ—…(ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” μŠ€λ ˆλ“œ)을 μ‹€ν–‰ν•  λ•Œ, ν˜„μž¬ μž‘μ—…μ˜ μƒνƒœ(Context)λ₯Ό μ €μž₯ν•˜κ³  λ‹€μŒ μž‘μ—…μ˜ μƒνƒœλ‘œ λ³€κ²½ν•˜λŠ” κ³Όμ •
- 운영체제(OS)κ°€ μž‘μ—…μ„ 효율적으둜 λΆ„λ°°ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•¨

μ»¨ν…μŠ€νŠΈ(Context)λž€?

- CPUκ°€ ν˜„μž¬ μ‹€ν–‰ 쀑인 μž‘μ—…μ˜ μƒνƒœ 정보λ₯Ό λœ»ν•¨
- ν¬ν•¨λ˜λŠ” 정보
  - ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(ν˜„μž¬ μ‹€ν–‰ 쀑인 λͺ…λ Ήμ–΄ μœ„μΉ˜)
  - CPU λ ˆμ§€μŠ€ν„° κ°’
  - λ©”λͺ¨λ¦¬ λ§€ν•‘ 정보
  - μŠ€μΌ€μ₯΄λ§ 정보

μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ κ³Όμ •

μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ€ CPUκ°€ λ‹€λ₯Έ μž‘μ—…μ„ μ‹€ν–‰ν•  λ•Œ λ°˜λ“œμ‹œ 거쳐야 ν•˜λŠ” κ³Όμ •
1. ν˜„μž¬ μ‹€ν–‰ 쀑인 μŠ€λ ˆλ“œ/ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό μ €μž₯ (PCB : Process Control Block)
2. μƒˆλ‘œμš΄ μŠ€λ ˆλ“œ/ν”„λ‘œμ„ΈμŠ€λ₯Ό 선택 (μŠ€μΌ€μ€„λŸ¬κ°€ κ²°μ •)
3. μƒˆλ‘œμš΄ μž‘μ—…μ˜ μƒνƒœλ₯Ό λΆˆλŸ¬μ™€ μ‹€ν–‰
이 κ³Όμ •μ—μ„œ CPU의 계산 μ‹œκ°„μ΄ λ‚­λΉ„λ˜κΈ° λ•Œλ¬Έμ— μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•¨

κ²Œμž„ κ°œλ°œμ—μ„œ μ–΄λ–»κ²Œ 영ν–₯을 μ€„κΉŒ?

κ²Œμž„μ€ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, κ³Όλ„ν•œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ°œμƒν•˜λ©΄ μ„±λŠ₯이 μ €ν•˜λ¨
- AI, 물리 μ—”μ§„, λ Œλ”λ§μ΄ λ™μ‹œμ— 싀행될 λ•Œ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ λ„ˆλ¬΄ 많으면 CPU μ‹œκ°„μ΄ 낭비됨
μ΅œμ ν™” 방법
- μŠ€λ ˆλ“œ 개수λ₯Ό μ μ ˆν•˜κ²Œ μœ μ§€ (λ„ˆλ¬΄ 많으면 μ˜€λ²„ν—€λ“œ 증가)
  - 물리 μ½”μ–΄ μˆ˜λ³΄λ‹€ λ§Žμ€ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λ©΄ μ„±λŠ₯ μ €ν•˜κ°€ 심해짐
- μž‘μ—…μ„ κ·Έλ£Ήν™”ν•˜μ—¬ ν•œ λ²ˆμ— μ‹€ν–‰ (μΊμ‹œ 미슀λ₯Ό 쀄이기 μœ„ν•΄)

3. 동기(Synchronous) vs. 비동기(Asynchronous) μ—°μ‚°

- 동기 방식 : ν•˜λ‚˜μ˜ μž‘μ—…μ΄ λλ‚˜μ•Ό λ‹€μŒ μž‘μ—…μ„ μ‹€ν–‰
- 비동기 방식 : μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ‹€ν–‰ κ°€λŠ₯

κ²Œμž„ κ°œλ°œμ—μ„œ μ–΄λ–»κ²Œ μ“°μΌκΉŒ?

κ²Œμž„μ—μ„œ λ‘œλ”©μ„ μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ 비동기 λ‘œλ”©(Async Loading)을 ν™œμš©ν•¨
- ν…μŠ€μ²˜, 였브젝트λ₯Ό 비동기 λ‘œλ“œν•˜λ©΄ ν”„λ ˆμž„ λ“œλž 없이 μ§„ν–‰ κ°€λŠ₯
- λ„€νŠΈμ›Œν¬ 톡신(λ©€ν‹°ν”Œλ ˆμ΄ κ²Œμž„)μ—μ„œ μ„œλ²„ 응닡을 기닀리지 μ•Šκ³  UIλ₯Ό 계속 μ—…λ°μ΄νŠΈ κ°€λŠ₯
예제(Unity, Unreal)
- Unity : Resources.LoadAsync()
- Unreal Engine : Async Loading System
비동기 λ‘œλ”©μ„ 잘λͺ» μ“°λ©΄?
- 비동기 μž‘μ—… κ°„ μš°μ„ μˆœμœ„ 문제 λ°œμƒ
- λ©”λͺ¨λ¦¬ λΆ€μ‘±μœΌλ‘œ ν¬λž˜μ‹œ λ°œμƒ κ°€λŠ₯
ν•΄κ²° 방법 : ν•„μš” μ—†λŠ” λ¦¬μ†ŒμŠ€λŠ” μ¦‰μ‹œ μ–Έλ‘œλ“œ

4. μΊμ‹œ λ©”λͺ¨λ¦¬μ™€ μΊμ‹œ 미슀(Cache Miss)

- CPU μΊμ‹œ(Cache Memory) : 자주 μ‚¬μš©ν•˜λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ μ ‘κ·Όν•˜κΈ° μœ„ν•œ μ΄ˆκ³ μ† λ©”λͺ¨λ¦¬
- μΊμ‹œ 미슀(Cache Miss) : CPUκ°€ μ›ν•˜λŠ” 데이터가 μΊμ‹œμ— 없을 λ•Œ RAMμ—μ„œ κ°€μ Έμ˜€λŠ” 상황 (속도 μ €ν•˜)

κ²Œμž„ κ°œλ°œμ—μ„œ μ–΄λ–»κ²Œ μ΅œμ ν™”ν• κΉŒ?

CPU μΊμ‹œλ₯Ό 효율적으둜 μ‚¬μš©ν•˜λ©΄ ν”„λ ˆμž„ λ“œλžμ„ 쀄일 수 있음
- μ—°μ†λœ 데이터 ꡬ쑰(λ°°μ—΄) μ‚¬μš© -> λ©”λͺ¨λ¦¬ μ ‘κ·Ό 속도 ν–₯상
- ꡬ쑰체 크기 μ΅œμ ν™” -> μΊμ‹œ 라인에 맞게 데이터 배치

λΉ„νš¨μœ¨μ μΈ μ½”λ“œ(μΊμ‹œ 미슀 λ°œμƒ κ°€λŠ₯)

struct Data{
	int id;
	float posX,posY,posZ;
};
Data data[1000];

- λ©”λͺ¨λ¦¬ μƒμ—μ„œ λΆˆκ·œμΉ™ν•œ 배치

μΊμ‹œ μΉœν™”μ  μ½”λ“œ

struct Data{
	int ids[1000];
	float posX[1000],posY[1000],posZ[1000];
};
Data data;

- 데이터λ₯Ό μ—°μ†λœ λ°°μ—΄λ‘œ μ €μž₯ν•˜λ©΄ CPU μΊμ‹œ 효율이 증가함

λ°˜μ‘ν˜•

'곡뢀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[TIL ν”„λ‘œμ νŠΈ] 6일차 - λ©”λͺ¨λ¦¬ λͺ¨λΈ & μΊμ‹œ 일관성 (Memory Model & Cache Coherency)  (0) 2025.04.09
[TIL ν”„λ‘œμ νŠΈ] 5일차 - λ©€ν‹°μ“°λ ˆλ“œμ—μ„œ μƒκΈ°λŠ” 문제, 경쟁 쑰건(Race Condition)  (0) 2025.04.08
[TIL ν”„λ‘œμ νŠΈ] 4일차 - μΊμ‹œ λ©”λͺ¨λ¦¬μ™€ 계측 ꡬ쑰  (0) 2025.04.07
[TIL ν”„λ‘œμ νŠΈ] 3일차 - λ©”λͺ¨λ¦¬ 관리와 κ²Œμž„ μ΅œμ ν™”  (0) 2025.04.03
[TIL ν”„λ‘œμ νŠΈ] 1일차 - 컴퓨터 ꡬ쑰 (Computer Architecture)  (1) 2025.04.01
'곡뢀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [TIL ν”„λ‘œμ νŠΈ] 5일차 - λ©€ν‹°μ“°λ ˆλ“œμ—μ„œ μƒκΈ°λŠ” 문제, 경쟁 쑰건(Race Condition)
  • [TIL ν”„λ‘œμ νŠΈ] 4일차 - μΊμ‹œ λ©”λͺ¨λ¦¬μ™€ 계측 ꡬ쑰
  • [TIL ν”„λ‘œμ νŠΈ] 3일차 - λ©”λͺ¨λ¦¬ 관리와 κ²Œμž„ μ΅œμ ν™”
  • [TIL ν”„λ‘œμ νŠΈ] 1일차 - 컴퓨터 ꡬ쑰 (Computer Architecture)
KiTFOx
KiTFOx
  • KiTFOx
    KiTFOx's Notepad πŸ“
    KiTFOx
  • 곡지사항

    • πŸ“’ KiTFOx
  • 250x250
    • KiTFOx (118)
      • 곡뢀 (8)
        • CㆍC++ (7)
        • Design Pattern (2)
        • Crowd Simulation (2)
        • LearnOpenGL λ²ˆμ—­ (3)
        • OpenGL 자료 λ²ˆμ—­ (2)
        • OpenGL (1)
        • UE 자료 λ²ˆμ—­ (1)
        • AR (0)
        • OpenCV (0)
      • μ•Œκ³ λ¦¬μ¦˜ (50)
        • 자료ꡬ쑰 (3)
        • BaekJoon (35)
        • Programmers (11)
      • OpenGL 따라가기 (2)
      • κ²Œμž„μ—”μ§„ (15)
        • Unity (13)
        • UE4 (0)
        • UE5 (2)
      • λ©”νƒ€λ²„μŠ€ (4)
        • Engage VR (3)
        • Altspace VR (1)
      • 포트폴리였 ν”„λ‘œμ νŠΈ (2)
        • NewRo (1)
        • Amaimon(Unity3D) (0)
        • ArenaSurvival(UE5) (0)
      • κ°œλ°œμΌμ§€ (1)
        • Pub-Simulator (1)
        • Project-B (0)
      • λ„€νŠΈμ›Œν¬ (4)
      • Etc Study (5)
      • λŒ€μ™Έν™œλ™ (8)
        • ν¬λž˜ν”„ν†€ μ •κΈ€ κ²Œμž„λž© (6)
      • 회고둝 (0)
      • κ²Œμž„ ν•œκΈ€νŒ¨μΉ˜ (0)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
KiTFOx
[TIL ν”„λ‘œμ νŠΈ] 2일차 - 운영체제(OS)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”