Front End

운영체제

πŸ–₯️

운영체제(OS)

폰 λ…Έμ΄λ§Œμ΄ μ œμ‹œν•œ 컴퓨터 λͺ¨λΈμ— 따라 각각의 ν•˜λ“œμ›¨μ–΄λ₯Ό μ—°κ²°ν–ˆλ‹€ ν•΄μ„œ μš°λ¦¬κ°€ μ›ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€. ν•˜λ“œμ›¨μ–΄λŠ” 단지 κ·Έ ν•˜λ“œμ›¨μ–΄μ˜ νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•  뿐이기 λ•Œλ¬Έμ— 이런 ν•˜λ“œμ›¨μ–΄ 상에 ν”„λ‘œκ·Έλž¨λ“€μ΄ λ™μž‘λ˜λ €λ©΄ ν•˜λ“œμ›¨μ–΄λ“€κ³Ό μ μ ˆν•˜κ²Œ 데이터λ₯Ό μ£Όκ³ λ°›μœΌλ©° 논리적인 일듀을 ν•΄μ•Όν•œλ‹€. 이 ν•˜λ“œμ›¨μ–΄μ—κ²Œ 일을 μ‹œν‚€λŠ” 주체가 λ°”λ‘œ μš΄μ˜μ²΄μ œμ΄λ‹€.

운영체제의 λͺ©μ  및 κΈ°λŠ₯

운영체제의 λͺ©μ μ€ 처리λŠ₯λ ₯ ν–₯상, μ‚¬μš© κ°€λŠ₯도 ν–₯상, 신뒰도 ν–₯상, λ°˜ν™˜ μ‹œκ°„ 단좕 등에 있으며, 이런 운영체제의 κΈ°λŠ₯은 μ—¬λŸ¬κ°€μ§€κ°€ μžˆλ‹€.

  • ν”„λ‘œμ„Έμ„œ, κΈ°μ–΅μž₯치, μž…μΆœλ ₯μž₯치, 파일 및 정보 λ“±μ˜ μžμ› 관리
  • μžμ›μ˜ 효율적 관리λ₯Ό μœ„ν•΄ μ–΄λ–€ μžμ›μ„ λˆ„κ°€, μ–Έμ œ, μ–΄λ–€ λ°©μ‹μœΌλ‘œ μ‚¬μš©ν• μ§€ κ²°μ •ν•˜λŠ” μžμ›μ˜ μŠ€μΌ€μ€„λ§ κΈ°λŠ₯을 제곡
  • μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œ κ°„μ˜ νŽΈλ¦¬ν•œ μΈν„°νŽ˜μ΄μŠ€ 제곡
  • μ‹œμŠ€ν…œμ˜ 각쒅 ν•˜λ“œμ›¨μ–΄μ™€ λ„€νŠΈμ›Œν¬λ₯Ό 관리 및 μ œμ–΄

운영 체제의 μ‹œμŠ€ν…œ μžμ› 관리

운영체제의 ꡬ쑰 λͺ¨μ‹λ„

운영 μ²΄μ œλŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ ν•˜λ“œμ›¨μ–΄μ—κ²Œ 일을 μ‹œν‚¬ 수 μžˆλ„λ‘ 도와쀀닀. ν•˜λ“œμ›¨μ–΄λ₯Ό κ΅¬μ„±ν•˜λŠ” 일을 ν•˜λŠ” CPU, 자료λ₯Ό μ €μž₯ν•˜λŠ” RAM, λ””μŠ€ν¬ λ“±μ˜ μ‹œμŠ€ν…œ μžμ›μ„ κ΄€λ¦¬ν•˜λŠ” 주체가 μš΄μ˜μ²΄μ œμ΄λ‹€.

  • ν”„λ‘œμ„ΈμŠ€ 관리(CPU)
  • λ©”λͺ¨λ¦¬ 관리
  • I/O 관리 (λ””μŠ€ν¬, λ„€νŠΈμ›Œν¬ λ“±)

μ‘μš© ν”„λ‘œκ·Έλž¨ 관리

