농장/독&필 <쉽게 배우는 운영체제>

2-3 컴퓨터 성능 향상 기술 / 버퍼와 캐시, 저장장치의 계층구초에 대해

귤발자 2021. 8. 10. 20:27
728x90
반응형

 

* 메모리 = 메인메모리

버퍼

버퍼(buffer)는 일정량의 데이터를 모아 옮김으로써 두 장치 간 속도의 차이를 완화하는 역할을 한다. 버퍼의 용량이 클 수록 속도가 빠르다.

버퍼가 다 채워질 때까지 저장장치 간에 데이터 전송이 지연되기 때문에 연결된 하드웨어 제거시 데이터 소실 등의 문제가 생길 수 있으므로 주의해야 한다.

예: 하드디스크의 메모리 버퍼, 동영상 스트리밍에 사용되는 데이터 버퍼

 

스풀

SPOOL, Simultaneous Peripheral Operation On-Line의 약자. CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다.

대표적으로 프린터의 스풀러가 있다.

스풀러(spooler): 인쇄할 내용을 순차적으로 출력하는 소프트웨어이며 출력 명령을 내린 프로그램과 독립적으로 동작한다. 한번에 하나의 프로그램이 독점하는(한번에 한가지의 인쇄만 가능한), 프로그램 간에 배타적인 성질을 가진다.

 

 

 

캐시

캐시(cache)는 CPU 내부에 위치하는 버퍼의 일종으로, *메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와(prefetch) 저장해두는 임시 공간이다. 미리 가져오는 데이터는 CPU가 앞으로 사용할 것이라 예상되는 것들이다.

SRAM을 주로 사용하는 캐시는 고가이기에 용량을 늘리기 힘들다.

* CPU의 속도 > 메모리의 속도

CPU는 메모리 접근이 필요한 상황에 먼저 캐시에서 원하는 데이터를 찾는다.

  • cache hit: CPU가 캐시에서 원하는 데이터를 찾은 경우
  • cache miss: CPU가 캐시에서 원하는 데이터를 찾지 못한 경우 직접 메모리에 접근한다.
  • 캐시 적중률(cache hit ratio): 캐시 히트가 되는 비율. 캐시의 크기를 늘리거나 앞으로 많이 사용될 가까운 데이터를 가져와 적중률을 높일 수 있다.

캐시의 변경된 데이터를 메모리에 반영하는 방식

  • 즉시 쓰기(write through): 캐시의 데이터가 변경되면 즉시 메모리에 반영한다. 메모리에 자주 접근하기에 성능이 느려지나, 메모리의 최신값이 항상 유지되어 데이터 소실에 대한 안정성이 보장된다.
  • 지연 쓰기(write back, copy back): 캐시의 변경된 내용을 모아 주기적으로 메모리에 반영한다. 메모리에 덜 접근하여 성능이 향상될 수 있으나, 메모리와 캐시 사이에 데이터 불일치가 발생할 수 있다.

캐시의 종류

❗ 프로그램 명령어는 명령어 부분과 데이터 부분(작업 대상)으로 나뉜다.

  • 일반 캐시, L2(Level 2) 캐시: 명령어와 데이터의 구분 없이 모든 자료를 가져온다. 메모리와 연결된다.
  • 특수 캐시, L1(Level 1) 캐시: 명령어와 데이터를 구분하여 가져온다. CPU 레지스터에 직접 연결된다.

 

웹 브라우저 캐시: 방문했던 사이트의 이미지와 같은 데이터를 보관하여 재방문 시 속도를 높인다. 그러나 저장된 캐시 데이터가 너무 많으면 오히려 웹브라우저의 속도를 저하시킬 수 있기 때문에 주기적으로 비우는 것이 좋다.

 

 

 

저장장치의 계층구조

메인 메모리 = 주기억장치 / 저장장치 = 보조기억장치

<한계점>

  • SSD는 하드디스크(HDD)보다 빠르지만, 상대적으로 매우 고가이다.
  • 캐시 또한 매우 고가이기에 큰 용량을 가지기 힘들다.

<해결>

저장장치 구조를 속도가 빠르고 값이 비싼 장치일수록 CPU 가까이, 값이 싸고 용량이 큰 저장장치일 수록 CPU와 멀리 배치하여 속도차를 최소화했다.

다만 캐시와 버퍼 사용에 있어서 데이터 일관성을 유지하는 것이 중요한 문제이다.

 

 

 

인터럽트

입출력 관리자가 CPU에 보내는 입출력 완료 신호를 인터럽트라고 한다.

실은 다양한 종류의 인터럽트가 존재한다. 이곳에선 입출력 완료 인터럽트만 다룬다.

CPU가 입출력장치에 직접 접근하는 폴링(polling) 방식의 단점을 보완하기 위해 인터럽트 방식이 등장했다.

과정

CPU가 입출력 관리자에게 입출력 명령을 보내면 입출력 관리자가 이를 수행하고, 완료 신호(인터럽트)를 CPU에게 전달한다. CPU는 다른 일을 하다가 인터럽트 신호를 받으면 하던 작업을 중단하고 입출력된 데이터를 처리한다.

장점

  • CPU는 본래의 역할인 명령어 해석과 실행에 몰두할 수 있다.
  • CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영하여 시스템의 효율을 높인다.

속성

  • 인터럽트 번호: 완료 신호를 보낼 때 장치의 이름 대신 사용하는 장치의 고유 번호로, OS마다 다르다(Windows OS의 경우 IRQ라고 부른다).
  • 인터럽트 벡터: 인터럽트 처리의 효율을 위해 여러 개의 인터럽트를 하나의 배열로 만든 형태
  • 직접 메모리 접근(DMA): 입출력 관리자가 CPU의 허락없이 메인 메모리에 접근할 수 있는 권한(원래 메인 메모리는 CPU만 접근 권한을 가진 작업 공간이다)을 말한다.
  • 메모리 매핑 입출력(MMIO): CPU가 사용하는 데이터와 직접 메모리 접근을 통해 들어오는 데이터의 메모리 공간을 나누어 사용하는 방법으로, 메모리의 일정 공간을 입출력에 할당하는 기법을 말한다.

  • 사이클 훔치기(cycle stealing): CPU와 직접 메모리 접근이 동시에 메모리에 접근할 때 속도가 더 빠른 CPU가 메모리 사용 권한을 양보하는 것을 말한다. CPU에게는 직접 메모리 접근이 사이클(순서)를 훔쳐간 것으로 볼 수 있다.
728x90
반응형