학습 목표 
- 컴퓨터를 구성하는 하드웨어의 특성을 이해한다.
- CPU와 메모리 구성 및 동작방식을 이해한다.
- 컴퓨터의 성능을 향상하는 기술을 알아본다.
- 병렬 처리의 개념을 이해하고 병렬 처리 기법을 알아본다.

목차

  • 버퍼
  • 캐시
  • 저장장치의 계층구조
  • 인터럽트

버퍼

현대 컴퓨터의 문제점

- CPU와 메모리, 메인보드의 작업 속도가 달라서 작업 효율이 떨어진다.

- 메모리 속도는 시스템 버스(FSB)와 같고, CPU 속도는 CPU 내부 버스(BSB)와 같다.

 

버퍼의 개념

버퍼(buffer)속도의 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 한다. 일정량의 데이터를 모아서 옮김으로써 속도의 차이를 완화하는 장치다.

 

  • 버퍼하드웨어적 개념소프트웨어적으로 개념 두가지가 있다. 
  • 소프트웨어적 방식에는 동영상 스트리밍 서비스, 프린터기에 사용되는 스풀러가 있다.

 

- 모니터 버퍼
모니터도 버퍼를 사용한다. 프로그램에서 처리한 결과를 화면에 출력할 때 한 줄이 다 차지 않으면 출력이 안되는 경우가 있다. \n이 버퍼의 내용을 출력하는 역할을 한다. C++도 마찬가지로 std::endl가 기능적으로 유사하다.

 

스풀

버퍼와 유사한 용어로 스풀(SPOOL, Simultaneous Peripheral Operation On-Line)이 있다. CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼다. 대표적으로 프린터에 사용되는 스풀러(spooler)가 있다.

 

  • 스풀러 사용 이유
    인쇄할 내용을 워드 프로그램이 처리하게 되면 인쇄하는 동안 워드 프로그램을 사용할 수 없게된다. 이에 대한 해결책으로 인쇄할 내용을 따로 보관할 하드디스크의 스풀러 공간을 만들게 되었다.
  • 기본 버퍼와 차이점
    기존의 버퍼는 다양한 프로그램들이 공유해서 사용하지만, 스풀러는 인쇄물이 사용될 때는 다른 프로그램이 끼어들 수 없는 독립적인 구조다. 

 


 

캐시

캐시의 개념

캐시버퍼의 일종으로 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와서 저장해두는 임시 저장 장소이다.  (= prefetch(미리 가져오기) : CPU가 사용할 것으로 예상되는 데이터를 미리 가져온다.)

 

  • 캐시는 소금을 조그만 통에 미리 담아두는거랑 개념이 비슷하다.
  • 캐시는 CPU 내부 버스의 속도로 동작한다.
  • 캐시는 빠른 속도로 동작하는 CPU와 느린 속도로 동작하는 메모리 사이에서 속도를 완화해준다.
  • CPU는 메모리에 접근하기전에 먼저 캐시에 데이터가 있는지 살펴본다
  • 데이터를 찾으면 cache hit(캐시 히트)라고 하며 찾지 못하면 cache miss(캐시 미스)라고 한다.
  • cache hit가 되는 비율cache hit ratio(캐시 적중률)이라고 하며, 일반적인 컴퓨터의 캐시 적중률은 90%다.
  • 캐시의 메모리가 커질수록 캐시 적중률이 증가하지만 가격이 비싸다.

 

- 캐시의 지역성 이론과 goto문
캐시의 지역성 이론이란 현재 프로그램이 10번 행을 실행하고 있다면 11번 행이 다음에 실행될 학률이 101번 행보다 높다는 이론이다. 따라서 지역성 이론에 따라 11~20번 행을 미리 가져온다. 지역성 이론에 따른다면 goto문을 사용하지 않는 것이 좋다. 캐시의 데이터가 쓸모 없어 지기 때문이다.

 

즉시 쓰기와 지연 쓰기
  • write through(즉시 쓰기)
    캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식이다. 메모리와의 빈번한 상호 작용으로 인해 성능이 느려진다는 단점이 있다.
  • write back(지연 쓰기)
    데이터를 항상 최신 상태로 유지하는 것이 아닌 모아서 주기적으로 반영하는 방식으로 copy back이라고도 부른다.

 

L1캐시와 L2캐시

