* 시험일자 : '25. 4. 4.

* 준비기간 : '25. 2. 20. ~ '25. 4. 3.(약 6주)

 

안녕하세요! 이번에 ISACA에서 주관하는 CRISC(Certified in Risk and Information Systems Control) 시험에 응시하여 합격한 후기를 공유하고자 합니다. CRISC는 '국제 공인 위험 및 정보시스템 통제 전문가'라는 명칭을 가지고 있으며, CISA, CISM, COBIT 프레임워크로 잘 알려진 ISACA에서 시행하는 자격 시험입니다.

시험 난이도 및 준비

개인적으로 느낀 난이도는 충분한 학습이 필요한 수준이었지만, 과도하게 어렵지는 않았습니다. 꾸준히 공부하면 충분히 합격할 수 있는 시험이라고 생각합니다. 특히 CISSP, CISM, CISA 자격증을 보유하고 계신 분들이라면 시험의 주요 키워드와 출제 포인트를 더 빠르게 파악하실 수 있을 것입니다.
 

응시 동기

시험에 응시하기로 마음먹은 것은 실용적인 이유보다는 개인적인 성취감이 더 컸습니다. 여러 시험을 준비하고 합격하면서 다음 목표를 고민하던 중, ISACA 멤버십 혜택을 활용하고 자격증 유지 비용을 고려하여 같은 기관의 시험을 선택하게 되었습니다. 해외 자격증 시험의 높은 응시료가 부담되기는 하지만, 합격했을 때 얻는 성취감과 만족감이 상당해서 (어쩌면 약간 중독된 것일지도 모르겠습니다) 도전하게 되었습니다.
 

시험 환경 (온라인 vs 현장)

CRISC 시험은 온라인과 현장 시험 모두 가능하지만, 저는 현장 시험을 선택했습니다. 과거 미국에서 CISA를 응시하거나 코로나19 시기에 CISM을 응시했을 때는 온라인으로 시험을 봤었습니다. 이번에 굳이 현장을 택한 이유는 다음과 같습니다.
  1. 오랜만에 시험장의 분위기를 느껴보고 싶었습니다.
  2. 생각보다 집 근처에 시험장이 있어서 접근성이 좋았습니다.
  3. 온라인 시험 응시에 필요한 사전 준비(여권 확인, 웹캠으로 방 비추기 등) 절차가 번거롭게 느껴지기도 했습니다.
오랜만에 방문한 시험장에서 간단한 안내를 받고 CRISC 시험을 시작했습니다.

 

시험 진행 방식 및 결과 확인

시험은 모르는 문제를 플래그(Flag) 처리하고 나중에 다시 돌아와 풀 수 있는 방식으로 진행됩니다(ISC2 시험 방식과는 차이가 있죠). 제가 응시한 시험에서는 객관식 사지선다형 문제만 출제되었고, 여러 개의 답을 선택하는 유형의 문제는 없었습니다. 답안 수정 방식이 조금 독특했는데, 한 문제를 풀고 '확정' 버튼을 누르면 해당 문제가 잠금(Lock) 상태가 됩니다. 이를 수정하려면 별도의 '수정' 버튼(정확한 명칭은 기억나지 않네요. 2~3주 전 일이라 가물가물합니다)을 눌러 잠금을 해제해야 했습니다.
시험을 모두 마치면 응시 경험에 대한 간단한 설문조사가 진행되고, 설문 완료 후 바로 그 자리에서 시험 결과를 확인할 수 있습니다. 개인적으로는 CISA, CISM 때보다 훨씬 높은 점수로 합격해서 조금 놀랐습니다. (오히려 아슬아슬하게 합격해야 성취감이 더 큰 법인데 말이죠!) 아마 CISA, CISM은 1~2주 단기 집중 학습 후 바로 응시했기 때문에 점수 차이가 난 것이 아닐까 추측해 봅니다.

 

예비응시자를 위한 조언

CRISC는 국내 응시자가 많지 않은 시험이지만, 혹시 이 시험을 준비하는 분이 계신다면 다음 두 가지를 꼭 강조하고 싶습니다.
  1. ISACA QAE(Question, Answer & Explanations) 문제집을 여러 번 반복해서 풀어보세요.
  2. 위험 관리의 역할과 기능을 명확히 이해해야 합니다.
