ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터 성능 향상 기술
    운영체제 2022. 3. 18. 00:15

    버퍼(buffer)

    데이터를 일정량을 모은 후 옮김으로써 두 장치 사이의 속도 차이를 완화하는 장치이다. 일정량의 데이터를 모아 한꺼번에 전송하기 때문에 적은 노력으로도 많은 양의 데이터를 옮길 수 있다. 버퍼가 사용되는 대표적인 예시로 동영상 스트리밍이 있다. 네트워크에서 데이터가 들어오는 속도와 재생되는 속도 사이의 차이가 존재하기 때문에, 중간에 끊기는 것을 방지하기 위해 동영상 데이터의 일정 부분을 미리 버퍼에 넣은 후 실행한다.


    스풀(spool)

    CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다. 대표적인 예로 프린터에 사용하는 스풀러(spooler)가 있다. 스풀러는 인쇄할 내용을 순차적으로 출력하는 소프트웨어로, 출력 명령을 내린 프로그램(워드프로세서 등)과 독립적으로 동작한다. 스풀러를 사용함으로써 인쇄할 내용을 스풀러에게 맡기고 다른 작업을 할 수 있다.

    다만 스풀러는 버퍼와는 다른 점이 있다. 버퍼는 여러 프로그램들이 공유하기 때문에 어떤 프로그램이 사용하는 데이터라도 버퍼가 차면 이동한다. 반면, 스풀러의 경우 프로그램 간에 배타적이기 때문에, 한 인쇄물이 완료될 때까지 다른 인쇄물이 끼어들 수 없다.


    캐시(cache)

    메모리와 CPU 사이의 속도차를 완화하기 위한 것으로, CPU가 앞으로 사용할 것 같은 데이터를 미리 가져와 저장해두는 임시 장소이다. CPU 안에 있기 때문에 CPU 내부 버스의 속도로 작동한다.

    CPU는 메모리에 접근해야 하는 경우 메모리에 직접 접근하기 전 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아본다. 원하는 데이터를 찾는 경우를 캐시 히트(cache hit), 못 찾는 경우를 캐시 미스(cache miss)라 한다.

    캐시는 가격이 비싸기 때문에 크기를 늘리는 것은 한계가 있다. 따라서 적중률을 높이려면 앞으로 많이 사용될 데이터를 가져와야 한다. 이를 위해 현재 위치에 가까운 데이터일수록 사용 확률이 높다는 지역성(locality) 이론을 이용한다.


    캐시 변경 반영 방식

    캐시의 데이터가 변경되는 경우 이를 메모리에도 적용해야 한다. 이를 위한 방법으로 즉시 쓰기와 지연 쓰기가 있다.


    즉시 쓰기(write through)

    캐시 데이터가 변경되는 즉시 메모리에 반영하는 방식이다. 빈번한 데이터 전송으로 성능이 느려지지만, 정전과 같이 시스템에 문제가 생겨도 데이터를 잃지 않는다.

    지연 쓰기(write back)

    캐시에서 변경된 내용을 모아서 주기적으로 반영하는 방식이다. 시스템 성능을 향상할 수 있으나, 메모리와 캐시 사이의 데이터 불일치가 발생한다.


    L1/L2 캐시

    프로그램 안의 명령은 크게 명령어 부분과 작업대상에 해당하는 데이터 부분으로 나뉜다. 캐시는 명령어와 데이터의 구분 없이 모두 가져오는 일반 캐시, 명령어와 데이터를 구분해서 가져오는 특수 캐시라는 두 레벨로 구분된다. 특수 캐시의 경우 레지스터와 직접 연결되기 때문에 L1(Level 1) 캐시라 불리며, 일반 캐시는 메모리와 직접 연결되기 때문에 L2(Level 2) 캐시라 불린다.


    저장장치의 계층 구조

    빠르고 비싼 저장장치를 CPU와 가까운 쪽에 두고, 싸고 용량이 큰 저장장치를 먼 쪽에 배치하는 구조이다. 이러한 구조로 적당한 가격으로 큰 용량을 동시에 얻을 수 있다. 그러나 중복되는 데이터의 일관성을 유지할 수 있도록 주의해야 한다.


    인터럽트(interrupt)

    인터럽트의 필요성

    CPU가 입출력장치의 상태를 주기적으로 검사하여 일정한 조건을 만족 시 데이터를 처리하는 것을 폴링(polling) 방식이라 한다. 이 방식의 경우 CPU가 명령어 해석/실행 외에도 입출력까지 관리해야 하므로 작업 효율이 떨어진다.

    이러한 단점을 개선하기 위해 입출력 장치가 데이터 전송이 완료되었다는 신호를 보냈을 때 CPU가 데이터를 처리하는 방식을 사용하는데, 입출력 장치가 보내는 완료 신호를 인터럽트라 한다.

    인터럽트 발생 과정

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

    인터럽트 방식의 경우 어떤 장치의 작업이 끝났는지를 알려주기 위해 장치의 고유 번호인 인터럽트 번호(interrupt number)를 사용한다. 인터럽트 번호는 운영체제마다 다르다.

    CPU는 입출력 관리자에게 여러 입출력 작업을 동시에 시킬 수도 있다. 또한 여러 입출력 작업이 동시에 완료되는 것도 가능하다. 이 때 인터럽트를 여러 번 발생시키면 비효율적일 것이다. 따라서 여러 인터럽트를 하나의 배열로 만든 인터럽트 벡터(interrupt vector)를 사용하여 여러 인터럽트에 처리되었다는 표시를 한다. 그러면 CPU가 해당 인터럽트들을 동시에 처리할 수 있다.



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

    인터럽트 방식에서는 입출력 관리자가 CPU가 요청한 데이터를 메모리에 옮겨야 한다. 그러나 메모리는 CPU만 접근할 수 있다는 것이 문제이다. CPU를 통해 접근하려 하면 CPU의 작업 능률이 떨어지게 되고, 입출력 처리도 늦어진다. 이를 해결하기 위해 입출력 관리자의 경우 CPU의 허락 없이도 메모리에 접근할 권한을 부여받는데, 이 권한을 직접 메모리 접근이라 한다.


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

    직접 메모리 접근으로 인하여 메모리에는 CPU가 사용하는 데이터와 입출력장치가 사용하는 데이터가 공존한다. 이 둘을 아무렇게 둔다면 섞여서 관리가 어려우므로 메모리 영역을 나누어 사용한다. 이러한 방법을 메모리 매핑 입출력이라 한다.


    사이클 훔치기(cycle stealing)

    CPU에서의 메모리 접근과 직접 메모리 접근이 동시에 발생하면 보통 CPU가 메모리 사용을 양보한다. 이를 사이클 훔치기라 한다.


    Reference

    쉽게 배우는 운영체제

    '운영체제' 카테고리의 다른 글

    프로세스의 연산  (0) 2022.03.20
    프로세스 개요  (0) 2022.03.18
    CPU와 메모리  (0) 2022.03.16
    컴퓨터의 구성  (0) 2022.03.15
    운영체제 개요  (0) 2022.03.14

    댓글

Designed by Tistory.