CS

ALU와 제어장치

2023. 7. 7. 22:00
목차
  1. ALU와 제어장치
  2. ALU
  3. 플래그
  4. 제어장치
  5. 레지스터
  6. 필수로 알아야하는 레지스터
  7. 명령어 사이클과 인터럽트
  8. 명령어 사이클
  9. 인터럽트
  10. 빠른 CPU를위한 설계 기법
  11. 클럭
  12. 코어와 멀티코어
  13. 스레드와 멀티스레드
  14. 명령어 병렬처리 기법
  15. 명령어 파이프 라인 , 파이프 라이닝
  16. 슈퍼스칼라
  17. 비순차적 명령어 처리
  18. CISC와 RISC
  19. 명령어 집합 Instruction Set Architecture
  20. CISC
  21. RISC
  22. 질문
  23. 공통질문

ALU와 제어장치

ALU

  • 계산만을 담당하는 계산기
  • 계산을 하기 위해서는 피연산자(계산할 데이터) 수행할 연산이 필요함
  • ALU는 레지스터를 통해 피연산자를 받아들이고, 수행할 연산을 제어신호를 받아들임 + -  x /
  • 연산을 수행한 결과는 특정 문자, 메모리주소가 될 수 있음 이 결과를 레지스터에 저장함
  • ALU는 계산결과와 더불어 플래그를 레지스터에 저장함
  • 계산한 결과가 레지스터보다 클때 결과값이 크다 라는 정보를 내보냄 = 오버플로우
  • 연산결과에 대한 추가적인 상태정보를 플래그 라고함

플래그

- 플래그 들은 플래그 레지스터라는 레지스터에 저장됨

부호플래그

  • cpu가 피연산자와 수행할 연산을 받아 연산을 수행한 후 결과로 나온 값의 부호를 나타내는 플래그
  • 부호플래그가 1일때는 - , 0일때는 +

제로플래그

  • 연산결과가 0인지 나타냄
  • 제로플래그가 1일때 결과는 0, 0일때 연산결과는 0이 아님

캐리 플래그

  • 연산결과 올림수나 빌림수가 발생했는지 나타내는 플래그
  • 캐리플래그가 1일 경우 올림수나 발림수가 발생했음을 의미, 0일때는 발생하지 않았음을 의미

오버플로우 플래그

  • 오버플로우(연산한 결과가 레지스터의 영역보다 큰 경우)가 발생했는지를 나타냄
  • 오버플로우 플래그가 1 일경우 인터럽트가 가능함을 의미, 0일경우 인터럽트가 불가능함을 의미

인터럽트 플래그

  • 인터럽트가 가능한지 나타내는 플래그
  • 인터럽트 플래그1 => 인터럽트가능, 인터럽트플래그0 => 인터럽트 불가능

슈퍼바이저 플래그

  • 커널모드로 실행중인지 사용자모드로 실행중인지 나타내는 플래그
  • 1일경우 커널모드, 0일경우 사용자모드

제어장치

  • 제어장치는 제어신호를 내보내고 명령어를 해석하는 부품
  • 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기신호

제어장치는 클럭신호를 받아들임

  • 클럭(clock)은 컴퓨터의 모든 부품을 일사분란하게 움직일 수 있게하는 시간단위
  • 하나의 명령어가 여러 클럭에 걸쳐 실행될 수 있음

제어장치는 해석해야할 명령어를 받아들임

  • cpu가 해석해야 할 명령어는 명령어 레지스터라는 레지스터에 저장됨

제어장치는 플래그 레지스터 속 플래그 값을 받아들임

  • 플래그는 ALU연산에 대한 추가적인 상태정보
  • 제어장치는 플래그값을 받아들이고 이를 참고하여 제어신호를 발생시킴

제어장치는 제어버스로 전달된 제어신호를 받아들임

  • 제어신호는 CPU 외부장치도 발생시킬 수 있음, 제어버스를 통해 외부로 전달된 제어신호를 받아들임

CPU 내부로 제어신호 전달

  • ALU에 전달하는 제어신호, 레지스터에 전달하는 제어신호로 나뉨
  • 레지스터에는 레지스터간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위한 제어신호

CPU 외부로 제어신호 전달

  • 메모리에 전달하는 제어신호, 입출력 장치에 전달하는 제어신호 두가지
  • 메모리에 저장된 값을 읽거나, 쓸떄 메모리로 제어신호 내보냄
  • 입출력장치의 값을 읽거나 입출력장치에 새로운값을 쓰고 싶을때 입출력장치로 제어신호 내보냄

*제장치는 플래그 레지스터로부터 플래그 값을 받아들이고, 명령어 레지스터로부터 현재 해석할 명령어를 받아들임 그리고 제어버서를 통해 제어신호를 내보냄(외부로)

