약 4분

Impact of Machine Architectures

Impact of Machine Architectures
Photo by Merve Sehirli Nasir / Unsplash

컴퓨터란?

: 프로그램을 저장하고 실행할 수 있는 알고리즘자료구조의 집합

  • 책의 정의: An integrated set of algorithms and data structures capable of storing and executing programs.
  • Actual Computer: 물리적 장치들로 구성된 컴퓨터
  • Software-Simulated Computer: 다른 컴퓨터 위에서 작동하는 소프트웨어로 구성된 컴퓨터

프로그래밍 언어의 관점으로 본 컴퓨터

  • Data: 여러 자료구조와 자료
  • Primitive Operations: 자료를 조작하는데 필요한 기본 연산들
  • Sequence Control: 기본 연산 수행을 제어하는 로직
  • Data Access: 연산 수행에 사용되는 자료를 제어하는 로직
  • Storage Management: 프로그램과 자료에 대한 메모리 할당 제어
  • Operating Environment: 프로그램, 자료 등을 포함한 외부환경과의 통신 로직

하드웨어의 관점으로 본 컴퓨터

  • Data: 3개의 저장장치(레지스터, 캐시, 메인 메모리), 내장 자료형(정수, 부동소수점, 문자, ...)
  • Primitive Operations: 수식 계산, 자료 파악, 입출력, 수행 제어(기계어)
  • Sequence Control: 수행할 다음 명령어 선정, 명령 수행
  • Data Access: 피연산자(Operand)에 접근, 결과의 저장 위치(메모리 주소) 결정
  • Storage Management: CPU, 메모리의 처리 속도 차이를 극복하기 위한 공간 관리
  • Operating Environment: 입출력 장치 등 외부 장치와의 통신
Machine Cycle: Fetch -> Decode -> Execute
( instruction fetch -> instruction decode -> operand fetch -> execution )

번역기, 해석기 (Translator)

: High-Level Language로 작성된 프로그램을 Machine Language에 관계 없이 컴퓨터에서 해석하려면?

Translation (via Compiler)

  • 고급언어로 작성된 프로그램을 Actual Computer에서 동작하는 기계어로 변환하도록 설계
  • Assembler, Compiler, Loader, Linker, Preprocessor 등

Software Simulation (via Interpreter)

  • 고급언어를 기계어로 변환하지 않고, 다른 컴퓨터에서 실행되는 프로그램(인터프리터)을 이용해 동작 (simulate)
  • 고급언어로 작성된 프로그램을 입력으로 받고, 입력된 프로그램의 각 문장을 해석하여 결과를 생성

펌웨어 컴퓨터 (Firmware Computer)

: Any precisely defined algorithm or data structure may be realized in hardware

= 하드웨어 + 이를 제어하기 위한 마이크로 프로그램

  • 펌웨어(Firmware): 하드웨어에 저장된 마이크로 프로그램
  • 에뮬레이션(Emulation): 소프트웨어적으로 마이크로프로그램의 수행을 흉내내는 것

가상 컴퓨터 (Virtual Computer)

: 컴퓨터 속의 컴퓨터. 소프트웨어적으로 구현된 컴퓨터 (알고리즘과 자료구조의 집합)

이론적으로는 특정 언어를 "하드웨어"나 "펌웨어" 형태로 제공할 수 있다 (Language Machine)
-> 하지만 비용 문제로 "General Purpose Processor" + "언어 처리기" 구조를 사용함!!

바인딩 (Binding)

: 프로그램 구성요소(Program Constructs)와 속성(Properties)의 묶음

  • 바인딩 시각: 바인딩이 일어나는 시점
    • 언어 구성요소마다 바인딩 시각이 다를 수 있다
    • 같은 언어 구성요소라고 하더라도, 속성에 따라 바인딩 시각이 다를 수 있다

바인딩 시각의 분류

    • 언어 정의 시점 (Language Definition)
    • 언어 구현 시점 (Language Implementation)
    • 프로그램 번역 시점 (Program Translation) - Compile Time
    • 링크 시점 (Link Edit)
    • 로드 시점 (Load)
    • 프로그램 수행 시점 (Program Execution) - Run Time
  • 프로그램 수행 시점(런타임) 바인딩만 Dynamic / Late Binding
  • 그 이전, 나머지 모든 시점의 바인딩은 Static / Early Binding

바인딩 시각의 의미

: 바인딩 시각은 정확한 정보량과 관련이 있다

  • 프로그램의 어떤 개체를 보고, 그 개체에 대해 얼마나 정확한 정보를 말할 수 있는지
    • C언어 프로그램에서 if를 만났다면:
      • if는 키워드이고, 제어 구조의 일종이며, ...
    • C언어 프로그램에서 sum을 만났다면:
      • 함수명인지 변수명인지, 변수라면 타입이 뭔지, 주소와 값이 뭔지, 함수라면 코드 내용이 뭔지, ...
  • 특정 속성에 대한 바인딩 시각은 언어 구현에 따라 다를 수 있 다

바인딩 시각 선택에 따른 결과

  • Early Binding (Static Binding)
    • 번역 전에 파악할 수 있는 정보가 많다
    • 프로그램의 실행 효율을 높일 수 있다
    • Compilation 방식과 잘 어울린다
  • Late Binding (Dynamic Binding)
    • (상대적으로) 프로그래머의 선택이 더 중요해진다
    • 좀더 유연한 프로그래밍이 가능해진다
    • Interpretation 방식과 잘 어울린다