//구글콘솔 광고 추가가

레지스터란?

CPU 내부의 작은 임시 저장 장치이며,

프로그램 속 명령어 & 데이터는 실행 전 후로 관련된 값들이 레지스터에 저장된다.

 

반드시 알아야 할 레지스터의 종류
1 프로그램 카운터 메모리에서 가져올 명령어의 주소를 저장 (메모리에서 읽어 들일 명령어의 주소)
>> Instruction Pointer(명령어 포인터) 라고도 부르는 cpu도 있음
2 명령어 레지스터 해석할 명령어를 저장 (방금 메모리에서 읽어 들인 명령어) >> 제어장치가 해석
3 메모리 주소 레지스터 메모리의 주소 저장 >> CPU가 읽어 들이고자 하는 주소를 주소버스로 보낼때 거치는 레지스터
4 메모리 버퍼 레지스터 메모리와 주고 받을 값을 저장(데이터와 명령어) >> CPU가 정보를 데이터 버스로 주고 받을떄 거치는 레지스터
5 플래그 레지스터 연산 결과 또는 CPU 상태에 부가적인 정보를 저장
6 범용 레지스터 다양하고 일반적인 상황에서 자유롭게 사용(주소, 명령어, 데이터 등 다양하게 저장 가능)
7 스택 포인터 주소 지정에 사용 스택 주소 지정 방식: 스택과 스택 포인터를 이용한 주소 지정 방식
스택 포인터: 스택의 꼭대기를 가리키는 레지스터. (스택이 어디까지 차 있는지에 대한 표시 같은거.)
8 베이스 레지스터 주소 지정에 사용 번위 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 특정 레지스터(프로그램 카운터, 베이스 레지스터)의 값을 더하여 유효 주소 얻기. 
상대 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 프로그램 카운터의 값을 더하여 우효 주소 얻기.
베이스 레지스터 주소 지정 방식: 오퍼랜드 필드의 값(변위)과 베이스 레지스터(기준 주소)의 값을 더하여 유효 주소 얻기.

명령어 사이클과 인터럽트 ★ ★ ★

명령어 사이클

- 명령어 사이클이란, 프로그램 속 명령어들은 일정한 주기가 반복되며 실행되는데 이 주기를 말함.

인출 사이클 : 가장 먼저 CPU를 갖고 온다.
실행 사이클:  가지고 온 걸 실행한다.
인출 >> 실행 >> 인출 >> 실행... (반복). 
but, CPU로 명령어를 가지고 와도 바로 실행이 불가능한 경우도 있음.
이러한 메모리 접근이 더 필요한 경우엔 간접 사이클이 추가됨.
인출>> 간접 >> 실행 >> 인출 >>...(반복)

인터럽트가 발생했을 경우, 인터럽트 사이클 추가 됨.
인출 >> 간접 >> 실행 >> 인터럽트 >> 인출...(반복)
인터럽트
: 정해진 흐름대로 명령어를 처리하려는 CPU의 흐름을 끊어 버리는 행동을 함.

- 인터럽트(interrupt): 방해하다, 중단시키다.

- CPU가 꼭 주목해야 할 때이거나, CPU가 얼른 처리해야 할 다른 작업이 생겼을 때 발생.
ex>> 헤이헤이, 급해 급해!! 지금 하던 거 일단 멈추고 이것부터 실행해 줘!!
-인터럽트의 종류 :
1. 동기 인터럽트(예외) : CPU가 예기치 못한 상황을 접했을 때 발생.
 -동기 인터럽트의 종류 : 폴트, 트랩, 중단, 소프트웨어 인터럽트.
2. 비동기 인터럽트(하드웨어 인터럽트) : 주로 입출력장치에 의해 발생. 알림과 같은 역할(쿠쿠밥다됨 알림 같은 거)
하드웨어 인터럽트에 대해 더 자세하게 알아보자.
:  알림과 같은 인터럽트.

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

- 입출력장치는 CPU에 비해 느리다.
  인터럽트가 없다면 CPU는 명령 완료 여부를 확인하기 위해 주기적으로 확인해야 됨.