레지스터

  • 프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장됨

필수로 알아야하는 레지스터

  • 프로그램 카운터
  • 명령어 레지스터
  • 메모리 주소 레지스터
  • 메모리 버퍼 레지스터
  • 플래그 레지스터
  • 범용 레지스터
  • 스택 포인터
  • 베이스 레지스터

프로그램 카운터

  • 메모리에서 가져올 명령어의 주소, 메모리에서 읽어들일 명령어의 주소를 저장함
  • 명령어 포인터라고도 부름

명령어 레지스터

  • 해석할 명령어, 방금 메모리에서 읽어들인 명령어를 저장하는 레지스터

메모리 주소 레지스터

  • 메모리의 주소를 저장하는 레지스터
  • CPU가 읽어들이고자 하는 주소값을 주소버스로 보낼 때 메모리 주소 레지스터를 거침

메모리 버퍼 레지스터

  • 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터, 읽기 쓰기
  • 데이터 버스로 주고받을 값은 메모리 버퍼 레지스터를 거침, 메모리 데이터 레지스터

실행흐름

실행할 프로그램이 메모리에 저장되어 있음 -> 프로그램 카운터에 처음 실행할 프로그램의 메모리 주소 저장 -> 메모리 주소를 읽어 들이기 위해 메모리 주소 레지스터에 프로그램 카운터에 저장된 메모리 주소를 메모리 주소저장 -> 메모리 읽기 제어신호, 메모리주소 레지스터 값이 각각 제어 버스와 주소 버스를 통해 메모리로 보내짐 -> 메모리 주소에 저장된 값은 데이터 버스를 통해 메모리 주소 레지스터에 전달, 프로그램 카운터는 증가되어 다음 명령어를 읽을 준비 -> 메모리 버퍼레지스터에 저장된 값은 명령어 레지스터로 이동 -> 프로그램 카운터는 지속적으로 증가하며 계속해서 다음 명령어를 읽어들일 준비를 함 -> 반복

범용 레지스터

  • 다양하고 일반적인 상황에서 자유롭게 사용할수 있는 레지스터
  • 데이터와 주소를 모두 저장할 수 있음

플래그 레지스터

  • ALU 연산결과에 따른 플래그를 플래그 레지스터에 저장
  • 연산결과 , CPU 상태에 대한 부가적인 정보를 저장하는 레지스터

스택 포인터

  • 스택은 한쪽이 막혀있는 통 형식의 자료구조 LIFO형식
  • 스택의 맨꼭대기에 있는 저장한 값의 위치, 주소를 저장하는 레지스터
  • 스택의 어디까지 데이터가 채워져 있는지에 대한 표시

변위 주소 지정방식

  • 오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효주소를 얻어내는 주소 지정방식
  • 레지스터 값 + 오퍼랜드 필드의 값 = 유효주소

상대 주소 지정 방식

  • 오퍼랜드와 프로그램 카운터 값을 더하여 유효주소를 얻는 방식
  • 오퍼랜드 + 프로그램 카운터 = 실행할 명령어 주소의 +,- 값만큼 이동

베이스 레지스터 주소 지정방식

  • 오퍼랜드와 베이스 레지스터의 값을 더하여 유효주소를 얻는방식
  • 베이스 레지스터 + 오퍼랜드 = 메모리 주소

명령어 사이클과 인터럽트

명령어 사이클

  • 프로그램 속 각각의 명령어 들은 일정한 주기가 반복되며 실행됨 -> 명령어 사이클
  • 명령어는 일반적으로 인출과 실행 사이클을 반복하며 실행됨

인출사이클

  • 메모리에 있는 명령어를 CPU로 가지고 오는 단계

실행 사이클

  • CPU로 가져온 명령어를 실행하는 사이클
  • 제어장치가 명령어 레지스터에 담긴 값을 해석하고, 제어신호를 발생 시키는 단계

간접 사이클

  • 메모리에 한번 더 접근

인터럽트

  • CPU의 정상적인 작업을 방해하는 신호

동기 인터럽트

  • CPU의 정상적인 작업을 방해하는 신호
  • 오류와 같은 예외적인 상황에 마주쳤을때 발생하는 인터럽트 (예외)

비동기 인터럽트

  • 입출력 장치에 의해 발생하는 인터럽트
  • 입출력 장치에 작업을 부탁하고 작업이 완료되었을때 발생하는 인터럽트

하드웨어 인터럽트

  • CPU는 입출력 도중에 명령어를 효율적으로 처리하기 위해 하드웨어 인터럽트 사용

빠른 CPU를위한 설계 기법

클럭

  • 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사분란하게 움직인다.
  • CPU는 명령어 사이클이라는 정해진 흐름에 맞춰 명령어들을 실행한다.
  • 클럭 속도는 Hz단위로 측정함 1초에 클럭이 몇번 반복되는지를 나타냄

