[πŸ‘¨πŸ»β€πŸ”¬CS μŠ€ν„°λ”” 1μ£Όμ°¨] - OS(운영체제 1)

κΉ€μœ€μ€€Β·2023λ…„ 12μ›” 4일

CS μŠ€ν„°λ””

λͺ©λ‘ 보기
1/13
post-thumbnail

1. μš΄μ˜μ²΄μ œλž€?

ν•˜λ“œμ›¨μ–΄λ₯Ό κ΄€λ¦¬ν•˜κ³ , 컴퓨터 μ‹œμŠ€ν…œμ˜ μžμ›λ“€μ„ 효율적으둜 κ΄€λ¦¬ν•˜λ©°, μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό ν•˜λ“œμ›¨μ–΄ κ°„μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œμ¨ λ‹€λ₯Έ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μœ μš©ν•œ μž‘μ—…μ„ ν•  수 μžˆλ„λ‘ ν™˜κ²½μ„ μ œκ³΅ν•΄μ€€λ‹€.

즉, μ‚¬μš©μžκ°€ 컴퓨터λ₯Ό νŽΈλ¦¬ν•˜κ³  효과적으둜 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” μ‹œμŠ€ν…œ μ†Œν”„νŠΈμ›¨μ–΄


운영체제의 μ—­ν• 

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

μš΄μ˜μ²΄μ œμ—μ„œ μž‘λ™ν•˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ„ κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯.

μ–΄λ–€ μ˜λ―Έμ—μ„œλŠ” ν”„λ‘œμ„ΈμŠ€(CPU) κ΄€λ¦¬ν•˜λŠ” 것, ν˜„μž¬ CPUλ₯Ό μ μœ ν•΄μ•Ό ν•  ν”„λ‘œμ„ΈμŠ€λ₯Ό κ²°μ •ν•˜κ³ , μ‹€μ œλ‘œ CPUλ₯Ό ν”„λ‘œμ„ΈμŠ€μ— ν• λ‹Ήν•˜λ©°, 이 ν”„λ‘œμ„ΈμŠ€ κ°„ 곡유 μžμ› μ ‘κ·Όκ³Ό 톡신 등을 κ΄€λ¦¬ν•˜κ²Œ λœλ‹€.

ν”„λ‘œμ„ΈμŠ€(Process)λž€?

ν”„λ‘œμ„ΈμŠ€λŠ” μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ””μŠ€ν¬λ‘œλΆ€ν„° λ©”λͺ¨λ¦¬μ— μ μž¬λ˜μ–΄ CPU의 할당을 받을 수 μžˆλŠ” 것.
μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ£Όμ†Œ 곡간, 파일, λ©”λͺ¨λ¦¬ 등을 ν• λ‹Ή λ°›μœΌλ©° 이것듀을 μ΄μΉ­ν•˜μ—¬ ν”„λ‘œμ„ΈμŠ€λΌκ³  ν•œλ‹€.
ꡬ체적으둜 ν”„λ‘œμ„ΈμŠ€λŠ” ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜, 볡귀 μ£Όμ†Œμ™€ 둜컬 λ³€μˆ˜μ™€ 같은 μž„μ‹œ 자료λ₯Ό κ°–λŠ” ν”„λ‘œμ„ΈμŠ€ μŠ€νƒκ³Ό μ „μ—­ λ³€μˆ˜λ“€μ„ μˆ˜λ‘ν•˜λŠ” 데이터 μ„Ήμ…˜μ„ ν¬ν•¨ν•œλ‹€. (ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ λ‹€λ₯Έ 데이터 μ„Ήμ…˜μ— μ „μ—­λ³€μˆ˜κ°€ μ €μž₯됨)
λ˜ν•œ, ν”„λ‘œμ„ΈμŠ€λŠ” 싀행쀑에 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜λŠ” λ©”λͺ¨λ¦¬μΈ νž™μ„ ν¬ν•¨ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€ μ œμ–΄ 블둝(Process Control Block, PCB)

PCB : νŠΉμ • ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ μ€‘μš”ν•œ 정보λ₯Ό μ €μž₯ν•˜κ³  μžˆλŠ” 운영체제의 자료ꡬ쑰.
μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€μ˜ 생성과 λ™μ‹œμ— κ³ μœ ν•œ PCBλ₯Ό μƒμ„±ν•œλ‹€.

  • ν”„λ‘œμ„ΈμŠ€μ˜ 진행상황 좔적
  • ν”„λ‘œμ„ΈμŠ€κ°„ μ „ν™˜μ΄ λ°œμƒ μ‹œ μ§„ν–‰ 상황을 μ €μž₯ 및 λ³΅μ›ν•˜λŠ”λ° μ‚¬μš©λ¨.
  • ν”„λ‘œμ„ΈμŠ€ ID, ν”„λ‘œμ„ΈμŠ€ μƒνƒœ, ν”„λ‘œμ„ΈμŠ€ μΉ΄μš΄ν„°(ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€μŒμ— μ‹€ν–‰ν•  λͺ…λ Ήμ–΄ μ£Όμ†Œ) λ“±μ˜ 정보가 μ €μž₯됨.
    λ”°λΌμ„œ, ν”„λ‘œμ„ΈμŠ€λŠ” μ „ν™˜μ΄ λ°œμƒλ˜λ©΄ μ§„ν–‰λ˜λŠ” μž‘μ—…μ„ λ‹€μ‹œ μ €μž₯ν•˜κ³  CPUλ₯Ό λ°˜ν™˜ν•˜λŠ”λ°, μ΄λ•Œ μž‘μ—…μ˜ μ§„ν–‰ 상황을 λͺ¨λ‘ PCB에 μ €μž₯ν•˜κ²Œλœλ‹€. 그리고 λ‹€μ‹œ CPUλ₯Ό ν• λ‹Ήλ°›κ²Œ 되면 PCB에 μ €μž₯λ˜μ–΄μžˆλ˜ λ‚΄μš©μ„ λΆˆλŸ¬μ™€ 이전에 μ’…λ£Œλλ˜ μ‹œμ λΆ€ν„° λ‹€μ‹œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

