κΈ€ μž‘μ„±μž: λ˜₯폴베.
λ°˜μ‘ν˜•
이 ν¬μŠ€νŠΈλŠ”, μœ€μ„±μš° μ €μžλ‹˜μ˜ 'λ‡Œλ₯Ό μžκ·Ήν•˜λŠ” μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°'을 λ°”νƒ•μœΌλ‘œ 제 생각을 μž¬κ΅¬μ„±ν•˜μ—¬ μ •λ¦¬ν•œ ν¬μŠ€νŠΈμž…λ‹ˆλ‹€.

이전 포슀트


2019/05/29 - [Development/System] - [μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°] 1. μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°, 컴퓨터 ν•˜λ“œμ›¨μ–΄ ꡬ성, CPU

 

[μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°] 1. μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°, 컴퓨터 ν•˜λ“œμ›¨μ–΄ ꡬ성, CPU

이 ν¬μŠ€νŠΈλŠ”, μœ€μ„±μš° μ €μžλ‹˜μ˜ 'λ‡Œλ₯Ό μžκ·Ήν•˜λŠ” μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ°'을 λ°”νƒ•μœΌλ‘œ 제 생각을 μž¬κ΅¬μ„±ν•˜μ—¬ μ •λ¦¬ν•œ ν¬μŠ€νŠΈμž…λ‹ˆλ‹€. λ‹€μŒ 포슀트 2019/06/12 - [Development/System] - [μœˆλ„μš°μ¦ˆ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜..

cjwoov.tistory.com


λͺ©μ°¨


  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •
  • Stored Program Concept
  • 데이터 이동 기반의 λ²„μŠ€ μ‹œμŠ€ν…œ

 

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ κ³Όμ •


κ·Έλ¦Ό1. μ‹€ν–‰νŒŒμΌμ˜ 생성 κ³Όμ •

  • μ „μ²˜λ¦¬κΈ°μ— μ˜ν•œ μΉ˜ν™˜μž‘μ—…
    • #으둜 μ‹œμž‘ν•˜λŠ” μ§€μ‹œμž
  • μ»΄νŒŒμΌλŸ¬μ— μ˜ν•œ λ²ˆμ—­
    • CPU의 λͺ…λ Ήμ–΄λ‘œ λ²ˆμ—­
  • μ–΄μ…ˆλΈ”λŸ¬μ— μ˜ν•œ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œ(0, 1) 생성
    • CPU의 λͺ…λ Ήμ–΄λ₯Ό λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ‘œ λ²ˆμ—­
  • 링컀에 μ˜ν•œ μ—°κ²°κ³Ό κ²°ν•©
    • λΌμ΄λΈŒλŸ¬λ¦¬μ™€ κ²°ν•©

μ‹€μ œλ‘œ μ‹€ν–‰νŒŒμΌμ΄ μƒμ„±λ˜λŠ” 과정은 κ·Έλ¦Ό 1κ³Ό κ°™λ‹€.

 

μ–΄μ…ˆλΈ”λ¦¬μ–΄? μ–΄μ…ˆλΈ”λŸ¬?

 CPUλ₯Ό λ””μžμΈν•œλ‹€λŠ” 것은 μ•„μ£Ό 큰 의미λ₯Ό μ§€λ‹Œλ‹€. CPUλ₯Ό κ°œλ°œν•˜λŠ” κ°œλ°œμžλŠ” λͺ…λ Ήμ–΄λ₯Ό λ””μžμΈν•œλ‹€.

이 λͺ…λ Ήμ–΄λ₯Ό μ–΄λ–»κ²Œ λ””μžμΈν•˜λŠλƒμ— 따라 CPU ꡬ성을 λ‹¬λ¦¬ν•œλ‹€.

μ»΄ν“¨ν„°λŠ” μ•Œλ‹€μ‹œν”Ό 0κ³Ό 1μ΄λΌλŠ” 숫자만으둜 데이터λ₯Ό μ†‘μˆ˜μ‹ ν•˜λŠ”λ°,

μžμ‹ μ΄ CPU 개발자라고 μƒκ°ν•˜κ³  사칙연산을 0κ³Ό 1μ΄λΌλŠ” 숫자λ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν• κΉŒ λ‚˜λ¦„λŒ€λ‘œ μƒκ°ν•΄λ³΄μž.

κ·Έλ¦Ό2. μž„μ˜λ‘œ μ •μ˜ν•΄λ³Έ CPU 사칙연산 μ •μ˜

 0011은 λ§μ…ˆ, 0010은 λΊ„μ…ˆ, 0100은 κ³±μ…ˆ, 0101λŠ” λ‚˜λˆ—μ…ˆμœΌλ‘œ CPU λͺ…λ Ήμ–΄λ₯Ό μ •μ˜ν•˜μ˜€λ‹€.

ν•˜μ§€λ§Œ μ‚¬λžŒλ“€μ΄ 0011, 0010, 0100, 0101μ΄λΌλŠ” 숫자만 눈으둜 보기엔 이게 λ§μ…ˆμΈμ§€ λ‚˜λˆ—μ…ˆμΈμ§€ ν—·κ°ˆλ¦°λ‹€.

κ°œλ°œμžλ“€μ˜ λ‡Œκ°€ μˆ«μžλ“€λ‘œ κ°€λ“ν•˜μ§€ μ•Šμ€ 이상... μ €λŸ° 숫자의 μ‘°ν•©λ§ŒμœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μ—†λ‹€.

κ·Έλž˜μ„œ 0011μ΄λΌλŠ” λ§μ…ˆμ˜ 의미λ₯Ό 가진 μˆ«μžμ—κ² ADDλΌλŠ” 문자,..., 0101μ΄λΌλŠ” λ‚˜λˆ—μ…ˆμ˜ 의미λ₯Ό 가진 μˆ«μžμ—κ² DIVλΌλŠ” 문자λ₯Ό λΆ™μ—¬μ£Όκ³  μ €λŸ° 문자λ₯Ό 가지고 ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λŠ”λ°, 이것을 μ–΄μ…ˆλΈ”λ¦¬ ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  ν•œλ‹€.

그러면 μ—­μœΌλ‘œ μš°λ¦¬κ°€ 뢙인 문자둜 ν”„λ‘œκ·Έλž˜λ°μ„ ν•œλ‹€λ©΄,

컴퓨터가 κ·Έ 문자λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œ 컴퓨터가 이해할 수 μžˆλŠ” 숫자(0κ³Ό 1의 μ‘°ν•©)둜 λ‹€μ‹œ λ°”κΎΈμ–΄μ£Όμ–΄μ•Ό ν•˜λŠ”λ°

이것이 μ–΄μ…ˆλΈ”λŸ¬κ°€ ν•˜λŠ” 일이닀.

 

κ·Έλ ‡λ‹€λ©΄ μ»΄νŒŒμΌλŸ¬λŠ”?

 μœ„μ—μ„œ ADD, MIN, MUL, DIVλΌλŠ” 문자 덕택에 μš°λ¦¬λŠ” 숫자만으둜 ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

ν•˜μ§€λ§Œ μ—¬μ „νžˆ ADD, MIN, MUL, DIV μ΄λŸ¬ν•œ λ¬Έμžλ“€μ„ 톡해 μ œλŒ€λ‘œ 된 ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜κΈ°μ—” λ„ˆλ¬΄ μ–΄λ ΅λ‹€.

κ·Έλž˜μ„œ μ§€κΈˆ μš°λ¦¬κ°€ ν”νžˆ μ΄ν•΄ν•˜κΈ° 쉽고 κ³΅λΆ€ν•˜κΈ° 쒋은 μ–Έμ–΄ C, C++, JAVA,... μ™€ 같은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ‚¬μš©ν•œλ‹€.

μš°λ¦¬κ°€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό 톡해 κ°œλ°œμ„ ν•˜λ©΄,

μ»΄νŒŒμΌλŸ¬λŠ” μœ„μ—μ„œ μ–ΈκΈ‰ν•œ ADD, MINκ³Ό 같은 μ–΄μ…ˆλΈ”λ¦¬μ–΄λ‘œ λ³€ν™˜μ‹œμΌœμ£Όκ³  μ–΄μ…ˆλΈ”λŸ¬λŠ” 컴퓨터가 이해할 수 μžˆλ„λ‘ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œ(0, 1)둜 λ³€ν™˜μ‹œμΌœμ€€λ‹€κ³  보면 λœλ‹€.

 

링컀?

μ–΄μ…ˆλΈ”λŸ¬λ₯Ό 톡해 λ§Œλ“€μ–΄μ§„ λ°”μ΄λ„ˆλ¦¬ μ½”λ“œμ™€ 라이브러리λ₯Ό κ²°ν•©ν•΄ μ‹€ν–‰νŒŒμΌμ„ λ§Œλ“€μ–΄ μ£ΌλŠ” 역할을 ν•œλ‹€.

 

Stored Program Concept


 ν”„λ‘œκ·Έλž¨μ΄λž€ 것은 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” μ»¨μ…‰μœΌλ‘œ 컴퓨터 ꡬ쑰가 λ””μžμΈλ˜μ–΄μ•Ό ν•œλ‹€. (= 폰 λ…Έμ΄λ§Œ μ•„ν‚€ν…μ²˜)

μ˜€λŠ˜λ‚ μ˜ λͺ¨λ“  μ‹œμŠ€ν…œμ€ Stored Program Concept둜 λ””μžμΈλ˜μ–΄μžˆλ‹€.

λ©”λͺ¨λ¦¬μ— μ €μž₯이 μ•ˆ λ˜λŠ” ν”„λ‘œκ·Έλž¨λ„ μžˆλ‚˜..?라고 생각할 μˆ˜λ„ μžˆλŠ”λ° μ˜ˆμ „μ—λŠ” λ©”λͺ¨λ¦¬λΌλŠ” κ°œλ…μ΄ 없을 λ•Œ ν”„λ‘œκ·Έλž¨μ΄λž€ 것이 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” ꡬ쑰가 μ•„λ…”λ‹€κ³  ν•œλ‹€.

λͺ…λ Ήμ–΄(ν”„λ‘œκ·Έλž¨)λŠ” λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄μ„œ CPU에 μ˜ν•΄ Fetch, Decode, Execution λœλ‹€.

  • Fetch
    • CPU λ‚΄λΆ€λ‘œ λͺ…λ Ήμ–΄ 이동(λ²„μŠ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅ν•΄μ„œ)
  • Decode
    • 컨트둀 μœ λ‹›μ— μ˜ν•΄ λͺ…λ Ήμ–΄ 해석
  • Execution
    • 연산을 진행
    • 보톡은 ALUλ₯Ό 생각

κ·Έλ¦Ό3. Stored Program Concept 상세 κ³Όμ •

1. μ „μ²˜λ¦¬κΈ°-> 컴파일러-> μ–΄μ…ˆλΈ”λŸ¬-> 링컀 과정을 톡해 λ§Œλ“€μ–΄μ§„ μ‹€ν–‰νŒŒμΌμ΄ λ©”λͺ¨λ¦¬μ— Load λœλ‹€.

2. λ©”λͺ¨λ¦¬μ— μ €μž₯된 λͺ…λ Ήμ–΄λŠ” CPU에 Fetch λœλ‹€.

3. CPU에 Fetch 된 λͺ…λ Ήμ–΄λŠ” λ§μ…ˆμ΄λΌλŠ” μ—°μ‚°μœΌλ‘œ Decode λœλ‹€.

4. Decode 된 연산은 Execution λœλ‹€.

 

κ·Έλ¦Ό4. Stored Program Concept + 컴퓨터 ꡬ쑰

 κ·Έλ¦Ό 4λ₯Ό 이전 포슀트λ₯Ό μƒκ°ν•˜λ©΄μ„œ 이해해 보도둝 ν•˜μž ^^.

 

데이터 μ΄λ™μ˜ 기반 λ²„μŠ€ μ‹œμŠ€ν…œ


 λ²„μŠ€λŠ” 보톡 μ•„λž˜μ™€ 같이 3κ°€μ§€λ‘œ λΆ„λ₯˜ν•œλ‹€.

  • 데이터 λ²„μŠ€
    • 데이터 이동
  • μ–΄λ“œλ ˆμŠ€ λ²„μŠ€
    • μ£Όμ†Œ 이동
  • 컨트둀 λ²„μŠ€
    • 컨트둀 μ‹ ν˜Έ 이동

κ·Έλ¦Ό5. λ²„μŠ€μ˜ μ’…λ₯˜

 CPU와 λ©”λͺ¨λ¦¬ κ΄€μ μ—μ„œλ§Œ λ²„μŠ€λ₯Ό μ„€λͺ…ν•΄λ³΄μžλ©΄,

데이터 λ²„μŠ€(Data Bus)

 λ§ κ·ΈλŒ€λ‘œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” λ²„μŠ€λ‹€.

μš°λ¦¬κ°€ 보톡 λ²„μŠ€ ν•˜λ©΄ '데이터 이동이닀'라고 이것을 μƒκ°ν•œλ‹€.

μ–΄λ“œλ ˆμŠ€ λ²„μŠ€(Address Bus)

 CPUμž…μž₯μ—μ„œ λ©”λͺ¨λ¦¬μ˜ νŠΉμ •ν•œ μ£Όμ†Œμ— μžˆλŠ” 데이터λ₯Ό κ°€μ Έκ°€κ³  싢을 λ•Œκ°€ μžˆλ‹€.

'λͺ‡ λ²ˆμ§€μ— μžˆλŠ” 데이터λ₯Ό 쀘'라고 μ£Όμ†Œλ₯Ό μš”μ²­ν•˜κ³  전달받아야 ν•˜λŠ”λ°, 이럴 λ•ŒλŠ” μ–΄λ“œλ ˆμŠ€ λ²„μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€.

컨트둀 λ²„μŠ€(Control Bus)

 λ²„μŠ€λΌλŠ” 것은 일반적으둜 μ–‘λ°©ν–₯이닀.

CPUμ—μ„œ λ©”λͺ¨λ¦¬μ— 데이터λ₯Ό μ „λ‹¬ν• μˆ˜λ„ 있고, λ°˜λŒ€λ‘œ λ©”λͺ¨λ¦¬μ—μ„œ CPU둜 데이터λ₯Ό 전달 ν•  수 도 μžˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 컨트둀이 ν•„μš”ν•˜λ‹€.

예λ₯Ό λ“€μ–΄, CPUκ°€ λ©”λͺ¨λ¦¬λ‘œ 'λ‚΄κ°€ μ§€κΈˆ 데이터λ₯Ό 보낼 것이닀.' ν•˜λ©΄ λ©”λͺ¨λ¦¬λŠ” 이 μˆœκ°„ CPUμ—κ²Œ 데이터λ₯Ό μ „λ‹¬ν•˜λ©΄ μ•ˆ λœλ‹€.

이와 같은 경우 μˆœμ„œλ₯Ό μ»¨νŠΈλ‘€ν•  λ•Œ 컨트둀 λ²„μŠ€λ₯Ό μ‚¬μš©ν•œλ‹€.

λ°˜μ‘ν˜•