만약 관련 시험 응시 경험이 적거나 IT/위험 관리 분야 실무 경험이 부족하다면, ISACA가 선호하는 접근 방식(예: 특정 상황에서 가장 먼저 취해야 할 최선의 행동)을 철저히 익히는 것이 중요합니다. 이를 위해서는 이론서를 정독하는 것이 좋습니다. 또한, ISACA 시험 경험이 없다면 우선순위 판단 능력(예: 두 가지 선택지가 모두 옳을 때 '가장(Most)' 적절한 답을 고르는 능력 - 위험 평가 중 규정 위반 사항 발견 시 가장 먼저 해야 할 일)을 기르는 것이 매우 중요합니다.
어떤 경우든 이론서를 기반으로 공부하는 것이 마인드셋 확립과 깊이 있는 학습에 가장 이상적입니다. 하지만 비용이 부담스럽거나 다른 관련 자격증(CISSP, CISA, CISM 등) 취득 경험 또는 IT 위험 관리 실무 경력이 충분하다면 QAE 문제집만으로도 합격이 가능할 수 있다고 생각합니다.

 

주요 개념 정리 (시험 빈출 키워드)

아래는 시험을 준비하면서 반드시 알아야 할 핵심 개념들입니다. 기억에 의존해서 작성했지만, 시험에서 자주 언급되었던 내용들이므로 실제 시험에서도 중요하게 다루는 키워드일 가능성이 높습니다.
  • 3선 방어 (Three Lines of Defense): 국내에서는 자주 사용되지 않는 용어일 수 있지만, 위험 관리에 있어 중요한 개념입니다. 1선(운영 부서), 2선(관리/감독 부서), 3선(내부 감사)으로 역할과 책임(R&R)을 명확히 하여 다층적으로 위험을 관리하고 통제하는 체계를 의미합니다. 시험에서는 각 방어선의 역할과 기능을 묻는 문제가 출제되었습니다.
  • 위험 레지스터 (Risk Register): 식별된 위험을 등록하고 추적, 관리하는 종합적인 대장입니다. 위험의 현황과 수준을 기록하고 관리하는 핵심 도구이며, 아래 설명할 통제 레지스터와 혼동하지 않도록 주의해야 합니다.
  • 통제 레지스터 (Control Register): 식별되고 등록된 위험에 대한 대응책(통제 활동)을 기록하고 관리하는 대장입니다. 위험 레지스터와의 차이점, 기록되어야 할 내용, 활용 방법을 명확히 구분하여 이해하는 것이 중요합니다.
  • 위험 선호도 / 위험 감내도 (Risk Appetite / Risk Tolerance): 조직이 비즈니스 목표 달성을 위해 수용하고자 하는 위험의 수준(Risk Appetite)과 특정 위험에 대해 허용할 수 있는 최대 편차(Risk Tolerance)를 의미합니다. 위험 전문가는 조직의 위험 선호도와 감내도를 명확히 이해하고, 이를 바탕으로 경영진(C-level)에게 적절한 조언을 제공해야 합니다.
  • 핵심 위험 지표 / 핵심 통제 지표 (KRI / KCI): 주요 성과 지표(KPI)의 개념을 위험(Risk)과 통제(Control) 영역에 적용한 것입니다. 위험 수준이나 통제 효과성을 모니터링하기 위한 기준으로, 임계치(Threshold) 설정과 지속적인 관리가 필수적입니다.
  • 위험 관리 단계 (Risk Management Phases): (제가 임의로 붙인 명칭입니다) 위험을 식별(Identification)하고, 분석(Analysis)하고, 평가(Assessment)하며, 이에 대응(Response)하거나 완화(Mitigation)하는 일련의 과정입니다. CRISC 시험에서는 이 모든 단계의 기능, 필요성, 수행 방법 등에 대해 질문합니다.
  • 위험 거버넌스 (Risk Governance): 위험을 전사적인 관점에서 관리하기 위한 최상위의 전략적 체계입니다. 모든 비즈니스 의사 결정은 위험을 인지(Risk Awareness)한 상태에서 이루어져야 하며, 위험 거버넌스는 이를 지원하는 역할을 합니다.
혹시 CRISC 시험 응시를 고려 중이거나 시험에 대해 더 궁금한 점이 있으신 분은 언제든지 댓글로 문의해 주세요.

 

버스와 입출력장치

 

