[OS] 컴퓨터 성능 향상 기술

Suyeon·2022년 2월 12일
0

Operating System

목록 보기
3/10

1. 현대 컴퓨터의 구조의 문제

CPU와 메모리, 주변 장치의 작업속도가 다르다. CPU는 CPU 내부버스로 연결되어있고 메모리, 주변 장치는 시스템 버스로 연결되어있다. 따라서 CPU에 비해 메모리가 느린 것은 물론이고 프로그램과 데이터를 보관하는 하드디스크의 속도는 더욱 느리다.

아래 목록은 이러한 장치간의 속도 차이를 개선하고 시스템 작업 속도를 위해 개발된 기술들이다.

1. 버퍼(Buffer)

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

  • 느린 입출력장치에서 데이터를 읽을 때마다 하나씩 전송하면 작업량에 비해 실제로 전송되는 데이터의 양이 매우 작다.
  • 버퍼를 사용하여 일정량의 데이터를 모아 한꺼번에 전송하면 적은 노력으로 많은 양의 데이터를 옮길 수 있다.
    • e.g 계란을 하나씩 옮기는 것보다 바구니에 여러개 담아 옮기는 것이 더 빠르다.

1.1 버퍼의 종류

  • 하드디스크의 메모리 버퍼
  • 동영상 스트리밍
    • 네트워크에서 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도차이가 발생하면 동영상이 끊긴다.
    • 이러한 현상을 방지하기 위해 동영상의 일부 부분을 버퍼에 넣은 후 실행한다.

Q. 하드웨어 안전 제거?

  • 버퍼를 사용하면 버퍼가 다 채워질 때 까지 저장장치 간에 데이터 전송이 지연된다.
  • USB같은 외부 저장장치에 데이터를 복사한 후 바로 제거하면, 버퍼때문에 아직 저장되지 않은 데이터가 유실될 수 있다.
  • 하드웨어 안전 제거를 사용하면, 버퍼에 있는 아직 옮겨지지 않은 데이터를 USB등의 저장장치에 보내고 USB의 전원을 차단하여 안전하게 제거할 수 있다.

2. 스풀(SPOOL, Simultaneous Peripheral Operation On-Line)

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

  • 스풀러(Spooler): 인쇄할 내용을 순차적으로 출력하는 소프트웨어로, 출력 명령을 내린 프로그램과 독립적으로 동작한다.
    • 워드프로세서로 작업하고 프린터로 출력할 때, 스풀러가 없다면 모든 출력을 워드가 알아서 처리해야하므로 인쇄가 끝날 때 까지 워드를 사용할 수 없다.

3. 캐시(Chache)

💡 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시장소이다. 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓는다.(= prefetch)

  1. 하드웨어 (CPU내에 위치한 캐시)
  2. 소프트웨어 (웹 브라우저 캐시)

캐시 동작 원리

  1. 캐시는 CPU안에 있으며 CPU 내부 버스로 동작한다.
  2. 메모리의 경우 시스템 버스로 동작하기 때문에 CPU보다 느리다.
  3. 캐시는 CPU와 메모리 사이에서 두 장치의 속도를 완화해준다.

캐시 관련 용어

  1. 캐시는 메모리의 내용중 일부를 미리 가져오고, CPU는 메모리에 접근해야할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾는다. 캐시 히트라면 그 데이터를 바로 사용하고, 캐시 미스라면 메모리로 가서 데이터를 찾는다.
    1. 캐시 히트(cache hit): 캐시에서 원하는 데이터를 찾음
    2. 캐시 미스(cache miss): 캐시에서 원하는 데이터를 찾지 못함
    3. 캐시 적중률(cache hit ratio): 캐시 히트가 되는 비율. 일반적으로 약 90%이다.

캐시 적중률 높이기

💡 컴퓨터의 성능을 향상하려면 캐시 적중률이 높아야한다.

  1. 캐시의 크기를 늘린다. 캐시의 크기가 커지면 더 많은 데이터를 미리 가져올 수 있으므로 캐시 적중률이 올라간다.
  2. 앞으로 많이 사용될 데이터를 가져온다.
    1. 지역성이론(locality): 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 더 높다는 이론

즉시 쓰기와 지연 쓰기

💡 캐시는 메모리에서 데이터를 임시로 가져온 것이여서 캐시에 있는 데이터가 변경되면 메모리에 있는 원래 데이터를 변경해야한다. 캐시의 변경된 데이터를 메모리에 반영하는데는 1. 즉시 쓰기 방식과 2. 지연 쓰기 방식이 있다.

즉시 쓰기

  • 캐시의 데이터가 변경되면 바로 메모리에 반영하는 방식
  • 메모리와의 빈번한 데이터 전송으로 인해 성능이 느리지만, 메모리의 최신값이 항상 유지되어 급작스러운 정전에도 데이터를 잃어버리지 않는다.

