2-3.[os] 컴퓨터 성능 향상 기술

현대 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변장치의 작업 속도가 다르다는 것이다.

CPU > 메모리 > 하드디스크

시스템 버스: 메인보드 내 메모리와 주변장치

내부 버스: CPU 내 레지스터,산술논리 연산장치, 제어장치

버퍼

  • 일정량의 데이터를 모아 옮기면서 속도의 차이를 완화하는 장치
  • 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할
  • 귤을 하나씩 옮기는 것보다 바구니에 담아서 옮기는 게 더 빠름

하드디스크의 메모리 버퍼

  • 예) 하드디스크의 용량이 1TB, 디스크의 회전 속도가 7500rpm, 버퍼의 용량이 32MB

소프트웨어적인 버퍼

  • 동영상 스트리밍
  • 네트워크에서 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도 차이 -> 버퍼에 넣어 끊김 방지

스풀

  • CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼
  • 프린터의 스풀러
  • 인쇄할 내용을 순차적으로 출력, 출력 명령을 내린 프로그램과 독립적으로 동작
  • 스풀러가 없다면? -> 인쇄가 끝날 때까지 워드 사용 불가

image.png

버퍼: 프로그램들이 버퍼를 공유, 어떤 데이터든 버퍼만 차면 이동

스풀러: 한 인쇄물이 완료될 때까지 다른 인쇄물이 못 끼어듦 -> 배타적

  • 버퍼가 다 채워질 때까지 데이터 전송 지연된다!
  • 버퍼를 비우지 않았는데 하드웨어를 제거하면 일관성이 무너진다(USB 뽑기, 전원 버튼으로 끄기)

캐시

  • CPU가 앞으로 사용할 것으로 예상되는 메모리의 데이터를 미리 가져와 저장해두는 임시 장소
  • 필요한 데이터를 모아 한꺼번에 전달히는 버퍼의 일종
  • CPU 안에 있고 CPU 내부 버스의 속도로 작동
  • 메모리의 시스템 버스 속도는 느리다
  • 캐시는 빠른 속도로 작동하는 CPU와 느린 속도로 작동하는 메모리 사끼에서 두 장치의 속도 차이를 완화
  • CPU는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아본다
  • cache hit: 캐시에서 원하는 데이터를 찾음
  • cache miss: 캐시에 원하는 데이터가 없음 -> 메모리로 감
  • cache hit ratio: 캐시 적중률

image.png

  • 캐시 크기↑ 캐시 적중률↑ 컴퓨터 성능↑
  • 예) 인텔 i7 캐시 메모리 4MB < 8MB
  • 앞으로 많이 사용될 데이터를 가져오기
  • 지역성 이론: 가까운 데이터가 멀리 있는 데이터보다 사용될 확율이 높다. 이미 사용되었다면 다음에도 또 사용될 것

즉시 쓰기(write through):

  • 캐시에 있는 데이터가 변경되면 즉시 메모리에 반영하는 방식

지연 쓰기(write back, copy back):

  • 캐시에 있는 데이터가 변경되면 주기적으로 반영
  • 전송횟수↓ 시스템 성능↑
  • 메모리와 캐시의 불일치↑
  • 협업 중일 때 데이터 읽으려 하면 일관성이 깨짐
  • 전원 꺼지면 데이터 잃어버림

image.png

  • 일반 캐시: 명령어와 데이터의 구분없이 가져옴
  • 특수 캐시: 명령어와 데이터를 구분하여 가져옴

  • L1 캐시: 명령어 캐시, 데이터 캐시: CPU 레지스터에 직접 연결

  • L2 캐시: 메모리와 연결

웹 브라우저 캐시: ‘앞으로 다시 방문할 것을 예상하여 지우지 않은 데이터

ex) 로고나 버른등의 작은그림

저장장치의 계층 구조

  • 최고의 성능? (비용 깨짐)
    • 하드디스크 -> SSD 교체 (가격 10배)
    • 메모리 size = 하드디스크 size
    • 캐시↑ -> 캐시 적중률↑

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

  • 속도가 빠르고 값이 비싼 저장장치를 CPU 가까운 쪽에 두고
  • 싸고 용량이 큰 저장장치를 멀리 둔다
  • -> 적당한 가격으로 빠른 속도와 큰 용량을 얻음
  • 데이터 일관성 유지하는게 문제(지연쓰기)

image.png

인터럽트

  • 옛날 - 주변장치가 많이 없었음 폴링(polling): CPU가 직접 입출력장치에서 데이터를 가져온다 옛날 방식 (요즘은 명령어 해석과 실행)

인터럽트(interrupt):

  • 입출력 관리자에게 데이터 전송을 지시
  • 데이터 입출력이 이루어지는 동안 CPU가 다른 작업을 할 수 있다 (주방보조)

  • CPU가 입출력 관리자에게 입출력 명령을 보냄

  • 입출력 관리자는 명령받은 데이터를 CPU -> 메모리 / 메모리 -> 저장장치로 옮김
  • 인터럽트: 완료 신호를 CPU에게 보낸다

인터럽트 = 완료 신호

  • CPU는 입출력 관리자에게 작업 지시를 내리고 다른 일을 하다가 완료 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리
  • 하던 작업을 중단하고 처리해야 하는 신호

인터럽트 번호(interrupt number): 어느 주변장치의 작업이 끝났는지 알려주는 고유 번호

인터럽트 벡터(interrupt vector): 여러 개의 인터럽트를 하나의 배열로 만듦

인터럽트

  1. 입출력 요청
  2. 데이터 전송
  3. 인터럽트 발생

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

  • (보통 CPU만 메모리에 접근 권한 있음)
  • 입출력 관리자에게는 CPU의 허락 없이 메모리에 접근할 수 있는 권한

image.png

  • 인터럽트 방식의 필수요소
  • CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터 분리
  • 메모리 매핑 입출력: 메모리 일정 공간을 입출력에 할당하는 기법
  • CPU가 사용하는 메모리 공간과 직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간을 분리

image.png


사이클 훔치기(cycle stealing):

  • CPU와 직접 메모리 접근이 동시에 메모리에 접근하려한다면?
  • 보통 CPU가 양보함
  • CPU 입장에서는 직접 메모리 접근이 사이클(순서)를 훔쳐간 것

Did you find this article valuable?

Support Software Engineer at Your Service by becoming a sponsor. Any amount is appreciated!