컴퓨터라는 것을 구분하면 제어장치 / 저장장치 / 입출력장치가 존재한다. 입출력장치는 사용자와의 상호작용을 하는 장치로 어떻게 보면 가장 느린 속도를 가지게 되는데(유저의 입력과 출력에 따른 Feedback은 전산적이지 않으니 말이다.) 이번시간에는 시스템의 통신경로인 버스를 알아보고 출력의 특징을 고려한 여러 가지 기본 개념을 알아보도록 하겠다.


시스템 버스

버스는 컴퓨터의 구성요소들을 서로 연결하는 데이터통로이다. 데이터 버스 / 주소 버스 / 제어 버스로 구분이된다. 개념도는 아래와 같다.

제어 버스(Control Bus)

데이터버스와 주소 버스를 제어하기위한 신호를 전송하는 통로이다. 양방향 버스이며, 세부 명령은 다음과 같은 것들이 존재한다.

  • 메모리 읽기 신호 : 주소가 지정하는 기억장소의 Data를 읽고, 버스에 해당 Data를 전송하는 제어신호
  • 기억장치 쓰기 신호 : 버스에 있는 Data를 기억장치 지정된 주소공간에 저장하는 제어신호
  • I/O 읽기 신호 : 지정된 입출력장치로부터 Data를 읽어 버스에 Data를 전송하는 제어신호
  • I/O 쓰기 신호 : 버스에 전송된 Data를 지정된 입출력장치로 출력하는 제어 신호

주소 버스(Address Bus)

주소버스는 메모리나 입출력장치로 기억장치 주소나 입출력장치의 포트를 전달하는 통로이다. 주소전달만을 수행하기 때문에 단방향 버스로 구분된다.

 

데이터 버스(Data Bus)

데이터 스는 시스템 요소 들간에 데이터를 전송하는데 사용되는 경로를 의미한다. CPU와 다른 장치사이에서 Data와 신호를 교환하는 버스로. 메모리와 입출력장치의 명령어나 데이터를 CPU로 전송하고, CPU의 연산결과를 기억장치나 입출력장치로 전송하는 역할을 수행한다. 모든 장치와 양방향으로 통신하는 특징이 있다.


입출력 매핑(I/O Mapping)

CPU가 입출력장치를 사용하고자 할 때 입출력장치에 사용될 메모리와 레지스터를 CPU가 접근하는 실제 주기억장치와 구분하지 않으면 메모리 매핑 입출력, 구분되어있으면 입출력 매핑 입출력 방식이라고 칭한다.

입출력 방식

CPU와 입출력장치간 데이터전송 방식은 여러 가지의 모드로 구분이 된다. 입출력장치의 늦지만 상호작용성을 고려하여 CPU를 거치지 않고 전송을 하는 방식또한 존재한다. 여러 가지 입출력 방식을 알아보자

  • Programmed I/O : CPU가 입출력이 완료되었는지 입출력장치를 지속적으로 검사하는 방식으로 I/O작업 시 CPU가 그 작업에 할당되어 다른 작업이 불가하다. CPU가 지속적인 검사를 요청하기에 Pooling 방식으로도 칭한다.
  • Interrupt I/O : 입출력장치의 사용이 필요한 순간 입출력 인터페이스가 CPU에게 사용요청을 Interrupt하는 방식이다. 입출력이 완료되면 CPU는 원래의 작업으로 돌아간다.
  • DMA(Direct Memory Access) : CPU를 경유하지 않고 DMA의 Cycle Stealing이라는 방식을 통해서 메모리와 입출력장치를 직접 매핑한다. 아래에서 Cycle Stealing을 조금 자세히 알아보자
  • Channel I/O : DMA의 한계를 극복하기 위해서 고안된 방식으로 애초에 입출력장치를 위한 CPU와는 독립적으로 동작하는 처리기(채널)이 존재한다.

DMA – Cycle Stealing

사이클 스틸링은 CPUDMA 컨트롤러 중 주기억장치에 먼저 접근(Access)하는 우선순위를 DMA 컨트롤러에게 주는 것을 의미한다. CPU의 연산 주기(Cycle)을 탈취하기에 저런 이름이 붙였다. Cycle Stealing을 수행한 DMA 컨트롤러는 한 번에 하나의 데이터 워드를 전송하고 버스의 제어를 CPU에게 반환한다. 이때 CPU는 메모리의 참조가 필요한 연산을 제외하고는 다른 작업을 수행할 수 있으며 Interrupt방식과 다르게 CPU의 상태보존(복귀를 위한)도 필요없다.


