1장 마이크로프로세서 원리
Section 01 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터
pp.4~6 서술하는 것!!
마이크로프로세서(CPU의 핵심기능을 단일칩에 집적화 집적회로)
- 마이크로(micro) + 프로세서(processor)
- ‘매우 작은’(micro)이라는 의미와 ‘처리기’(processor)
- 크기가 매우 작고, 뛰어난 계산 능력을 가진 장치
- IC 집적기술, 컴퓨터 구조기술, 시스템 프로그래밍 기술을 함께 묶어 단일 칩으로 집적화한 반도체 소자
- 재료, 수학적 개념, 전자 집약기술, 사회적 요구를 수렴한 다양한 마이크로프로세서가 사용되고 있으며, 앞으로도 꾸준한 연구를 통해 더욱 향상된 마이크로프로세서가 등장
- 프로그램을 신속하게 실행하기 위한 목적으로, 내부 구조를 최적화
** 집적화? 전자적으로 구성된 다양한 기능을 하나의 작고 효율적인 칩에 통합하여 제작하는 과정을 의미합니다. 이로써 기존의 여러 컴포넌트를 하나의 칩으로 통합함으로써 시스템을 더욱 단순하고 효율적으로 만들 수 있습니다. 이것은 전력 소모를 줄이고 성능을 향상시키는 등의 이점을 가져옵니다. 즉, 마이크로프로세서는 기존에 분산되어 있던 CPU의 기능들을 한 곳에 집약하여 칩 하나로 만든 것입니다.
** "집적"은 여러 가지를 한 곳에 모아서 하나로 만들거나 관리하는 것을 의미하고, "화"는 그 과정을 뜻합니다. 따라서 "집적화하다"는 여러 기능이나 요소를 한 곳에 모아서 하나로 만들거나 통합하는 과정을 나타냅니다. 마이크로프로세서의 경우, 다양한 기능을 하나의 칩에 통합하여 작고 효율적인 칩을 만드는 과정을 "집적화"라고 할 수 있습니다.
마이크로컨트롤러
- 마이크로(micro)와 컨트롤러(controller)가 결합된 용어
- ‘매우 작은’(micro)이라는 의미와 ‘제어기’(controller)라는 의미
- 마이크로프로세서의 연산 처리 기능에 제어 기능 추가
- 프로그램을 실행하면서 장치를 효과적으로 제어하기 위한 목적으로, 내부 구조를 최적화
- 값싼 장난감에서부터 산업용 장치에 이르기까지 넓은 범주를 대상
포함 기능 사례
➢ 외부 디지털 전압에 대한 입출력 기능
➢ 메모리 기능(플래시 메모리, SRAM, EEPROM 등)
➢ 타이머 기능, PWM(Pulse Width Modulation) 펄스 생성 기능
➢ 입력신호 캡처 기능, A/D(Analog Digital) 변환 기능
➢ 통신 기능 등
마이크로컴퓨터
- 마이크로(micro)’와 ‘컴퓨터(computer)’가 결합된 용어
- ‘매우 작은(micro)’ 컴퓨터 시스템
- 마이크로컴퓨터는 상대적으로 대형 슈퍼컴퓨터와 대비
- (사례) 데스크톱 컴퓨터, 휴대용 노트북, 간단한 제어용 컴퓨터, PMP, 스마트폰 등
# 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터는 모두 컴퓨팅 장치의 핵심 구성 요소로 사용되지만, 각각의 목적과 구조에 차이가 있습니다. 아래에서 각각의 정의와 주요 차이점을 살펴보겠습니다.
마이크로프로세서
- 정의: 마이크로프로세서는 컴퓨터의 '두뇌' 역할을 하는 일종의 중앙 처리 장치(CPU)입니다. 주로 복잡한 계산과 데이터 처리 작업을 수행합니다. 명령어 해석, 연산 수행, 데이터 관리 등을 담당하며, 다양한 타입의 컴퓨터 및 장치에 사용됩니다.
- 예시: 인텔의 Core 시리즈, AMD의 Ryzen 시리즈 등이 있습니다.
마이크로컨트롤러
- 정의: 마이크로컨트롤러는 마이크로프로세서를 포함하며, 추가로 메모리, 입력/출력 포트 등을 하나의 칩에 통합한 장치입니다. 주로 특정 제어 작업을 위해 사용되며, 임베디드 시스템(내장형 시스템)에 널리 적용됩니다.
- 예시: 자동차의 엔진 제어 시스템, 홈 오토메이션 시스템 등에서 사용되는 아두이노, 마이크로칩의 PIC 등이 있습니다.
마이크로컴퓨터
- 정의: 마이크로컴퓨터는 개인 사용자를 위해 설계된 작고 전체적인 컴퓨터 시스템을 의미합니다. 마이크로프로세서를 기반으로 하며, 메모리, 저장 공간, 입력/출력 장치 등을 포함한 완전한 컴퓨팅 환경을 제공합니다.
- 예시: 데스크톱 컴퓨터, 노트북, 일부 고성능 태블릿 및 서버 등이 이에 속합니다.
차이점
- 기능성 및 통합도: 마이크로프로세서는 계산 및 데이터 처리 기능에 집중하는 반면, 마이크로컨트롤러는 제어 및 감지 작업에 최적화되어 있으며 필요한 모든 구성 요소를 한 칩에 통합하고 있습니다. 마이크로컴퓨터는 이보다 더 확장된 개념으로, 사용자에게 다양한 컴퓨팅 작업을 수행할 수 있는 전체 시스템을 제공합니다.
- 용도: 마이크로프로세서는 더 넓은 범위의 일반 컴퓨팅 작업을 위해 설계된 반면, 마이크로컨트롤러는 특정한 작업(예: 온도 조절, 속도 조절 등)을 수행하는 데 사용됩니다. 마이크로컴퓨터는 개인 사용자 또는 비즈니스 환경에서 범용 컴퓨팅 요구 사항을 충족시키도록 설계되었습니다.
이렇게 각각의 용도와 특징에 따라 적합한 장치를 선택하여 사용할 수 있습니다.
Section 02 고급 언어와 저급 언어
p.7 무슨 정의인지 고르는 것 !!
번역기의 필요성
- 컴퓨터에 내장된 마이크로프로세서는 2진(0 또는 1)값을 갖는 명령어가 차례대로 실행되면서 작업을 처리
(1) 프로그램
- 작업을 처리하기 위해 명령어를 차례로 배열한 것
(2) 원시프로그램
- 사람이 작성한 프로그램(고급 언어로 보통 작성)
(3) 번역기(Translator)
- 원시프로그램을 저급 언어(Low level language)인 2진 명령어로 변환
- 컴퓨터가 인식할 수 있는 기계어(Machine language)의 실행프로그램(Executable Program)으로 변환
(4) 기계어
- 마이크로프로세서 내부의 실행 동작을 명령어 단위로 표현
- 명령어를 이해하면 마이크로프로세서 내부 구조를 쉽게 이해 ( = 이 명령어들은 마이크로프로세서 내부에서 실제로 실행되는 동작을 나타냅니다. 따라서 기계어 명령어를 이해하면 마이크로프로세서가 어떻게 동작하는지에 대한 통찰력을 제공)
p.9
원시프로그램에서 실행 파일 생성
(1) 컴파일(Compile), 컴파일러(옮김, 번역)
- 고급언어로 작성된 원시프로그램을 기계어 목적 파일로 번역하는 과정
- 컴파일러 : 컴파일을 수행하는 번역기
(2) 어셈블(Assemble), 어셈블러
- 어셈블리어로 작성된 원시프로그램을 기계어 목적 파일로 번역하는 과정
- 어셈블러 : 어셈블을 수행하는 번역기
(3) 링크(Link), 링커
- 여러 개의 목적 파일을 연결하여 통합된 실행 파일로 만드는 과정
- 링커 : 링크를 전담하는 프로그램
(4) 라이브러리
- 공통으로 자주 사용하는 기능은 표준화된 이름과 매개 변수가 있는 함수로 작성한 후, 컴파일하여 목적 파일을 생성
- 컴파일된 목적 파일을 모아놓은 파일을 ‘라이브러리 파일’이라 함
- (예시) sin, cos, tan, printf 등과 같이 자주 사용하는 함수
[compilation (컴파일)]
컴파일러가 컴파일 하면 바로 기계어(Machine Code)로 번역 될 것 같지만 아닙니다. 흔히 중간언어 또는 저수준 언어라고 하는 놈으로 번역됩니다. 보통은 어셈블리어(Assembly Language)로 번역됩니다.
한마디로 인간이 기계어를 이해하기 위해 고급언어와 기계어 사이에 중간단계인 저수준 언어로 번역하는 것이죠. 대표적인 C, C++ 모두 어셈블리어라는 저수준 언어로 번역되니 이 걸로 가정하고 가죠.
[assemble (어셈블)]
앞서 컴파일 단계에서 컴파일러가 고급언어를 저수준 언어로 번역을 해줬습니다. 그러면 이 저수준 언어(어셈블리어)를 최종적으로 기계어로 번역을 해주어야겠죠? 이 어셈블리어를 기계어로 번역해주는 프로그램을 어셈블러(Assembler)라고 합니다.
이렇게 CPU가 이해할 수 있는 언어로 번역된 파일을 보통 Object File 이라고도 하는데, 직역하면 '객체 파일'이라고 하지만, 대부분은 객체라 하지 않고 '목적 파일'이라고 합니다.
[linkig (링크/링킹)]
컴파일(어셈블 포함) 과정을 통해 각 파일들이 기계어로 번역되었다면 이제 하나로 연결해주어야 합니다. 책을 번역할 때도 각 낱장별로 번역된 종이들을 하나로 모아 묶어야 책이듯, 각각의 Object File 은 기계가 이해할 수 있는 번역본일 뿐 실행을 할 수 있는 파일이 아니죠.
즉, Object File 들과 필요한 라이브러리들을 연결 시켜주고 최종적으로 하나의 'executable file (실행가능한 파일)'로 만들어줍니다. 우리가 흔히 어떤 프로그램을 사용할 때 .exe 라는 확장자를 갖는 파일을 실행시킵니다. 이 exe가 바로 executablue 의 줄임말입니다.
https://st-lab.tistory.com/176
https://namu.wiki/w/CPU/%EA%B5%AC%EC%A1%B0%EC%99%80%20%EC%9B%90%EB%A6%AC
CPU/구조와 원리
CPU 의 구조와 원리를 설명한 문서. 거의 모든 종류의 CPU가 하는 일은 요약해보면 대부분 4개 기능이 주다.
namu.wiki
p.10
로딩
- 실행 파일이 중앙 처리 장치(CPU, Central Processing Unit)에서 실행되려면, 주 메모리에 탑재되는 과정 필요
- 로더 : 로딩을 전담하는 프로그램
프로그램이 CPU로 실행되려면 실행 파일이 주 메모리(RAM)에 올라가야 합니다. CPU는 메모리에 저장된 프로그램 명령어를 읽어와 실행하기 때문에, 프로그램이 메모리에 로드되어 있어야만 CPU가 해당 프로그램을 실행할 수 있습니다. 따라서 프로그램은 실행 전에 주 메모리에 올라가야 하며, 이 과정을 로딩(load)이라고 합니다. 로더(loader)가 이 작업을 담당하며, 실행 파일을 주 메모리에 로드하여 프로그램의 실행을 준비합니다.
Section 03 프로그램 실행 원리
pp.14~15 (단답, 명령어 실행단계만)
명령어 실행
1. 명령어 인출 단계
- 프로그램 메모리에 있는 명령어를 인출(Fetch)하여, 명령어 레지스터(IR)에 넣는 단계
- 명령어는 연산 동작(opcode), 연산 대상(operand), 연산 결과(result)를 지칭하는 비트 정보로 구성
IR (Instruction Register) : 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터
명령코드(operation code) : 명령어가 수행할 연산
오퍼랜드(operand) : 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치
명령코드는 명령어가 수행할 연산을 의미합니다. 명령 코드 종류는 매우 많지만, 가장 기본적인 명령 코드 유형은 크게 4가지 기능으로 나눌 수 있습니다.
명령어 코드 기능
- 데이터 전송
- MOVE : 데이터를 옮겨라
- STORE : 메모리에 저장하라
- LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
- PUSH : 스택에 데이터를 저장하라
- POP : 스택의 최상단 데이터를 가져와라
- 산술/논리 연산
- ADD/SUBTRACT/MULTIPLY/DIVIDE : 덧셈/뺄셈/곱셈/나눗셈
- INCREMENT/DECREMENT : 오퍼랜드에 1을 더하라/빼라
- AND/OR/NOT : 논리 연산을 수행하라
- COMPARE: 두 개의 숫자 또는 TRUE/FALSE 값을 비교하라
- 제어 흐름 변경
- JUMP : 특정 주소로 실행순서를 옮겨라
- CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
- HALT : 프로그램의 실행을 멈춰라
- CALL : 되돌아올 주소를 저장할 채 특정 주소로 실행 순서를 옮겨라
- RETURN : CALL을 호출할 때 저장했떤 주소로 돌아가라
- 입출력 제어
- READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
- WRTIE(OUTPUT) : 특정 입출력 장치로부터 데이터를 써라
- START IO : 입출력 장치를 시작하라
- TEST IO : 입출력 장치의 상태를 확인하라
오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미합니다. 오퍼랜드 필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있습니다.
출처: https://technote.kr/310 [TechNote.kr:티스토리]
2. 명령어 분석 단계(해석)
- 명령어 레지스터(IR) 정보를 디코딩하여 레지스터 파일, 버스 라인 등에 필요한 신호를 생성
3. 오퍼랜드 인출 단계
- 디코딩 결과에 따라 연산에 사용될 오퍼랜드(operand) 위치가 결정
- 오퍼랜드가 메모리에 있는 경우, 메모리로부터 인출하여 CPU 내부의 레지스터로 옮기는 단계
- 메모리로부터 CPU 내부로 옮기기 위해서는 부가의 클록이 요구되고 명령어 실행 시간이 길어짐
- 오퍼랜드가 명령어에 포함되어 있거나 레지스터에 있는 경우, 이 단계는 생략
- ADD[12] 라면 12번지가 결정되는 것임!! 메모리의 12번지 내용을 CPU로 가져오란 소리!
4. 연산 실행 및 결과 생성 단계
- 명령어 레지스터의 연산 동작(opcode)에 따라 오퍼랜드 값 등을 사용하여 산술 또는 논리연산
- 조합 논리 회로로 구성된 ALU에서 오퍼랜드를 사용하여 연산 결과는 어큐뮤레이터(Accumulator)=누산 또는 범용 레지스터로 기록
5. 결과 기록 단계
- 명령어를 디코딩한 결과 연산된 결과를 저장하는 위치가 메모리이면, 이 단계가 수행
하드에는 프로그램이 설치되어있지만 실행 속도가 매우 느리기 때문에 CPU는 하드와는 소통하지 않고, RAM과 소통
어떤 프로그램 실행하면 데이터는 RAM(메모리)으로 이동하고 CPU는 그 데이터 가져와서 실행함!!
용량 작은 캐시메모리 만들어서 중요하다고 판단되는 데이터만 저장 후 CPU에서 사용하기도 함
컴퓨터에 있는 기억장치의 종류는 하드디스크, RAM, 캐시메모리, 레지스터가 있음
레지스터는 CPU 내부에서 데이터를 일시적으로 저장하는 장치로 속도가 가장 빠른 메모리
프로그램 카운터(PC)라는 레지스터에는 다음에 수행 할 메모리의 주소가 들어있음
메모리 주소 레지스터는 프로그램 카운터에서 수행할 주소를 넘겨 받은 다음에 그 주소를 찾아가 데이터를 가져오는 역할을 함
메모리 버퍼 레지스터는 메모리 주소 레지스터가 가져온 데이터나 명령들을 일시적으로 저장
이 레지스터에 저장된 내용 중 명령은 명령어 레지스터로 전송되고, 연산에 사용될 데이터는 누산기 레지스터로 이동함
명령어 레지스터에는 명령에 관한 데이터가 저장되고, 누산기 레지스터는 연산의 결과 값이나 중간 값을 일시적으로 저장
최종 결과는 메모리 버퍼 레지스터를 통해 메모리로 전송함
제어장치는 명령어 레지스터에 있는 명령으를 받아 해석하고 해석된 명령을 실행할 시스템에 지시를 보내줌
ALU는 산술 논리 연산을 실행함
CPU에서는 어떻게 처리될까??
프로그램 카운터에 가져와야 할 메모리의 주소가 있고, 이 주소는 메모리 주소 레지스터로 전달
메모리 주소 레지스터는 100번지에 있는 데이터를 가져와서 메모리 버퍼 레지스터에 저장
이렇게 메모리의 데이터를 CPU로 가져오는 이 과정을 인출이라고 함!!!
메모리 10번지에 있는 데이터를 가져오라는 명령이기 때문에 명령어 레지스터로 이동
다음에 수행할 메모리는 전에 주소보다 두 칸 아래에 있기 때문에 2가 더해지고,
명령어 레지스터에 있던 내용은 제어장치로 이동되고, 해석됨
이 과정을 해석단계라고 함!!!
10번지에 있는 데이터를 읽어오라는 명령어이기 때문에 메모리 주소 레지스터에 10이 입력되고 메모리 버퍼 레지스터에 2가 저장 -> 10번지에 저장된 값은 명령어가 아닌 데이터기 때문에 누산기 레지스터에 저장
메모리 버퍼 레지스터에 STORE[12] 처럼 명령어가 입력되면 이게 명령어 레지스터로 이동하고, 제어장치로 이동 -> 메모리 주소 레지스터에 12 저장 -> 누산기 레지스터에 있는 5가 메모리 버퍼 레지스터로 이동되고, 12번지로 저장되면 프로그램 완료