지연 쓰기

  • 캐시의 데이터가 변경되면 변경된 내용을 모아서 주기적으로 반영하는 방식 (copyback이라고도 불린다.)
  • 메모리와의 데이터 전송 횟수가 줄어들어 시스템의 성능을 향상시킬 수 있으나 메모리와 캐시사이의 불일치가 발생할 수 있다.

L1캐시와 L2캐시

💡 캐시는 일반 캐시와 특수캐시로 분류된다.

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

웹브라우저 캐시

  • 방문했던 사이트의 데이터를 보관하여 재방문시 속도를 높인다.
  • 너무 많은 데이터가 캐시에 보관되어있으면 웹 브라우저의 속도를 떨어뜨릴 수 있으므로 가끔 캐시를 비워줘야한다.

4. 저장장치의 계층 구조 (storage hierarchy)

최고의 성능을 내는 컴퓨터를 구성하고 싶다면?

  1. 저장장치로 느린 하드디스크대신 SSD같은 빠른 플레시 메모리 사용
  2. 메모리를 하드디스크만큼 확장
  3. 캐시를 크게 늘려 적중률을 높임

💡 위의 방법은 비용이 너무 많이든다. 대신 저장장치의 계층 구조를 사용할 수 있다.
속도가 빠르고 값이 비싼 장치를 CPU 가까운 곳에 두고, 값이 싸고 용량이 큰 저장장치를 반대쪽에 배치하여 빠른 속도와 큰 용량을 동시에 얻는 방법이다.

계층 구조

  1. CPU와 가까운 곳에 레지스터나 캐시를 배치하여 CPU가 작업을 빨리 진행할 수 있게 한다.
  2. 메모리에서 작업한 내용을 하드디스크와 같이 저렴하고 용량이 큰 저장장치에 영구적으로 저장한다.

5. 인터럽트(Interruput)

💡 CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다. 데이터의 입출력이 이루어지는 동안 CPU가 다른 작업을 할 수 있다.

Polling vs Interruput

  • CPU가 직접 입출력장치에서 데이터를 가져오거나 내보내는 방식 (초기의 컴퓨터 시스템에서 사용)
  • CPU가 입출력 장치의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 데이터를 처리한다.
  • CPU가 명령어 해석과 실행이라는 본래 역할 외에 모든 입출력까지 관여해야하므로 작업 효율이 떨어진다.

인터텁트 방식의 동작 과정

  1. CPU가 입출력 관리자에게 입출력 명령을 보낸다.
  2. 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
  3. 데이터 전송이 완료되면 입출력 관리자는 완료신호(인터럽트)를 CPU에 보낸다.
  4. CPU는 다른일을 처리하다가 인터럽트 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리한다.

인터럽트 번호(Interruput Number)

  • 많은 주변장치 중 어떤 것의 작업이 끝났는지 CPU에게 알려주는 번호

인터럽트 벡터(Interruput Vector)

💡 여러개의 인터럽트를 하나의 배열로 만든뒤, CPU가 인터럽트 벡터를 받으면 완료된 인터럽트 작업을 동시에 처리한다.

  • CPU가 입출력 관리자에게 여러개의 입출력 작업을 동시에 시킨뒤, 해당 작업이 동시에 완료되면 그 때마다 인터럽트를 여러번 사용해야한다. 이는 매우 비효율적이다.

직접 메모리 접근(Direct Memory Access)

💡 입출력 관리자가 CPU의 허락없이 메모리에 접근할 수 있는 권한

  • 메모리는 CPU만 접근 권한을 가진 작업 공간이다.

6. 병렬 처리(Parallel Processing)

💡 동시에 어러개의 명령을 처리하여 CPU의 성능을 향상시키는 방식이다.

파이프라인 기법

  • 하나의 코어에서 여러개의 스레드를 이용
    • 스레드(thread): CPU에서 처리되는 작업 단위
  • CPU 멀티스레드라고도 불린다.

슈퍼스칼라 기법

  • 여러개의 코어를 사용(e.g 듀얼코어)하여 복수의 명령어를 동시에 실행
    • 현재는 코어가 8개인 옥타코어(octa-core)가 대중화 되었다.

병렬 처리시 고려사항

  1. 상호 의존성이 없어야한다.
  2. 각 단계의 시간을 거의 일정하게 맞춰야한다.
  3. 전체 작업 시간을 몇단계로 나눌지 잘 따져야한다.
    1. 병렬처리의 깊이(depth of parallel processing): 작업을 N개로 쪼갰을 때 N
    2. 보통 병렬처리의 깊이를 10~20정도로 한다.
profile
Hello World.

0개의 댓글