버퍼(Buffering)

버퍼란 입출력간에 사용하는 임시공간이다. 사용자의 입출력신호나 CPU의 연산결과를 일시적으로 저장하는 버퍼공간을 활용하면 한번에 신호를 몰아서 처리할 수 있는 작업이라고 볼 수 있겠다. 예시를 들자면 여러분이 바나나를 수확해서 공장(CPU)에 가져다 둔다고 가정하자(입력) 하나 수확하는데 1분이 걸린다면(오랜시간) 하나하나 옮기는거보다 다른일을 하고 있다가 요청이 들어오면(Interrupt) 10개씩 옮기는게 좋지 않겠는가? 버퍼는 그 바나나를 담아두는 공간이다.


정리

버스란 컴퓨터 내부에서 신호를 전달하는 통로이다. 시스템에서 사용하는 버스는 제어 / 주소 / 데이터버스가 있다. 입출력은 사용자와 컴퓨터간에 신호와 데이터를 전달하는 과정이라고 할 수 있다. 그 방식은 인터럽트 / 채널 / DMA와 같은 방식이 있고 그 과정에서 효율성을 올리는 버퍼를 사용한다.

 

다음시간에는

다음시간에는 입출력포트에 대해서 같이 공부해보겠다.(내가 모르는게 엄청 많구나...)

 

메모리 계층구조(Memory Hierchy)

메모리 계층구조는 다음의 그림으로 표현된다.

단순하다.. ㅎ 아무쪼록 위의 그림과 같이 저장장치를 필요에 따라 여러 가지 종류로 구분한 것을 의미한다. 이 중 CPU안에 레지스터와 캐시가 존재하며 CPU의 연산에 직접적인 지원을 한다. 반면 그들보다 비교적 큰용량의 메모리는 CPU외부에 존재하며 CPU와 아주 느린 저장장치 하드디스크 사이에서 동작한다.

 

메모리 계층구조는 컴퓨터를 설계함에 있어 성능과 용량의 Trade-off관계 속 최적화를 위해서 존재한다. 생각해보자, 만약 메모리가 하드디스크보다 빠르니까 메모리를 2TB연결해버리면 가격이 무지막지 하게 올라갈 것이다. 실제로는 그렇지 않아도 속도가 많이 차이나지 않는데, 바로 지역성(Locality) 때문이다. 컴퓨터에서 한번 참조된 기억장치 영역은 다음번에도 자주 사용될 가능성이 크다는 성질인데, 이 성질을 생각해보면 굳이 비싼 돈 들여서 고 비용의 저장장치로 사용자가 원하는 용량을 채울 필요가 없다는 결론이 나온다.

 

지난일련의 포스팅으로 레지스터 + 메모리는 설명이 되었고, 하드디스크는 보조기억장치이니 중간에 있는 캐시 메모리의 설명이 부족한 상황이다. 자세하게 알아보도록 하자


캐시메모리

메모리 계층구조에서 나눈 경계에는 속도차이가 반드시 발생한다. 특히 CPU내부와 외부의 경계에서 이 속도차이가 극화되는데, 이 속도차이를 어느정도 보상하는 메모리가 캐시메모리이다. 메모리에서 자주사용되는(지역성있는) 공간을 캐시메모리에 적재하여 전체적인 성능을 향상시키는 것이다.

위와 같이 이해하면 되겠다. 캐시가 바로 지역성(Locality)를 최대로 활용하는 소자이다. 말이나왔으니 조금 더 알아보면 지역성은 최근의 사용된 데이터의 인접한 데이터가 자주 사용되는 공간지역성(Spatial Locality)와 최근에 사용된 데이터가 재참조될 가능성이 높은 시간지역성(Temporal Locality)로 구분할 수 있다.


가상메모리(Virtual Memory)

보조기억매체속의 프로그램은 PID를 부여받고 주기억장치(메모리)에 적재되는 순간 프로세스라는 이름으로 불리우는데, 만약 이 주기억장치(메모리)에 모든 공간이 차면 어떻게 될까? 더는 프로세스를 생성할 수 없는 것은 아니고 넓은 용량을 가지는 보조기억장치 공간의 일부 구역을 주기억장치(메모리)처럼 사용하는 “가상 메모리(Virtual Memory)”라는 기법이 해결책이다.

 

