컴퓨터 성능 향상 기술

Rio·2022년 2월 13일
0

✔️ 프로그램 실행 순서

  • 프로그램이 실행하게 되면 OS는 메모리(RAM)에 공간을 할당한다.
  • 할당해주는 메모리 공간은 4가지(Code, Data, Stack, Heap)영역이 있다.

버퍼_Buffer

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

  • 데이터를 한꺼번에 모았다가 한번에 전송한다.(귤을 5개를 한개씩 전달하는 것보단 바구니에 모아서 보내는것이 더 효율적이다.)

  • 하드디스크에서는 메모리 버퍼가 있다.

  • 일반적으로 버퍼 사이즈를 크게 하면 데이터 전송량이 늘어나지만 반대로 대기 시간이 길어지는데 이를 버퍼링이라고 한다.

스풀_Spool

  • CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다.
  • ex_프린터로 출력을 넣고 다른 문서작업을 진행 할 수 있다.
  • 스풀러가 버퍼랑 다르게 버퍼의 경우 버퍼가 차면 데이터를 전송한다. 그러나 스풀러는 다른 작업이 간섭할 수 없는 베타적인 성격이다.

캐시_Cache

  • 메모리와 CPU 사이에 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 저장장소이다.

  • 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓는다.

  • 메모리의 경우 시스템 버스의 속도로 작동하기 때문에 느리다.

    cf_버스 : 컴퓨터 부품 간, 컴퓨터 간에 데이터와 정보를 전송하는 통로(통신 시스템)

캐시 히트_Cache hit : 원하는 데이터를 찾았다.
캐시 미스_Cache miss : 원하는 데이터가 없으면 메모리로 가서 데이터를 찾는다.

  • 컴퓨터의 성능을 향상시키려면 캐시 적중률이 높아야 한다.
  • 캐시 적중률을 높이는 방법 중 하나는 캐시의 크기를 늘리는 것이다.
  • 캐시가 커지면 더 많은 데이터를 미리 가져올 수 있어 캐시 적중률이 올라간다.
  • 그러나, 캐시는 가격이 비싸기 때문에 크기를 늘리는 데 한계가 있어 몇 메가바이트 정도만 사용한다.
  • 캐시의 적중률을 높이는 또 다른 방법은 앞으로 많이 사용될 데이터를 가져오는 것이다.
  • 이와 관련된 이론으로는 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 높다는 지역성locality이론이 있다.

즉시쓰기와 지연쓰기

캐시에 있는 데이터가 변경되는 경우 이를 반영해야 하는 문제도 있다. 캐시는 메모리에 있는 데이터를 임시로 가져온 것이기 때문에 캐시에 있는 데이터가 변경되면 메모리에 있는 데이터도 변경해야 한다. 캐시의 변경된 데이터를 메모리에 반영하는 데에는 즉시쓰기 방식과 지연쓰기 방식이 있다.

  • 즉시쓰기 write through

    캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식이다.
    메모리와의 빈번한 데이터 전송으로 인해 성능이 느려진다는 것이 단점이다
    메모리의 최신 값이 항상 유지되기 때문에 급작스러운 정전에도 데이터를 잃어버리지 않는다.

  • 지연쓰기 write back
    캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 것이 아니라 변경된 내용을 모아서 주기적으로 반영하는 방식이다.
    메모리와의 데이터 전송횟수가 줄어들어 시스템의 성능을 향상할 수는 있으나 메모리와 캐시된 데이터 사이의 불일치가 발생할 수도 있다는 것이 단점이다.

L1 캐시와 L2 캐시

  • 프로그램 명령어는 크게 어떤 작업을 할 지 나타내는 명령어 부분과 작업 대상인 데이터 부분으로 나눌 수 있다.
  • 캐시는 명령어와 데이터의 구분 없이 모든 자료를 가져오는 일반 캐시, 명령어와 데이터를 구분하여 가져오는 특수 캐시라는 두 가지 레벨로 구분된다.

    L1 캐시 : CPU 레지스터에 직접 연결되기 때문에 L1캐시라고 불린다. 특수캐시로 명령어 캐시와 데이터 캐시가 있는데 명령어 캐시는 명령어 레지스터와 연결, 데이터 캐시는 데이터 레지스터와 연결되어 있다.

    L2 캐시 : 일반캐시로 메모리와 연결되기 때문에 L2캐시라고 불린다.

저장 장치의 계층 구조

  • 램에 프로그램의 데이터를 다 올릴 수 없기 때문에 자주 사용하는 데이터를 비싸고 속도가 빠른 저장장치를 cpu 가까운 곳에 배치하여 성능을 향상시킨다.

인터럽트

  • 프로그램의 실행과 상관없이 비동기적 이벤트를 처리하기 위한 기법
  • 네트워크 패킷 도착 이벤트, I/O 요청 같은 이벤트에 사용된다.

    인터럽트 처리 순서

    1. 다른 인터럽트를 차단
    2. 현재 실행 상태(State)를 PCB에 저장
    3. ISR(Interrupt Service Routine)로 점프
    4. 저장한 실행 상태(State)를 복원
    5. 인터럽트로 중단된 지점부터 다시 시작

질문 내용

예상 면접 질문

  • 저장장치의 계층 구조를 설명바랍니다.
  • 버퍼 사이즈를 크게 하면 좋은거 아닌가요?
  • 비동기적 이벤트를 처리하기 위한 방식이 무엇인가요?
profile
우당탕탕 개발 기록지

0개의 댓글