이론/기초
컴퓨터 구조 기초 - 1
tsyang
2023. 6. 25. 22:29
CPU
ALU, 레지스터, 컨트롤 유닛, 버스인터페이스 로 구성.
- ALU는 산술연산+AND/OR 논리연산을 수행
- 컨트롤 유닛은 CPU가 처리해야 할 명령어를 해석하고 적절한 신호를 CPU의 다른 블록에 준다.
- 레지스터 셋은 CPU가 연산을 하는데 필요한 데이터를 임시적으로 저장할 메모리 공간.
- 버스인터페이스는 하드웨어 장치끼리 데이터를 주고밭는 매개체가 I/O 버스. 이런 버스의 프로토콜을 이해하는 것이 이 인터페이스.
클럭 펄스(Clock Pulse) : CPU는 이 클럭신호에 맞춰서 일을 함. 왜? 동기화 하려고.
프로그램의 실행 과정
전처리기 -> 컴파일러 -> 어셈블러 -> 링커 -> 실행
- 전처리기 : #define같이 #으로 시작하는 지시자의 지시에 따라 소스코드를 변경한다.
- 컴파일러 : 소스코드를 어셈블리 코드로 변경. 최적화도 수행
- 어셈블러 : 업셈블리 코드를 바이너리 코드로 변경. 바이너리 코드는 CPU가 이해하는 코드
- 링커 : 프로그램 내에서 참조하는 함수나 라이브버리들을 하나로 묶는 작업. 이 과정이 끝나면 실행 가능한 실행파일이 생긴다. 실행파일은 바이너리 코드로 구성되어 있다.
- 실행 : 링커가 만든 실행파일은 메모리에 로드된다. 실행파일들은 순차적인 명령어의 집합이라 볼 수 있는데.. CPU는 이 명령어들을 하나씩 CPU내부로 이동시킨다음 실행한다.
하나의 명령어 실행은 Fetch/Decode/Execution 으로 각 단계를 나눌 수 있는데.
- Fetch는 메모리상에 존재하는 명령어를 CPU로 가져오는 작업을 나타낸다. 이렇게 CPU로 가져온 명령어는 IR(Instruction Register)에 저장된다.
- Decode는 가져온 명령어를 CPU가 해석하는 단계를 (컨트롤 유닛이 한다.)
- Execution은 해석된 명령어를 CPU가 실행하는 단계를 나타냄.
그리고 메모리에서 순차적으로 명령어를 가져오기 위해 지금 어디까지 가져왔는지를 PC(Program Counter)레지스터에 저장한다.
자 그럼 Fetch는 어떻게 명령어를 메모리에서 CPU로 보내나?
메모리와 CPU는 버스로 연결되어 있는데, 데이터버스/어드레스버스/컨트롤버스 등이 있다.
- 데이터버스 : 데이터를 옮기는 버스. 명령어가 여기 포함된다. 피연산자도 올 수 있다.
- 어드레스 버스 : 주소값을 이동하기 위한 버스. 이 주소값을 이용해서 메모리의 데이터를 데이터 버스를 통해 주고받을 수 있다.
- 컨트롤 버스 : 메모리와 CPU가 서로 컨트롤 신호를 주고받음. 컨트롤 신호는 CPU가 메모리에게 데이터의 읽기나 쓰기를 요청하는 것등이 포함.