CPU는 메모리 관리 장치를 사용한다. MMU(Memory Management Unit)이라고 불리는 이 요소는 CPU에 직접적인 접근을 방지하고 메모리를 통해서만 접근할 수 있도록 한다. 위에 서술된 상황처럼 메모리가 부족하거나 모종의 이유로 메모리에 원하는 데이터가 없는 경우를 페이지 폴트(Page Fault)라고 칭한다. 이러면 MMU가 메모리의 일부영역을 메모리영역으로 지정해서 실제의 메모리와 그 영역을 교환하여 데이터를 참조할 수 있게하는데 이 과정을 SAWP이라고 한다. 당연하겠지만 이런 SWAP이 자주 발생되면 성능이 많이 저하된다. 그 현상을 Thrashing이라고 부른다.

 


메모리 단편화(Fragmentation)

메모리리 상에 데이터가 적재될 때는 적절하게 크기를 맞출 수 없어서 발생하는 낭비가 있다. 이를 단편화(Fragmentation)라고 칭한다. 단편화에는 내부단편화와 외부단편화가 존재하는데, 내용은 아래도표와 같다.

메모리를 분할하는 기법은 고정된 길이로 분할하는 페이지(Page)기법가변길이로 분할하는 세그멘테이션 기법이 발생한다. 단편화는 페이지기법의 경우에는 고정된 크기보다 낮은 크기의 프로세스를 할당할 때 발생하는 낭비인 내부 단편화, 세그멘테이션 기법의 경우에는 프로세스를 아예 할당을 하지못하는 외부 단편화가 존재한다.


정리

이번시간에는 메모리에 대해서 세부적으로 알아보았다. 캐시와 가상메모리도 알아보고, 메모리에서 발생할 수 있는 낭비인 단편화에 대해서 알아보았다.

 

다음시간에는

저장장치를 자세하게 알아보았으니 다음시간에는 입출력장치에 대해서 자세하게 알아보도록 하겠다.

 
 
 
 

마이크로 아키텍처

 

마이크로 아키텍처 혹은 CPU 아키텍처는 CPU 또는 이와 관련된 디지털 신호 처리기의 회로다. 기본적으로 CPU가 처리하는 일이 함수의 읽음 -> 해석 -> 실행 -> 결과기록이었던 것을 생각해보면 이것이 매우 세부적인 수준에서 기술되어있는 것이 마이크로 아키텍처라고 칭할 수 있겠다. 이것은 CPU 제조사 마다 달라지는데, 대중적인 CPU 종류는 다음과 같다


병렬처리

CPU는 그 높은 연산능력을 바탕으로 빠르게 지정된 연산을 수행한 후에 결과를 반환하는 소자이다. 병렬처리는 몇몇 명령어의 구조적인 최적화 등 일련의 방법을 통해서 명령어를 동시에 수행하는 기법이다. 대표적인 병렬처리 방식인 파이프라인 / 슈퍼스칼라를 알아보도록 하자

 

병렬처리 – 파이프라인(Pipeline)

명령어 파이프라인(Instruction Pipeline)은 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술이다. 다음의 도표를 보자

꽤 직관적인 그림인데, 한 개의 행을 하나의 명령어로 볼 때 그 명령어들을 여러개의 단계로 구분하고 다음 명령어의 처리를 기다린다면 다른 명령어의 다른 단계를 수행하는 방식인 것이다. 위에사진은 명령어를 기반으로 구분되어있는데, CPU 클록 주기에 맞추어 더욱 병렬성을 높인 슈퍼파이프라인 방식도 존재한다.

 

병렬처리 – 슈퍼스칼라(SuperScala)

파이프라인이 그래도 한번에는 같은 스텝의 하나의 명령어를 수행한다면 슈퍼스칼라방식은 애초에 명령어를 처리할 수 있는 스레드를 여러가지 사용하는 방식이다.

다른 기법으로 VLIW(Very Long Instruction Word)가 있다. 동시 실행 가능한 여러 가지의 명령을 하나의 긴 명령으로 재 배열하여 처리하는 방식이다.(명령어의 합성)


파이프라인 해저드

파이프라인 해저드(Hazard)라는 용어가 있다. 병렬처리기법을 사용함에도 불구하고 오히려 속도가 저하되는 현상인데, 의존성이나, 순서등에 의해서 발생하며 데이터 해저드(명령어 의존성으로 발생), 제어 위험(순서에 의한 발생), 구조적위험(자원 동시 접근에 의한 위험) 으로 구분된다.

 