μŠ€λ ˆλ“œ(Thread)

μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μ‹€ν–‰ λ‹¨μœ„.
ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” μ—¬λŸ¬ μ‹€ν–‰ νλ¦„μœΌλ‘œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ μ£Όμ†Œ κ³΅κ°„μ΄λ‚˜ μžμ›μ„ κ³΅μœ ν•  수 μžˆλ‹€.
ꡬ성 - μŠ€λ ˆλ“œID, ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°, λ ˆμ§€μŠ€ν„° μ§‘ν•©, μŠ€νƒ
ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹€μˆ˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ κ΅¬λΆ„ν•˜μ—¬ μžμ›(μ½”λ“œ, 데이터 μ„Ήμ…˜, μ—΄λ¦° 파일, μ‹ ν˜Έ)을 곡유.
μžμ›μ˜ 생성과 κ΄€λ¦¬μ˜ 쀑볡성을 μ΅œμ†Œν™”ν•˜μ—¬ μˆ˜ν–‰ λŠ₯λ ₯을 ν–₯μƒμ‹œν‚€λŠ” 것을 λ©€ν‹°μŠ€λ ˆλ”©μ΄λΌκ³  ν•œλ‹€.
이 경우 각각의 μŠ€λ ˆλ“œλŠ” 독립적인 μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 각자의 μŠ€νƒκ³Ό PC λ ˆμ§€μŠ€ν„° 값을 κ°–κ³  μžˆλ‹€.
(독립적인 λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯됨)

μŠ€νƒμ„ μŠ€λ ˆλ“œλ§ˆλ‹€ λ…λ¦½μ μœΌλ‘œ ν• λ‹Ήν•˜λŠ” 이유
μŠ€νƒ : ν•¨μˆ˜ 호좜 μ‹œ μ „λ‹¬λ˜λŠ” 인자, λ°˜ν™˜ μ£Όμ†Œ, λ§€κ°œλ³€μˆ˜ 등을 μ €μž₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ©”λͺ¨λ¦¬ 곡간
λ”°λΌμ„œ μŠ€νƒ λ©”λͺ¨λ¦¬ 곡간이 λ…λ¦½μ μ΄λΌλŠ” 것은 독립적인 ν•¨μˆ˜ 호좜이 κ°€λŠ₯ν•˜λ‹€λŠ” 것.
-> 독립적인 μ‹€ν–‰ 흐름이 μΆ”κ°€λ˜λŠ” 것.

**PC λ ˆμ§€μŠ€ν„°λ₯Ό μŠ€λ ˆλ“œλ§ˆλ‹€ λ…λ¦½μ μœΌλ‘œ ν• λ‹Ήν•˜λŠ” 이유

PC 값은 μŠ€λ ˆλ“œκ°€ λͺ…λ Ήμ–΄μ˜ μ–΄λ””κΉŒμ§€ μˆ˜ν–‰ν•˜μ˜€λŠ”μ§€λ₯Ό λ‚˜νƒ€λƒ„.
μŠ€λ ˆλ“œλŠ” CPUλ₯Ό ν• λ‹Ή λ°›κ³  μŠ€μΌ€μ€„λŸ¬μ— μ˜ν•΄ λ‹€μ‹œ 선점 당함.
λ•Œλ¬Έμ— λͺ…λ Ήμ–΄κ°€ μ—°μ†μ μœΌλ‘œ μˆ˜ν–‰λ˜μ§€ λͺ»ν•˜κ³  μ–΄λŠ λΆ€λΆ„κΉŒμ§€ μˆ˜ν–‰ν–ˆλŠ”μ§€ κΈ°μ–΅ ν•΄μ•Όν•œλ‹€.
λ”°λΌμ„œ, PC λ ˆμ§€μŠ€ν„°λ₯Ό λ…λ¦½μ μœΌλ‘œ ν• λ‹Ήν•œλ‹€.

μ—­ν• 

  • ν”„λ‘œμ„ΈμŠ€, μŠ€λ ˆλ“œ
  • μŠ€μΌ€μ€„λ§
  • 동기화
  • IPC 톡신

2. μ €μž₯μž₯치 관리

1μ°¨ μ €μž₯μž₯μΉ˜μ— ν•΄λ‹Ήν•˜λŠ” 메인 λ©”λͺ¨λ¦¬μ™€ 2μ°¨ μ €μž₯μž₯μΉ˜μ— ν•΄λ‹Ήν•˜λŠ” ν•˜λ“œλ””μŠ€ν¬, NAND등을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯이닀.

  • 1μ°¨ μ €μž₯μž₯치(Main Memory)
    - ν”„λ‘œμ„ΈμŠ€μ— ν• λ‹Ήν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ ν• λ‹Ήκ³Ό ν•΄μ œ
    • 각 λ©”λͺ¨λ¦¬ μ˜μ—­ κ°„μ˜ μΉ¨λ²” λ°©μ§€
    • 메인 λ©”λͺ¨λ¦¬μ˜ 효율적 ν™œμš©μ„ μœ„ν•œ 가상 λ©”λͺ¨λ¦¬ κΈ°λŠ₯
  • 2μ°¨ μ €μž₯μž₯치(HDD, NAND Flash memory)
    - 파일 ν˜•μ‹μ˜ 데이터 μ €μž₯
    • 이런 파일 데이터 관리λ₯Ό μœ„ν•œ 파일 μ‹œμŠ€ν…œμ„ OSμ—μ„œ 관리
    • FAT, NTFS, EXT2, JFS, XFS λ“± λ§Žμ€ 파일 μ‹œμŠ€ν…œλ“€μ΄ κ°œλ°œλ˜μ–΄ μ‚¬μš© 쀑

