중간 전 기본 컴퓨터구조 ARM구조 요약
컴파일 과정
- 소스코드 작성
- Complie
- Object Code (컴파일해서 생성되는 바이너리 파일)
- 링커가 링킹 해준다. → Object Code와 라이브러리를 연결한다.
- 정적 라이브러리(stdio.h) - Complie time linking
- 동적 라이브러리(DLL) - Run time linking
- 실행
기계어의 형식
- Opcode : 연산자
- Operand : 피연산자
CPU
CPU = ALU + CU + Register + Internal Bus
- ALU : 산술논리연산
- CU : 명령 해석하고 실행
- CPU내의 데이터 임시보관
Bus
내부 버스
CPU내부에서 레지스터와 ALU사이의 신호교환, 다시 레지스터로 전송
외부 버스
CPU와 외부의 기억장치 사이, 그리고 I/O장치 사이의 버스
- 데이터 버스
- 어드레스 버스
- 제어 버스
MAR, MBR
- MAR : 메모리 주소 레지스터 : PC에 저장된 명령어 주소가 저장되는 곳, 명령어가 위치한 주소를 저장하는 곳
- MBR : Mem부터 쓰여질 혹은 Mem에서 읽어온 데이터를 일시적으로 저장
Interrupt
프로그램이 실행되는 중간에 현재 CPU가 실행하는 것을 중단하고 다른 동작 수행을 요구하는 호출
만약 Interrupt가 감지되면?
현재 실행하는거 중단하고 요구된 인터럽트를 위한 ISR(interrupt service routine)을 호출하여 수행한다.
ISR
인터럽트 처리를 위한 서브 프로그램 루틴
Interrupt Control
- 인터럽트 요구하면 해당하는 그 인터럽트에 해당하는 ISR호출
- ISR끝나면 원래 프로그램 위치로 복귀
세부 동작
- 다음에 실행할 명령어 주소(현재PC 값)을 Stack에 저장
- ISR 실행
- Stack에 저장되 있던 주소로 돌아감
ISR호출을 위하여 PC값에 ISR의 시작 주소를 탑재
ISR의 시작 주소를 미리 정해진다.
기본 CPU 구조
폰 노이만 구조
- 코드와 데이터가 저장된 메모리 영역 공유
- 코드BUS와 데이터BUS를 공유한다
- 명령어 읽을 때 데이터 읽거나 쓸 수 없다
하버드 구조
- 코드와 데이터 메모리 영역 구분됨
- 코드 BUS와 데이터 BUS가 구분됨
- BUS가 구분되어 있어서 속도 빠름! → 명령어 읽을 때 데이터를 읽거나 쓸 수 있다.
CISC vs RISC
CISC
- 명령어 셋 복잡하다
RISC
- 평균 : 클럭당 하나의 명령어
- 로드/저장 구조 : 일단 모든 데이터를 Reg에 올려놓고 연산을 실행한다.
두가지를 합친 Hybrid Architectures
메모리
휘발성
- DRAM - 일반적인 메모리, 크기 작음, 일정 시간마다 Refrash해야함
- SRAM - 캐시메모리, 크기 큼, 속도 빠름, 전력이 공급되는 동안 데이터 보관 Refrash필요없음
비휘발성
- Flash
- 데이터를 쓰려면 반드시 영역 지우기를 해야함
- NAND Flash
- ROM형태의 읽기 불가능
- Data쓰기시간과 영역 지우기 시간이 짧다
- SSD
메모리 계층 구조

