컴퓨터 시스템의 간단한 소개 - 하드웨어의 구성
컴퓨터 시스템은 하드웨어와 소프트웨어로 구성되어 있습니다.
하드웨어는 데이터를 처리하는 물리적인 기계장치이고,
소프트웨어는 명령어로 구성된 가상의 프로그램입니다.
오늘 공부할 것은 하드웨어입니다.
- 프로세서
하드웨어는 크게 프로세서와 메모리, 주변장치로 구성되며, 각각의 하드웨어는 시스템 버스라는 회선으로 연결됩니다.
프로세서는 컴퓨터의 뇌입니다. CPU (중앙처리장치, Central Processing Unit) 으로도 불리며,
경우에 따라서는 MPU (Micro Processing Unit)이라고도 불립니다.
하드웨어 측면에서는 중앙처리장치, 소프트웨어 측면에서는 프로세서라고 부르는 것이 일반적입니다.
실제로는 실행유닛 (EU), 명령어 유닛 (IU), 어드레싱 유닛 (AU), 버스 인터페이스 유닛 (BIU)로 나눠지지만,
학부과정에서는 실행유닛 부분만 다루나 봅니다. 그런 의미에서의 프로세서는 다음과 같이 구성되며, 각각은 내부 버스로 연결됩니다.
레지스터, 연산장치, 제어장치
- 레지스터
프로세서에서 깊게 살펴볼 부분은 레지스터입니다.
레지스터는 CPU내부에서 쓰이는, 아주 빠른 속도를 가진 임시 메모리입니다.
레지스터의 분류 기준은 주로 아래와 같습니다.
용도에 따라 | 전용 레지스터 | 특수한 목적으로 사용됩니다. Ex) 명령 포인터 레지스터, 세그먼트 레지스터 등 |
범용 레지스터 | 범용적으로 사용됩니다. Ex) EAX, EBX, ECX... |
- 사용자 가시 레지스터 (user-visible register): 사용자가 정보를 변경할 수 있는 레지스터
데이터 레지스터 | 함수 연산에 필요한 오퍼랜드 데이터를 저장합니다. 이들은 산술*논리 연산에 쓰이며, 연산 결과로 플래그 값을 저장합니다. | |
주소 레지스터 | 주소나 유효 주소를 계산하는 데 필요한 주소의 일부분을 저장합니다. 이 주소를 통해 값을 불러와 산술 연산을 진행할 수 있습니다. |
|
기준 주소 레지스터 |
연속된 저장 공간을 지시하는 데 참조할 수 있는 주소를 기준 주소라고 합니다. 페이지나 세그먼트와 같은 블록화된 정보에 접근하는 데 사용됩니다. |
|
인덱스 레지스터 |
유효주소를 계산하는 데 사용되는 주소정보를 저장합니다. | |
스택 포인터 레지스터 |
메모리에 프로세서 스택을 구현하는 데 사용됩니다. 각 프로세서는 스택, 큐 포인터로 저장되며, 보통 반환 주소, 프로세서 상태 정보, 서브루틴의 임시 변수를 저장합니다. |
- 사용자 불가시 레지스터 (user-invisible register): 사용자가 정보를 변경할 수 없는 레지스터
프로그램 카운터 Program Counter |
다음에 실행할 명령어의 주소를 저장하는 레지스터입니다. 계수기의 구조를 가지고 있어 실행할 명령어를 메모리에서 읽으면 명령어 길이 만큼 증가하며 다음 명령어를 가리킵니다. 분기 명령어는 목적 주소로 갱신할 수 있습니다. |
명령어 레지스터 Instruction Register |
현재 실행하는 명령어를 보관하는 레지스터입니다. |
누산기 ACCumulator |
데이터를 일시적으로 저장합니다. |
메모리 주소 레지스터 Memory Address Register |
프로세서가 참조하려는 데이터의 주소를 명시해서, 그 주소를 통해 메인 메모리에 접근하는 레지스터입니다. |
메모리 버퍼 레지스터 Memory Buffer Register |
MDR (Memory Data Register) 이라고도 합니다. 프로세서가 메모리에서 읽거나 쓸 데이터 자체를 저장하는 버퍼 레지스터입니다. |
- 메모리
메모리는 비쌀수록 빠르고, 쌀수록 느리고, 각각의 성능격차를 보완하기 위해 메모리 계층구조를 가집니다.
레지스터 - 캐시 - 메인메모리 - 보조기억장치 |
- 메인 메모리 (1차 기억장치)
프로세서 외부에 위치하는, 입출력 장치와 프로세서 사이에 있는 저장장치입니다.
주로 프로세서에서 즉각적으로 사용될 수 있는 프로그램과 데이터나 그 결과를 저장합니다.
저장밀도가 높고 가격이 싼 DRAM을 많이 사용합니다.
메인메모리는 N개의 비트로 이루어진 셀의 집합으로 구성되며, 각 셀 내부도 주소로써 접근할 수 있습니다.
- 논리적 주소와 물리적 주소의 변환
위와 같이 컴퓨터에 주어진 주소를 물리적 주소라고 합니다.
프로그래머가 작성한 코드의 변수나, 명령어는 논리적 주소라고 합니다.
컴파일 과정에서 논리적 주소는 물리적 주소로 변환됩니다. : 이 과정을 매핑, 메모리 맵이라고 합니다.
나중에 배울 가상 메모리 방법을 사용하면, 메인 메모리의 유효 크기를 늘릴 수 있습니다.
- 메모리 속도
메모리 속도는 메모리 접근시간과 메모리 사이클 시간으로 표현할 수 있습니다.
메모리 접근시간은 명령이 발생한 후, 그 명령을 마칠 때까지의 시간을 의미합니다.
메모리 사이클 시간은 명령이 발생한 후, 다음 명령이 발생할 때까지 필요한 최소 지연 시간을 의미합니다.
보통은 메모리 접근시간이 메모리 사이클 시간보다 약간 더 짧습니다.
- 캐시: 하드웨어로 구현한 해시 테이블
프로세서 내부나 외부에 위치하며, 프로세서와 메인 메모리의 처리속도의 차이를 보완하는 고속 버퍼입니다.
메인 메모리에서 블록 단위의 정보를 가져와, 프로세스에 워드 단위로 전달합니다.
메인 메모리와는 낮은 대역폭으로, 프로세서와는 높은 대역폭으로 전달해서 속도 차이를 줄입니다.
- 캐시의 간단한 작동방법
보통 캐시에 찾으려는 데이터가 있다면 캐시 히트가 일어나고, 없다면 캐시 미스가 일어납니다.
그리고 이 비율에 연관지어서, 캐시의 성능을 아래와 같이 표현할 수 있습니다.
보통 캐시의 성능은 평균 접근 시간으로 나타내어집니다.
(Average Access Time) = (Hit Latency) + (Miss rate) * (Miss Latency) |
Hit latency : 캐시 히트가 발생했을 때의 정보를 가져오는 시간
Miss Latency : 캐시 미스가 발생했을 때의 정보를 가져오는 시간
Miss Late : 캐시 미스가 발생할 확률
캐시에 저장되는 메모리는 사용 가능성이 높은 데이터를 우선적으로 저장하기 위해서 '지역성의 원리'를 이용합니다.
지역성의 원리는 크게 두가지로 나뉩니다.
1. 공간적 지역성: 최근에 참조한 데이터의 주변공간에 접근하는 경향 (순차적 지역성이라고도 합니다.)
2. 시간적 지역성: 최근 참조한 데이터에 재접근하는 경향
캐시에서의 등록과 탐색은 아래와 같이 이루어집니다.
를 알아보기 이전에, 프로세서가 데이터를 요청할 때의 양식을 살펴보고 갑시다.
태그 비트 N개 | 인덱스 비트 M개 | 오프셋 비트 K개 |
1. 프로세서가 요청한 데이터의 인덱스와 일치하는 캐시의 공간을 탐색한다.
2. 만약에 탐색한 공간 내에서, 태그 배열이 일치하고, 그 공간에 저장된 데이터가 있다면, 그 데이터를 반환한다.
3. 없다면 메인메모리나 상위 캐시에서 알맞은 데이터를 불러와 저장하고 반환한다.
시스템 버스
시스템 버스는 하드웨어를 물리적으로 연결하여 서로 데이터를 주고받을 수 있게 하는 통로입니다.
시스템 버스도 그 기능에 따라 3가지로 분류할 수 있습니다.
데이터 버스 | 데이터를 전송하는 버스입니다. 배선의 수는 곧 한 번에 전달할 수 있는 비트의 수, 즉 워드의 크기입니다. |
주소 버스 | 시스템의 구성요소를 식별하는 주소 정보를 전송하는 버스입니다. 배선의 수는 프로세서와 접속할 수 있는 메인 메모리의 최대 용량을 뜻합니다. |
제어 버스 | 프로세서가 시스템의 구성요소를 제어하는 데 사용됩니다. 주로 연산장치의 연산의 종류나, 메인 메모리의 읽기나 쓰기 동작을 지정합니다. |
참고한 자료입니다.
운영체제: 그림으로 배우는 구조와 원리 개정 3판 (구현회, 한빛 아카데미)
https://parksb.github.io/article/29.html (캐시)
wonit.tistory.com/76 (레지스터 부분)