μ—­ν• 

  • λ©”λͺ¨λ¦¬ 관리
  • 가상 λ©”λͺ¨λ¦¬
  • 파일 μ‹œμŠ€ν…œ

3. λ„€νŠΈμ›Œν‚Ή

λ„€νŠΈμ›Œν‚Ήμ€ 컴퓨터 ν™œμš©μ˜ 핡심과도 κ°™μ•„μ‘Œλ‹€.

μ—­ν• 

  • TCP/IP
  • 기타 ν”„λ‘œν† μ½œ

TCP/IP 기반의 인터넷에 μ—°κ²°ν•˜κ±°λ‚˜, μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μš΄μ˜μ²΄μ œμ—μ„œ λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œμ„ 지원해야 ν•œλ‹€. ν˜„μž¬ μƒμš© OS듀은 λ§Žμ€ λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œμ„ μ§€μ›ν•œλ‹€.

4. μ‚¬μš©μž 관리

μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” PCλŠ” 였직 ν•œ μ‚¬λžŒμ˜ κ²ƒμΌκΉŒ? μ•„λ‹ˆλ‹€.

ν•œ PCμ—μ„œ μ—¬λŸ¬ μ‚¬λžŒμ΄ μ‚¬μš©λ  μˆ˜λ„ μžˆμœΌλ―€λ‘œ μš΄μ˜μ²΄μ œλŠ” 각 계정을 κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯이 ν•„μš”ν•¨.
-> νŒŒμΌμ΄λ‚˜ μ‹œμŠ€ν…œ μžμ›μ— μ ‘κ·Ό κΆŒν•œμ„ μ§€μ •ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” 것이 μ‚¬μš©μž 관리 κΈ°λŠ₯

μ—­ν• 

  • 계정 관리
  • μ ‘κ·ΌκΆŒν•œ 관리

5. λ””λ°”μ΄μŠ€ λ“œλΌμ΄λ²„

μš΄μ˜μ²΄μ œλŠ” μ‹œμŠ€ν…œμ˜ μžμ›, ν•˜λ“œμ›¨μ–΄λ₯Ό κ΄€λ¦¬ν•œλ‹€. μ‹œμŠ€ν…œμ—λŠ” μ—¬λŸ¬ ν•˜λ“œμ›¨μ–΄κ°€ λΆ™μ–΄μžˆμŒ. 이듀을 μš΄μ˜μ²΄μ œμ—μ„œ μΈμ‹ν•˜κ³  κ΄€λ¦¬ν•˜κ²Œ λ§Œλ“€μ–΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ ν•˜λ“œμ›¨μ–΄λ₯Ό μ‚¬μš©ν•  수 있게 λ§Œλ“€μ–΄μ•Ό 함.

μ—­ν• 

  • μˆœμ°¨μ ‘κ·Ό μž₯치
  • μž„μ˜μ ‘κ·Ό μž₯치
  • λ„€νŠΈμ›Œν¬ μž₯치

2. ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

ν”„λ‘œμ„ΈμŠ€ : ν”„λ‘œκ·Έλž¨μ„ λ©”λͺ¨λ¦¬ μƒμ—μ„œ 싀행쀑인 μž‘μ—…
μŠ€λ ˆλ“œ : ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ 흐름 λ‹¨μœ„

기본적으둜 ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ μ΅œμ†Œ 1개의 μŠ€λ ˆλ“œ 보유

ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ³„λ„μ˜ μ£Όμ†Œκ³΅κ°„ ν• λ‹Ή(독립적)

  • Code : μ½”λ“œ 자체λ₯Ό κ΅¬μ„±ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­(ν”„λ‘œκ·Έλž¨ λͺ…λ Ή)
  • Data : μ „μ—­λ³€μˆ˜, μ •μ λ³€μˆ˜, λ°°μ—΄ λ“±
    - μ΄ˆκΈ°ν™” 된 λ°μ΄ν„°λŠ” data μ˜μ—­μ— μ €μž₯
    • μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šμ€ λ°μ΄ν„°λŠ” bss μ˜μ—­μ— μ €μž₯
  • Heap : 동적 ν• λ‹Ή μ‹œ μ‚¬μš©(new(), malloc())
  • Stack : μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 리턴 κ°’

μŠ€λ ˆλ“œλŠ” stack만 λ…λ¦½μ μœΌλ‘œ ν• λ‹Ήλ°›κ³  λ‚˜λ¨Έμ§€ μ˜μ—­μ„ ν•œ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ„œλ‘œ 곡유
ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 생성될 λ•Œ, 기본적으둜 ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œ 같이 생성.

ν”„λ‘œμ„ΈμŠ€λΌλ¦° μžμ‹ λ§Œμ˜ 고유 곡간과 μžμ›μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©ν•˜λŠ”λ° λ°˜μ—
μŠ€λ ˆλ“œλŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ 곡간, μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ μ‚¬μš©λœλ‹€. (μ½”λ“œ, 데이터, νž™)

