-
컴퓨터의 구조와 성능 향상대학/운영체제 2023. 4. 16. 21:20
컴퓨터의 기본 구성
CPU, 메모리와 같은 필수장치와
키보드 같은 입력장치, 그래픽카드 같은 출력장치, 디스크 같은 저장장치 등 주변장치로 구성되어 있다.
현대의 컴퓨터는 폰 노이만 구조를 따르는데,
폰 노이만 구조는 CPU, 메모리, 입출력장치, 저장장치 등은 버스(Bus)로 연결되어 있고,
모든 프로그램은 메모리에 올라와야 실행될 수 있는 구조를 말한다.
여기서 메모리와 주변장치를 연결하는 버스를 Front-Side Bus 라 하고,
CPU 내부의 장치를 연결하는 버스를 Back-Side Bus 라 한다.
일반적으로 BSB의 속도가 FSB보다 훨씬 빠른데,
CPU는 BSB의 속도로 동작하고, 메모리는 FSB의 속도로 동작하기 때문에 지연이 발생하게 된다.
이 문제는 cache를 통해 해결한다.
FSB는 양방향으로 통신하는 제어 버스, 데이터 버스와 단방향 통신하는 주소 버스로 나뉜다.
참고로 제어 버스는 CPU에서 메모리, 주변장치에 제어신호를 보내거나,
메모리, 주변장치에서 오류 발생시 제어신호를 CPU에 보내기 위해 양방향으로 통신한다.
데이터 버스는 메모리 버퍼 레지스터와 연결되어 데이터가 양방향으로 이동한다.
주소 버스는 메모리 주소 레지스터와 연결되어 데이터를 읽고 쓸 때 위치 정보를 보내기만 하기에 단방향으로 이동한다.
32bit CPU는 데이터를 한 번에 32bit만큼 처리할 수 있으며, 이 경우 레지스터, 버스의 대역폭도 32bit이다.
CPU와 메모리
- CPU
CPU는 산술논리 연산장치(ALU), 제어장치, 레지스터 등 작은 부품의 집합체이다.
레지스터는 1bit의 데이터를 저장할 수 있는 Flip-Flop 회로로 구현되어 있는데 이런 레지스터의 종류가 많다.
사용자가 볼 수 있는 레지스터는 다음과 같다.
- 데이터 레지스터 (DR)
- 임시 레지스터 (ACC)
DR, ACC 모두 명령어를 처리하는데 필요한 데이터를 저장 - 주소 레지스터 (AR)
데이터, 명령어가 저장된 메모리의 주소를 저장
사용자가 볼 수 없는 레지스터는 다음과 같다.
- 프로그램 카운터 (PC)
다음에 실행할 명령어의 위치 정보를 저장 - 명령어 레지스터 (IR)
현재 실행 중인 명령어를 저장 - 메모리 주소 레지스터 (MAR)
메모리 관리자가 접근해야 할 메모리의 주소를 저장 - 메모리 버퍼 레지스터 (MBR)
메모리 관리자가 메모리에서 가져온 데이터를 임시로 저장 - 프로그램 상태 레지스터 (PSR)
연산 결과를 저장
명령어는 아래의 5단계에 따라 수행된다.
- 명령어 인출 (IF, instruction fetch)
- 명령어 해석 (ID, instructon decode)
- 명령어 실행 (EXE, execute)
- 메모리로 보냄 (MEM, memory)
- 메모리에 쓰기 (WB, write back)
- RAM
메모리는 휘발성과 비휘발성으로 나뉜다.
그 중 휘발성 메모리, RAM이 어떻게 데이터를 보호하는지 알아보자.
- 작업의 메모리 시작 주소를 경계 레지스터에 저장 후 작업
- 작업이 차지하고 있는 메모리의 크기를 한계 레지스터에 저장
- 작업이 진행되는 동안 하드웨어 적으로 이 두 경계를 벗어나는지 점검
- 이 두 레지스터의 값을 벗어나면 메모리 관련 Interrupt가 발생
- 메모리 관련 Interrupt 발생시 운영체제가 프로그램 강제 종료
운영체제가 메모리를 관리하기 전, 부팅 시 운영체제를 메모리에 올리는 과정도 알아보자.
- 하드웨어 점검
- 바이오스(ROM)이 메모리에 부트스트랩 코드를 올려 실행
- 부트스트랩 코드가 운영체제 프로세스 실행
컴퓨터 성능 향상 기술
- Buffer
속도 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 하는 장치로
일정량의 데이터를 모아 한 번에 옮김으로써 속도의 차이를 완화한다.
CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼 스풀도 있다.
- Cache
메모리(FSB)와 CPU(BSB)간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소.
버퍼의 일종으로 CPU는 먼저 캐시를 방문하여 원하는 데이터가 있는지 찾고 없으면 메모리를 찾게 된다.
이 때, 원하는 데이터가 캐시의 있는 경우를 cache hit, 없는 경우를 cache miss라 하며
그 적중률을 cache hit ratio라 한다. (일반적으로는 90%의 적중률을 보인다고 함)
캐시를 쓰는 방식에는 즉시 쓰기와 지연 쓰기 방식이 있는데,
즉시 쓰는 방법은 캐시에 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식인데,
메모리와 빈번하게 데이터를 주고 받기에 성능이 느려지지만,
메모리의 값을 항상 최신상태로 유지할 수 있다는 장점이 있다.
(지연 쓰기는 반대)
CPU 레지스터에 직접 연결되는 캐시를 L1 캐시 (특수 캐시),
메모리에 연결되는 캐시를 L2 캐시 (일반 캐시)라고 부른다.
L1 캐시는 각 레지스터에 연결되어 있기 때문에 명령어와 데이터를 구분하여 가져온다.
- 저장장치의 계층 구조
레지스터 - 캐시 - 메모리 - 저장장치 순의 계층구조를 이룬다.
레지스터로 갈수록 용량은 작지만 속도는 빨라진다.
레지스터의 용량을 키우면 좋겠지만, 비용적인 문제 때문에 위 같은 계층구조가 현실적이다.
- Interrupt
인터럽트 방식은 입출력 관리자가 대신 입출력을 해주는 방식으로, 입출력 관리자가 CPU에 보내는 완료 신호가 Interrupt이다.
반대되는 방식은 polling 방식이 있는데, 이는 CPU가 입출력까지 관리하는 방식으로 비효율적이다.
인터럽트는 프로세스의 interrupt vector 에서 통합적으로 관리된다.
그리고 그 vector의 상태에 따라 프로세스가 처리되는 방식이 결정된다.
병렬 처리
동시에 여러 명령어를 처리하는 방식으로 파이프라인, 슈퍼스칼라 기법을 통해 달성할 수 있다.
- 파이프라인 기법
위에서 언급한 명령어 실행 5단계를 겹쳐서 실행하는 방법이다.
이 방법에는 아래와 같은 위험성이 동반된다.
- Data hazard
데이터의 의존성 때문에 발생하는 문제로 파이프라인의 명령어 단계를 지연하여 해결할 수 있다. - Control hazard
프로그램 카운터 값을 갑자기 변화시켜 생기는 문제로 분기 예측이나 분기 지연 방법으로 해결할 수 있다. - Structure hazard
서로 다른 명령어가 같은 자원에 접근할 때 생기는 문제로 해결하기 어렵다고 알려져 있다...
파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리하는 슈퍼파이프라인 기법도 있다.
- 슈퍼스칼라 기법
복수의 CPU 코어를 활용하며 복수의 명령어를 동시에 처리하는 방법이다.
슈퍼파이프라인 기법과 응용한 슈퍼파이프라인 슈퍼스칼라 기법도 있다.
- VLIW 기법
CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬 처리하는 기법이다.
컴파일러가 여러 명령어를 하나의 명령어로 압축하기 때문에 앞선 기법보다 동시에 처리하는 명령어의 수가 적다.
무어의 법칙 / 암달의 법칙
- 무어의 법칙
CPU의 속도가 2년마다 2배 빨라진다는 법칙 (현재는 적용 X)
- 암달의 법칙
CPU의 클럭을 2배 상승시켜도 컴퓨터의 성능은 2배 빨라지지 않는다는 법칙