λͺ¨λ“  μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹œμŠ€ν…œμ˜ μžμ›μ„ λ§ˆμŒλŒ€λ‘œ μ‚¬μš©ν•œλ‹€λ©΄ 해컀에 μ˜ν•œ 곡격에 λ¬΄λ°©λΉ„ν•œ μƒνƒœκ°€ λœλ‹€. μ•…μ˜μ μΈ λͺ©μ μ„ 가진 ν”„λ‘œκ·Έλž¨μ΄ λ―Όκ°ν•œ 정보λ₯Ό μ·¨λ“ν•˜κ³  μž„μ˜λ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ€ κΆŒν•œμ— λŒ€ν•œ 관리가 ν•„μš”ν•˜λ‹€. λ˜ν•œ μ—¬λŸ¬ μ‚¬λžŒμ΄ ν•˜λ‚˜μ˜ κΈ°κΈ°λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 μ‚¬μš©μžλ₯Ό κ΄€λ¦¬ν•˜λŠ” 일도 맀우 μ€‘μš”ν•˜λ‹€.

μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κ³ , μ‹œμŠ€ν…œ μžμ›μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ κΆŒν•œκ³Ό μ‚¬μš©μžλ₯Ό κ΄€λ¦¬ν•œλ‹€.

μ‘μš© ν”„λ‘œκ·Έλž¨ : 운영체제λ₯Ό 톡해 μ»΄ν“¨ν„°μ—κ²Œ 일을 μ‹œν‚€λŠ” 것

μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 운영체제λ₯Ό 톡해 μ»΄ν“¨ν„°μ—κ²Œ 일을 μ‹œν‚€λ €λ©΄ 컴퓨터λ₯Ό μ‘°μž‘ν•  수 μžˆλŠ” κΆŒν•œμ„ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° λΆ€μ—¬λ°›μ•„μ•Ό ν•œλ‹€. 뢀여받은 ν›„μ—λŠ” μš΄μ˜μ²΄μ œκ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ΄μš©ν•  수 μžˆλ‹€. μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μš΄μ˜μ²΄μ œμ™€ μ†Œν†΅ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš΄μ˜μ²΄μ œκ°€ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€(API)λ₯Ό μ œκ³΅ν•΄μ•Ό ν•œλ‹€. μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹œμŠ€ν…œ μžμ›μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ 운영체제 μ°¨μ›μ—μ„œ λ‹€μ–‘ν•œ ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜λŠ” 것을 μ‹œμŠ€ν…œ 콜(System Call)이라 λΆ€λ₯Έλ‹€.

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

ν”„λ‘œμ„ΈμŠ€λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 쀑인 μƒνƒœλ‘œ νŠΉμ • λ©”λͺ¨λ¦¬ 곡간에 ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œκ°€ 적재되고 CPUκ°€ ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό ν•˜λ‚˜μ”© μˆ˜ν–‰ν•˜κ³  μžˆλŠ” μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.

μš΄μ˜μ²΄μ œμ—μ„œλŠ” μ‚¬μš©μžκ°€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λ©΄, μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° 싀행에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›μ•„ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€. 이 λ•Œ μ‹€ν–‰λ˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν”„λ‘œμ„ΈμŠ€λΌ λΆ€λ₯Έλ‹€. ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“€κΈ°λ„ ν•œλ‹€. (ex. Chrome λΈŒλΌμš°μ €λ₯Ό 두 개 μ‹€ν–‰ν•˜λ©΄ 두 개의 ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±λœλ‹€)

ν”„λ‘œμ„ΈμŠ€ ꡬ성 μš”μ†Œ