"μ™œ μ΄λ ‡κ²Œ 곡간을 λ‚˜λˆˆκ±ΈκΉŒ?"

μ΅œλŒ€ν•œ 데이터λ₯Ό κ³΅μœ ν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš© νš¨μœ¨μ„±κ³Ό ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰μ˜ μœ μ—°μ„±μ„ 높이기 μœ„ν•¨.

각 λ©”λͺ¨λ¦¬λ₯Ό κ΅¬λΆ„ν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό, μ ‘κ·Ό νŒ¨ν„΄μ„ μ΅œμ ν™”ν•˜κ³ , ν•΄λ‹Ή 접근에 λ§žλŠ” λ©”λͺ¨λ¦¬ μ˜μ—­λ§Œ κ΅¬λΆ„ν•˜μ—¬ 할당될 수 μžˆλ‹€.

그러면 Stackκ³Ό DataλŠ” μ™œ κ΅¬λΆ„μ§€μ—ˆμ§€?

μŠ€νƒμ˜ ꡬ주의 νŠΉμ„±κ³Ό μ „μ—­ λ³€μˆ˜μ˜ ν™œμš©μ„±μ„ μœ„ν•¨.

μœ„μ²˜λŸΌ λ§€κ°œλ³€μˆ˜, ν•¨μˆ˜μ— μ „λ‹¬λœ 인자, λ°˜ν™˜ μ£Όμ†Œ 등은 λ‚˜μ€‘μ— λ“€μ–΄κ°„ 것뢀터 μ’…λ£Œλœλ‹€.

λ”°λΌμ„œ μŠ€νƒμ„ ν™œμš©ν•˜μ—¬ ν•¨μˆ˜ ν˜ΈμΆœμ—λ§Œ ν•„μš”ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό ν•¨μˆ˜ λ‚΄μ—μ„œ μ°Έμ‘° 및 μ‚¬μš©ν•˜κ³ ,
ν•¨μˆ˜κ°€ μ’…λ£Œλ  λ•Œ λ°”λ‘œ μ œκ±°ν•œλ‹€.

ν”„λ‘œκ·Έλž¨μ˜ ν•¨μˆ˜μ™€ μ§€μ—­λ³€μˆ˜λŠ”, LIFO(ν›„μž…μ„ μΆœ) νŠΉμ„±μ„ κ°€μ§„ μŠ€νƒμ—μ„œ 싀행됨.

이둜써 μ—¬λŸ¬ ν•¨μˆ˜μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ“°μ΄λŠ” μ „μ—­ λ³€μˆ˜λŠ” λ”°λ‘œ μ§€μ •ν•΄μ„œ λ©”λͺ¨λ¦¬λ₯Ό μ•„λ‚„ 수 μžˆλ‹€.

λ©”λͺ¨λ¦¬ ꡬ뢄을 물리적으둜 ν–ˆλ‚˜?
μ•„λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ μ˜μ—­μ€ 물리적으둜 κ΅¬λΆ„ν•œ 것이 μ•„λ‹Œ, μ„Έκ·Έλ¨ΌνŠΈλΌλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬λΆ„ν•˜λŠ” 논리적인 λ‹¨μœ„λ‘œ κ΅¬λΆ„ν•˜μ˜€λ‹€.

μš΄μ˜μ²΄μ œλŠ” 이 μ„Έκ·Έλ¨ΌνŠΈλ₯Ό μ‚¬μš©ν•΄ λ©”λͺ¨λ¦¬λ₯Ό κ΅¬λΆ„ν•œλ‹€.

λ©€ν‹° ν”„λ‘œμ„ΈμŠ€

"ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅¬μ„±ν•˜μ—¬ 각 ν”„λ‘œμ„ΈμŠ€κ°€ λ³‘λ ¬μ μœΌλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것"

μž₯점 : μ•ˆμ „μ„± (λ©”λͺ¨λ¦¬ μΉ¨λ²” 문제λ₯Ό OS μ°¨μ›μ—μ„œ ν•΄κ²°)
단점 : 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ°–κ³  μžˆμ–΄, μž‘μ—…λŸ‰μ΄ λ§Žμ„ 수둝 μ˜€λ²„ν—€λ“œ λ°œμƒ.
(Context Switching 으둜 μΈν•œ μ„±λŠ₯ μ €ν•˜)

?. Context Switching
ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜κ³  λ³΅μ›ν•˜λŠ” 일련 κ³Όμ •

즉, λ™μž‘ 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ λŒ€κΈ°ν•˜λ©΄μ„œ ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœλ₯Ό λ³΄κ΄€ν•˜κ³ , λŒ€κΈ°ν•˜κ³  있던 λ‹€μŒ 순번의 ν”„λ‘œμ„ΈμŠ€κ°€ λ™μž‘ν•˜λ©΄μ„œ μžμ‹ μ΄ 이전에 λ³΄κ΄€ν•œ ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό λ³΅κ΅¬ν•˜λŠ” κ³Όμ •.

-> ν”„λ‘œμ„ΈμŠ€λŠ” 각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›μ•„ μ‚¬μš©λ˜λ―€λ‘œ, μΊμ‹œ λ©”λͺ¨λ¦¬ μ΄ˆκΈ°ν™”μ™€ 같은 무거운 μž‘μ—…μ΄ μ§„ν–‰λ˜μ—ˆμ„ λ•Œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  λ¬Έμ œκ°€ μ‘΄μž¬ν•¨.

λ©€ν‹° μŠ€λ ˆλ“œ

"ν•˜λ‚˜μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό ꡬ성해 각 μŠ€λ ˆλ“œκ°€ ν•˜λ‚˜μ˜ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것"