*오버클럭킹 : 최대 클럭 속도를 강제로 더 끌로올리는 기법, 클럭 속도를 무작정 높이면 CPU의 발열문제가 나타남

코어와 멀티코어

  • 클럭 속도를 높이는 방법외에 CPU의 성능을 높이는 방법, 코어의 갯수와, 스레드의 갯수를 늘림
  • 코어를 여러개 포함하고 있는 CPU를 멀티코어, 멀티코어 프로세서 라고 부름
  • 코어의 갯수를 무작정 늘린다고해서 좋은것은 아님 EX) 조별과제, 인원이 많더라도 작업이 적절히 분배 되지 않으면 
    1명의 조원만 일함 (1~2개의 코어만 일하게됨)
  • 코어마다 처리할 명령어들을 얼마나 적절하게 분배하는지에 따라 연산속도가 달라짐

스레드와 멀티스레드

하드웨어적 스레드

  • 하나의 코어가 동시에 처리하는 명령어의 단위
  • EX) 2코어 4스레드, 명령어를 실행하는 부품 2개, 1번에 4개의 명령어를 처리할 수 있다.
  • 멀티스레드 프로세서, 멀티 스레드 CPU라고 불림
  • 하이퍼 스레딩: 인텔의 멀티스레드 기술

소프트웨어적 스레드

  • 하나의 프로그램에서 독립적으로 실행되는 단위
  • EX) 구글 크롬은 하나의 프로세스, 탭은 스레드

멀티스레드 프로세서

  • 멀티스레드 프로세서는 하나의 코어로 여러 명령어도 동시에 처리하는 CPU
  • 하나의 코어로 멀티스레드 프로세서를 설계중 핵심은 레지스터
  • 프로그램 카운터, 스택 포인터, 데이터 버퍼 레지스터, 데이터 주소 레지스터 등 하나의 명령어를 처리하기 위해 필요한 레지스터가 여러개 존재하면 가능
  • 레지스터 세트 : 하나의 명령어를 실행하기 위해 꼭 필요한 레지스터들

명령어 병렬처리 기법

  • CPU가 놀지않고 시간을 알뜰하게 쓰며 작동하게 만드는 것이 중요함

명령어 파이프 라인 , 파이프 라이닝

명령어 처리과정

  • 명령어 인출 -> 명령어 해석 -> 명령어 실행 -> 결과 저장
  • 같은 단계가 한 클럭안에 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있음
  • 같은 단계가 한 클럭안에 겹치지 않는다는 전제하에 명령어를 겹쳐서 수행하면 효율적으로 처리가능

파이프라인 위험 (성능향상에 실패하는 경우)

데이터 위험

  • 명령어간 데이터 의존성에 의해 발생함, 어떤 명령어는 이전 명령어를 끝까지 실행해야만 실행할 수 있는 경우
  • 데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 하면 파이프라인이 제대로 작동하지 않는것을 '데이터 위험'
    이라고함
  • EX) 아래 코드에서 b는 a가 실행되고 난후에 b를 실행할 수 있음 
a = 1 + 2
b = a + 1

제어 위험

  • 프로그램 카운터의 갑작스로운 변화에 의해 발생
  • 프로그램 카운터는 현재 실행중인 명령어의 다음 주소로 갱신됨
  • ex) 프로그램 카운터의 메모리 주소 : 1001(2) => 1002(2)가 아닌 1001(2) => 5001(2)
  • 명령어 파이프라인에 미리가지고 와서 처리중이었떤 명령어들은 쓸모가 없어짐 => '제어 위험'
  • 분기 예측 : 프로그램이 어디로 분기할지 미리예측 한 후 그 주소를 인출하는 기술

구조적 위험

  • 명령어들을 겹쳐 실행 하는 과정에서 서로 다른 명령어가 동시에 ALU, 레지스터 같은 CPU 부품들을 사용하려고 할때 발생
  • 자원 위험이라고도 부름

슈퍼스칼라

  • CPU내부에 여려개의 명령어 파이프라인을 포함한 구조
  • EX) 공장에 생산라인을 여려개 둔것과 같은 구조

  • 실제로는 파이프라인 개수에 비례하여 빨라지지 않음
  • CPU는 파이프라인 위험을 방지하기 위해 설계되어야함

비순차적 명령어 처리

  • 명령어의 합법적인 새치기
  • 명령어 파이프라인, 슈퍼 스칼라는 명령어가 순차적으로 실행되는 방식
  • 데이터 의존성이 없는 명령어들을 위로 올려 먼저 처리하고, 의존성이 있는 명령어들을 아래로 내려 나중에 처리하는 기법

