Post

성능 향상 기술

쉽게배우는 운영체제

성능 향상 기술

메인보드 내 메모리와 주변 장치는 시스템 버스(FSB)로 연결되어 있고, CPU 내부의 레지스터, 연산장치, 제어장치는 CPU내부버스(BSB)로 연결되어 있다.

그래서 메모리의 속도 == 시스템 버스의 속도 / CPU의 속도 == CPU 내부버스의 속도와 같은데, CPU 내부버스의 속도가 시스템 버스의 속도보다 빠르기 때문에 메모리를 비롯한 주변장치의 속도가 CPU의 속도를 따라가지 못한다.

버퍼

  • 버퍼

버퍼는 속도 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역활을 한다.

느린 입출력장치에서 데이터를 읽을 때 마다 하나씩 전송하면 작업량에 비해 전송되는 데이터 양이 매우 작지만, 일정량의 데이터를 모아서 한꺼번에 전송하면 적은 비용으로 많은 양의 데이터를 옮길 수 있다.

이렇게 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 장치가 버퍼이다.

  • 스풀

스풀은 CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다.

예시로 프린터에 사용되는 스풀러 가 있는데, 스풀러는 인쇄할 내용을 순차적으로 출력하는 소프트웨어로 출력 명령을 내린 프로그램과 독립적으로 동작한다.

다른 예로 엑셀로 작업하고 출력 할 때, 스풀러가 없다면 모든 출력을 엑셀이 해야 하기 때문에 출력이 끝나기 전까지 엑셀을 사용할 수 없다. 스풀러를 사용하면 인쇄할 내용을 하드디스크의 스풀러 공간에 저장해두고 엑셀은 다른 작업을 할 수 있다.

스풀러와 버퍼의 차이점은, 버퍼의 경우 어떤 프로그램이 사용하는 데이터든 버퍼가 차면 이동이 시작되는 즉 프로그램들이 버퍼를 공유하는 방식이고 스풀러는 한 인쇄물이 완료될 때 까지 다른 인쇄물이 끼어들수 없다.

캐시

캐시는 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시저장소이다. 즉 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종이다.

캐시는 CPU 안에 있으며 CPU 내부 버스의 속도로 작동한다. 메모리는 CPU에 비해 느리기 때문에, 캐시는 이 두장치의 속도차이를 완화해주는 역화을 한다.

캐시는 메모리의 내용 중 일부를 미리 가져오고, CPU는 메모리에 접근하기 전에 캐시를 먼저 접근하여 필요한 데이터가 있는지 찾는데, 여기서 원하는 데이터를 찾았다면 캐시 히트(cache hit)라고 하며 그 데이터를 바로 사용한다.

캐시 히트가 되는 비율을 캐시 적중률이라고 하며 캐시 적중률을 높여야 컴퓨터의 성능이 향상된다. 캐시 크기가 클수록 더 많은 데이터를 미리가져올 수 있으므로 좋지만, 가격이 비싸 MB 단위 정도로만 사용한다.

캐시 적중률을 높이는 또 다른 방법은 앞으로 많이 사용될 것으로 보이는 데이터를 미리 가져오는 방법으로 이와 관련된 이론 중, 현재 위치와 가까운 데이터가 멀리 있는 데이터 보다 사용될 확률이 높다는 지역성 이론이 있다.

  • 즉시 쓰기와 지연 쓰기
    • 즉시 쓰기 : 캐시에 있는 데이터가 변경되면 즉시 메모리에 반영하는 방식, 빈번한 데이터 전송으로 인해 성능이 느려지지만 메모리의 최산 값이 항상 반영되기 때문에 데이터를 잃는 위험이 없다.
    • 지연 쓰기 : 캐시에 있는 데이터가 변경되면 모아서 주기적으로 반영하는 방식

인터럽트

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

이 과정에서 입출력 관리자가 CPU에 보내는 완료 신호를 인터럽트 라고 하고, CPU는 입출력 관리자에게 지시를 내리고 다른 일을 하다가 완료 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리한다.

DMA(직접 메모리 접근)

과거 운영체제는 폴링 방식으로 CPU가 메모리, 주변장치 등에대한 모든 권한을 가지고 있었지만, 효율성을 위해 인터럽트 방식을 사용하면서 입출력 관리자가 데이터 입출력을 맡게 되었다.

CPU가 입출력 요청을 보내면, 입출력 관리자는 요청받은 데이터를 메모리에 가져다 놔야하는데 메모리는 CPU만 접근 권한을 가진 작업 공간이라 입출력 관리자는 접근이 불가하다. 그래서 입출력 관리자에게 메모리에 접근할 수 있는 권한을 DMA 라고 한다.

DMA는 인터럽트 방식에서 필수적이나 메모리에 CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터가 섞여 복잡해 지기 때문에 이를 해결하기 위해 메모리를 나누어 사용하는 방법이 도입되었다. 이렇게 메모리의 일정 영역을 입출력에 할당하는 기법을 MMIO(메모리 매핑 입출력)라고 한다.

This post is licensed under CC BY 4.0 by the author.