컴퓨터의 구조와 성능 향상

WooBuntu·2020년 7월 23일
0

컴퓨터의 기본 구성

하드웨어의 구성

  • 컴퓨터 = 중앙처리장치 + 메인메모리 + 입출력장치 + 저장장치

  • 필수장치 = 중앙처리장치 + 메인메모리

  • 주변장치 = 나머지

  • 제1저장장치 : 메인메모리(휘발성)

  • 제2저장장치(보조저장장치) : 하드디스크, USB

CPU와 메모리

  • CPU

    명령어를 해석하여 실행하는 장치

  • 메모리

    작업에 필요한 프로그램과 데이터를 저장하는 장소
    (바이트 단위로 분할되어 있음)
    (분할 공간마다 주소로 구분)

입출력장치

GPU : 그래픽용 CPU

저장장치

메모리보다 느리지만 저렴하고 용량이 크며 비휘발성이다.

  • 자성을 이용하는 저장장치

    카세트테이프, 플로피디스크, 하드디스크

  • 레이저를 이용하는 저장장치

    CD, DVD, 블루레이디스크

  • 메모리를 이용하는 장치

    USB, SD카드, CF카드, SSD

메인보드

  • 버스

    각 장치를 연결하는 선의 집합이자 데이터가 지나다니는 통로

  • 메인보드

    CPU와 메모리 등 다양한 부품을 연결하는 커다란 판

폰노이만 구조

  • CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조

  • 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조

  • 하드웨어는 그대로 둔 채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식

  • 운영체제를 포함한 모든 프로그램은 메모리에 올라와야 실행할 수 있다

하드웨어 사양 관련 용어

클록

  • CPU의 속도와 관련된 단위

  • 클록이 일정 간격으로 tick(pulse, clock tick)을 만들면 거기에 맞춰 CPU안의 모든 구성 부품이 작업을 한다.

  • 메인보드의 클록이 tick을 보낼 때마다 버스가 데이터를 보내거나 받는다.

헤르츠

  • clock tick이 발생하는 속도를 나타내는 단위

    (1초에 clock tick이 몇 번 발생하는가?)

    (CPU가 1초에 몇 번의 연산을 할 수 있는가?)

  • 버스도 clock tick에 맞춰 데이터를 전송하기 때문에 메인보드의 성능도 클록으로 표시한다.

시스템 버스와 CPU 내부 버스

  • 시스템 버스(FSB:Front Side Bus/전면 버스)

    • 메모리와 주변장치를 연결하는 버스

    • 메모리의 헤르츠가 시스템 버스의 헤르츠보다 떨어지면 성능이 저하된다.

  • CPU 내부 버스(BSB:Back Side Bus/후면 버스)

    • CPU 내부에 있는 장치를 연결하는 버스

    • CPU 내부 버스는 CPU의 클록과 같아서 시스템 버스보다 훨씬 빠르다.

CPU와 메모리

CPU의 구성과 동작

CPU의 기본 구성

  • 산술논리 연산장치

    • CPU에서 데이터를 연산하는 장치

    • 데이터의 사칙연산과 같은 산술 연산과 AND, OR과 같은 논리 연산 수행

  • 제어장치

    • CPU에서 작업을 지시하는 부분

    • 명령어를 해석하여 제어 신호를 보내고 CPU내의 데이터 흐름을 조절하는 역할

  • 레지스터

    • CPU내에 데이터를 임시로 보관하는 곳

    • CPU가 연산을 하려면 필요한 데이터를 CPU로 가져와 임시로 보관해야 하기에 필요한 장소

CPU의 명령어 처리 과정

CPU는 2진수로 이루어진 기계어만 인식할 수 있다.

어셈블리어 : 기계어를 사람이 이해하기 쉬운 기호와 일대일로 대응시켜 기호화한 언어

레지스터의 종류

CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장하고,
산술논리 연산장치를 이용하여 연산을 한 후,
그 결과를 다시 레지스터에 저장했다가 메모리로 옮긴다.

  • 사용자 가시 레지스터 : 사용자 프로그램에 의해 변경 가능

    • 데이터 레지스터

      • 메모리에서 가져온 데이터를 임시로 보관할 때 사용한다.

      • CPU에 있는 대부분의 레지스터가 데이터 레지스터이기 때문에 일반 레지스터 혹은 범용 레지스터라고도 불린다.

    • 주소 레지스터

      데이터 또는 명령어가 저장된 메모리의 주소는 주소 레지스터에 저장한다.

  • 사용자 불가시 레지스터 : 사용자가 임의로 변경할 수 없는 특수 레지스터

    • 프로그램 카운터(PC)

      • 프로그램 카운터는 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려준다.

      • 다음에 실행할 명령어의 주소를 가리키기 때문에 프로그램 카운터를 명령어 포인터라고도 한다.

    • 명령어 레지스터(IR)

      • 현재 실행중인 명령어를 저장하는 레지스터

      • 제어장치는 명령어 레지스터에 있는 명령을 해석한 후 외부 장치에 적절한 제어 신호를 전송한다.

    • 메모리 주소 레지스터(MAR)

      • 메모리에서 주소를 가져오거나 메모리로 데이터를 보낼 때 주소를 저장하기 위해 사용한다.
    • 메모리 버퍼 레지스터(MBR)

      • 메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장한다.

      • 항상 메모리 주소 레지스터와 함께 동작한다.

  • 프로그램 상태 레지스터(플래그 레지스터/상태 레지스터/컨디션 레지스터)

    산술논리 연산장치와 연결되어 있으며 연산 결과가 양수인지, 음수인지, 0이 아닌지 또는 자리 올림이 필요한지 등의 정보를 저장한다.

버스의 종류

  • 제어 버스

    • 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다.

    • CPU의 제어 장치와 연결되어 있다.

    • 제어 버스의 신호는 CPU, 메모리, 주변장치와 양방향으로 오고 간다.

  • 주소 버스

    • 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치 정보(주소)가 오고 간다.

    • 주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단방향이다.

    • CPU에서 메모리나 주변 장치로 나가는 주소 정보는 있지만, 주소 버스를 통해 CPU로 전달되는 정보는 없다.

  • 데이터 버스

    • 제어 버스가 다음에 어떤 작업을 할지 신호를 보내고,
      주소 버스가 위치 정보를 전달하면,
      데이터가 데이터 버스에 실려 목적지까지 이동한다.

    • 데이터 버스는 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.

    버스의 대역폭 = 레지스터의 크기 = 메모리에 한 번에 저장할 수 있는 데이터의 크기

메모리의 종류와 부팅

  • 메모리를 이루는 소자 하나의 크기는 1bit

  • 메모리 주소는 바이트 단위로 지정

  • 메모리에서 데이터를 읽거나 쓸 때는 워드 단위로 움직인다.

메모리의 종류

  • 램(읽기+쓰기)

    • 휘발성 메모리

      • DRAM(동적램)

        • 저장된 0과 1의 데이터가 일정 시간이 지나면 사라지므로 일정 시간마다 다시 재생시켜야 한다.

        • 메인 메모리에 주로 쓰인다.

      • SRAM(정적램)

        • 전력이 공급되는 동안에는 데이터를 보관할 수 있어 재생할 필요가 없다.

        • 속도가 빠르지만 비싸다

        • 캐시와 같은 고속 메모리에 주로 쓰인다.

      • SDRAM(DRAM의 발전된 형태)

        clock tick이 발생할 때마다 데이터를 저장하는 동기 DRAM

    • 비휘발성 메모리

      • 플래시 메모리

        • 디지털카메라, MP3플레이어, USB드라이버 같이 전력이 없어도 데이터를 보관하는 저장장치

        • 플래시 메모리의 각 소자는 최대 사용 횟수가 제한되어 보통 소자 하나 당 몇천 번에서 만 번 정도 사용하면 제 기능을 상실한다.

        • SD카드나 USB드라이버는 오래 사용하면 성능 저하 또는 데이터 손실의 가능성이 있다.

      • FRAM

      • PRAM

  • 롬(읽기)

    • 램과 달리 전력이 끊겨도 데이터를 보관한다.

    • 데이터를 한 번 저장하면 바꿀 수 없다.

    1. 마스크 롬

    2. PROM

      전용 기계를 이용하여 데이터를 한 번만 저장 가능

    3. EPROM

      데이터를 여러 번 쓰고 지울 수 있음