이러한 파이프라인 해저드는 어느정도는 보완할 수 있다. 예를 들면 최근에 발생한 분기의 결과를 토대로(분기 역사표) 다음의 분기를 예측하여 데이터/제어의 해저드를 어느정도 극복하는 방식이 있겠다.


정리

이번시간에는 CPU의 구조를 기술하는 마이크로 아키텍처의 개념과 여러 가지 병렬처리 기법 및 파이프라인의 해저드까지 간단하게 알아보았다.

 

다음시간에는

메모리 계층구조에대해서 알아보자

 

 

CPU(중앙처리장치)는 디지털 시스템에서 모든 연산을 처리하는, 따지면 뇌와 같은 기관이다. 빠른 연산속도를 가지고 명령의 해석이나 연산을 수행하는 기관으로 컴퓨터 논리기관의 핵심적인 소자라고 할 수 있다.

 

임베디드 기사에서는 위와 같은 이유로 CPU의 구조와 세부적인 내용을 시험으로 출제하고 있다. 하나하나 알아보자.


CPU의 개요

Central Process Unit, 중앙처리장치의 풀네임이다. 중앙에서 다 해먹는 중요한 처리장치라고 할 수 있겠다. 현대의 CPU구조는 1970년에 페드리코 페긴이 개발한 구조와 설계에서 기인했다고 한다. 컴퓨터 시스템은 운영 간 수많은 명령어를 처리하는데, 명령어를 기준으로 다음과 같은 기능을 가진다.

  • 인출(Fetch) : 저장공간상에 프로그램카운터(PC, 후술)이 가리키는 명령어를 가져와서 연산공간에 적재한다.
  • 해석(Decode) : 사용자나 시스템에 의해서 지정된 명령어를 해석하고 실행가능한 코드로 변환한다.
  • 실행(Execute) : 해석된 명령어에 따른 연산을 수행한다.
  • 쓰기(Writeback) : 명령어 수행결과를 다시 저장공간(메모리)에 작성한다.

CPU의 구성

CPU는 내부는 다음과 같은 개념도를 가진다.

<위키백과 - CPU - https://ko.wikipedia.org/wiki/%EC%A4%91%EC%95%99_%EC%B2%98%EB%A6%AC_%EC%9E%A5%EC%B9%98 >

위 그림에서 INPUT / OUTPUT과 저장공간(Main Memory)를 제외한 살구색 범위가 CPU의 내부 요소라고 보면 되겠다.

  • 제어부(Control Unit) : CPU와 전체 회로의 동작을 제어하게 되는 부품이다. 입출력장치와의 통신과 데이터처리를 수행한다.
  • 버스(Bus) : 데이터의 통신이 수행되는 모든 데이터의 전송경로를 Bus라고 부른다. 용도와 목적에 따라 입출력 버스 / 내부버스 등으로 구분되는데 CPU내부에 존재하는 버스는 내부버스라고 칭한다.
  • 산술논리장치(ALU;Arithmetic logic Unit) : CPU에서 연산을 전담하는 기관이다.
  • 레지스터 : CPU내부에서 특정한 기능을 수행하는 부품들이다. CPU를 구성하기 위해서 반드시 다음과 같은 레지스터가 필요하다.
    • 프로그램 카운터(Program Counter) : 다음 실행될 명령어의 주소를 가지고 있는 레지스터 이다. 다음 명령어가 인출(Fetch)된 이후에 다음 공간을 가리키기위해서 주소단위로 증가한다.
    • 명령어 레지스터(Instruction Register) ; 가장 마지막으로 실행된 명령어가 저장되어 있다.
    • 누산기(AC) : 연산을 위해서 일시적으로 저장되는 데이터를 가리키는 레지스터이다.
    • 메모리 버퍼 레지스터(MBR; Memory Buffer Register) : 기억장치에서 읽어들어온 데이터가 일시적으로 저장되는 레지스터다.
    • 메모리 주소 레지스터(MAR; Memory Address Register) : PC에 지정된 명령어 주소가 CPU로 넘어가기 전에 일시적으로 저장되는 공간이다.

명령어의 해석 