>> 그렇기 때문에 인터럽트를 이용해 입출력 작업동안 CPU가 다른 일을 할 수 있게 함.
하드웨어 인터럽트의 처리 순서
:인터럽트의 종류와 상관없이 인터럽트 처리 순서는 비슷함.
  1. 입출력 장치는 CPU에 인터럽트 요청 신호를 보냄.(입출력 장치들이 "지금 껴들어가도 되나요?" 하는 요청신호)
  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전에 항상 인터럽트 여부를 확인함.
  3. CPU는 인터럽트 요청을 확인하고 플래그 레지스터에 있는 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 여부를 확인. >> 하드웨어 인터럽트에는 모든 인터럽트를 인터럽트 플래그로 막을 수 있진 않아. 막을수 있는 인터럽트와 막을수 없는 인터럽트로 나뉨
  4. 인터럽트를 받아들일 수 있다면 CPU는 지금까지의 작업을 백업(스택영역에 백업)함.
  5. CPU는 인터럽트 벡터*를 참조하여 인터럽트 서비스 루틴*을 실행함.
  6. 인터럽트 서비스 루틴 실행이 끝나면 백업해 둔 작업을 복구하여 실행을 재개.

* 인터럽트 벡터 : 각각의 인터럽트를 구분하기 위한 정보.

* 인터럽트 서비스 루틴 :

인터럽트가 발생했 을 때 해당 인터럽트를 어떻게 처리하기 위한 프로그램. 프로그램이기에 메모리에 저장.

ex> 키보드가 인터럽트 요청을 보내면 이렇게 행동해야 함.

CPU가 인터럽트를 처리한 다라는 의미 >> 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 다시 되돌아온다.(+ 그리고 인터럽트의 시작 주소는 인터럽트 벡터를 통해 알 수 있다.)

728x90
반응형
ALU와 제어장치
  • ALU: 계산하는 장치
  • 제어장치 : 제어 신호를 발생시키고 명령어를 해석하는 장치

ALU, 제어장치가 내보내고 받아들이는 정보가 각각 무엇인지 알아보자.

ALU 가 받아들이는 정보와 내보내는 정보
-  ALU는 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들인다.
레지스터에겐 피연산자를, 제어장치에겐 제어신호를 받아들이는데, 이것은 계산을 하기 위해 피연산자와 수행할 연산(제어신호)이 필요하기 때문이다. 이걸 통해서 연산값을 수행하고 결과값을 레지스터에 담는다.


- ALU는 위에서 말한 결과값(컴퓨터가 이해할 정보)의 정보를 레지스터에 담는다(메모리가 아닌 레지스터에 담는 이유는 cpu가 메모리에 접근하는 속도보다 레지스터에 접근하는 속도가 더 빠르기 때문).
- 플래그를 내보내기도 하는데, 연산결과에 대한 부가 정보 플래그라 하며 이 플래그를 내보내서 플래그 레지스터에 담는다.

 

플래그의 종류 
플래그 종류 의미 사용 예시
부호 플래그 연산한 결과의 부호를 나타낸다. 부호 플래그가 1일 경우 계산 결과는 음수, 0일 경우 계산 결과는 양수를 의미.
제로 플래그 연산 결과가 0인지 여부를 나타낸다. 제로 플래그가 1일 경우 연산 결과는 0.
0일 경우 연산 결과는 0이 아님을 의미.
캐리 플래그 연산 결과 올림수나 빌림수가 발생하는 지를 나타낸다. 캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미
오버플로우 플래그 오버플로우가 발생했는지를 나타낸다. 오버플로우 플래그가 1일 경우 오버플로우가 발생했음을 의미, 0일 경우 발생하지 않았음을 의미.
인터럽트 플래그 인터럽트가 가능한지를 나타낸다. 인터럽트 플래그가 1일 경우 인터럽트가 가능함으 의미하고, 0일 경우 인터럽트가 불가능함을 의미.
슈퍼바이저 플래그 커널 모드로 실행 중인지, 사용자 모드로 실행중인지를 나타낸다. 슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중임을 의미하고, 0일 경우 사용자 모드로 실행 중임을 의미.

 