ν•˜λ‚˜μ˜ ν”„λ‘œμ„Έμ„œμ—μ„œ μ—¬λŸ¬κ°œμ˜ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹ˆλ‹€!
CPUλŠ” ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ λ©€ν‹° μŠ€λ ˆλ“œλŠ” CPUμ—μ„œ μŠ€λ ˆλ“œκ°€ ν• λ‹Ήλ°›λŠ” μ‹œκ°„μ„ λΆ„ν• ν•˜μ—¬ μž‘μ—…μ„ ν• λ‹Ή λ°›λŠ” 것이닀.
각 μŠ€λ ˆλ“œκ°€ μΌμ •μ‹œκ°„λ™μ•ˆ CPUλ₯Ό ν• λ‹Ήλ°›μ•„ 각 μŠ€λ ˆλ“œκ°€ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” 것.

μž₯점 : 독립적인 ν”„λ‘œμ„ΈμŠ€μ— λΉ„ν•΄ 곡유 λ©”λͺ¨λ¦¬λ§ŒνΌμ˜ μ‹œκ°„, μžμ› 손싀이 κ°μ†Œ. μ „μ—­, 정적 λ³€μˆ˜ 곡유 κ°€λŠ₯.

단점 : μ•ˆμ „μ„± 문제. ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 데이터 곡간을 λ§κ°€λœ¨λ¦¬λ©΄ λͺ¨λ“  μŠ€λ ˆλ“œκ°€ μž‘λ™ λΆˆκ°€λŠ₯. (곡유 λ©”λͺ¨λ¦¬λΌ)

  • μœ„ λ¬Έμ œμ— λŒ€ν•œ 단점은 Critical Section 기법을 톡해 λŒ€λΉ„ν•œλ‹€.
    - ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 곡유 데이터 값을 λ³€κ²½ν•˜λŠ” μ‹œμ μ— λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ κ·Έ 값을 읽으렀 ν•  λ•Œ λ°œμƒν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 동기화 κ³Όμ •.
    • μƒν˜Έ 배체 , μ§„ν–‰ , ν•œμ •λœ λŒ€κΈ° λ₯Ό 좩쑱해야함.
    • λŒ€ν‘œμ μœΌλ‘œ Locking 기법이 μžˆλ‹€
      • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ 곡유 μžμ›μ— μ ‘κ·Ό μ‹œ Lock을 ν­λ“ν•˜κ³  μž‘μ—… μ™„λ£Œ ν›„ Lock을 ν•΄μ œν•˜λŠ” 방식
      • λ‹€λ₯Έ μŠ€λ ˆλ“œλŠ” Lock이 ν•΄μ œλ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€.

3. μΈν„°λŸ½νŠΈ(Interrupt)

μ •μ˜ : ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 도쀑에 예기치 μ•Šμ€ 상황이 λ°œμƒν•œ 경우 ν˜„μž¬ μ‹€ν–‰ 쀑인 μž‘μ—…μ„ μ¦‰μ‹œ μ€‘λ‹¨ν•˜κ³ , λ°œμƒλœ 상황에 λŒ€ν•œ μš°μ„  μ²˜λ¦¬κ°€ ν•„μš”ν•¨μ„ CPUμ—κ²Œ μ•Œλ¦¬λŠ” 것.

ν˜„μž¬ μˆ˜ν–‰μ€‘μΈ 일보닀 더 μ€‘μš”ν•œ 일(ex. μž…μΆœλ ₯, μš°μ„  μˆœμœ„ μ—°μ‚°) 등이 λ°œμƒν•˜λ©΄ κ·Έ 일을 λ¨Όμ € μ²˜λ¦¬ν•˜κ³  λ‚˜μ„œ ν•˜λ˜ 일을 계속 ν•΄μ•Όν•œλ‹€.
-> μ‹œμŠ€ν…œμ΄ μ™ΈλΆ€ λ˜λŠ” λ‚΄λΆ€μ˜ 사건에 λ°˜μ‘ν•΄μ•Ό ν•  λ•Œ.

μ™ΈλΆ€/λ‚΄λΆ€ μΈν„°λŸ½νŠΈ : CPU의 ν•˜λ“œμ›¨μ–΄ μ‹ ν˜Έμ— μ˜ν•΄ λ°œμƒ
μ†Œν”„νŠΈμ›¨μ–΄ μΈν„°λŸ½νŠΈ : λͺ…λ Ήμ–΄μ˜ μˆ˜ν–‰μ— μ˜ν•΄ λ°œμƒ

μ™ΈλΆ€ μΈν„°λŸ½νŠΈ

  • μž…μΆœλ ₯ μž₯치, 타이밍 μž₯치, 전원 λ“± 외뢀적인 μš”μΈμœΌλ‘œ λ°œμƒ
  • 전원 이상 , 기계 착였 , μ™ΈλΆ€ μ‹ ν˜Έ , μž…μΆœλ ₯

λ‚΄λΆ€ μΈν„°λŸ½νŠΈ

  • Trap 이라고 λΆ€λ₯΄λ©°, 잘λͺ»λœ λͺ…λ Ήμ΄λ‚˜ 데이터λ₯Ό μ‚¬μš©ν•  λ•Œ λ°œμƒ
  • 0으둜 λ‚˜λˆ„κΈ°, μ˜€λ²„ν”Œλ‘œμš°, λͺ…λ Ήμ–΄ 잘λͺ» μ‚¬μš©ν•œ 경우 λ°œμƒ

