혼공컴운 18

명령어 병렬 처리 기법

명령어 병렬 처리 기법 명령어 병렬 처리 기법 명령어 파이프라이닝 슈퍼스칼라 비순차적 명령어 처리 명령어 파이프라이닝: 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법 명령어 인출 명령어 해석 명력어 실행 결과 저장 CPU는 한 명령어를 '인출'하는 동안에 다른 명령어를 '실행'할 수 있고, 한 명령어가 '실행'되는 동안에 연산 결과를 '저장'할 수 있음 파이프라인 위험 데이터 위험: 명령어 간 '데이터 의존성'에 의해 발생 제어 위험: 분기 등으로 인한 '프로그램 카운터의 갑작스러운 변화'에 의해 발생 구조적 위험 (자원 위험): 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 ㄷ긍고 같은 CPU 부품을 사용하려고 할 때 발생 슈퍼스칼라: CPU 내부에 여러 개의..

빠른 CPU를 위한 설계 기법

빠른 CPU를 위한 설계 기법 클럭 헤르츠 (Hz)단위로 측정, 클럭이 1초에 100번 반복되면 CPU 클럭속도는 100Hz 클럭은 실제로 일정하게 유지되지 않음, 고성능을 요하는 순간에는 순간적으로 클럭 속도를 높이고, 그렇지 않을 때는 유연하게 클럭 속도를 낮추기도함. 최대 클럭 속도를 강제로 더 끌어올릴 수 있는데, 기법을 오버클럭킹이라고함 코어와 멀티코어 CPU = 코어 멀티코어 CPU (멀티코어 프로세서): 코어를 여러개 포함하고 있는 CPU 코어마다 처리할 명령어들을 얼마나 적절하게 분배하냐에 따라 연산 속도가 크게 달라짐 스레드와 멀티스레드 스레드: '실행 흐름의 단위' 하드웨어적 스레드: 하나의 코어가 동시에 처리하는 명령어 단위 멀티스레드 프로세서 (멀티스레드 CPU): 여러 스레드를 지..

명령어 사이클과 인터럽트

명령어 사이클과 인터럽트 명령어 사이클 프로그램 속 각각의 명령어들의 일정한 주기 인출 사이클 메모리에 있는 명령어를 CPU로 가지고 오는 단계 실행 사이클 CPU로 가져온 명령어를 실행하는 단계 모든 명령어가 간단히 실행되는건 아님 명령어를 인출하여 CPU로 가져왔다 하더라도 곧바로 실행할 수 없는 경우도 있기 때문임 간접 주소 지정 방식은 오퍼랜드 필드에 유효 주소의 주소를 명시함, 명령어를 실행하기 위해서 메모리 접근을 한 번 더 해야 하기 때문에 바로 실행 사이클에 돌입할 수 없음 인터럽트 CPU의 작업을 방해하는 신호 동기 인터럽트 (예외): CPU에 의해 발생하는 인터럽트 비동기 인터럽트 (하드웨어 인터럽트): 입출력장치에 의해 발생하는 인터럽트 하드웨어 인터럽트 알림과 같은 인터럽트 하드웨어..

레지스터

레지스터 알아야할 레지스터 프로그램 카운터 명령어 레지스터 메모리 주소 레지스터 메모리 버퍼 레지스터 범용 레지스터 플래그 레지스터 스택 포인터 베이스 레지스터 프로그램 카운터 (명령어 포인터) 메모리에서 읽어 들일 명령어의 주소를 저장 명령어 레지스터 메모리에서 읽어 들인 명령어를 저장 메모리 주소 레지스터 메모리의 주소를 저장 CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 거치게 됨 메모리 버퍼 레지스터 (메모리 데이터 레지스터) 메모리와 주고받을 값 (데이터와 명령어)을 저장 CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받을 값을 메모리 버퍼 레지스터를 거침 1. 1000번지부터 1500번지까지 저장되어 있다고 가정 2. 프로그램을 실행하기 위..