ν”„λ‘œμ„ΈμŠ€λŠ” ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ λ…λ¦½μ μœΌλ‘œ 관리해야 ν•˜λŠ” μœ μ € λ©”λͺ¨λ¦¬ μ˜μ—­μ΄λ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ‚¬μš©ν•˜λŠ” 각쒅 κ°μ²΄λ“€μ˜ 포인터λ₯Ό κ΄€λ¦¬ν•˜λŠ” ν•Έλ“€ ν…Œμ΄λΈ”μ„ 가지고 μžˆλ‹€.

  • μœ μ € λ©”λͺ¨λ¦¬ μ˜μ—­ 관리(Virtual Address Descriptors)

    ν”„λ‘œμ„ΈμŠ€ λ³„λ‘œ λ…λ¦½λœ μ˜μ—­μ„ κ°€μ§€λŠ” 곳은 μœ μ € λ©”λͺ¨λ¦¬ 곡간이닀. 컀널 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 경우 λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•˜κ³  있으며, ν”„λ‘œμ„ΈμŠ€ λ³„λ‘œ 독립적인 μœ μ € λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ VAD(Virtual Address Descriptors)λΌλŠ” 관리 ν…Œμ΄λΈ”μ΄ μ‘΄μž¬ν•œλ‹€.

  • ν•Έλ“€ ν…Œμ΄λΈ”(Handle Table)

    ν•Έλ“€ ν…Œμ΄λΈ”μ€ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  핸듀에 λŒ€ν•œ 컀널 객체 포인터 정보λ₯Ό λ°°μ—΄ ν˜•νƒœλ‘œ 가지고 μžˆλŠ” 곡간이닀. ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ  λ•Œ 이 ν…Œμ΄λΈ”μ˜ 정보λ₯Ό μ°Έκ³ ν•΄ 이 ν”„λ‘œμ„Έμ„œμ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  컀널 객체λ₯Ό μžλ™μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

  • 독립적인 λ©”λͺ¨λ¦¬ 곡간

    ν”„λ‘œμ„ΈμŠ€ λ‹¨μœ„λ‘œ κ΄€λ¦¬λ˜λŠ” μžμ› 쀑 κ°€μž₯ μ€‘μš”ν•œ ꡬ별점은 가상 λ©”λͺ¨λ¦¬μ΄λ‹€. μœˆλ„μš°μ˜ 경우 νŽ˜μ΄μ§• 기법을 μ΄μš©ν•΄ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ λ³„λ„μ˜ κ³ μœ ν•œ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€ νŠΉμ§•

  • μžμ› μ†Œμœ μ˜ λ‹¨μœ„

    각각의 ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹ μ˜ μ‹€ν–‰ 이미지 λ‘œλ“œμ™€ 싀행에 ν•„μš”ν•œ 좔가적인 λ©”λͺ¨λ¦¬ 곡간을 가지고 μžˆμ–΄μ•Ό ν•œλ‹€. μ΄λŠ” 각 ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ κ΅¬λ³„λ˜μ–΄μ•Ό ν•˜λ©° ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€κ°€ μ ‘κ·Όν•˜κ³ μž ν•˜λŠ” 파일, I/O μž₯μΉ˜λ“€μ— λŒ€ν•΄μ„œλ„ ν”„λ‘œμ„Έμ„œ λ‹¨μœ„λ‘œ ν• λ‹Ήλ°›μ•„ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€.

  • λ””μŠ€νŒ¨μΉ­μ˜ λ‹¨μœ„

    ν”„λ‘œμ„ΈμŠ€λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ΄ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° CPU의 μžμ›μ„ 일정 κΈ°κ°„ λ™μ•ˆ ν• λ‹Ή λ°›μ•„ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 것이며 μš΄μ˜μ²΄μ œλŠ” μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€κ°€ λ³‘λ ¬μ μœΌλ‘œ μ‹€ν–‰λ˜κ²Œ ν•˜κΈ° μœ„ν•΄ CPU의 μ‚¬μš© μ‹œκ°„μ„ 각각의 ν”„λ‘œμ„ΈμŠ€μ— 골고루 λ‚˜λˆ„μ–΄ μ£Όμ–΄μ•Ό ν•œλ‹€. ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€μ— μ—¬λŸ¬ 개의 λ””μŠ€νŒ¨μΉ­ λ‹¨μœ„κ°€ 싀행될 수 μžˆλ„λ‘ ν•˜κ³  있으며, 이런 λ””μŠ€νŒ¨μΉ­ λ‹¨μœ„λ₯Ό μŠ€λ ˆλ“œλΌ λΆ€λ₯Έλ‹€.

