//구글콘솔 광고 추가가

레지스터란?

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
반응형
문자 집합과 인코딩

  • 문자 집합(Character set) : 컴퓨터가 이해(표현)할 수 있는 문자의 모음
  • 인코딩(encoding) : 코드화하는 과정, 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정.
  • 디코딩(decoding) : 코드를 해석하는 과정, 0과 1로 표현된 문자 코드로 문자로 변환하는 과정, 인코딩의 반대

 

대표적이고, 대중적인 문자 집합, 인코딩 방법인
" 아스키 코드 "
  • 초창기 문자 집합 중 하나.
  • 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자.
  • 7비트로 하나의 문자 표현(실제로는 8비트를 쓰지만 1비트는 오류 검출을 위해 사용되는 패리티 비트(parity bit)) == 0부터 127개의 아스키코드가 있으며 총개수는 2의 7승인 128개.
  • A는 65로 인코딩, a는 97로 인코딩.
  • 장점 : 간단한 인코딩.
  • 단점 : 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현 불가 - 아스키 코드는 7비트로 하나의 문자를 표현하기에 128개보다 많은 문자를 표현할 수 없음. 8비트 확장 아스키가 등장했지만, 여전히 부족함.

한글 인코딩: 완성형 인코딩(ex: 남) vs 조합형(ex: ㄴ + ㅏ + ㅁ) 인코딩

  • 초성, 중성, 종성의 조합으로 이루어진 한글은 전체를 하나로 묶어 글자 하나를 인코딩할지(완성형 인코딩), 다 나눠서 각각 인코딩할지(조합형 인코딩)로 나뉨.
  • EUC-KR : KS X 1001 KS X 1003 문자집합 기반의 한글 인코딩 방식, 완성형 인코딩이며 글자 하나하나에 2바이트 크기의 코드 부여(dencode.com에서 테스트확인 가능). 하지만 모든 한글을 표현할 순 없음.
하지만 모든 한글을 표현할순 없다. >> 그래서 만들어진 유니코드 문자집합
  • 이걸 해결 하기 위해 통일된 문자 집합인 유니코드 문자 집합이 만들어짐. - 한글, 영어, 화살표와 같은 특수 문자들이 포함되어 있으며 현대 문자 표현에 있어 매우 중요한 위치에 있다.
  • 유니코드의 인코딩 방식은 utf-8, utf-16, utf-32 ...이 있음. 여기서 utf의 뜻은 Unicode Transformation Format의 줄임말로 유니코드 인코딩 방법이란 뜻임. - 가장 대중적인 방식인 utf-8 인코딩 : 가변 길이 인코딩으로 인코딩 결과가 1바이트 ~ 4바이트가 될 수 있음(인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름.).
  •  https://onlineutf8tools.com/convert-utf8-to-binary직접 눈으로 확인 가능.

예전에 회사에서 프로젝트 안에서 가상 키보드를 띄워서 아이디나 닉네임을 저장하는 부분을 구현한 적이 있었는데 그때도 한글 키보드를 구현하기 어려워서 시간을 많이 쏟았던 기억이 있다. 지금의 공부를 하고나서 구글링 했을때 나왔던 방법 이해했으면 이해하기 더 쉬웠을 거란 생각이 든다. 

 

++ 추가로 한글 인코딩에 대해 더 자세하게 나온 블로그

https://www.vbflash.net/192

 

참고 : 인프런 < 개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제 >

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