메모리 보호

  • 바이러스

    운영체제 영역이나 다른 프로그램 영역으로 침범하려는 악성 소프트웨어

  • 운영체제도 CPU를 사용하는 작업 중 하나이기 때문에 사용자의 작업이 진행되는 동안에는 운영체제의 작업이 잠시 중단된다.

  • 운영체제의 작업이 중단된 상태에서 사용자의 작업으로부터 메모리를 보호하려면 하드웨어의 도움이 필요하다.

  • 메모리를 보호하기 위해 CPU는 현재 진행중인 작업의 메모리 시작 주소를 경계 레지스터에 저장한 후 작업한다.

  • 또한 현재 진행중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터에 저장한다.

  • 사용자의 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검함으로써 메모리를 보호한다.

  • 두 레지스터의 값을 벗어나면 메모리 오류와 관련된 인터럽트가 발생한다.

  • 이때 모든 작업이 중단되고 CPU는 운영체제를 깨워서 인터럽트를 처리하게끔 한다.

  • 메모리 영역을 벗어나서 발생한 인터럽트의 경우 운영체제가 해당 프로그램을 강제 종료시킨다.

부팅

  • 응용 프로그램은 운영체제가 메모리에 올려서 실행한다.

  • 부팅은 운영체제를 메모리에 올리는 과정을 의미한다.

  • 컴퓨터의 전원이 켜지면 롬에 저장된 바이오스가 각종 주요 하드웨어가 정상 작동하는지 확인한다.

  • 이상이 없으면 하드디스크의 마스터 부트 레코드에 저장된 부트스트랩을 메모리로 가져와 실행한다.

  • 마스터 부트 레코드

    • 하드 디스크의 첫번째 섹터

    • 운영체제를 실행하기 위한 코드인 부트스트랩이 저장되어 있다.

컴퓨터 성능 향상 기술

  • 시스템 버스(FSB)

    • 메모리 + 주변장치

    • 메모리의 속도 = 시스템 버스의 속도

  • CPU내부 버스(BSB)

    • 레지스터 + 산술논리 연산장치 + 제어 장치

    • CPU의 속도 = CPU내부 버스의 속도

CPU내부 버스의 속도 > 시스템 버스의 속도

버퍼

버퍼의 개념

  • 버퍼

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

    • 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 방식

  • 하드디스크에는 메모리 버퍼가 있는데, 같은 사양의 하드라면 버퍼의 용량이 큰 것이 더 빠르다.

  • 동영상 스트리밍은 버퍼가 소프트웨어적으로 사용되는 대표적인 사례

  • \n(개행 문자)

    이 문자는 줄바꿈의 의미도 있지만, 버퍼에 저장된 내용을 출력하라는 의미도 있다.(모니터 버퍼)

  • 버퍼를 사용하면 버퍼가 다 채워질 때까지 저장장치 간에 데이터 전송이 지연된다.

    (컴퓨터 코드를 뽑아서 컴퓨터를 끄거나, USB에 데이터를 옮긴 뒤 바로 빼면 안 되는 이유이기도 하다)

스풀

  • 스풀

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

  • 스풀러

    • 인쇄할 내용을 순차적으로 출력하는 소프트웨어

    • 출력 명령을 내린 프로그램(ex:워드)과 독립적으로 동작

    • 스풀러가 없다면 워드가 출력을 처리해야 하므로 인쇄가 끝날 때까지 워드를 사용할 수 없다.

    • 스풀러는 인쇄할 내용을 하드디스크의 스풀러 공간에 저장하고, 워드는 독립적으로 프로세스를 점유하면 된다.

  • 버퍼 : 어떤 프로그램이 사용하는 데이터이든 버퍼가 차면 이동이 시작된다.
    (=프로그램들 간에 버퍼를 공유한다)

  • 스풀러 : 한 인쇄물이 완료될 때까지 다른 인쇄물이 끼어들 수 없다.
    (=프로그램 간에 베타적이다)