ν”„λ‘œμ„ΈμŠ€ μƒνƒœ

  • μ‹€ν–‰(Run) : ν”„λ‘œμ„ΈμŠ€κ°€ ν”„λ‘œμ„Έμ„œλ₯Ό μ°¨μ§€ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό λ°›κ³  μžˆλŠ” μƒνƒœ
  • μ€€λΉ„(Ready) : 싀행될 수 μžˆλ„λ‘ μ€€λΉ„λ˜λŠ” μƒνƒœ
  • λŒ€κΈ°(Waiting) : CPU 의 μ‚¬μš©μ΄ μ•„λ‹ˆλΌ μž…μΆœλ ₯의 사건을 κΈ°λ‹€λ¦¬λŠ” μƒνƒœ
⚠️
ν”„λ‘œμ„Έμ„œ vs. ν”„λ‘œμ„ΈμŠ€
  • ν”„λ‘œμ„Έμ„œ(Processor)

    ν”„λ‘œμ„Έμ„œλŠ” ν•˜λ“œμ›¨μ–΄μ μΈ μΈ‘λ©΄κ³Ό μ†Œν”„νŠΈμ›¨μ–΄μ μΈ 츑면으둜 λ‚˜λˆ„μ–΄ λ³Ό 수 μžˆλ‹€.

    • ν•˜λ“œμ›¨μ–΄μ  μΈ‘λ©΄

      컴퓨터 λ‚΄μ—μ„œ ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•˜λŠ” ν•˜λ“œμ›¨μ–΄ μœ λ‹›μœΌλ‘œ, CPUλ₯Ό μ˜λ―Έν•˜λ©° 적어도 ν•˜λ‚˜ μ΄μƒμ˜ ALU와 λ ˆμ§€μŠ€ν„°λ₯Ό λ‚΄μž₯ν•˜κ³  μžˆλ‹€.

    • μ†Œν”„νŠΈμ›¨μ–΄μ  μΈ‘λ©΄

      데이터 포맷을 λ³€ν™˜ν•˜λŠ” 역할을 μˆ˜ν–‰ν•˜λŠ” 데이터 처리 μ‹œμŠ€ν…œμ„ μ˜λ―Έν•œλ‹€. μ›Œλ“œν”„λ‘œμ„Έμ„œλ‚˜ μ»΄νΌμΌλŸ¬κ°€ 이에 μ†ν•œλ‹€.

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

    ν”„λ‘œμ„ΈμŠ€λŠ” νŠΉμ • λͺ©μ μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ λ‚˜μ—΄λœ μž‘μ—…μ˜ λͺ©λ‘μ„ μ˜λ―Έν•œλ‹€. λ©”λͺ¨λ¦¬μ— 적재 λ˜μ–΄ ν”„λ‘œμ„Έμ„œμ— μ˜ν•΄ 싀행쀑인 ν”„λ‘œκ·Έλž¨μ„ ν”„λ‘œμ„ΈμŠ€λΌ λ³Ό 수 μžˆλ‹€.

μŠ€λ ˆλ“œ

ν”„λ‘œμ„ΈμŠ€ 내에 μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•˜λ―€λ‘œ μ„œλ‘œ μžμ›κ³Ό μƒνƒœλ₯Ό κ³΅μœ ν•  수 μžˆλ‹€.

μŠ€λ ˆλ“œλŠ” λͺ…λ Ήμ–΄κ°€ CPUλ₯Ό 톡해 μˆ˜ν–‰λ˜λŠ” 객체의 λ‹¨μœ„μ΄λ‹€. ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—λŠ” λ°˜λ“œμ‹œ 1개 μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•˜λ©°, μ΄λŠ” 같은 ν”„λ‘œμ„ΈμŠ€μ— μžˆλŠ” μžμ›κ³Ό μƒνƒœλ₯Ό κ³΅μœ ν•œλ‹€. 같은 ν”„λ‘œμ„ΈμŠ€ 내에 μžˆλŠ” μŠ€λ ˆλ“œλŠ” 같은 μ£Όμ†Œ 곡간에 μ‘΄μž¬ν•˜κ²Œ 되며 λ™μΌν•œ 데이터에 μ ‘κ·Όν•  수 μžˆλ‹€. λ˜ν•œ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ μˆ˜μ •ν•œ λ©”λͺ¨λ¦¬λŠ” 같은 λ©”λͺ¨λ¦¬λ₯Ό μ°Έμ‘°ν•˜λŠ” μŠ€λ ˆλ“œμ— 영ν–₯을 미치게 λœλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλ˜λ©΄ κ·Έ ν”„λ‘œμ„ΈμŠ€μ— μ†ν•΄μžˆλ˜ μŠ€λ ˆλ“œλ„ ν•¨κ»˜ μ’…λ£Œλœλ‹€.