제어장치가 받아들이는 정보와 내보내는 정보
- 제어장치는 클럭신호를 받아들인다.
: 클럭은 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위. 클럭신호의 단위에 맞춰 명령어들이 수행됨.
- 해석할 명령어를 받아들인다. 
: 명령어 레지스터에 저장되어 있는 해석할 명령어를 받아들인다.
- 플래그를 받아들인다.
: 명령어를 해석할때 이 명령어가 음수인지 양수인지 등을 알아야 되서 플래그 값도 받아 들임.
- 제어신호를 받아들인다.
: 외부로 부터 제어신호가 발생했다면 어떤 신호인지 제어장치가 받아들이게 됨.


- 제어장치가 내보내는 정보는 제어 신호를 내보낸다.
cpu 내부에 전달하는 제어 신호(레지스터,  ALU가 보내는)와 외부에 전달하는 제어신호(메모리, 입출력장치가 보내는)로 나뉨.

 

728x90
반응형

컴퓨터 구조

컴퓨터가 이해하는 정보
  • 데이터 : 숫자, 문자, 이미지, 동영상과 같은 정적인 정보, 컴퓨터와 주고받는/ 내부에 저장된 정보를 데이터라 통칭, 0과 1로 숫자, 문자를 표현하는 방법
  • 명령어 : 컴퓨터는 결국 명령어를 처리하는 기계, 명령어란 컴퓨터를 실질적으로 움직이는 정보이며, 데이터는 명령어를 위한 일종의 재료
컴퓨터의 네 가지 핵심 부품
  • CPU
  • 메모리
  • 보조기억장치
  • 입출력 장치
CPU(== 컴퓨터의 두뇌) : 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품.
1. CPU는 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치.
2. CPU 내부에는 ALU(계산하는 장치),레지스터(임시저장 장치), 제어장치(제어신호를 발생시키고 명령어를 해석하는 장치)가 있다.
- CPU의 핵심부품 3가지
1. ALU : 계산기(계산을 위한 회로들의 모임)
2. 제어장치 : CPU 내부의 작은 저장장치
3. 레지스터 : 제어 신호(컴퓨터 부품들을 관리하고 작동시키기 위한 전기신호)를 내보내고, 명령어를 해석하는 장치.( ++ CPU가 메모리에 저장된 값을 읽고 싶을 떈 메모리를 향해 메모리 읽기 라는 제어 신호를 보내고. CPU가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해 메모리 쓰기라는 제어 신호를 보냄)
메모리(== 주기억장치(RAM, ROM), 메인메모리) : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품. 
1. 프로그램이 실행되기 위해서는 메모리에 저장되어 있어야 한다. 2. 메모리는 실행되는 프로그램의 명령어와 데이터를 저장한다. 3. 메모리에 저장된 값의 위치는 주소로 알 수 있다. * 메모리는 전원이 꺼지면 저장된 내용을 잃는다. 
보조기억장치(usb, sd카드, ssd, cd롬 등 백업용 저장장치) : 전원이 꺼져도 보관될 프로그램을 저장하는 부품. 실행되지 않는 부분 저장
입출력장치(컴퓨터 외부에서 컴퓨터로 정보를 주고받을 수 있는 장치 >> 키보드, 마이크, 마우스, 모니터, 프린터, 와콤 등등) :
컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품.

 

메모리는 실행할 정보(실행할 프로그램)를 저장하고, 보조 기억장치는 보관할 정보(보관할 프로그램)를 저장한다.

 

이 모든게 부착되는 곳이 메인보드 혹은 마더보드(mainboard 또는 motherboard)라 함. 이 메인보드 안에서 CPU, 메모리, 보조기억장치, 입출력 장치들이 버스란 걸 통해 서로 정보를 주고받을 수 있음. 그중 가장 중요한 시스템 버스(== 인간의 척추정도)라는 통로를 통해서 정보를 주고받을 수 있다.
메인보드 :
1. 메인보드에 연결된 부품은 버스를 통해 정보를 주고 받음.
2. 버스는 컴퓨터의 부품끼리 정보를 주고 받는 일종의 통로.
3. 타양한 종류의 버스가 있음.
4. 컴퓨터의 핵심 부품을 연결하는 버스는 시스템 버스.(*시스템 버스의 내부 구성 : 주소버스(주소를 주고받는 통로), 데이터버스(명령어와 데이터를 주고받는 통로), 제어버스(제어신호를 주고받는 통로))
728x90
반응형

+ Recent posts