ARM Architecture
NEON
SIMD의 확장버전, 멀티미디어 및 신호처리 응용 프로그램의 성능향상을 위함
ARM based SoC
- SoC내부 IP들을 버스로 연결
- AMBA 규격 따름
- AHB : Burst mode
- APB : 빠를 필요가 없는 주변장치를 연결
- Peripheral Bridge : AHB와 APB의 속도 차이 때문에 존재
AMBA
- IP들 끼리의 통신 프로토콜
- ARM사가 개발한 on-chip 버스 표준
- on-chip버스를 사용하여 SoC내부의 IP를 연결하고 데이터 주고받음
BUS interface
- AHB : 속도가 빨라야하는 것들
- APB : 속도가 느려도 되는 것들
ARM Instruction
각각의 디코더있어야함, 32비트면 32비트디코더 따로 16비트 디코더 따로
ARM 명령
- 32비트 명령
- 중요한 동작
Thumb 명령
유저가 만든 프로그램 처리(별로 중요하지 않음)
- 16비트 명령
- 코드의 크기 줄어듬
- 좁은 메모리 인터페이스에서 효율적임
Thumb2 명령
- 32/16bit 명령어
- thumb보다 빠름
- 디코더 2개 사용함
ARM의 Operating Mode
- User mode : User task, 일반적인 어플리케이션, Un-privileged모드 시스템 자원을 사용하는데 제한
- FIQ mode : 빠른 인터럽트 처리
- IRQ mode : 일반적인 인터럽트 처리
- SVC mode : 시스템 자원 관리, Reset, SWI발생하면 SVC모드로
- System call : 커널 접근이 필요할 때 요청
- Abort mode : 메모리에서 읽거나 쓸 때 오류
- Undefined mode : ISA에 정의되어 있지 않은 명령 수행 시
- System mode : 커널 코드가 돌아야 할 때, privilege모드(시스템 자원 접근)
Exception
외부 요청 혹은 오류로 인해서 CPU의 동작 모드를 변환한다.예를 들어, interrupt가 발생하면 Exception이 발생한다.
interrupt가 발생하면, IRQ exception이 발생하고 이것을 처리하기 위해 IRQ mode로 변환, 해당 interrupt에 맞는 ISR을 실행한다.
ARM의 Exception
- Reset exception : SVC모드로 전환, 1순위
- Undefined Instruction exception : Undefined 모드로 전환, 6순위
- SWI exception : SVC모드로 전환, 6순위
- Prefetch Abort exception : 잘못된 주소에서 명령어 가져옴 Abort모드로 전환, 5순위
- Data Abort exception : 잘못된 주소에서 데이터 가져옴 Abort 모드로 전환, 2순위
- IRQ exception : IRQ모드로 전환, 4순위
- FIQ exception : IRQ모드로 전환, 3순위
우선 순위가 있다는 것 알아두자, Reset exception에 의한 SVC mode가 1순위
즉, 발생 과정을 요약하면
interrupt발생 → interrupt에 맞는 Exception발생 → Exception에 맞는 mode로 변환
Data Processing Example
- 대상 레지스터 : 명령어의 결과가 저장될 대상 레지스터를 가리키는 부분
- 소스 레지스터 : 명령어의 실행에 사용되는 데이터가 값이 저장되는 레지스터
Shift
- left shift
MOV R0, R0, LSL 7
//R0레지스터에 있는 값을 왼쪽 7칸 쉬프트
- right shift
MOV R0, R0, LSR 2
//R0레지스터에 있는 값을 오른쪽 2칸 쉬프트
//MSB는 0으로 채운다
Rotate
MOV R0, R0, ROR 2
//R0레지스터에 있는 값을 오른쪽으로 2칸 로테이트 시프트
rotate left shift는 없다
Assembly
ADD Rd, Rn, Rm
//Rd = Rn + Rm
//Load/Store 명령어 구조
LDR Rd, [Rn, Rm] //주소는 Rn + Rm으로 표현
LDR RD, [Rn, #N] //주소는 Rn + N으로 표현
STR Rd, [Rn, Rm]
STR Rd, [Rn, #N]
[]안에 있는건 주소이다.
즉 주소에서 값을 가져오겠다는 뜻
Barrel shifter
한 개의 연산으로 데이터 워드 내에 있는 다수의 비트를 이동하거나 회전시키는 하드웨어
만약, 32비트 배럴 시프터면 1사이클에 32비트를 이동가능하다.
파이프라인
다른 동작들을 동시에 실행하는 효과를 가진다.
ARM 명령어, 16비트 Thumb명령어 decoder를 별도로 가진다.
만약에, LDR명령을 사용하여 메모리에서 레지스터로 값을 가져올 때, 가져오는 시간이 오래 걸리기 때문에 바로 사용하지 않는다. 만약 바로 사용할 경우 interlock이 걸려 한템포 쉬고 다음 동작을 한다.
Cortex-M Processor
- 32비트 데이터 버스, 32비트 마이크로 컨트롤러
- 저전력(180nm) 여기서 nm는 선폭을 의미한다
- Harvard 구조
- 명령어 버스와 데이터 버스 분리
- 그러나 통합된 메모리 구조(부가 설명 헷갈림)
Thumb-2 명령어 지원
- 32비트 데이터 버스, 32 비트 레지스터
- 32비트 명령어와 16비트 명령어의 스위칭 없이 사용가능 → 오버헤드 X
- 높은 코드밀도, 높은 성능, 디코더 따로 사용
Interrupt
- NVIC에 의한 인터럽트 처리 : 각각 인터럽트에 우선순위를 부여한다.
메모리 구조
- 고정된 메모리 맵
- Aligned : 4바이트씩 접근
- un-aligned : 아무렇게나 접근
- 리틀 엔디안 / 빅 엔디안
- 가상주소 사용 X
Little Endian vs Bing Endian
- 리틀 : MSB가 하위주소에 ~ 점점 작아짐
- 빅 : LSB가 하위주소에 ~ 점점 커짐
Memory Mapped I/O
- 실제 메모리를 엑세스할 수 있는 주소 중의 일부를 주변기기에 할당
- 메모리 access방식에 차이가 없음
- 동일한 명령어 이용
'컴퓨터 공학(Computer Science) > 컴퓨터 구조' 카테고리의 다른 글
(컴퓨터 구조2) 레지스터 전송, 마이크로 연산 (0) | 2023.08.19 |
---|---|
(컴퓨터 구조1)디코더, 멀티플렉서, 레지스터, 메모리 (0) | 2023.08.16 |