μŠ€λ ˆλ“œμ˜ ν•„μš”μ„±

ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ—¬λŸ¬ 개의 루틴을 λ™μ‹œμ— μˆ˜ν–‰ν•΄μ„œ μˆ˜ν–‰ λŠ₯λ ₯을 ν–₯μƒν•˜λ €κ³  ν•  λ•Œ μŠ€λ ˆλ“œλ₯Ό μ‚¬μš©ν•˜κ²Œ λ˜λŠ”λ°, μ—¬λŸ¬ 개의 μž‘μ—… λ‹¨μœ„λ‘œ κ΅¬μ„±λœ ν”„λ‘œκ·Έλž¨μ—μ„œ μš”μ²­μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.

예λ₯Ό λ“€μ–΄, μ›Œλ“œ ν”„λ‘œμ„Έμ„œμ—μ„œ μ‚¬μš©μžλ‘œλΆ€ν„° ν‚€λ³΄λ“œ μž…λ ₯ λ°›κ±°λ‚˜, κ·Έλž˜ν”½μ΄λ‚˜ UIλ₯Ό 그리고 문법 였λ₯˜λ₯Ό μ²΄ν¬ν•˜λŠ” λ“± μ›Œλ“œ ν”„λ‘œμ„Έμ„œ λ‚΄μ—μ„œ μ—¬λŸ¬ μš”μ²­λ“€μ„ λ™μ‹œμ— μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”λ°, μ΄λ•Œ μŠ€λ ˆλ“œκ°€ ν•„μš”ν•˜λ‹€.

μŠ€λ ˆλ“œμ˜ ꡬ성 μš”μ†Œ

  • 가상 CPU : 인터프리터, μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ‚΄λΆ€μ μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” 가상 μ½”λ“œ
  • μˆ˜ν–‰ μ½”λ“œ : Thread Class에 κ΅¬ν˜„λ˜μ–΄ μžˆλŠ” run() Method μ½”λ“œ
  • 처리 데이터 : Threadμ—μ„œ μ²˜λ¦¬ν•˜λŠ” 데이터

μŠ€λ ˆλ“œμ˜ νŠΉμ§•

  • ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„μ΄λ‹€. ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλŠ” μ‹œμž‘ν•΄μ„œ μ’…λ£Œν•  λ•Œ κΉŒμ§€ ν•œλ²ˆμ— ν•˜λ‚˜μ”© λͺ…령듀을 μˆ˜ν–‰ν•œλ‹€.
  • 각 μŠ€λ ˆλ“œλ§ˆλ‹€ call stack이 μ‘΄μž¬ν•˜λ©°, λ‚˜λ¨Έμ§€ Code, Data, Heapμ˜μ—­μ€ μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ ν•œλ‹€. 반면 ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬μ— 직접 μ ‘κ·Όν•  수 μ—†λ‹€.
  • μŠ€λ ˆλ“œλŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— 두 개 μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ λ™μž‘λ˜λŠ” 경우 λ‘κ°œ μ΄μƒμ˜ μŠ€λ ˆλ“œμ˜ μ‹€ν–‰ 및 μ’…λ£Œ μˆœμ„œλŠ” μ˜ˆμΈ‘ν•  수 μ—†λ‹€.

μ‹±κΈ€ μŠ€λ ˆλ“œμ™€ λ©€ν‹° μŠ€λ ˆλ“œ

μ‹±κΈ€ μŠ€λ ˆλ“œ(Single-Thread)