μ†Œν”„νŠΈμ›¨μ–΄ μΈν„°λŸ½νŠΈ

  • ν”„λ‘œκ·Έλž¨ 처리 쀑 λͺ…λ Ήμ˜ μš”μ²­μ— μ˜ν•΄ λ°œμƒν•œ 것 (SVC μΈν„°λŸ½νŠΈ)
  • μ†Œν”„νŠΈμ›¨μ–΄ 이용 쀑 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ μ‹œλΆ„ν•  처리λ₯Ό μœ„ν•΄ μžμ› ν• λ‹Ή λ™μž‘μ΄ μˆ˜ν–‰λœλ‹€.

μΈν„°λŸ½νŠΈ λ°œμƒ 처리 κ³Όμ •


ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 μΈν„°λŸ½νŠΈ λ°œμƒ.
1. λ°œμƒλœ μž₯μΉ˜μ—μ„œ μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜ΈλŠ” CPU에 보낸닀.
2. CPUλŠ” ν˜„μž¬ μˆ˜ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ„ λ©ˆμΆ”κ³ , μΈν„°λŸ½νŠΈ μš”μ²­ μ‹ ν˜Έλ₯Ό κ²€μΆœν•œλ‹€.
3. μΈν„°λŸ½νŠΈ 응닡 μ „, CPUλŠ” ν˜„μž¬ μž‘μ—… μƒνƒœ(μƒνƒœ λ ˆμ§€μŠ€ν„°, ν”„λ‘œκ·Έλž¨ μΉ΄μš΄ν„°(PC)) 등을 μŠ€νƒμ— μ €μž₯.
4. μΈν„°λŸ½νŠΈμ˜ μ‹λ³„μžλ₯Ό 톡해 μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴(ISR)의 μ£Όμ†Œλ‘œ μ ν”„ν•˜μ—¬ ISR을 μ‹€ν–‰μ‹œν‚¨λ‹€.
(ISR은 μΈν„°λŸ½νŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œ. ν•΄λ‹Ή μž₯치의 λ“œλΌμ΄λ²„λ‚˜ 운영체제 일뢀일 수 μžˆλ‹€.)
5. ISR을 μ™„λ£Œν•˜λ©΄. CPUλŠ” μΈν„°λŸ½νŠΈ λ°œμƒ μ „ μ €μž₯된 μž‘μ—… μƒνƒœλ₯Ό λ³΅μ›ν•˜μ—¬ μ€‘λ‹¨λœ ν”„λ‘œκ·Έλž¨μ„ 계속 μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ„λ‘ ν•œλ‹€.

μΈν„°λŸ½νŠΈκ°€ μ—†μ—ˆλ‹€λ©΄?

μ»¨νŠΈλ‘€λŸ¬λŠ” νŠΉμ •ν•œ μ–΄λ–€ 일을 ν•  μ‹œκΈ°λ₯Ό μ•ŒκΈ° μœ„ν•΄ 계속 체크 해야함.(이λ₯Ό 폴링이라고 ν•œλ‹€)
폴링을 ν•˜λŠ” μ‹œκ°„μ— μ›λž˜ 일에 집쀑할 수 μ—†μ–΄ κΈ°λŠ₯이 μ œλŒ€λ‘œ μˆ˜ν–‰λ˜μ§€ λͺ»ν•œλ‹€.

μ»¨νŠΈλ‘€λŸ¬κ°€ μž…λ ₯을 λ°›μ•„λ“€μ΄λŠ” 방법 두가지

폴링 방식
μ‚¬μš©μžκ°€ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄ μž…λ ₯ ν•€μ˜ 값을 계속 읽어 λ³€ν™”λ₯Ό μ•Œμ•„λ‚΄λŠ” 방식

μΈν„°λŸ½νŠΈ μš”μ²­ ν”Œλž˜κ·Έλ₯Ό μ°¨λ‘€λ‘œ λΉ„κ΅ν•˜μ—¬ μš°μ„ μˆœμœ„κ°€ κ°€μž₯ 높은 μΈν„°λŸ½νŠΈ μžμ›μ„ μ°Ύμ•„ 이에 λ§žλŠ” μΈν„°λŸ½νŠΈ μ„œλΉ„μŠ€ 루틴을 μˆ˜ν–‰ν•œλ‹€. (ν•˜λ“œμ›¨μ–΄μ— λΉ„ν•΄ 속도가 느림)

μΈν„°λŸ½νŠΈ 방식
MCU μžμ²΄κ°€ ν•˜λ“œμ›¨μ–΄μ μœΌλ‘œ λ³€ν™”λ₯Ό μ²΄ν¬ν•˜μ—¬ λ³€ν™” μ‹œμ—λ§Œ μΌμ •ν•œ λ™μž‘μ„ ν•˜λŠ” 방식

  • Daisy Chain
  • 병렬 μš°μ„ μˆœμœ„ λΆ€μ—¬

μΈν„°λŸ½νŠΈ 방식은 ν•˜λ“œμ›¨μ–΄λ‘œ 지원을 λ°›μ•„μ•Ό ν•˜λŠ” μ œμ•½μ΄ μžˆμ§€λ§Œ, 폴링에 λΉ„ν•΄ μ‹ μ†ν•˜κ²Œ λŒ€μ‘κ°€λŠ₯.
λ”°λΌμ„œ μ‹€μ‹œκ°„ λŒ€μ‘μ΄ ν•„μš”ν•  λ•ŒλŠ” ν•„μˆ˜μ μΈ κΈ°λŠ₯
즉, μΈν„°λŸ½νŠΈλŠ” λ°œμƒμ‹œκΈ°λ₯Ό μ˜ˆμΈ‘ν•˜κΈ° νž˜λ“  경우 μ»¨νŠΈλ‘€λŸ¬κ°€ κ°€μž₯ λΉ λ₯΄κ²Œ λŒ€μ‘ν•  수 μžˆλŠ” 방법