CPU나 마이크로 프로세서마다 길이와 구조가 달라진다. 실제로는 01의 연속된 임의의 길이로 구성되어있는데, 세상에 이것을 보고 작성할 수 있는 설계자가 어디있으랴, 이를 일정길이단위와 규격으로 기계어를 사람이 적어도 알아볼 수 있게 매핑해 둔 명령어 구조가 어셈블리어(Assembly)어 이다. 이를 통해서 우리는 CPU명령이 어떤 구조로 이루어져있는지를 알 수 있고 이 구소를 명령어 집합 구조(ISA; Instruction Set Architecture)라고 칭한다.

 

이 구조를 알기위해서 반드시 알아야하는 대표적인 CPU의 구조 구분으로 RISCCISC를 알아보겠다.

 

CISC vs RISC

RISC(Reduced Instruction Set Computer)은 지정된 CPU의 명령어 수를 압도적으로 줄여서 개별 명령어의 실행속도를 빠르게 한 컴퓨터 종류를 의미한다. 명령어 파이프라인(동시수행)을 통해 실행속도를 높여 후술될 비교대상군인 CISC의 느린속도 단점을 극복한다. 실제로 사용되는 명령어 개수가 적다는 점에서 착안하였다.

 

CISC(Complex Instruction Set Computer)은 반대로 RISC보다 많고 긴 명령어를 지원하는 컴퓨터 종류이다. 회로도 복잡해지지만 피연산자를 2~3개까지 지정할 수 있어서 일부 명령어는 재인출 없이 명령어 안쪽에서 처리되는 등(피연산자 12의 연산결과를 3에 지정) 직관적으로 변환한다. 요즈음은 실제로는 CISC구조 이더라도 내부적으로 파이프라인(병렬처리)를 다 수행하기 때문에 구분에 큰 의미가 없다는 정보도 뜨문뜨문 보이는거 같다.

 

명령어 지정방식

아무튼 명령어 지정방식에 컴퓨터구조에 따른 차이가 있다는 것을 알았고 본격적인 명령어의 지정방식에는 피연산자의 개수에 따라 0~3 operand가 존재한다.(Ex 1-operand면 피연산자가 1개이다.) 이 피연산자를 지정하는 방식이 여러 가지가 있는데, 다음과 같다.

  • 레지스터(Register) : 레지스터에 저장된 값을 접근할 때 사용한다.
  • 즉치방식(Immediately) : 명령어 자체에서 상수 값을 읽어올 때 지정한다.
  • 직접방식(Direct) : 고정된 주소의 메모리를 접근할 때 지정한다.
  • 레지스터 간접방식(Register Indirect) : 레지스터에 있는 주소의 메모리를 접근할 때 사용한다.
  • 거리방식(Distance) : 레지스터에 있는 주소에 일정 거리를 더한 주소의 메모리를 접근할 때 사용한다.
  • 인덱스방식(Index) : 레지스터에 있는 주소에 다른 레지스터 값에 해당하는 거리를 더한 주소의 메모리를 접근할 때 사용한다.

정리

중앙처리장치(CPU;Central Process unit)은 디지털 시스템의 뇌와 같은 기관으로 명령어의 해석 / 연산등을 담당한다. 내부에는 명령어 수행을 위한 레지스터와 제어부 같은 소자들이 존재한다. 이 명령어는 CPU의 방식(RISC vs CISC)에 따라 명령어의 구조나 길이가 달라진다.

 

다음시간에는

명령어의 병렬처리방식인 슈퍼스칼라방식과 파이프라인등을 알아보고 파이프라인의 해저드 등을 알아보도록 하겠다.

HDL

하드웨어 기술언어(HDL; Hardware Description Language)은 전자회로를 기술하는데 사용하는 컴퓨터언어이다. 즉 임베디드의 소자 제어를 위한 컴퓨터언어라고 할 수 있겠다.(이 무슨... 전자공학과 컴퓨터공학에 가교역할을 하는 혼종이란 말인가..) HDL은 설계(Design)과 기술(Description) 모든 목적으로 사용된다. 프로그램을 사용할 수 있으면 미리 회로를 작성하고 시뮬레이션하여 기댓값을 예측해 볼 수 있다.(비용 효율적!!)

 

FPGA(Field Programmable Gate Array)

FPGAHDL를 통해서 설계가 가능한 반도체 소자이다. 단순한 Gate(AND / NOR / NOT )이나 이를 활용한 조합논리나 순서논리회로를 내부에 포함하고 있고 이를 복제하여 사용자가 원하는 방향으로 커스터마이즈된 설계를 할 수 있다. 일반적으로 HDL의 표준으로 분류되는 VHDLVerilog를 사용한다. 둘다 임베디드 기사의 시험범위이기 때문에 간단하게 알아보자


