[🍎CS] ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ #2

h-a-n-aΒ·2023λ…„ 1μ›” 25일
1

🍎CS

λͺ©λ‘ 보기
5/15

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ λ©”λͺ¨λ¦¬

ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›κ΅¬μ‘°

ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° μœ„ν•΄μ„œλŠ” 운영체제(OS)κ°€ ν”„λ‘œκ·Έλž¨μ˜ 정보λ₯Ό λ©”λͺ¨λ¦¬μ— λ‘œλ“œ(load)ν•΄μ•Ό ν•˜κ³ , ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ CPUκ°€ μ½”λ“œλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”λͺ¨λ¦¬κ°€ λͺ…령어와 데이터듀을 μ €μž₯ν•΄μ•Ό ν•œλ‹€.

즉, ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜μ–΄ ν”„λ‘œμ„ΈμŠ€κ°€ λ§Œλ“€μ–΄μ§€λ©΄ νŒŒμΌμ€ 컴퓨터 λ©”λͺ¨λ¦¬μ— λ‹€μŒ 4κ°€μ§€μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μ˜¬λΌκ°€κ²Œ 되고 μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° CPUλ₯Ό ν• λ‹Ήλ°›κ²Œ λœλ‹€. (μ—¬λŸ¬κ°œμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행될 경우 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήλ°›λŠ”λ‹€)

CODE

  • μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œκ°€ μ €μž₯λ˜λŠ” μ˜μ—­μœΌλ‘œ, TEXTμ˜μ—­μ΄λΌκ³ λ„ 함.
  • ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘ν•˜κ³  λλ‚ λ•ŒκΉŒμ§€ λ©”λͺ¨λ¦¬μ— 계속 λ‚¨μ•„μžˆλ‹€.
  • 컴파일된 기계어가 λ“€μ–΄κ°„λ‹€.
  • CPUλŠ” μ½”λ“œ μ˜μ—­μ— μ €μž₯된 λͺ…λ Ήμ–΄λ₯Ό ν•˜λ‚˜μ”© κ°€μ Έκ°€μ„œ μ²˜λ¦¬ν•œλ‹€.

DATA

  • ν”„λ‘œκ·Έλž¨μ˜ μ „μ—­λ³€μˆ˜(global), μ •μ λ³€μˆ˜(static), λ°°μ—΄(array), λ¬Έμžμ—΄ μƒμˆ˜ 등이 μ €μž₯λœλ‹€.
  • ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘κ³Ό ν•¨κ»˜ ν• λ‹Ήλ˜λ©°, ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜λ©΄ μ†Œλ©Έν•œλ‹€.

HEAP

  • μ‚¬μš©μžκ°€ 직접 관리할 수 있고, κ΄€λ¦¬ν•΄μ•Όλ§Œ ν•˜λŠ” μ˜μ—­μ΄λ‹€
  • μ‚¬μš©μžμ— μ˜ν•΄ λ©”λͺ¨λ¦¬ 곡간이 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜κ³  ν•΄μ œλœλ‹€.
  • λŸ°νƒ€μž„ μ‹œμ— 크기가 κ²°μ •λœλ‹€.

STACK

  • ν”„λ‘œκ·Έλž¨μ΄ μžλ™μœΌλ‘œ μ‚¬μš©ν•˜λŠ” μž„μ‹œ λ©”λͺ¨λ¦¬ μ˜μ—­μ΄λ‹€.
  • ν•¨μˆ˜μ˜ 호좜과 κ΄€κ³„λ˜λŠ” μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 리턴값 λ“± μž μ‹œ μ‚¬μš©λ˜μ—ˆλ‹€κ°€ μ‚¬λΌμ§€λŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ˜μ—­μ΄λ‹€.
  • ν•¨μˆ˜ 호좜 μ‹œ μƒμ„±λ˜κ³ , ν•¨μˆ˜μ˜ 호좜이 μ™„λ£Œλ˜λ©΄ μ†Œλ©Έν•œλ‹€.
  • μŠ€νƒ μ˜μ—­μ˜ ν¬κΈ°λŠ” 컴파일 μ‹œμ— κ²°μ •λœλ‹€.
  • 푸쉬(push)둜 데이터λ₯Ό μ €μž₯ν•˜κ³ , 팝(pop)으둜 데이터λ₯Ό μΈμΆœν•œλ‹€.

μŠ€λ ˆλ“œμ˜ μžμ›κ³΅μœ 