레벨별 캐시의 구조를 의미하며 모든 자료를 가져오는 일반캐시, 명령어와 데이터를 구분해서 가져오는 특수 캐시가 있다. 각 특수 캐시레지스터와 연결되어 있다.

 

  • L1(특수  캐시): 명령어 캐시, 데이터 캐시
    [연결상태] 명령어 캐시 = 명령어 레지스터, 데이터 캐시 = 데이터 레지스터
  • L2(일반 캐시): 캐시
    일반 캐시는 메모리와 연결되어 있다.

 

-웹 브라우저 캐시
소프트웨어적 캐시는 웹 브라우저 캐시다. 앞으로 다시 방문할 것을 예상하고 지우지 않고 보관해둔 데이터를 의미한다.

 


저장장치의 계층 구조

컴퓨터 성능을 구성할 때 저렴한 가격과 성능을 동시에 챙기는 법

가격과 컴퓨터 성능 사이의 타협점으로 저장장치 계층 구조(storage hierarchy)가 있다. 이는 속도가 빠르고 값이 비싼 저장장치를 CPU와 가깝게 배치하고 값이 싸고 용량이 큰 저장장치를 주변장치와 가깝게 해서 빠른 속도와 큰 용량을 동시에 얻는 방법이다.

 

  • CPU쪽 저장장치
    캐시, 레지스터
  • 주변장치쪽 저장장치
    하드디스크, SSD 등

 

- 저장장치의 계층 구조 단점
데이터의 일관성이 없다. 버퍼를 비우기 전에 컴퓨터가 종료되면 데이터가 소멸되거나 캐시에 저장된 데이터를 변경하면 메모리의 해당 주소에 있는 데이터도 갱신되어야 하는데 즉시 반영하지 않아 지연 쓰기가 문제가 된다.

 


 

인터럽트

폴링(poling) 방식

CPU가 직접 입출력 장치에서 데이터를 가져오는 것을 말한다. 주변장치가 적은 초기 컴퓨터 시스템에서 많이 사용됐다.

:

인터럽트의 개념

CPU가 입출력에 관여하면 작업 호율이 떨어지므로 CPU 대신 주변 장치를 관리하는 방식인터럽트 방식이라 한다. 인터럽트와 CPU는 각자 독립적이다. (인터럽트 = 입출력 관리자, 장치 관리자)

 

인터럽트의 동작 과정

 

  1. CPU가 입출력 관리자에게 입출력 명령을 보낸다.
  2. 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
  3. 데이터 전송이 완료되면 입출력 관지라는 완료 신호를 CPU에 보낸다. (= 완료 신호를 인터럽트라 한다.)

 

입출력 관리자가 인터럽트를 보내면 CPU는 하던 작업을 중단하고 옮겨진 데이터를 먼저 처리한다. 이처럼 작업을 중단하고 처리해야하는 신호라서 인터럽트라는 의미가 붙게 되었다.

 

  • 인터럽트 번호(interrupt number)
    인터럽트 번호는 완료 신호를 보낼 때 장치들에 매겨진 고유 번호이다. (= 운영체제마다 번호가 다르다.)
    윈도우 운영체제의 경우 IRQ(Interrupt ReQuest)라고 부른다. 
  • 인터럽트 벡터(interrupt vector)
    여러개의 입출력 작업을 동시에 시킬 때 인터럽트 벡터를 사용한다.

 

 

직접 메모리 접근 DMA

메모리의 접근 권한을 CPU외에도 입출력 관리자에게 권한을 주는 것을 뜻한다. 메모리의 접근 권한이 있어야 CPU의 관여없이 작업을 완료할 수 있기 때문에 생겨났다.

 

메모리 매핑 입출력(Memory Mapped I/O, MMIO)

메모리에서 입출력 관리자가 사용하는 공간과 CPU가 작업하는 공간을 나누어서 할당하는걸 메모리 매핑 입출력이라 한다. 메모리가 섞이면 관리하기 어렵기 때문에 생겨났다.

 

사이클 훔치기(cycle stealing)

CPU와 입출력 장치가 직접 메모리 접근이 동시에 이루어질 경우 CPU가 메모리 사용 권한을 양보하는 걸 사이클 훔치기하고 한다.  CPU의 작업 속도보다 입출력 장치의 속도가 느리기 때문에 직접 메모리 접근을 양보한다.