ν”„λ‘œμ„ΈμŠ€κ°€ 단일 μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” λ°©μ‹μœΌλ‘œ 일련의 처리λ₯Ό 단일 μŠ€λ ˆλ“œλ§ŒμœΌλ‘œ 직렬 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 방법이닀. ν•˜λ‚˜μ˜ λ ˆμ§€μŠ€ν„° ν˜Ήμ€ μŠ€νƒμœΌλ‘œ ν‘œν˜„ν•˜λ©°, JavaScriptκ°€ κ°€μž₯ λŒ€ν‘œμ μΈ μ‹±κΈ€ μŠ€λ ˆλ“œ 언어이닀.

  • μž₯점
    • μžμ› 접근에 λŒ€ν•œ 동기화λ₯Ό 신경쓰지 μ•Šμ•„λ„ λœλ‹€. λ©€ν‹° μŠ€λ ˆλ“œμ˜ 경우 λͺ¨λ“  μŠ€λ ˆλ“œκ°€ 일정 μžμ›μ— λ™μ‹œμ— μ ‘κ·Όν•˜κ±°λ‚˜ λ˜‘κ°™μ€ μž‘μ—…μ„ μ‹€ν–‰ν•˜λ €λŠ” 경우 μ—λŸ¬κ°€ λ°œμƒν•˜κ±°λ‚˜ μ›ν•˜λŠ” 값이 λ‚˜μ˜€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ™μ‹œμ— μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 λ”°λ‘œ μ œμ–΄λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.
    • μžμ› 접근에 λŒ€ν•œ 동기화λ₯Ό 신경쓰지 μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— λ¬Έλ§₯ κ΅ν™˜(context switch) μž‘μ—…μ„ μš”κ΅¬ν•˜μ§€ μ•ŠλŠ”λ‹€. λ¬Έλ§₯ κ΅ν™˜μ€ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„Έμ„œλ₯Ό κ³΅μœ ν•  λ•Œ λ°œμƒν•˜λŠ” μž‘μ—…μœΌλ‘œ λ§Žμ€ λΉ„μš©μ„ ν•„μš”λ‘œ ν•œλ‹€.
    • ν”„λ‘œκ·Έλž˜λ° λ‚œμ΄λ„κ°€ 쉽고, CPU λ©”λͺ¨λ¦¬λ₯Ό 적게 μ‚¬μš©ν•œλ‹€.
  • 단점
    • μ—¬λŸ¬ 개의 CPUλ₯Ό ν™œμš©ν•˜μ§€ λͺ»ν•œλ‹€. μ‹±κΈ€ μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ 물리적 코어밖에 μ‚¬μš©ν•˜μ§€ λͺ»ν•΄ λ©€ν‹° μ½”μ–΄ λ¨Έμ‹ μ—μ„œ CPU μ‚¬μš©μ„ μ΅œμ ν™” ν•  수 μ—†λ‹€. μ΅œμ ν™”λ₯Ό μœ„ν•΄μ„  Cluster λͺ¨λ“ˆμ„ μ΄μš©ν•΄ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, ν”„λ‘œμ„ΈμŠ€λΌλ¦¬μ˜ μžμ› κ³΅μœ λŠ” μ–΄λ ΅κΈ° λ•Œλ¬Έμ— Redis와 같은 λΆ€κ°€ 인프라가 ν•„μš”ν•˜λ‹€.
    • μ—°μ‚°λŸ‰μ΄ λ§Žμ€ μž‘μ—…μ„ ν•˜λŠ” 경우 κ·Έ μž‘μ—…μ΄ μ™„λ£Œλ˜μ–΄μ•Ό λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.
    • μ—λŸ¬ 처리λ₯Ό λͺ»ν•˜λŠ” 경우 λ©ˆμΆ°λ²„λ¦¬κ²Œ λœλ‹€. λ©€ν‹° μŠ€λ ˆλ“œλŠ” μ—λŸ¬ λ°œμƒ μ‹œ μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ—¬ 극볡할 수 μžˆλ‹€.

λ©€ν‹° μŠ€λ ˆλ“œ(Multi-Thread)