4. μ‹œμŠ€ν…œ 콜(System Call)

"μ‹œμŠ€ν…œ μ½œμ€ 일반적으둜 ν•˜λ“œμ›¨μ–΄μ™€ μƒν˜Έμž‘μš©μ„ ν•˜κΈ°μœ„ν•΄ 운영체제의 κΈ°λŠ₯을 μ‹€ν•œλ‹€."

fork(), exec(), wait()와 같은 것듀은 Process 생성과 μ œμ–΄λ₯Ό μœ„ν•œ System Call

  • fork, execλŠ” μƒˆλ‘œλŠ” Process 생성과 관련이 μžˆλ‹€.
  • waitλŠ” Process(Parent)κ°€ λ§Œλ“  λ‹€λ₯Έ Process(child)κ°€ 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” λͺ…λ Ήμ–΄.

Fork

ν˜„μž¬ ν”„λ‘œμ„ΈμŠ€μ™€ 같은 ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό κ°€μ§„ μžμ‹ ν”„λ‘œμ„Έλ₯Ό μƒμ„±ν•œλ‹€.
λ™μΌν•œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€λ§Œ 자체적인 ν”„λ‘œμ„ΈμŠ€ ID와 λ©”λͺ¨λ¦¬ 곡간을 κ°€μ§„λ‹€.

🎨 μ½”λ“œ

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    printf("pid : %d", (int) getpid()); // pid : 29146
    
    int rc = fork();					// μ£Όλͺ©
    
    if (rc < 0) {
        exit(1);
    }									// (1) fork μ‹€νŒ¨
    else if (rc == 0) {					// (2) child 인 경우 (fork 값이 0)
        printf("child (pid : %d)", (int) getpid());
    }
    else {								// (3) parent case
        printf("parent of %d (pid : %d)", rc, (int)getpid());
    }
}
pid : 29146

parent of 29147 (pid : 29146)

child (pid : 29147)

[해석]
int rc = fork() μ—μ„œ rcμ—λŠ” λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ™€ μžμ‹ ν”„λ‘œμ„ΈμŠ€ μ½”λ“œμ—μ„œ λ‹€λ₯΄κ²Œ μ €μž₯됨.

  • μŠ€μΌ€μ€„λŸ¬κ°€ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€ λ¨Όμ € μˆ˜ν–‰ μ‹œ rcμ—λŠ” μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ PIDκ°€ μ €μž₯
  • μŠ€μΌ€μ€„λŸ¬κ°€ μžμ‹ ν”„λ‘œμ„ΈμŠ€ λ¨Όμ € μˆ˜ν–‰ μ‹œ rcμ—λŠ” 0이 μ €μž₯λœλ‹€.