캐시

캐시의 개념

  • 캐시

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

    • 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종

    • CPU가 사용할 것으로 예상되는 데이터를 미리 가져다 놓는다.

    • 캐시 히트

      캐시에서 원하는 데이터를 찾은 경우

    • 캐시 미스

      캐시에서 원하는 데이터를 찾지 못해, 메모리로 가서 찾는 경우

    • 캐시 적중률

      캐시 히트가 되는 비율(보통 90%)

즉시 쓰기와 지연 쓰기

  • 즉시 쓰기

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

    • 메모리와의 빈번한 데이터 전송으로 인해 성능이 느려짐

    • 메모리가 항상 최신 값을 유지하기에 급작스러운 정전에도 데이터 손실이 없음

  • 지연 쓰기

    • 캐시에 있는 데이터가 변경되면 변경된 내용을 모아 주기적으로 반영하는 방식(카피백)

    • 시스템 성능 자체는 빠르다

    • 그러나 메모리와 캐시 간의 불일치가 존재한다

캐시의 종류

  • 일반 캐시

    명령어와 데이터의 구분 없이 모든 자료를 가져온다.

  • 특수 캐시

    명령어와 데이터를 구분하여 가져온다.

  • 명령어 캐시는 명령어 레지스터와 / 데이터 캐시는 데이터 레지스터와 연결되어 있다.

  • L1캐시

    CPU레지스터와 직접 연결되는 명령어 캐시 + 데이터 캐시

  • L2캐시

    메모리와 연결되는 일반 캐시

저장장치의 계층구조

저장장치의 계층구조는
속도가 빠르고 값이 비싼 저장장치를 CPU와 가까운 쪽에 두고,
값이 싸고 용량이 큰 저장장치를 반대쪽에 배치하여,
적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻는 방법

인터럽트

인터럽트의 개념

  • 폴링

    CPU가 직접 입출력장치에서 데이터를 가져오거나 내보내는 방식

  • 인터럽트

    CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다.

인터럽트 방식의 동작 과정

  1. CPU가 입출력 관리자에게 입출력 명령을 보낸다.

  2. 입출력 관리자는 명령 받은 데이터를 메모리에 가져다 놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.

  3. 데이터 전송이 완료되면 입출력 관리자는 완료 신호를 CPU에 보낸다.

  • 인터럽트

    • 입출력 관리자가 CPU에 보내는 완료 신호

    • 이 신호를 받으면 CPU는 하던 일을 중단하고 옮겨진 데이터를 처리하기 때문에 신호의 이름이 인터럽트인 것.

  • 인터럽트 번호

    • 완료 신호를 보낼 때 장치의 이름 대신 사용하는 장치의 고유 번호

    • 운영체제마다 다르다

  • 인터럽트 벡터

    여러 개의 인터럽트를 하나의 배열로 만든 것

직접 메모리 접근

  • 원래 메모리는 CPU만 접근 권한을 가진 작업 공간이기에 입출력 관리자는 접근할 수 없다.

  • CPU가 시킨 작업을 하기 위해 CPU의 허락 없이 메모리에 접근할 수 있는 권한을 '직접 메모리 접근'이라 부른다.

메모리 매핑 입출력

'CPU가 사용하는 공간'과 '직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간'을 분리하는 기법

  • 운영체제 영역
  • CPU 작업 영역
  • 입출력 작업 영역

사이클 훔치기

CPU와 직접 메모리 접근이 동시에 메모리에 접근할 경우 작업 속도가 빠른 CPU가 접근을 양보하는 현상

병렬 처리