λ©€ν‹° μŠ€λ ˆλ“œ(multi thread)λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ‘˜ μ΄μƒμ˜ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•˜λ©°, λ©€ν‹° ν”„λ‘œμ„ΈμŠ€(multi process)λŠ” μ—¬λŸ¬ 개의 CPUλ₯Ό μ‚¬μš©ν•΄ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ™μ‹œμ— μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. μ‹œμŠ€ν…œ μžμ›μ˜ ν™œμš© κ·ΉλŒ€ν™” 및 μ²˜λ¦¬λŸ‰ μ¦λŒ€κ°€ κ°€λŠ₯ν•΄ 단일 ν”„λ‘œμ„ΈμŠ€ μ‹œμŠ€ν…œμ˜ νš¨μœ¨μ„±μ„ 높일 수 μžˆλ‹€.

  • μž₯점
    • μ‹±κΈ€ μŠ€λ ˆλ“œμ™€ 달리 μž‘μ—…μ„ λΆ„λ¦¬ν•΄μ„œ μˆ˜ν–‰ν•˜λ―€λ‘œ μ‹€μ‹œκ°„μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ 응닡할 수 μžˆλ‹€.
    • ν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬ ν”„λ‘œμ„Έμ„œμ—μ„œ μˆ˜ν–‰ν•  수 μžˆμœΌλ―€λ‘œ 훨씬 νš¨μœ¨μ μ΄λ‹€.
  • 단점
    • 주의 κΉŠμ€ 섀계가 ν•„μš”ν•˜λ©° 디버깅이 κΉŒλ‹€λ‘­λ‹€.
    • 단일 ν”„λ‘œμ„ΈμŠ€ μ‹œμŠ€ν…œμ˜ 경우 효과λ₯Ό κΈ°λŒ€ν•˜κΈ° μ–΄λ €μš°λ©° λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μŠ€λ ˆλ“œλ₯Ό μ œμ–΄ν•  수 μ—†λ‹€. 즉, ν”„λ‘œμ„ΈμŠ€ λ°–μ—μ„œ μŠ€λ ˆλ“œ 각각을 μ œμ–΄ν•  수 μ—†λ‹€.
    • λ©€ν‹° μŠ€λ ˆλ“œμ˜ 경우 μžμ› 곡유의 λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ— λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ 전체 ν”„λ‘œμ„ΈμŠ€κ°€ 영ν–₯을 λ°›κ²Œ λœλ‹€.
    • λ¬Έλ§₯ κ΅ν™˜ μž‘μ—…μ„ μš”κ΅¬ν•œλ‹€. λ‹€λ₯Έ νƒœμŠ€ν¬(ν”„λ‘œμ„ΈμŠ€, μŠ€λ ˆλ“œ)κ°€ μ‹œμž‘ν•  수 μžˆλ„λ‘ 이미 μ‹€ν–‰ 쀑인 νƒœμŠ€ν¬(ν”„λ‘œμ„ΈμŠ€, μŠ€λ ˆλ“œ)λ₯Ό λ©ˆμΆ”λŠ” 것을 μ˜λ―Έν•œλ‹€.

λ™μ‹œμ„±κ³Ό λ³‘λ ¬μ„±μ˜ 차이

λ™μ‹œμ— 돌릴 수 μžˆλŠ” μŠ€λ ˆλ“œ μˆ˜λŠ” 컴퓨터에 μžˆλŠ” μ½”μ–΄ 개수둜 μ œν•œλœλ‹€. 운영체제(λ˜λŠ” 가상 λ¨Έμ‹ )λŠ” 각 μŠ€λ ˆλ“œλ₯Ό μ‹œκ°„μ— 따라 λΆ„ν• ν•˜μ—¬ μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 일정 μ‹œκ°„λ§ˆλ‹€ λŒμ•„κ°€λ©΄μ„œ μ‹€ν–‰λ˜λ„λ‘ ν•œλ‹€. 이런 방식을 μ‹œλΆ„ν• μ΄λΌ ν•œλ‹€.

  • Concurrency(λ™μ‹œμ„±, 병행성): μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ μ‹œλΆ„ν•  λ°©μ‹μœΌλ‘œ λ™μ‹œμ— μˆ˜ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 착각을 λΆˆλŸ¬μΌμœΌν‚΄
  • Parallelism(병렬성): λ©€ν‹° μ½”μ–΄ ν™˜κ²½μ—μ„œ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ μ‹€μ œλ‘œ λ™μ‹œμ— μˆ˜ν–‰λ¨

Uploaded by N2T