λ”°λΌμ„œ ifλ¬Έμ—μ„œλŠ”

  • λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€ λ¨Όμ € μ‹€ν–‰ μ‹œ else{... λ¨Όμ € 싀행됨
  • μžμ‹ ν”„λ‘œμ„ΈμŠ€ λ¨Όμ € μ‹€ν–‰ μ‹œ else if(rc == 0){ .. λ¨Όμ € 싀행됨

wait

μž‘μ—… ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬λŠ” μž‘μ—…

🎨 μ½”λ“œ

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main(int argc, char *argv[]) {
    printf("pid : %d", (int) getpid()); // pid : 29146
    
    int rc = fork();					// μ£Όλͺ©
    
    if (rc < 0) {
        exit(1);
    }									// (1) fork μ‹€νŒ¨
    else if (rc == 0) {					// (2) child 인 경우 (fork 값이 0)
        printf("child (pid : %d)", (int) getpid());
    }
    else {								// (3) parent case
        int wc = wait(NULL)				// μΆ”κ°€λœ λΆ€λΆ„
        printf("parent of %d (wc : %d / pid : %d)", wc, rc, (int)getpid());
    }
}

[해석]
wait()을 톡해 μžμ‹ ν”„λ‘œμ„ΈμŠ€μ˜ 싀행이 λλ‚ λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦¬κ²Œ λœλ‹€.
λ”°λΌμ„œ λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹€ν–‰ λ˜λ”λΌλ„, wait()은 μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ λλ‚˜κΈ° μ „κΉŒμ§€ return ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, λ°˜λ“œμ‹œ "child..." κ°€ λ¨Όμ € 싀행됨.


exec

λ‹¨μˆœ forkλŠ” λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€μ˜ λ‚΄μš©μ„ μ—¬λŸ¬ 번 λ™μž‘ν•  λ–„ μ‚¬μš©ν•¨

............... 이건 λ‚˜μ€‘μ— ν•„κΈ°


5. PCB와 Context Switching

Process Management

CPUκ°€ ν”„λ‘œμ„ΈμŠ€κ°€ μ—¬λŸ¬κ°œμΌ λ•Œ, CPU μŠ€μΌ€μ€„λ§μ„ 톡해 κ΄€λ¦¬ν•˜λŠ” 것을 말함.

μ΄λ•Œ, CPUλŠ” 각 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λˆ„κ΅°μ§€ μ•Œμ•„μ•Ό 관리가 κ°€λŠ₯함.

ν”„λ‘œμ„ΈμŠ€λ“€μ˜ νŠΉμ§•μ„ κ°–κ³ μžˆλŠ” 것이 λ°”λ‘œ Process Metadata

Process Metadata

  • Process ID
  • Process State
  • Process Priority
  • CPU Registers
  • Owner
  • CPU Usage
  • Memory Usage

이 λ©”νƒ€λ°μ΄ν„°λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λ©΄ PCB에 μ €μž₯됨.

PCB(Process Control Block)

ν”„λ‘œμ„ΈμŠ€ 메타데이터듀을 μ €μž₯ν•΄ 놓은 κ³³, ν•œ PCB μ•ˆμ—λŠ” ν•œ ν”„λ‘œμ„ΈμŠ€μ˜ 정보가 λ‹΄κΉ€.

정리해보면?

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ -> ν”„λ‘œμ„ΈμŠ€ 생성 -> ν”„λ‘œμ„ΈμŠ€ μ£Όμ†Œ 곡간에(μ½”λ“œ, 데이터, μŠ€νƒ) 생성
-> 이 ν”„λ‘œμ„ΈμŠ€μ˜ 메타데이터듀이 PCB에 μ €μž₯

PCBκ°€ μ™œ ν•„μš”ν•œκ°€μš”?

CPUμ—μ„œλŠ” ν”„λ‘œμ„ΈμŠ€ μƒνƒœμ— 따라 κ΅μ²΄μž‘μ—…μ΄ 이루어진닀. (μΈν„°λŸ½νŠΈκ°€ λ°œμƒν•΄μ„œ 할당받은 ν”„λ‘œμ„ΈμŠ€κ°€ λŒ€κΈ°λ˜κ³  λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행될 λ•Œ)

μ΄λ•Œ, μ•žμœΌλ‘œ λ‹€μ‹œ μˆ˜ν–‰ν•  λŒ€κΈ°μ€‘μΈ ν”„λ‘œμ„ΈμŠ€μ— κ΄€ν•œ μ €μž₯(μƒνƒœ) 값을 PCB에 μ €μž₯함.

PCBλŠ” μ–΄λ–»κ²Œ κ΄€λ¦¬λ˜λ‚˜μš”?

Linked List λ°©μ‹μœΌλ‘œ κ΄€λ¦¬λœλ‹€.

PCB List head에 PCB듀이 생성될 λ•Œλ§ˆλ‹€ λΆ™κ²Œ λœλ‹€. μ£Όμ†Œ κ°’μœΌλ‘œ 연결이 μ΄λ£¨μ–΄μ ΈμžˆλŠ” μ—°κ²° 리슀트이기 λ•Œλ¬Έμ— μ‚½μž… μ‚­μ œκ°€ μš©μ΄ν•˜λ‹€.

즉, ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λ˜λ©΄ ν•΄λ‹Ή PCBκ°€ μƒμ„±λ˜κ³  ν”„λ‘œμ„ΈμŠ€ μ™„λ£Œμ‹œ μ œκ±°λœλ‹€.

μ΄λ ‡κ²Œ μˆ˜ν–‰μ€‘μΈ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ³€κ²½ν•  λ•Œ, CPU의 λ ˆμ§€μŠ€ν„° 정보가 λ³€κ²½λ˜λŠ” 것을 Context Switching 이라고 ν•œλ‹€.

Context Switching

CPUκ°€ 이전 ν”„λ‘œμ„ΈμŠ€ μƒνƒœλ₯Ό PCB에 μ €μž₯ν•˜κ³ , 또 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ 정보λ₯Ό PCB에 읽어 λ ˆμ§€μŠ€ν„°μ— μ μž¬ν•˜λŠ” κ³Όμ •

보톡 μΈν„°λŸ½νŠΈ λ°œμƒν•˜κ±°λ‚˜, μ‹€ν–‰ 쀑인 CPU μ‚¬μš© ν—ˆκ°€μ‹œκ°„μ„ λͺ¨λ‘ μ†Œλͺ¨ν•˜κ±°λ‚˜, μž…μΆœλ ₯을 λŒ€κΈ°ν•΄μ•Ό ν•˜λŠ” 경우 λ°œμƒν•œλ‹€.

Context Switching의 OverHeadλž€?

κ³ΌλΆ€ν™”λΌλŠ” 뜻으둜 보톡 μ•ˆμ’‹μ€ 말둜 많이 쓰인닀.

ν•˜μ§€λ§Œ ν”„λ‘œμ„ΉμŠ€ μž‘μ—… 쀑 OverHeadλ₯Ό κ°μˆ˜ν•΄μ•Ό ν•˜λŠ” 상황이 μžˆλ‹€.

ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•˜λ‹€κ°€ μž…μΆœλ ₯ μ΄λ²€νŠΈκ°€ λ°œμƒν•΄μ„œ λŒ€κΈ° μƒνƒœλ‘œ μ „ν™˜μ‹œν‚Ή
μ΄λ•Œ, CPUλ₯Ό κ·Έλƒ₯ λ†€κ²Œ λ†”λ‘λŠ” 것보닀 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰μ‹œν‚€λŠ” 것이 효율적

즉, CPU에 계속 ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰μ‹œν‚€λ„λ‘ ν•˜κΈ° μœ„ν•΄μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰μ‹œν‚€κ³  Context Switching ν•˜λŠ” 것.

"μΈν„°λŸ½νŠΈ λ°œμƒν•˜λ©΄ ν˜„μž¬ μž‘μ—… λŒ€κΈ°ν•˜κ³  ν•΄λ‹Ή μΈν„°λŸ½νŠΈ ν”„λ‘œμ„ΈμŠ€ μž‘μ—…μ„ ν•˜λŠ”κ²Œ λ‹Ήμ—°ν•œκ±° μ•„λ‹Œκ°€"


0개의 λŒ“κΈ€