컴퓨터 시스템은 하드웨어와 소프트웨어로 구성된다.
- 하드웨어: 데이터를 처리하는 물리적인 기계장치
- 소프트웨어: CPU에게 어떤 작업을 지시하는 명령어로 작성된 프로그램
그리고 운영체제 (OS, Operating System)은 컴퓨터 하드웨어를 관리하는 소프트웨어이다.
컴퓨터 하드웨어는 크게 프로세서, 메모리(기억장치), IO 장치로 구성되고, 이들은 시스템 버스로 연결된다.
프로세서는 컴퓨터 하드웨어에 부착한 모든 장치의 동작을 제어하고 명령을 실행하며 중앙처리장치 (CPU, Central Processing Unit) 이라고도 함. (같은 말인데 프로세서는 CPU에 비해 하드웨어보다 소프트웨어 관점이 좀 더 부각된 용어임)
프로세서는 연산장치 (ALU), 제어장치 (CU), 레지스터로 구성되고 이들은 내부 버스를 통해 연결된다.
레지스터는 CPU 내부에 위치한 휘발성 메모리로 Read/Write 속도가 매우 빠르다. 레지스터는 용도에 따라 전용 레지스터, 범용 레지스터로 구분할 수 있고 사용자가 정보를 변경할 수 있는지에 따라 사용자 가시 레지스터와 사용자 불가시 레지스터로 구분할 수 있다. 또한 저장하는 정보의 종류에 따라 데이터 레지스터, 주소 레지스터, 상태 레지스터 등 으로 세분화할 수 있다.
사용자 가시 레지스터의 종류 | 설명 |
---|---|
데이터 레지스터 (DR) | 함수 연산에 필요한 데이터를 저장한다. 값, 문자 등을 저장하므로 산술/논리 연산에 사용하며 연산 결과로 플래그 값을 저장한다 |
주소 레지스터 (AR) | 주소나 유효 주소를 계산하는 데 필요한 주소의 일부분을 저장한다. 주소 레지스터에 저장한 값 (값 데이터)을 사용하여 산술 연산을 할 수 있다. 주소 레지스터는 기준 주소 레지스터, 인덱스 레지스터, 스택 포인터 레지스터로 구성된다. |
주소 레지스터 (AR)의 종류 | 설명 |
---|---|
기준 주소 레지스터 | 프로그램을 실행할 때 사용하는 기준 주소 값을 저장한다. 기준 주소는 하나의 프로그램이나 일부처럼 서로 관련 있는 정보를 저장하며, 연속된 저장 공간을 지정하는 데 참조할 수 있는 주소이다. 따라서 기준 주소 레지스터는 페이지나 세그먼트처럼 블록화된 정보에 접근하는데 사용한다 |
인덱스 레지스터 | 유효 주소를 계산하는 데 사용하는 주소 정보를 저장한다 |
스택 포인터 레지스터 | 메모리에 프로세서 스택을 구현하는 데 사용한다. 많은 프로세서와 주소 레지스터를 데이터 스택 포인터와 큐 포인터로 사용한다. 보통 반환 주소, 프로세서 상태 정보, 서브루틴의 임시 변수를 저장한다. |
사용자 불가시 레지스터
사용자 불가시 레지스터는 사용자가 정보를 변경할 수 없는 레지스터로 프로세스의 상태와 제어를 관리한다.
사용자 불가시 레지스터의 종류 | 설명 |
---|---|
프로그램 카운터 (PC, Program Counter) | 다음에 실행할 명령어의 주소를 보관하는 레지스터이다. 계수기로 되어 있어 실행할 명령어를 메모리에서 읽으면 명령어의 길이만큼 증가하여 다음 명령어를 가리키며, 분기 명령어는 목적 주소로 갱신할 수 있다. |
명령어 레지스터 (IR, Instruction Register) | 현재 실행하는 명령어를 보관하는 레지스터이다. |
누산기 (ACC, ACCumulator) | 데이터를 일시적으로 저장하는 레지스터이다. |
메모리 주소 레지스터 (MAR, Memory Address Register) | 프로세서가 참조하려는 데이터의 주소를 명시하여 메모리에 접근하는 버퍼 레지스터이다. |
메모리 버퍼 레지스터 (MBR, Memory Buffer Register) | 프로세서가 메모리에서 읽거나 메모리에 저장할 데이터 자체를 보관하는 버퍼 레지스터이다. 메모리 데이터 레지스터 (MDR, Memory Data Register)라고도 한다. |
프로세서의 수가 많을수록 처리 속도는 빠르며, 탐재한 프로세서의 수가 한 개면 Single-Core, 2개면 Dual-Core, ... 6개면 헥사, 8개면 옥타코어 라고 표현한다.
속도가 빠르고 용량이 큰 메모리는 비싸기 때문에 메모리는 계층 구조를 구성하여 비용, 속도, 용량, 접근시간 등을 상호 보완한다.
레지스터는 프로세서 내부에 있으며, 프로세스가 사용할 데이터를 보관하는 가장 빠른 메모리이다. 레지스터에는 PC, IR, ACC, MAR, MBR, DR,,, 등이 있다.
프로세서는 메인 메모리에 접근하기 전 캐시에 해당 주소의 자료가 있는지 확인한다. 이를 위해 접근하려는 주소 24 비트 중 태그에 해당하는 처음 22비트를 캐시의 모든 라인과 비교하여 일치하는 라인을 찾는다. 일치하는 라인이 있으면, 주소의 나머지 2비트 (00)을 이용해 데이터 라인의 4개 (00, 01, 10, 11) 바이트 중 해당하는 바이트를 가져온다.
캐시의 성능
캐시의 성능은 작은 용량의 캐시에 프로세스가 이후 참조할 정보가 얼마나 들어 있느냐로 좌우되며 프로세서가 참조하려는 정보가 있을 때를 캐시 적중 (Cache hit)이라 하고, 반대로 없을 때를 캐시 실패 (Cache miss) 라고 한다. 이때 블록의 크기는 캐시의 성능으로 좌우되는데, 실제 프로그램을 실행할 때 참조한 메모리에 대한 공간적 지역성, 시간적 지역성이 있다.
공간적 지역성과 시간적 지역성이란
공간적 지역성은 대부분의 프로그램이 참조한 주소와 인접한 주소의 내용을 다시 참조하는 특성이고, 시간적 지역성은 한 번 참조한 주소를 다시 참조하는 특성이다. 지역성은 다음 이유로 발생한다.
프로그램이 명령어를 순차적으로 실행하는 경향이 있어 명령어가 특정 메모리에 인접해있다.
순환 (단일 순환, 중첩 순환 등) 때문에 프로그램을 반복하더라도 메모리는 일부 영역만 참조한다.
대부분의 컴파일러를 메모리에 인접한 블록에 배열로 저장한다. 따라서 프로그램이 배열 원소에 순차적으로 자주 접근하므로 지역적인 배열 접근 경향이 있다.
지역성은 블록이 크면 캐시 히트율이 올라갈 수 있음을 의미하지만, 이에 따른 전송 부담과 캐시 데이터 교체 작업이 자주 일어나므로 블록 크기를 무작정 늘릴 수는 없다.
보조기억장치는 IO 장치로 프로그램과 데이터를 저장하는 하드웨어로 2차 기억장치, 외부기억장치라고도 한다.
자기디스크, 광디스크, 자기테이브, SSD 등이 있다
시스템 버스는 하드웨어를 물리적으로 연결하여 서로 데이터를 주고받을 수 있게 하는 통로이다. 컴퓨터 내부의 다양한 신호 (데이터 입출력 신호, 프로세서 상태 신호, 인터럽트 요구와 허가 신호, 클록 신호 등)는 시스템 버스를 통해 전달된다.
시스템 버스는 기능에 따라 데이터 버스, 주소 버스, 제어 버스로 구분한다.
종류 | 설명 |
---|---|
데이터 버스 | 프로세서와 메인 메모리, 주변장치 사이에서 데이터를 전송한다. 데이터 버스를 구성하는 배선 수는 프로세서가 한 번에 전송할 수 있는 비트 수를 결정하는데, 이를 워드라고 한다. |
주소 버스 | 프로세서가 시스템의 구성 요소를 식별하는 주소 정보를 전송한다. 주소 버스를 구성하는 배선 수는 프로세서와 접속할 수 있는 메인 메모리의 최대 용량을 결정한다. |
제어 버스 | 프로세서가 시스템의 구성 요소를 제어하는 데 사용한다. 제어 신호로 연산장치의 연산 종류와 메인 메모리의 읽기나 쓰기 동작을 결정한다. |
주변장치는 프로세서와 메인 메모리를 제외한 나머지 하드웨어 구성 요소이다. 크게 입력장치, 출력장치, 저장장치로 구분한다.