레지스터(Register)
레지스터(Register)란, CPU 내부에서 CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 기억장치이다.
레지스터는 연산과 프로그램의 실행을 효율적으로 수행하기 위해 사용되며, 메모리(주로 RAM)로 연산의 결과를 보내고 영구적으로 저장할 데이터를 하드디스크에 저장하는 등의 명령을 처리하기 위한 주소와 명령의 종류를 저장하는 기억 공간의 역할을 한다.
레지스터의 핵심 목적은 데이터를 빠르게 CPU로 가져오는 것이다. 레지스터의 저장공간은 작지만, CPU 외부에 위치한 메모리와 다르게 CPU와 직접 연결되어 있어 연산 속도가 메모리보다 수십~수백 배까지 빠르다.
CPU는 자체적으로 데이터를 저장할 수 없어 메모리로 직접 데이터를 전송할 수가 없다. 연산을 위해서는 반드시 레지스터를 거쳐야 하며, 이를 위해 레지스터는 특정 주소를 가리키거나 값을 가져올 수 있다.
- 명령어 실행
- 임시 데이터 저장
- 특수한 목적 : PC, SP 등
종류
- Accumulater : 데이터를 메모리에서 가져와 저장하는 데 가장 자주 사용되는 레지스터
- AR, Memory Address Registers (MAR) : I/O 또는 메모리의 접근할 위치의 주소를 갖고 있는 레지스터
MAR과 MDR이 함께 작동하여 CPU와 주 메모리 간의 통신을 지원한다. - Memory Data Registers (MDR) : 주소 지정된 위치에서 읽어야 할 데이터 또는 기록해야 할 데이터를 포함한다.
- General Purpose Registers : 임시 데이터를 저장하는 데 사용되며, 어셈블리 프로그래밍에서 그 내용에 액세스 할 수 있다. 현대의 CPU 아키텍처는 레지스터-레지스터 주소 지정을 더 많이 사용할 수 있도록 더 많은 일반 목적 레지스터를 사용하는 경향이 있다.
- Program Counter (PC) : 프로그램의 실행을 추적하는 데 사용. 다음에 가져올 명령어의 메모리 주소를 포함한다.
- Instruction Register (IR) : 바로 실행될 명령어를 갖는다. PC에서 가져온 명령어가 IR에 저장되며, IR에 명령어가 위치하자마자 CPU는 명령어를 실행하기 시작하고, PC는 다음에 실행될 명령어를 가리킨다.
General Purpose Registers (범용 레지스터)
8개의 레지스터로 구성되며, 산술/논리 연산, 오퍼랜드(피연산자)를 저장하거나 주소를 저장한다.
64비트에서는 Exx->Rxx으로 이름이 변경되며, R8~R15 레지스터가 추가된다.
- EAX(RAX) : 곱셈과 나눗셈 명령에서 자동으로 사용됨. 함수의 리턴 값이 저장(누적 연산기).
- EBX(RBX) : 특정 주소를 지정. ESI, EDI와 결합하여 인덱스에 사용됨.
- ECX(RCX) : 반복 명령에서 반복 카운터로 사용됨. 반복할 횟수를 지정 후 수행됨.
- EDX(RDX) : EAX와 같이 쓰이며, 입출력 연산에서 간접 주소 지정에 쓰임.
- EBP(RBP) : 베이스 포인터. 스택 프레임의 시작 지점 주소가 저장되며, 사용되고 있는 스택이 소멸되지 않는 동안에는 EBP의 값이 변하지 않는다. 현재 스택 프레임이 소멸되면 이전에 사용되던 스택 프레임을 가리키게 된다.
- ESP(RSP) : 스택 포인터. 스택 프레임의 끝 지점 주소가 저장되며, PUSH/POP 명령어에 따라서 값이 4byte씩 변함.
- ESI(RSI) : 문자열 명령어를 위한 Source Data의 주소가 저장됨.
- EDI(RDI) : 문자열 명령어를 위한 목적지 주소가 저장됨.
Segment Register (세그먼트 레지스터)
프로그램에 정의한 메모리상의 특정 영역으로 코드, 데이터, 스택 등을 포함하는 레지스터.
- CS (Code Segment) : 실행할 기계 명령어가 저장된 메모리 주소를 지정한다. (코드 세그먼트의 시작 주소를 가리킴)
- DS (Data Segment) : 프로그램에서 정의된 데이터, 작업 영역 등의 메모리 주소를 지정한다. 참조하려는 데이터의 오프셋을 DS 레지스터에 저장된 주소 값에 더해 세그먼트 안의 데이터를 참조한다. (데이터 세그먼트의 시작 주소를 가리킴)
- SS (Stack Segment) : 프로그램 스택 세그먼트의 시작 주소를 가리킴. 메모리 상에 스택 구현을 가능하게 한다.
- 프로그램 스택 세그먼트 : 프로그램을 실행할 때 필요한 데이터나 연산 결과 등을 임시 저장 및 삭제 목적으로 사용 - ES, FS, GS (Extra Segment) : 문자 연산과 추가 메모리를 지정하는 데 사용하는 여분 레지스터. ES 레지스터는 추가로 사용된 데이터 세그먼트의 주소를 가리킨다.
문자열 연산에 사용될 때는 EDI 레지스터와 함께 사용된다.
Flag Register (플래그 레지스터)
다양한 산술 연산 결과의 상태를 알려주는 플래그 비트들을 저장한다. 조건문과 같은 실행 순서의 분기를 정할 때 주로 사용된다.
- Z : 제로 플래그. 연산 결과가 0일 경우 참.
- C : 캐리 플래그. 부호 없는 숫자의 연산 결과가 비트 범위를 넘어섰을 경우 참.
- A : 보조 캐리 플래그. 연산 결과 하위 4bit에서 비트 범위를 넘었을 경우 참.
- O : 오버플로우 플래그. 부호 있는 숫자의 연산 결과가 비트 범위를 넘어선 경우 참.
- S : 사인 플래그. 연산 결과가 음수일 경우 참.
- P : 패리티 플래그. 연산 결과에서 1로 된 비트의 수가 짝수일 경우 참.
- D : 디렉션 플래그. 문자열 조작에서 참일 경우 주소 레지스터 값이 감소, 거짓일 경우 증가.
- T : 트랩 플래그. 참일 경우 한 명령이 실행될 때마다 인터럽트 발생. 디버깅에 사용.
장단점
레지스터는 매우 빠르며, 메인 메모리보다 빠르게 데이터에 액세스 할 수 있다. 또한, 효율을 위해 작은 양의 데이터를 저장하도록 설계되어 CPU가 쉽게 액세스 할 수 있다.
그러나 일부 단점이 있는데, 소량의 데이터만 저장할 수 있어 일부 애플리케이션에서 문제가 발생할 수 있으며, 높은 속도의 메모리 셀로 만들어져 있어 CPU의 비용이 증가한다.
메모리(Memory)
메모리는 기억장치라는 뜻으로 컴퓨터로 작업을 하기 위해 필요한 데이터나 처리 결과, 프로그램 등을 저장하기 위해 사용된다. 주로 메모리라고 하면 주기억장치인 RAM을 이야기하며, 메인 메모리도 같은 의미로 얘기하는 경우가 많다.
RAM은 하드 디스크 등에 접근하는 속도를 줄이기 위해 만들어진 메모리 계층이다. 이외의 메모리는 SSD, HDD 등이 있다. SSD, HDD는 전원이 꺼져도 내용이 유지되는 비휘발성 저장 장치이며, RAM은 데이터를 일시적으로 저장하는 휘발성 저장 장치다.
메모리는 CPU와 별도로 위치하며, CPU와 Address line과 Data line으로 연결되어 있다.
CPU에서 Address line으로 주소를 지정하여 해당 주소의 데이터에 접근하는 방식을 사용한다.
메모리는 레지스터와 달리 프로그램의 실행에 필요한 프로그램 인스트럭션과 데이터를 저장하고 있다.
- 프로그램 저장
- 임시 데이터 저장소
- 가상 메모리
CPU가 메인 메모리에 직접 액세스하여 정보를 교환하는 것은 속도가 매우 느렸기 때문에 레지스터가 등장했다.
캐시(Cache)
캐시는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다.
대용량인 메인 메모리 접근을 빠르게 하기 위해 CPU 내부나 바로 옆에 탑재한다.
캐시는 저장을 위한 CPU의 보조 구성요소이다.
특징
- 캐시는 주기억장치와 CPU사이에 위치하며, 자주 사용하는 프로그램과 데이터를 기억한다.
- 캐시 메모리는 메모리 계층 구조에서 가장 빠른 소자이며, 처리속도가 거의 CPU의 속도와 비슷할 정도의 속도를 갖는다.
- 캐시메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도가 향상된다.
- 캐시 주소표는 검색시간을 단축시키기 위해 주로 연관기억장치를 사용한다.
- 캐시의 크기는 보통 수십 KByte ~ 수백 KByte 이다.
레지스터 vs 메모리
속도
메모리 조금 느림 - 레지스터 매우 빠름
용도
메모리는 프로그램의 코드와 데이터를 저장함 - 레지스터는 CPU가 처리할 작업에 필요한 데이터를 가져오기 위해 사용
위치
메모리는 CPU 밖에 - 레지스터는 CPU 안에 위치함
비용
메모리는 상대적으로 저렴해 큰 용량을 제공 - 레지스터는 비싸서 제한된 크기로 제공
운영체제
- 메모리: 각 프로세스에 메모리 공간을 할당하고 관리. 메모리 보호, 가상 메모리 관리, 페이징 등으로 시스템의 효율성과 안정성을 유지.
- 레지스터: Context Switching 시 레지스터의 상태를 저장하고 복원. 각 프로세스가 독립적인 실행 환경을 유지하는데 도움을 줌.
출처
레지스터의 종류 - 범용 레지스터, 세그먼트 레지스터, 플래그 레지스터
메모리 계층 구조 - Register, Cache, Ram, HDD, SSD
'컴퓨터시스템' 카테고리의 다른 글
Page Fault, Lazy Loading, Page Replacement Policy 간단하게 정리 (1) | 2024.03.22 |
---|---|
Segmentation Fault (0) | 2024.03.11 |
프로세스와 스레드 (0) | 2024.02.29 |
웹서버와 CGI와 WAS (+ MIME Type) (2) | 2024.02.22 |
파일 디스크립터란? (File Descriptor) (0) | 2024.02.22 |