CISC와 RISC

명령어 집합 Instruction Set Architecture

  • CPU가 이해할 수 있는 명령어 들의 모음
  • CPU가 어떤 명령어를 이해하는지에 따라 컴퓨터 구조 및 설계 방식이 달라짐
  • 서로 컴퓨터가 이해할 수 있는 명령어가 다름
  • EX) 같은 소스코드로 만들어진 프로그램도 ISA가 다르면 CPU가 이해할 수 있는 명령어도 어셈블리어도 달라짐
  • ISA는 일종의 CPU의 언어
  • 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
  • CISC와 RISC는 명령어 병렬 처리 기법을 도입하기 유리한 명령어 집합 구조(ISA)

CISC

  • Complex Instruction Set Computer: 복잡한 명령어 집합을 활용하는 컴퓨터(cpu)
  • x86-64는 대표적인 CISC 기반 ISA입니다.
  • 다양하고 강력한 기능의 명령어 집합을 활용, 명령어 형태와 크기가 다양한 가변길이 명령어 사용
  • 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있음 => 컴파일된 프로그램의 크기가 작다
  • 메모리를 아낄 수 있음
  • 활용하는 명령어의 크기와 실행되기 까지의 시간이 일정하지 않음 => 명령어 파이프라인을 구현하는데 좋지않음, 명령어는 1클럭으로 동일해야 유리
  • 실제로 자주사용되는 명령어만 쓰였다 (20% 정도)

RISC

  • Reduced Instruction Set Computer
  • CISC에 비해 명령어의 종류가 훨씬 적음
  • 짧고 규격화된 명령어, 1클럭 내외로 실행되는 명령어 지향
  • RISC는 고정길이 명령어를 사용함
  • 하나의 명령어가 1클럭 내외로 실행되기 때문에 명령어 파이프라인 기법에 최적화되어 있음
  • 메모리에 직접 접근하는 명령어를 load, store 두개로 제한함 => 메모리 접근을 단순화하고 최소화함
  • load-store 구조라고 부르기도함
  • 메모리 접근을 최소화 하고 레지스터를 활용함, CISC보다 레지스터를 활용하는 연산이 많음
  • 사용 가능한 명령어 개수가 CISC보다 적기때문에 CISC보다 많은 명령으로 프로그램을 작동시킴

질문

  • 동기 인터럽트와 비동기 인터럽트의 차이점과 특징
  • 레지스터의 종류중 플래그 레지스터에 대해 설명해주세요
  • 명령어를 병렬처리 하는 기법중 슈퍼스칼라 라는 기법과 비순차적 명령어 처리 기법의 특징과 차이점을 말해주세요
  • CISC와 RISC의 차이점은?

공통질문

요소에 인덱스를 걸지 않는 이유는 무엇일까요?

'CS' 카테고리의 다른 글

보조기억 장치  (0) 2023.07.09
메모리와 캐시 메모리  (0) 2023.07.08
데이터와 명령어, 명령어 구조  (0) 2023.07.06
DB구조와 유형  (0) 2023.07.02
쓰레드와 쓰레드풀  (0) 2023.07.02
  1. ALU와 제어장치
  2. ALU
  3. 플래그
  4. 제어장치
  5. 레지스터
  6. 필수로 알아야하는 레지스터
  7. 명령어 사이클과 인터럽트
  8. 명령어 사이클
  9. 인터럽트
  10. 빠른 CPU를위한 설계 기법
  11. 클럭
  12. 코어와 멀티코어
  13. 스레드와 멀티스레드
  14. 명령어 병렬처리 기법
  15. 명령어 파이프 라인 , 파이프 라이닝
  16. 슈퍼스칼라
  17. 비순차적 명령어 처리
  18. CISC와 RISC
  19. 명령어 집합 Instruction Set Architecture
  20. CISC
  21. RISC
  22. 질문
  23. 공통질문
'CS' 카테고리의 다른 글
  • 보조기억 장치
  • 메모리와 캐시 메모리
  • 데이터와 명령어, 명령어 구조
  • DB구조와 유형
index.ys
index.ys
머리속에 떠도는 코드조각들을 맞추는 공간입니다.
index.ys
코린이 개발일지
index.ys
전체
오늘
어제

공지사항

블로그 메뉴

  • 홈
  • 방명록
  • Github
  • Notion
  • Figma
  • 타닥타닥 (235)
    • 개발일지 (124)
    • html , css (0)
    • Javascript (30)
    • Node.js (8)
    • React (2)
    • 네트워크 (1)
    • DB, SQL (5)
    • AWS (11)
    • CS (21)
    • 면접 (13)
    • 사진 (4)
    • 북로그 (3)
    • 머릿속 (5)

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
index.ys
ALU와 제어장치
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.