μ•žμ„œ μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό κ΅¬μ„±ν•˜λ©°, ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ” μ‹€ν–‰ νλ¦„μ˜ λ‹¨μœ„λΌκ³  ν–ˆλ‹€. μŠ€λ ˆλ“œκ°€ μ—¬λŸ¬ 개 있으면 μš°λ¦¬λŠ” νŒŒμΌμ„ λ‹€μš΄λ°›μœΌλ©° λ™μ‹œμ— μ›Ή μ„œν•‘μ„ ν•  수 있게 ν•΄μ€€λ‹€. μŠ€λ ˆλ“œλΌλ¦¬ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ κ³΅μœ ν•˜λ©΄μ„œ ν”„λ‘œμ„ΈμŠ€ νλ¦„μ˜ 일뢀가 λ˜μ—ˆκΈ° λ•Œλ¬Έμ— λ™μ‹œμž‘μ—…μ΄ κ°€λŠ₯ν•œ 것이닀.
μœ„ 그림처럼 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ 내에 μ—¬λŸ¬κ°œμ˜ μŠ€λ ˆλ“œκ°€ 있고, μœ„μ—μ„œ 봀던 ν”„λ‘œμ„ΈμŠ€μ˜ 4가지 λ©”λͺ¨λ¦¬ μ˜μ—­ 쀑 μŠ€λ ˆλ“œλŠ” Stack만 ν• λ‹Ήλ°›μ•„ λ³΅μ‚¬ν•˜κ³  Code, Data, Heap은 ν”„λ‘œμ„ΈμŠ€λ‚΄μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“€κ³Ό κ³΅μœ ν•œλ‹€. λ”°λΌμ„œ 각각의 μŠ€λ ˆλ“œλŠ” λ³„λ„μ˜ Stack을 가지고 μžˆμ§€λ§Œ Heap λ©”λͺ¨λ¦¬λŠ” κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ‘œ λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ 가져와 읽고 μ“Έ 수 μžˆλ‹€.

ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›κ³΅μœ 

λ°˜λ©΄μ— ν”„λ‘œμ„ΈμŠ€λŠ” 기본적으둜 λ©”λͺ¨λ¦¬μ— λ³„λ„μ˜ μ£Όμ†Œ κ³΅κ°„μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—, ν•œ ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ μžλ£Œκ΅¬μ‘°μ— μ ‘κ·Όν• μˆ˜λŠ” μ—†λ‹€.

κ·Έλ ‡μ§€λ§Œ ν˜„μž¬ μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ 컴퓨터 ν”„λ‘œκ·Έλž¨μ„ 보면 λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ— μžˆλŠ” 정보λ₯Ό κ°€μ Έμ˜€λŠ” 경우λ₯Ό λ³Ό 수 μžˆλŠ”λ°, 사싀 νŠΉλ³„ν•œ 방법을 톡해 ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ 정보에 μ ‘κ·Όν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.(IPC, LPC,...더 κ³΅λΆ€ν•œ ν›„ μΆ”κ°€μž‘μ„±...)

ν•˜μ§€λ§Œ, ν”„λ‘œμ„ΈμŠ€μ˜ μžμ› κ³΅μœ λŠ” λ‹¨μˆœνžˆ CPU λ ˆμ§€μŠ€ν„° ꡐ체뿐만이 μ•„λ‹ˆλΌ RAMκ³Ό CPU μ‚¬μ΄μ˜ μΊμ‹œ λ©”λͺ¨λ¦¬κΉŒμ§€ μ΄ˆκΈ°ν™”λ˜κΈ° λ•Œλ¬Έμ— μžμ›λΆ€λ‹΄μ΄ ν¬λ‹€λŠ” 단점이 μžˆλ‹€. κ·Έλž˜μ„œ 닀쀑 μž‘μ—…μ΄ ν•„μš”ν•œ 경우 μŠ€λ ˆλ“œλ₯Ό μ΄μš©ν•˜λŠ” 것이 훨씬 효율적이라, ν˜„λŒ€ μ»΄ν“¨ν„°μ˜ μš΄μ˜μ²΄μ œμ—μ„  닀쀑 ν”„λ‘œμ„Έμ‹±μ„ μ§€μ›ν•˜κ³  μžˆμ§€λ§Œ 닀쀑 μŠ€λ ˆλ”©μ„ 기본으둜 ν•˜κ³  μžˆλ‹€.

μœ„μ—μ„œ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œ, ν”„λ‘œμ„ΈμŠ€λ₯Ό μ΄μš©ν•˜λŠ” 법에 λŒ€ν•΄ μ•Œμ•„λ΄€λŠ”λ°, 이λ₯Ό 더 잘 μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„  병렬성, λ™μ‹œμ„±μ΄λΌλŠ” CPU의 μž‘μ—… 처리 방식을 μ’€ 더 μ‚΄νŽ΄λ³Ό ν•„μš”κ°€ μžˆλ‹€. ν•¨κ»˜ μ•Œμ•„λ³΄μž!

병렬성(parellelism)

병렬성은 λ™μΌν•œ μ‹œκ°μ— 독립적인 μž‘μ—…μ„ μ‹€ν–‰ν•  수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€. μ—¬λŸ¬ μž‘μ—…μ„ λ‹€λ₯Έ μ½”μ–΄, λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€, λ³„λ„μ˜ 컴퓨터 λ“±μ—μ„œ λ™μ‹œμ— μ‹€ν–‰ν•  수 μžˆλ‹€.

λ™μ‹œμ„±