HDL VHDL(VHSIC HW Description Language)

VHDL의 시작은 미국 국방부였다고 한다. 주문형 집적회로(ASIC)의 문서화를 위해서 사용된 언어였으나 오늘날에는 설계나 검증 등 범용적으로 사용되고 있다고 한다.

 

다음은 VHDL을 활용한 대표적인 코드 형태이다. (AND게이트)

-- (this is a VHDL comment)

-- import std_logic from the IEEE library
library IEEE;

use IEEE.std_logic_1164.all;

-- this is the entity

entity ANDGATE is
port (
I1 : in std_logic;
I2 : in std_logic;
O : out std_logic);
end entity ANDGATE;

-- this is the architecture
architecture RTL of ANDGATE is
begin
O <= I1 and I2;
end architecture RTL;

 

위를 통해서 알 수 있는 것은 주석(--), Library의 사용선언(Library)과 모듈 import(use) 게이트의 선언(entity ~ is ~ end entitiy) 키워드 등이 있는 것을 알 수 있다. 다행이도 직관적인거 같다. 조금 더 자세한 코드를 보면 아래 링크에 자세한 반복문과 제어문, 펄스생성등의 코드등이 존재한다. 읽어보면 직관적이어서 알기 쉽다.

 

VHDL - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 가산기를 표현하는 VHDL 소스. VHDL(VHSIC Hardware Description Language)은 디지털 회로 및 혼합 신호(mixed-signal, 아날로그 신호 포함)를 표현하는 하드웨어 기술 언어이다.

ko.wikipedia.org


HDL Standard – Verilog

무려 IEEE 1364으로 표준화가 되어있다. Verilogc언어와 비슷한 문법을 가지고 있어서 가독성이 높다. ifwhile과 같은 제어 반복문도 C와 동일하며 큰 차이점은 begin ~ end로 대체되는 중괄호 정도가 있겠다. VerilogVHDL보다 시험에서 정교하게 물어본다. 시험범위로 VHDL은 맥락적으로 질의하지만 Verilog는 이용한 논리회로 설계까지 물어보니 간단한 프로그램코드는 읽을 수 있게 하는게 좋을 거 같다.

 

Verilog 수

컴퓨터 상수 표현을 위해서 0x, 0o등을 사용하듯이 Verilog에서도 수를 특정한 방식으로 표현한다. [bit]’[진수][숫자] 순서로 표현되는데, 예시로 8’o4728비트 8진수 472를 의미한다.

 

Verilog에는 시스템 태스크라고 불리우는 특정 상수(일종의 기능포함)가 있다. 보통 테스트를 위해서 사용된다고 하며 대표적인 상수/함수는 다음과 같은 것들이 있다.

  • $display(인자) : 표준출력으로 표현하다. 개행이 포함되어있다.
  • $write(인자) : 표준출력으로 표현하나, 개행이 포함되어있지 않다.
  • $finish, $stop : 시뮬레이션을 종료한다. $stop의 경우 회로가 꺼지는 것은 아니고, 대기 상태가 된다. 반대로 $fisnish는 진짜 회로가 꺼진다.(제어권이 박탈된다.)
  • $time : 현재의 시간이 표현된다.
  • $random : 난수가 출력된다.

 

c와 비슷하다고 해서 필자도 공부를 위해 읽어보았는데, 이게 진짜 C랑 비슷한건지 싶긴했다... 코드로 작성된 것을 여러번 읽어보는게 좋을 거 같다. 사용되는 연산자도 의미가 살짝살짝 다르다. 아래의 Site에서 Verilog읽는 법을 공부할 수 있다.

 

Verilog Tutorial

This complete Verilog beginners tutorial will take you from basic datatypes to building hardware circuits in no time using real simple examples - click now !

www.chipverify.com


정리

이번시간에는 회로를 표현하고 설계할 수 있는 프로그래머블 언어인 HDL에 대하여 알아보았다. HDL에는 대표적으로 VHDLVerilog가 있고 시험을 위해서는 Verilog를 조금 더 구체적으로 알고 있어야 한다.

 

다음시간에는

다음시간에는 CPU대해서 자세하게 알아보는 시간을 가질 것이다. 구조부터 살펴보는 시간이 있겠다.

 

+ Recent posts