1장 프로그램의 실행 과정 + 하드웨어 구성의 재접근

Lamjwi·2023년 12월 13일

폰 노이만

  • 오늘날 우리가 사용하고 있는 컴퓨터의 기본 모델을 제시한 사람.
  • 초창기 컴퓨터
    • 임의의 연산을 하고자 할 떄마다 여러 명의 엔지니어가 달라 붙어서 진공관 회로의 스위치를 변경해 줘야 했다.
    • 프로그램이란 진공관 회로의 스위치 구성이라 오늘날 말하는 컴퓨터 프로그램과 거리가 멀었다.
  • 프로그램이 컴퓨터 내부에 저장되는 구조를 생각함.

폰 노이만이 주장한 컴퓨터 구조

  • 프로그램이라는 것이 존재하고, 이 프로그램은 컴퓨터 내부에 저장되어서 순차적으로 실행 되어야 한다.
  • 폰 노이만 아키텍쳐(Stored Program Concept)라고도 부른다.

폰 노이만 아키텍처의 가장 큰 특징은 실행되어야 할 프로그램이 컴퓨터 내부에 저장된다는 것.

프로그램의 실행 과정 (1)

  • 전처리기 -> 컴파일러 -> 어셈블러 -> 링커

단계 1 : 전처리기에 의한 치환작업

  • 전치리기는 '#include', 'define' 같이 '#'으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다.

단계 2 : 컴파일러에 의한 번역

  • 소스코드는 컴파일러에 의해서 어셈블리 코드로 번역된다.
  • 어셈블리 코드란?
    • CPU가 디자인 될때 CPU에게 일을 시키기 위한 명령어도 같이 디자인 되었다.
    • 이러한 명령어를 조합해서 만들어진 프로그램 코드를 의미한다.
      • 만약 C와 같은 언어로 구현된 프로그램을 어셈블리 프로그램으로 변경해 주는 컴파일러가 없었다면 우리는 이 명령어 체계(어셈블리 언어)를 익혀서 프로그램을 작성해야 했을 것(과거에는 이렇게 했다함)

단계 3 : 어셈블러에 의한 바이너리 코드 생성

  • 텍스트 코드에 상대되는 뜻.
  • 즉, 1과0으로만 구성되는 코드를 말한다.
    • 컴파일러에 의해 번역된 어셈블리 코드는 컴퓨터에 의해 실행되기에 앞서서 바이너리 코드로 번역되어야함.
  • 어셈블리 코드를 CPU가 이해할 수 있는 바이너리 코드로 바꾸어 주는 프로그램이 필요한데, 이것이 바로 어셈블러다.

단계 4 : 링커에 의한 연결과 결합

  • 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업이다.
    • 과정이 끝나면 실제 실행가능한 실행파일(exe파일)이 나온다.
      • 실행파일은 컴퓨터가 이해하는 바이너리 코드로 구성된다.

프로그램의 실행과정 (2)


1. 실행파일 실행

  • 컴퓨터에게 일을 시키기 위한 명령어(바이너리 코드 형식의 명령어)가 들어 있다.
  • 이것이 메모리 공간에 올라가고 난 다음 CPU에 의해서 실행되기 시작한다.
  1. 메모리 공간에 올라간 명령어들이 CPU에 의해서 순차적으로 실행된다.
  • 명령어 A, 명령어 B, 명령어 C가 메모리에 올라가있당.
    • 단계 1 : Fetch
      • 메모리상에 존재하는 명령어를 CPU로 가져오는 작업.
    • 단계 2 : Decode
      • 가져다 놓은 명령어를 CPU가 해석하는 단계이다.
    • 단계 3 : Execution
      • 해석된 명령어의 명령대로 CPU가 실행하는 단게이다.
  • 프로그램의 기본 실행은 Fetch, Decode, Execution 단계를 거친다.(중요)

하드웨어 구성의 재접근

폰 노이만의 컴퓨터 구조 vs 오늘날의 컴퓨터 구조

  • 명령어 실행을 위해서 제일 먼저 하는 일이 Fetch인데 어떠한 이동 경로를 통해서 명령어의 Fetch가 진행되는 것인가.
    • 버스 시스템을 이용해서 이동한다.
  • 명령어를 CPU 안에 가져다 놓을 떄 어디에 저장하는 것인가?
    • 레지스터(IR{Instruction Register})
  • CPU 안에 가져다 놓은 명령어는 Decode 단계에서 해석되는데, 이는 CPU 안에 존재하는 누구에 의해서 진행되는가?
    • 컨트롤 유닛
  • 마지막 단계인 Execution은 누구에 의해서 진행되는가?
    • 산술 및 논리 연산을 하는 Execution의 주체는 ALU다.

데이터 이동의 기반이 되는 버스(BUS) 시스템

  • 데이터를 이동하는데 있어서 사용되는 전송 경로를 가리켜 버스 시스템(Bus System)이다.
    • 어드레스 버스
    • 데이터 버스
    • 컨트롤 버스
  • I/O 버스는 여러 장치(Device)들이 데이터를 주고 받기 위한 통로의 역할을 한다.

데이터 버스(Data Bus)

  • 데이터를 이동하기 위해 필요한 버스.
    • 명령어
    • 연산에 필요한 피연산자

어드레스 버스(Address Bus)

  • 주소값을 이동하기 위해 필요한 버스
  • 주소값을 이동해야만 하는가?
    • CPU가 0x1024번지에 저장되어 있는 4바이트를 읽으려고 한다고 가정한다면.
      • 메모리 영역에 주소값 0x1024를 먼저 전달해야 한다.(메모리는 주소가 전달되면 해당 주소의 데이터를 전송하는 컨트롤러가 포함되어 있다고 생각)

컨트롤 버스(Control Bus)

  • CPU가 원하는 바를 메모리에 전달할 때 사용.
  • CPU와 메모리가 서로 특별한 사이(Sign)을 주고 받는 용도로 사용되는 버스다.

버스 종합해서 정리

  • 컨트롤 버스를 이용해서 CPU가 메모리에 사인을 전달해야 하는가?
    • CPU는 메모리로부터 데이터를 가져온다.
    • 메모리에 데이터를 저장하기도한다.

  • 우선 CPU가 하고자 하는 일이 무엇인지 메모리에 알려주고있는데 이러한 용도로 컨트롤 버스가 사용된다.
    • '데이터 보내','데이터 간다'
  • 두번째로 가는건 데이터의 주소값이다. 데이터가 저장된 주소값을 알아야 적절히 송신 및 수신 할것 이를 위한 버스는 어드레스 버스다.
    • '0x1200번지','0x1204번지'
  • 실제로 데이터를 전송하는 일만 남았는뎅 이걸 하는 버스가 데이터 버스다.

1차 23.12.12
2차 23.12.18
3차 23.12.19
4차 23.12.20
5차 23.12.21
6차 23.12.26
7차 24.01.02

profile
ㅇㅅㅇ

0개의 댓글