병렬 처리의 개념

  • 병렬 처리

    동시에 여러 개의 명령을 처리하여 작업의 능률을 높이는 방식

  • 파이프라인 기법

    하나의 코어에 여러 개의 스레드를 이용하는 방식

  • 스레드

    CPU가 처리할 수 있는 작업의 단위

  • CPU 멀티 스레드

    여러 개의 스레드를 동시에 처리하는 방법

  • 슈퍼스칼라 기법

    CPU의 코어를 여러 개 두는 방법

병렬 처리 시 고려 사항

  • 상호 의존성이 없어야 병렬 처리가 가능하다

  • 각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만하게 이루어진다.

    병목 현상을 최소화해야 한다는 의미

  • 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 한다.

    • 병렬 처리의 깊이

      동시에 처리할 수 있는 작업의 개수

    • 병렬 처리의 깊이가 너무 깊어도 비효율이 발생하기 때문에 보통 10~20 정도를 깊이로 둔다.

병렬 처리 기법

  • 스레드

    제어장치가 명령어를 가져와 해석한 후 실행하고 결과를 저장하는 과정

  • 스레드를 이루는 각 단계는 CPU의 클록과 연동되어 한 클록에 한 단계씩 이루어진다.

    1. 명령어 패치

      다음에 실행할 명령어를 명령어 레지스터에 저

    2. 명령어 해석

      명령어를 해석

    3. 실행

      해석한 결과를 토대로 명령어 실행

    4. 쓰기

      실행된 결과를 메모리에 저장

파이프라인 기법

  • 기존 방식이 한 명령어를 처리하기 위해 명령어 처리 4단계를 모두 마치면 다음 명령어를 실행한 반면,
    명령어 처리의 단계마다 독립적으로 구성하여 각 단계가 쉬지 않고 명령어를 처리할 수 있게끔 한다.

  • 명령어 처리의 단계 수가 곧 동시에 처리될 수 있는 최대 명령어의 개수이다.

  • 파이프라인 위험

    • 데이터 위험

      • 데이터의 의존성 때문에 발생하는 문제

      • 데이터 A를 필요로 하는 두번째 명령어는 앞의 명령어가 끝날 때까지 동시에 실행되어서는 안 된다.

      • 파이프라인의 명령어 단계를 지연하여 해결한다.

    • 제어 위험

      • 프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험

      • 분기 예측이나 분기 지연 방법으로 해결한다.

    • 구조 위험

      • 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제

      • 별다른 해결방법이 없다(ㄹㅇ?)

  • 하이퍼 스레드

    인텔 계열의 CPU에서 파이프라인 기법을 지칭하는 명칭

슈퍼스칼라 기법

  • 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식

  • 파이프라인 기법 X 코어의 개수

  • 오늘날의 CPU는 대부분 슈퍼스칼라 기법 사용

슈퍼파이프라인 기법

파이프라인의 각 단계를 세분화하여 한 클록 내에서 여러 명령어를 처리하도록 함.

슈퍼파이프라인 슈퍼스칼라 기법

슈퍼파이프라인 기법을 복수의 코어에서 동시에 수행하는 방식

VLIW 기법

  • CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬 처리를 하는 방법

  • VLIW기법

    동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행하는 기법

  • 다른 병렬 처리 기법들에 비해 동시에 처리하는 명령어의 개수가 적다

  • 다른 병렬 처리 기법들이 명령어 실행 시 병렬 처리를 하는 반면, 이 기법은 컴파일할 때 병렬 처리가 이루어진다

무어의 법칙과 암달의 법칙

무어의 법칙

  • CPU는 자체 발열 문제로 속도를 5GHz 이상 높이기 어렵기 때문에 요즘에는 처리 속도를 올리는 대신 멀티코어를 장착하는 방향으로 나아가고 있다.

  • 멀티스레드

    하나의 코어에서 여러 개의 명령어를 실행하는 기술

암달의 법칙

코어가 하나인 싱글코어 대신 듀얼코어를 사용하더라도 CPU내 다른 부품의 병목 현상으로 인해 CPU의 성능이 2배가 되지 않는다.

0개의 댓글