λ™μ‹œμ„±μ€ μ—¬λŸ¬ μž‘μ—…μ΄ κ²ΉμΉ˜λŠ” 기간에 싀행될 수 μžˆμŒμ„ μ˜λ―Έν•œλ‹€. 이 λ™μ‹œλΌλŠ” μ˜λ―Έμ—μ„œ 병렬성과 μ˜λ―Έκ°€ ν—·κ°ˆλ¦΄ 수 μžˆλŠ”λ°, μœ„μ˜ parellelism이 물리적으둜 μ •λ§λ‘œ λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” 것이라면, concurrencyλŠ” λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹ˆλΌ CPUκ°€ μž‘μ—…λ§ˆλ‹€ μ‹œκ°„μ„ λΆ„ν• ν•΄ μ μ ˆν•˜κ²Œ context switching을 ν•΄μ„œ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•œλ‹€. (이렇기 λ•Œλ¬Έμ— λ™μ‹œμ„±μ€ κ΅¬ν˜„ν•˜λŠ” 것도, λ””λ²„κ·Έν•˜λŠ” 것도 μ–΄λ ΅λ‹€.) μž‘μ—…λ“€μ„ μ•„μ£Ό 잘게 λ‚˜λˆ„μ–΄ μ•„μ£Ό μ‘°κΈˆμ”©λ§Œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  λ‹€μŒ μž‘μ—…μœΌλ‘œ λ„˜μ–΄κ°€λŠ” μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” λ°©μ‹μœΌλ‘œ ν•˜λŠ” μ΄μœ λŠ”, μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이게 λ§Œλ“€μ–΄ μ‚¬μš©μžμ—κ²Œ 더 λΉ λ₯Έ λ°˜μ‘μ„±μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.

λ™μ‹œμ„±μ΄ ν•„μš”ν•œ 이유

그런데 λ™μ‹œμ„±μ΄ ν•„μš”ν•œ μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ? μ–΄μ°¨ν”Ό λ™μ‹œμ— λŒμ•„κ°€λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•˜λŠ” κ²ƒμΌλΏπŸ‘€, μ‹€μ œλ‘œ λ™μ‹œμ— λŒμ•„κ°€λŠ” 것도 μ•„λ‹Œλ°, κ·Έλƒ₯ λ‹€ λ³‘λ ¬μ²˜λ¦¬ν•˜λ©΄ μ•ˆλ˜λŠ”κ±ΈκΉŒ?

첫째둠, ν•˜λ“œμ›¨μ–΄μ  ν•œκ³„ λ•Œλ¬Έμ΄λΌκ³  ν•  수 μžˆλ‹€. 아무리 μ½”μ–΄λ₯Ό 많이 넣어도 μˆ˜μ‹­, 수백개의 μ½”μ–΄λ₯Ό 넣을 순 μ—†μœΌλ‹ˆ κ²°κ΅­ ν•˜λ“œμ›¨μ–΄μ  μ œν•œμ΄ 걸리게 되고 μˆ˜μ‹­μˆ˜λ°±κ°œμ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό 돌리기 μœ„ν•΄μ„  κ²°κ΅­ λ™μ‹œμ„±μ΄ ν•„μš”ν•œ 것이닀.

λ‘˜μ§Έ, 효율적인 λ©΄μ—μ„œμ΄λ‹€. 예λ₯Ό λ“€μ–΄ 4μ½”μ–΄ 8μŠ€λ ˆλ“œμ˜ CPU ν™˜κ²½μ—μ„œ 총 16개의 μž‘μ—…μ΄ μžˆλ‹€κ³  가정을 ν•΄λ³΄μž. 그리고 κ·Έ 쀑 8κ°œλŠ” 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ΄κ³ , λ‚˜λ¨Έμ§€ 8κ°œλŠ” 짧은 μ‹œκ°„μ„ ν•„μš”λ‘œ ν•˜λŠ” μž‘μ—…μ΄λΌκ³  ν•˜μž.

λ§Œμ•½ μ΅œμ•…μ˜ 경우 8개의 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ΄ λ¨Όμ € λ™μ‹œμ— 처리되기 μ‹œμž‘ν–ˆλ‹€λ©΄ λ‚˜λ¨Έμ§€ κ°€λ²Όμš΄ 8개의 μž‘μ—…μ€ μ²˜λ¦¬ν•˜λŠ”λ° 훨씬 짧은 μ‹œκ°„μ΄ 걸림에도 λΆˆκ΅¬ν•˜κ³  ν˜„μž¬ μ²˜λ¦¬μ€‘μΈ 8개의 μž‘μ—…μ΄ λ‹€ λλ‚ λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” λΆˆμƒμ‚¬κ°€ μΌμ–΄λ‚˜λŠ” 것이닀.


μ°Έκ³ μ‚¬μ΄νŠΈ
Haileyparkλ‹˜μ˜ 벨둜그
Inpa Devsλ‹˜
yeonyeonλ‹˜

profile
ν•˜λ£¨ν•˜λ£¨κ°€ μ—°μŠ΅μ΄λ‹ˆ 내일은 더 κ°•ν•΄μ§ˆ κ²λ‹ˆλ‹€

0개의 λŒ“κΈ€