ALU와 제어장치

ALU와 제어장치 ALU ALU가 계산을 하기 위해서는 피연산자와 수행할 연산이 필요함 ALU는 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들임. ALU는 레지스터와 제어장치로부터 받아들인 피연산자와 제어 신호로 산술 연산, 논리 연산 등 다양한 연산을 수행함 ALU가 내보내는 정보 연산 결과값, 추가적인 상태 정보 플래그 플래그 레지스터 부호 플래그 제로 플래그 캐리 플래그 오버플로우 플래그 인터럽트 플래그 슈퍼바이저 플래그 제어장치 제어 신호를 내보내고, 명령어를 해석하는 부품 제어 신호: 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호 제어장치는 클럭 신호를 받아들인다. 제어장치는 해석해야할 명령어를 받아들인다. 제어장치는 플래그 레지스터 속 플래그 값을..

명령어의 구조

명령어의 구조 연산코드와 오퍼랜드 '무엇을 대상으로, 어떤 작동을 수행하라'는 구조로 되어 있음 명령어 연산 코드 (연산자): 명령어가 수행할 연산 오퍼랜드 (피연산자): 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치 연산 코드 오퍼랜드 오퍼랜드 0-주소 명령어: 오퍼랜드가 하나도 없는 명령어 1-주소 명령어: 오퍼랜드가 하나인 명령어 2-주소 명령어: 오퍼랜드가 두 개인 명령어 3-주소 명령어: 오퍼랜드가 세 개인 명령어 연산 코드 데이터 전송 MOVE: 데이터를 옮겨라 STORE: 메모리에 저장하라 LOAD (FETCH): 메모리에서 CPU로 데이터를 가져와라 PUSH: 스택에 데이터를 저장하라 POP: 스택의 최상단 데이터를 가져와라 산술/논리 연산 ADD/SUBTRACT/MULTI..

소스코드와 명령어

소스코드와 명령어 고급 언어와 저급 언어 저급 언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어 기계어: 0과 1의 명령어 비트로 이루어진 언어, 가독성을 위해 십육진수로 표현하기도 함 어셈블리어: 0과 1로 표현된 명령어 (기계어)를 읽기 편한 형태로 번역한 언어 컴파일 언어와 인터프리터 언어 컴파일 언어: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어 C 언어 컴파일: 컴파일 언어로 작성된 소스 코드 전체가 저급 언어로 변환되는 과정 컴파일러 컴파일을 수행해 주는 도구 소스 코드에 문법적인 오류는 없는지, 실행 가능한 코드인지, 실행하는 데 불필요한 코드는 없는지 검사하며, 저급 언어로 컴파일함 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패함 목적코드: 성공적..

컴퓨터 구조를 알아야 하는 이유

컴퓨터 구조를 알아야 하는 이유 컴퓨터 구조 개발자가 되려면 반드시 알아야 할 기본 지식 컴퓨터 구조를 이해하면 얻을 수 있는 이점 문제해결 능력 ⬆️ 개발할 때는 문제 없이 작동했던 코드가 실제 사용자들에게 선보이는 자리에서는 작동하지 않는 상황이 많이 생김 컴퓨터 구조를 이해하고 있다면 '미지의 대상' 이 아닌 '분석의 대상'일 테니 문제 해결의 실마리를 다양하게 찾을 수 있음 성능, 용량, 비용 고려해 개발 가능 컴퓨터 구조의 큰 그림 컴퓨터가 이해하는 정보 데이터 명령어 컴퓨터의 4가지 부품 CPU (중앙처리장치): 메모리에 저장된 명령어를 읽고, 해석하고, 실행함 메모리 (주기억장치): 현재 실행되는 프로그램의 명령어와 데이터를 저장함 보조기억장치: 전원이 꺼져도 보관할 프로그램을 저장함 입/출..