시스템 버스
시스템 버스는 하드웨어를 물리적으로 연결하여 서로 데이터를 주고받을 수 있게하는 통로 역할을 한다. 이때 버스는 데이터 버스, 주소 버스, 제어 버스로 나뉜다.
데이터 버스
프로세서와 메인 메모리 그리고 주변 장치들 사이에서 데이터를 전송할 때 쓰인다. 이때 버스는 데이터를 주고받아야 하므로 양방향이다.
주소 버스
프로세서에서 메모리의 주소를 지정할 때, 그 주소가 어디인지에 대한 정보를 보내는 버스이다. 즉, 프로세서에서 01110011이라는 위치에 데이터를 보내려면 데이터 뿐만 아니라 데이터의 목적지인 01110011도 버스를 통해 보내는데 이를 주소 버스를 통해 보낸다. 결국 프로세서가 주소를 지정하면서 보내는 버스이다. 이 버스는 주소를 보내면 되니 단방향이다.
제어 버스
프로세서가 메모리나 I/O에 제어 신호를 전송하거나 반대로 프로세서에 동작을 지시할 수 있다. 그러므로 이는 단방향일수도 양방향일수도 있다.
프로세서
CPU(Central Processing Unit)라고 알고있는 프로세서는 컴퓨터 하드웨어에 장착된 모든 장치의 동작을 제어하고 하드웨어에 명령을 실행한다.
프로세서는 연산장치, 제어장치, 레지스터로 구성되고 이 장치들은 내부 버스로 서로 연결된다.
Registers) 레지스터
Control Unit) 제어장치
Combinational Logic) 연산장치
이때 레지스터와 연산장치 부분은 데이터 부분에 속하고 제어장치는 제어 부분에 속한다.
레지스터
프로세서 내부에 레지스터들이 존재하고 레지스터는 가시 레지스터와 불가시 레지스터로 구분 할 수 있다. 이때 가시 레지스터는 사용자가 운영체제와 애플리케이션을 통해 정보를 변경 할 수 있는 레지스터이다. 불가시 레지스터는 사용자가 정보를 변경 할 수 없고 오직 내부에서만 다루는 레지스터이다.
사용자 가시 레지스터
종류 | 설명 |
데이터 레지스터(Data Register, DR) | 함수 연산에 필요한 데이터를 저장하여 산술, 논리 연산에 사용 |
주소 레지스터(Address Register, AR) | 주소를 계산하는데 필요한 주소의 일부분을 저장. 기준 주소 레지스터 : 프로그램을 실행할 때 사용하는 기준 주소 값을 저장. 관련된 정보들을 연속된 저장 공간으로 지정한다. 인덱스 레지스터 : 유효 주소를 계산하는데 필요한 주소 정보 저장 스택 포인터 레지스터 : 메모리에 프로세서 스택을 구현하여 현재 스택 위치를 사용하는데 이용 |
사용자 불가시 레지스터
종류 | 설명 |
프로그램 카운터(PC) | 다음 실행할 코드 위치를 저장하는 레지스터이다. |
명령어 레지스터(IR) | 현재 실행하는 명령어를 보관하는 레지스터이다. |
누산기(AC) | 데이터를 일시적으로 저장하는 레지스터이다. |
메모리 주소 레지스터(MAR) | 유효 번지를 상대적으로 계산할 때 사용한다. |
메모리 버퍼 레지스터(MBR) | 주기억 장치에서 연산에 필요한 자료를 호출하여 저장한다. |
메모리
최상위에는 속도가 가장 빠른 레지스터가 있고 이는 CPU에 장착되어있다. 프로그램을 실행하거나 데이터를 참조하기 위해서는 모든 것이 메인 메모리에 있어야 하는데 이때 불필요한 프로그램이지만 저장되어야 할 것들은 보조 기억장치에 저장되고 당장 실행되어야 할 것들을 메인 메모리로 옮긴다. 현실적으로 모든 것을 다 레지스터로 하기에는 가격이 너무 비싸니 서로 다른 메모리를 적재적소에 이용하여 시스템 성능 향상을 시켜야한다. 이때 메인 메모리와 프로세서의 속도 차이를 보완하기 위해 캐시라는 것이 존재한다. 위의 메인 메모리는 프로세서에서 현재 실행중인 프로그램의 데이터를 저장하거나 프로세서에서 처리한 결과를 저장하는데 이용한다. 이는 DRAM을 많이 사용하고 주기억장치 혹은 1차 기억장치라고 말한다. 이때 메인 메모리는 수많은 셀로 구성되는데 이때 셀은 비트로 구성된다. 즉, 셀이 K비트이면 셀에는 2^K(0혹은 1이 저장될 수 있으니)값을 저장 할 수 있고 주소 범위는 0~(2^K)-1이 된다.
메모리 매핑
앞서 말했듯이 주소 범위는 셀의 개수에 따라 0~(2^k) -1가 되는데 이때 이 주소는 물리적 주소가 된다. 하지만 프로그래머는 물리적 주소 대신 변수, 함수를 이용하고 이 내용을 컴파일러가 기계어로 변환 할 때 변수와 명령어에 주소를 할당하게 된다. 이때 주소는 가상 주소(논리 주소, 프로그램 주소)라고 하며 이 논리 주소는 매모리 매핑을 통해 실제 주소와 연결된다. 이때 메인 메모리의 실제 주소 크기는 프로그램의 크기에 따라 부족할 수 있는데 가상 메모리를 이용하여 메인 메모리의 사용 범위를 늘릴 수 있다.
메모리 접근/사이클 시간
메모리 속도는 메모리 접근시간과 메모리 사이클 시간으로 나타낸다. 메모리 접근시간 :: 명령을 통해 목표 주소를 검색하여 데이터를 읽기/쓰기를 시작할 때 까지 걸린시간이다. 예를들면 쓰기 제어 신호를 통해 데이터를 메모리 버퍼 레지스터에 저장 할 때 까지 걸린시간이다.
메모리 사이클 시간) 연속적인 메모리 동작 사이에 필요한 최소 지연시간이다. 위의 그림을 보면 메모리 접근 시간이 메모리 사이클 시간보다 짧다. 즉, 메모리 사이클시간은 메모리 접근시간 + 준비시간이다.
캐시
메인 메모리는 프로세서와 보조기억장치 사이에 존재하고 이때 둘 사이의 속도 향상을 위해 관여한다. 이때 프로세서와 메인 메모리간에도 속도 향상을 위해 관여하는 것이 존재하는데 그것은 캐시이다.
프로세서 <-> 캐시 <-> 메인 메모리 <-> 보조기억장치 및 주변장치
이때 캐시는 보통 프로세서 내부에 존재하고(외부에 있기도 하다) 속도가 빠른 프로세서와 상대적으로 느린 메인메모리 사이의 속도를 보완하고자 하는 고속 버퍼이다. 이때 캐시는 메인 메모리에서 데이터를 블록 단위로 가져와서 프로세서에 워드 단위로 전달하여 속도를 높인다.
캐시의 동작 원리
프로세서에서 필요한 데이터를 메인 메모리에서 찾기 전에 캐시에 해당 주소의 자료가 있는지 먼저 검색한다. 이때 해당하는 주소의 비트 24비트 중 22비트를 우선 캐시의 모든 라인과 비교하여 일치하는 라인들을 찾는다. 즉, 찾으려는 비트가 1010 1111 0000 1100 0001 0110일때 1010 1111 0000 1100 0001 01를 먼저 검색하고 존재한다면 00, 01, 10, 11을 검색하여 일치하면 가져오게 된다. 캐시의 성능은 프로세서가 참조할 주소 자료가 얼마나 들어있냐로 좌우되고 이때 프로세서가 찾으려는 주소의 자료가 캐시에 많이 존재한다면 캐시 히트율이 높다고 한다.
지역성
캐시가 효율적으로 동작하려면, 캐시에 저장할 데이터가 지역성을 가져야 한다. 지역성이란 데이터 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것을 의미한다.
시간적 지역성
- 최근 사용되었던 기억 장소들이 집중적으로 액세스되는 경향
- 참조했던 메모리는 빠른 시간에 다시 참조될 확률이 높음
공간적 지역성
- 특성 클러스터의 기억 장소들에 대해 참조가 집중적으로 이루어지는 경향
- 참조된 메모리 근처의 메모리를 참조
순차적 지역성
- 데이터가 순차적으로 액세스되는 경향
- 프로그램 내의 명령어가 순차적 구성에 기인
'CS > OS & 하드웨어' 카테고리의 다른 글
내부 및 외부 단편화 (Internal/External Fragmentation) (0) | 2022.10.28 |
---|---|
OS가 하는 일 및 컴퓨터 구조 (0) | 2022.10.25 |
CPU의 역사 (0) | 2022.08.26 |
CPU 캐시의 원리 (캐시 라인과 태그) (0) | 2022.08.11 |
CPU 프로세서 CISC / RISC 차이 (0) | 2022.08.10 |