마이크로프로세서(CPU의 핵심기능을 단일칩에 집적화 집적회로)
** 집적화? 전자적으로 구성된 다양한 기능을 하나의 작고 효율적인 칩에 통합하여 제작하는 과정을 의미합니다. 이로써 기존의 여러 컴포넌트를 하나의 칩으로 통합함으로써 시스템을 더욱 단순하고 효율적으로 만들 수 있습니다. 이것은 전력 소모를 줄이고 성능을 향상시키는 등의 이점을 가져옵니다. 즉, 마이크로프로세서는 기존에 분산되어 있던 CPU의 기능들을 한 곳에 집약하여 칩 하나로 만든 것입니다.
** "집적"은 여러 가지를 한 곳에 모아서 하나로 만들거나 관리하는 것을 의미하고, "화"는 그 과정을 뜻합니다. 따라서 "집적화하다"는 여러 기능이나 요소를 한 곳에 모아서 하나로 만들거나 통합하는 과정을 나타냅니다. 마이크로프로세서의 경우, 다양한 기능을 하나의 칩에 통합하여 작고 효율적인 칩을 만드는 과정을 "집적화"라고 할 수 있습니다.
마이크로컨트롤러
포함 기능 사례
➢ 외부 디지털 전압에 대한 입출력 기능
➢ 메모리 기능(플래시 메모리, SRAM, EEPROM 등)
➢ 타이머 기능, PWM(Pulse Width Modulation) 펄스 생성 기능
➢ 입력신호 캡처 기능, A/D(Analog Digital) 변환 기능
➢ 통신 기능 등
마이크로컴퓨터
# 마이크로프로세서, 마이크로컨트롤러, 마이크로컴퓨터는 모두 컴퓨팅 장치의 핵심 구성 요소로 사용되지만, 각각의 목적과 구조에 차이가 있습니다. 아래에서 각각의 정의와 주요 차이점을 살펴보겠습니다.
이렇게 각각의 용도와 특징에 따라 적합한 장치를 선택하여 사용할 수 있습니다.
번역기의 필요성
(1) 프로그램
(2) 원시프로그램
(3) 번역기(Translator)
(4) 기계어
원시프로그램에서 실행 파일 생성
(1) 컴파일(Compile), 컴파일러(옮김, 번역)
(2) 어셈블(Assemble), 어셈블러
(3) 링크(Link), 링커
(4) 라이브러리
[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
로딩
프로그램이 CPU로 실행되려면 실행 파일이 주 메모리(RAM)에 올라가야 합니다. CPU는 메모리에 저장된 프로그램 명령어를 읽어와 실행하기 때문에, 프로그램이 메모리에 로드되어 있어야만 CPU가 해당 프로그램을 실행할 수 있습니다. 따라서 프로그램은 실행 전에 주 메모리에 올라가야 하며, 이 과정을 로딩(load)이라고 합니다. 로더(loader)가 이 작업을 담당하며, 실행 파일을 주 메모리에 로드하여 프로그램의 실행을 준비합니다.
명령어 실행
1. 명령어 인출 단계
IR (Instruction Register) : 가장 최근에 인출된 명령어(현재 실행 중인 명령어)가 저장되어 있는 레지스터
명령코드(operation code) : 명령어가 수행할 연산
오퍼랜드(operand) : 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치
명령코드는 명령어가 수행할 연산을 의미합니다. 명령 코드 종류는 매우 많지만, 가장 기본적인 명령 코드 유형은 크게 4가지 기능으로 나눌 수 있습니다.
오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미합니다. 오퍼랜드 필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있습니다.
출처: https://technote.kr/310 [TechNote.kr:티스토리]
2. 명령어 분석 단계(해석)
3. 오퍼랜드 인출 단계
4. 연산 실행 및 결과 생성 단계
5. 결과 기록 단계
하드에는 프로그램이 설치되어있지만 실행 속도가 매우 느리기 때문에 CPU는 하드와는 소통하지 않고, RAM과 소통
어떤 프로그램 실행하면 데이터는 RAM(메모리)으로 이동하고 CPU는 그 데이터 가져와서 실행함!!
용량 작은 캐시메모리 만들어서 중요하다고 판단되는 데이터만 저장 후 CPU에서 사용하기도 함
컴퓨터에 있는 기억장치의 종류는 하드디스크, RAM, 캐시메모리, 레지스터가 있음
레지스터는 CPU 내부에서 데이터를 일시적으로 저장하는 장치로 속도가 가장 빠른 메모리
프로그램 카운터(PC)라는 레지스터에는 다음에 수행 할 메모리의 주소가 들어있음
메모리 주소 레지스터는 프로그램 카운터에서 수행할 주소를 넘겨 받은 다음에 그 주소를 찾아가 데이터를 가져오는 역할을 함
메모리 버퍼 레지스터는 메모리 주소 레지스터가 가져온 데이터나 명령들을 일시적으로 저장
이 레지스터에 저장된 내용 중 명령은 명령어 레지스터로 전송되고, 연산에 사용될 데이터는 누산기 레지스터로 이동함
명령어 레지스터에는 명령에 관한 데이터가 저장되고, 누산기 레지스터는 연산의 결과 값이나 중간 값을 일시적으로 저장
최종 결과는 메모리 버퍼 레지스터를 통해 메모리로 전송함
제어장치는 명령어 레지스터에 있는 명령으를 받아 해석하고 해석된 명령을 실행할 시스템에 지시를 보내줌
ALU는 산술 논리 연산을 실행함
CPU에서는 어떻게 처리될까??
프로그램 카운터에 가져와야 할 메모리의 주소가 있고, 이 주소는 메모리 주소 레지스터로 전달
메모리 주소 레지스터는 100번지에 있는 데이터를 가져와서 메모리 버퍼 레지스터에 저장
이렇게 메모리의 데이터를 CPU로 가져오는 이 과정을 인출이라고 함!!!
메모리 10번지에 있는 데이터를 가져오라는 명령이기 때문에 명령어 레지스터로 이동
다음에 수행할 메모리는 전에 주소보다 두 칸 아래에 있기 때문에 2가 더해지고,
명령어 레지스터에 있던 내용은 제어장치로 이동되고, 해석됨
이 과정을 해석단계라고 함!!!
10번지에 있는 데이터를 읽어오라는 명령어이기 때문에 메모리 주소 레지스터에 10이 입력되고 메모리 버퍼 레지스터에 2가 저장 -> 10번지에 저장된 값은 명령어가 아닌 데이터기 때문에 누산기 레지스터에 저장
메모리 버퍼 레지스터에 STORE[12] 처럼 명령어가 입력되면 이게 명령어 레지스터로 이동하고, 제어장치로 이동 -> 메모리 주소 레지스터에 12 저장 -> 누산기 레지스터에 있는 5가 메모리 버퍼 레지스터로 이동되고, 12번지로 저장되면 프로그램 완료
1장 아두이노 시작하기 (0) | 2024.04.14 |
---|