이론/기초

컴퓨터 구조 기초 - 1

tsyang 2023. 6. 25. 22:29

CPU

ALU, 레지스터, 컨트롤 유닛, 버스인터페이스 구성.

 

  • ALU는 산술연산+AND/OR 논리연산을 수행
  • 컨트롤 유닛은 CPU가 처리해야 할 명령어를 해석하고 적절한 신호를 CPU의 다른 블록에 준다.
  • 레지스터 셋은 CPU가 연산을 하는데 필요한 데이터를 임시적으로 저장할 메모리 공간.
  • 버스인터페이스는 하드웨어 장치끼리 데이터를 주고밭는 매개체가 I/O 버스. 이런 버스의 프로토콜을 이해하는 것이 이 인터페이스.

 

클럭 펄스(Clock Pulse) : CPU 클럭신호에 맞춰서 일을 . ? 동기화 하려고.

 

프로그램의 실행 과정

 

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

 

  1. 전처리기 : #define같이 #으로 시작하는 지시자의 지시에 따라 소스코드를 변경한다.
  2. 컴파일러 : 소스코드를 어셈블리 코드로 변경. 최적화도 수행
  3. 어셈블러 : 업셈블리 코드를 바이너리 코드로 변경. 바이너리 코드는 CPU가 이해하는 코드
  4. 링커 : 프로그램 내에서 참조하는 함수나 라이브버리들을 하나로 묶는 작업. 이 과정이 끝나면 실행 가능한 실행파일이 생긴다. 실행파일은 바이너리 코드로 구성되어 있다.
  5. 실행 : 링커가 만든 실행파일은 메모리에 로드된다. 실행파일들은 순차적인 명령어의 집합이라 볼 수 있는데.. CPU 명령어들을 하나씩 CPU내부로 이동시킨다음 실행한다.

하나의 명령어 실행은 Fetch/Decode/Execution 으로 단계를 나눌 있는데.

  1. Fetch는 메모리상에 존재하는 명령어를 CPU로 가져오는 작업을 나타낸다. 이렇게 CPU로 가져온 명령어는 IR(Instruction Register)에 저장된다.
  2. Decode는 가져온 명령어를 CPU가 해석하는 단계를 (컨트롤 유닛이 한다.)
  3. Execution은 해석된 명령어를 CPU가 실행하는 단계를 나타냄.

그리고 메모리에서 순차적으로 명령어를 가져오기 위해 지금 어디까지 가져왔는지를 PC(Program Counter)레지스터에 저장한다.

 

그럼 Fetch 어떻게 명령어를 메모리에서 CPU 보내나?

메모리와 CPU 버스로 연결되어 있는데, 데이터버스/어드레스버스/컨트롤버스 등이 있다.

 

  • 데이터버스 : 데이터를 옮기는 버스. 명령어가 여기 포함된다. 피연산자도 올 수 있다.
  • 어드레스 버스 : 주소값을 이동하기 위한 버스. 이 주소값을 이용해서 메모리의 데이터를 데이터 버스를 통해 주고받을 수 있다.
  • 컨트롤 버스 : 메모리와 CPU가 서로 컨트롤 신호를 주고받음. 컨트롤 신호는 CPU가 메모리에게 데이터의 읽기나 쓰기를 요청하는 것등이 포함.