컴퓨터 구조

Chapter.1 컴퓨터 추상화와 기술

YJ_ma 2022. 10. 3. 18:13

컴퓨터 분류

 개인용 컴퓨터(Personal Computer, PC)

: 낮은 가격으로 단일 사용자에게 좋은 성능을 제공하는 것, 개인적인 이용을 위해 설계된 컴퓨터

- 제 3자(third-party) 소프트웨어를 실행하기 위해 사용
- 범용, 다양한 소프트웨어
- 비용/성능 절충에 따라 다름(가성비)

- 이해득실관계

서버 컴퓨터 (=> 클라우드 컴퓨팅) 

: 여러 사용자를 위해서 대형 프로그램을 여러개 동시에 실행하는데 사용하며
주로 네트워크를 통해서 접근한다.
- 대용량, 성능, 신뢰성
- 소규모 서버에서 빌드 크기가 다양합니다.
슈퍼컴퓨터

: 성능과 가격이 가장 높은 컴퓨터
고급 과학 및 엔지니어링 계산 ex, 일기예보, 자동차 설계용 컴퓨터, 석유탐사, 단백질 구조 결정
– 가장 높은 기능을 제공하지만 전체 기능 중 작은 부분을 차지하고 컴퓨터 시장 전체 판맥 금액 중에도 얼마 되지 않는다. (용도 제한)
임베디드 컴퓨터

: 다른 장치에 포함되어있어 미리 정해진 한가지 일이나 몇가지 소프트웨어만 실행하는 컴퓨터.
– 시스템의 구성 요소로 숨겨짐 (내장 시스템 컴퓨터)
– 엄격한 전력/성능/비용 제약 ex, mp3플레이어

- 단순함으로 신용도를 확보한다.

단순함: 단 한가지 기능만을 최대한 완벽하게 수행하는 것에 초점을 맞춤

단위 구분 표

Processor Cores : 하나의 칩에 코어를 심는 것, 여러개를 심으면 멀티코어가 된다.

Multicore microprocessor: 한칩에 다수의 프로세서(코어)를 집적한 마이크로 프로세서.

프로그램 성능 향상의 요인

• 알고리즘 : 실행된 작업 수를 결정합니다.
• 프로그래밍 언어, 컴파일러, 아키텍처(컴퓨터구조) : 동작 간 기계 수행의 개수, 각 소스프로그램 문장에 해당하는 기계어 명령어 수 결정
• 프로세서 및 메모리 시스템 : 명령 실행 속도 결정
• I/O 시스템(입출력시스템, 하드웨어 및 운영체제) : I/O 작업 실행 속도 결정

ex, 하드웨어 접근시, 디스크 캐시가 존재하여 빠르게 접근한다.

컴퓨터 구조분야의 위대한 아이디어

① 무어의 법칙 : 트랜지스터 집합 → 데이터 → 프로세서, 1년마다 칩에 집적되는 소자의 수가 2배가 된다.

② 추상화를 통해 설계 단순화 : 하위의 자세한 내용을 몰라도 인터페이스 부분만 보고 수행하여 상위 수준 모델을 단순화한다.

ex, 파일 첨부해서 카톡 전송하는 경우: 작동원리는 모르지만 드래그만 해서 전송

③ 공통적인(일반적인 경우) 빠르게 한다 : 자주 사용하는 부분 개선하면 전체가 개선이 된다.

④ 성능향상 직접적인 방법

- 병렬성(parallelism) : 동일한 시간에 동시에 다른일을 실행

- 중첩처리(pipelining) : 명령1읽기와 명령2 더하기가 동시에 실행가능, 순서정리 안된 경우 기다리는 문제 발생

- 예측(prediction) : 예측이 틀렷을 때 이를 복구하는 비용이 비싸지않고 예측이 맞을 확률이 높은경우, 확실해질때까지 기다리는 것보다 추측해서 시작하는 것이 평균적으로 빠르다.

메모리 계층 구조 : 최상위 계층은 가장빠르고, 작고, 비트당 자격이 제일 비싼 메모리를 사용

최하위 계층은 느리지만 크고 비트당 가격이 제일 싼 메모리를 사용한다.

ex, cpu캐시- 2 or 3레벨

⑥여유분을 이용한 신용도 개선 : 장애를 감지하고 장애가 난 소자를 대치할 수 있도록 여유분을 준비하면 컴퓨터의 신용도(dependability)를 개선할 수 있다.

ex, 패리티 비트 - 무결성 검사

 

Below Your Program (프로그램 밑의 세계)

 소프트웨어들은 계층적으로 구성된다.

 오른쪽 그림과 같이 응용프로그램이 가장 바깥쪽에 위치하며, 여러가지 시스템 소프트웨어가 하드웨어와 응용소프트웨어 사이에 존대한다.

시스템 소프트웨어: 운영체제, 컴파일러

- 운영체제 : 사용자 프로그램과 하드웨어 간의 인터페이스 역할을 하면서 각종 서비스와 감독하는 프로그램

         - 기본적 입출력 작업의 처리

         - 보조기억장치 및 메모리 할당

         - 컴퓨터를 동시에 사용하는 여러 응용들 간의 컴퓨터 공유 방법 제공

- 컴파일러 : c, java와 같은 상위언어문장을 어셈블리 언어 문장으로 번역하는 프로그램 

Levels of Program Code (프로그램 코드 수준)

 High-level language: 고급 언어
- 문제 영역에 가까운 추상화 수준
- 생산성휴대성을 제공합니다.

- 장점: 가독성이 좋고 사용목적에 적합한 언어 다양하게 설계가능하다.

프로그래머의 생산성을 높여주고 프로그램을 개발한 기종과 상관없이 어느 컴퓨터에서든 실행이 가능하다.

- sort(), printf()

 • 어셈블리 언어
- 설명서의 텍스트 및 기호 표현, 구조 단순히 표현, 기계명령어를 기호형태표현

- 어셈블러: 기호로 된 명령어(어셈블리언어)를 이진수 프로그램으로 번역하는 프로그램

- add, sub

• 기계 코드(객체 코드 또는 이진수)

- 명령 및 데이터의 이진수

- 0과 1의 조합으로 표현(이진표현)

 

어떤 종류의 데이터를 조작해야 할까요?

지시사항 :컴퓨터에 의해 수행되는 작업들
숫자 : 정수, 부동 소수점, 복소수, 유리수, 비합리성 등
논리적 : 참, 거짓
텍스트 : 문자, 문자열 등
이미지 : 픽셀, 색상, 모양 등
• 소리

컴퓨터 구조

 

모든 종류의 컴퓨터에 동일한 구성 요소 : 데스크톱, 서버, 내장형

컴퓨터의 구조, 고전적 구성 요소 5가지 입력, 출력, 메모리, 데이터패스(datapath), 제어 유닛이다. 

프로세서: 메모리에서 명령어와 데이터를 읽는다.

입력장치: 메모리에 데이터를 쓴다.

출력장치: 메모리에서 데이터를 읽는다.

제어유닛: 데이터패스, 메모리, 입력장치, 출력장치의 동작을 결정하는 신호를 내보낸다.

 

 

추상화

• 추상화는 복잡성을 처리하는 데 도움이 됩니다.
     - 하위 수준 세부 정보 숨기기
• 명령 집합 아키텍처(ISA)
     - 하드웨어/소프트웨어 인터페이스
• 응용 프로그램 이진 인터페이스
     - ISA Plus 시스템 소프트웨어 인터페이스

     - ISA(명령어구조)를 더한다.
• 구현
     - 기본 및 인터페이스 세부 정보

요점 정리 (p.24)
하드웨어와 소프트웨어는 모든 추상화를 이용하여 계층적으로 구성되며, 각 하위 계층의 세세한 부분이 상위 계층에서는 보이지 않도록 한다. 여러 계층의 추상화 중에서 가장 중요한 것은 하드웨어와 하위계층 소프트웨어 간의 인터페이스인 명령어 집합 구조이다. 이렇게 인터페이스를 추상화함으로써 같은 소프트웨어를 실행하지만 가격과 성능이 다른 여러가지 컴퓨터를 구현할 수 있다.

성능: 응답시간과 처리율(처리량)

응답시간(실행시간) : 주어진 일을 수행하는 데 걸리는 시간

ex, 디스크접근, 메모리접근, 입출력작업, 운영체제 오버헤드 및 CPU시간  모두 포함.
처리량(대역폭) : 단위 시간당 총 작업 수
예: 작업/작업/시간당
응답 시간 및 처리량에 미치는 영향
– 프로세서를 더 빠른 버전으로 교체하시겠습니까?
– 프로세서를 추가하시겠습니까?

 

예제 (p.33)
다음과 같이 변경을 하면 컴퓨터 시스템의 처리량을 증대시키는가, 응답시간을 단축시키는가? 아니면 양쪽 모두인가?
1. 컴퓨터의 프로세서를 더 빠른 버전으로 바꾼다.
2. 여러 개의 프로세서가 각기 다른 태스크 (ex, 웹탐색) 를 담당하는 시스템에 프로세서를 하나 추가한다.
응답시간을 단축시키면 거의 대부분 처리량은 좋아진다.
1번. 응답시간과 처리시간 모두 개선된다.
2번. 특정 태스크의 실행시간이 단축되는 것은 아니므로 처리량만 개선된다.
그러나, 처리에 대한 요구가 처리량보다 커지면 일부는 큐에 넣어 기다리게 해야 할 것이다.
처리량이 커지면 큐에서 기다리는 시간이 짧아지므로 응답시간도 개선된다.
실행시간이나 처리량 중 하나가 변하면 다른 쪽에도 영향을 미치게된다.

 

상대적인 성능

상대적인 성능 : 동일한 시간에 어떠한 일을 수행할 때 걸리는 시간을 비교하여 성능을 판단할 수 있는 것

어떤 컴퓨터 X의 성능과 실행시간의 관계를 다음과 같이 표시할 수 있다.

성능x = 1/실행시간x

그러므로 두 컴퓨터 X와 Y에 대해 X의 성능이 Y의 성능보다 좋다면,

성능x > 성능y
1/실행시간x > 1/실행시간y
실행시간x < 실행시간y

즉, X가 Y보다 n배 빠르다고 할 수 있다.

성능x / 성능y = n

X가 Y보다 n배 빠르면 Y의 실행시간이 n배 길 것이다.

성능x / 성능y = 실행시간y / 실행시간x = n
예제 (p.34)
같은 프로그램이 컴퓨터A에서 10초, B에서 15초 걸린다면 A는 B보다 얼마나 빠른가?
A가 B보다 n배 빠르다면
성능A / 성능B = 실행시간B /  실행시간A = n 이므로
성능비는 15 / 10 = 1.5 
즉, A가 B보다 1.5배 더 빠르다. ( = B는 A보다 1.5배 더 느리다.)

실행 시간 측정 (성능 측정)

  실행시간 : 프로그램을 처리하는데 걸린 시간을 초단위로 표시한 것

 경과시간(elapsed time)
: 모든 측면을 포함한 총 응답 시간, 작업을 끝내는데 필요한 전체시간
 디스크 접근, 메모리접근, 입출력(I/O)작업, 운영체제 오버헤드 모두 포함.
– 시스템 성능 결정
• CPU 시간 (=CPU 실행시간)
: 지정된 작업을 처리하는 데 소요된 시간
  입출력(I/O)에 걸린시간, 다른 프로그램 실행 시간 포함X

사용자 CPU 시간 시스템 CPU 시간으로 구성됩니다.
– CPU와 시스템 성능에 따라 프로그램마다 다른 영향을 받습니다.

사용자 CPU 시간 시스템 CPU 시간
프로그램 자체에 소비된 CPU 시간 프로그램의 수행을 위해서 운영체제가 소비한 CPU 시간

 

CPU Clocking and CPU Time

- 거의 모든 컴퓨터는 하드웨어 이벤트가 발생한는 시점을 결정하는 클럭을 이용하여 만들어짐.

- 고정 속도 클럭에 의해 제어되는 디지털 하드웨어의 작동

클럭(clock) : 동작이 기준점으로 일정한 간격을 가지고 활동

클럭사이클 : 일정한 속도를 가지고 동작하는 프로세서 클럭 한주기 동안의 시간

클럭속도는 클럭주기의 역수이다.

프로그램의 CPU 실행시간 = 프로그램의 CPU 클럭 사이클 수 × 클럭 사이클 시간
                                           = 프로그램의 CPU 클럭 사이클 수 × (1 / 클럭 속도)
CPU 클럭 사이클 수 = 명령어 수(IC) × 명령어당 평균 클럭 사이클 수(CPI)
예제 (p.40)
어떤 컴파일러 설계자가 같은 상위 수준 언어 문장에 대해 생성된 두가지 코드 1과 2중 하나를 선택하려 한다.
하드웨어 설계자가 제공한 사실은 다음과 같다.
컴파일러 작성자가 어떤 상위 수준 언어 문장을 다음과 같은 두가지 코드로 변환하는 방법을 고려하고 있다.
Class A B C
CPI for class 1 2 3
IC in sequence 1 2 1 2
IC in sequence 2 4 1 1
어떤 코드가 더 많은 명령어를 실행하는가? 어느 것이 더 빠른가? 각 코드의 CPI는 얼마인가?
Sequence 1: IC = 2 + 1+ 2 = 5
Sequence 2: IC = 4 + 1 + 1 = 6
코드 1이 1 더 적은 명령어 실행한다.
명령어의 개수와 CPI를 이용하여 CPU 클럭 사이클 수를 계산할 수 있다.
CPU 클럭 사이클 수 = ∑(CPI x C)
CPU 클럭 사이클 수1 = (2 x 1) + (1 x 2) + (2 x 3) = 2+2+6 = 10
CPU 클럭 사이클 수2 = (4 x 1) + (1 x 2) + (1 x 3) = 4+2+3 = 9
그러므로 코드 2가 비록 명령어는 하나 더 실행하지만 실행속도는 더 빠르다.
CPI = CPU클럭 사이클 수 / 명령어 개수
CPI1 = 10 / 5 = 2.0
CPI2 = 9 / 6 = 1.5
따라서 코드 2는 클럭 사이클 수는 적으면서 명령어는 더 많이 실행하므로 CPI가 낮다.

Performance Summary (성능요약)

CPU실행시간 = 초 / 프로그램 = (명령어 수 / 프로그램) x (클럭 사이클 수 / 명령어) x (초 / 클럭 사이클)

※ CPI는 실행되는 명령어 종류에 따라 달라지므로 실행 명령어 수가 적은 코드가 항상 가장 빠른 것은 아니다!!

 

프로그램 성능은 알고리즘, 언어, 컴파일러, 컴퓨터구조, 그리고 실제 하드웨어의 영향을 받는다.


알고리즘: IC에 영향을 미치며, CPI일 수 있음
프로그래밍 언어: IC, CPI에 영향을 미칩니다.
컴파일러: IC, CPI에 영향을 미칩니다.
명령 집합 아키텍처: IC, CPI, Tc(클럭속도)에 영향을 미칩니다.

 

프로세서 성능(p.47)

 

 

 

1980년대 중반 이래 프로세서 성능의 향상

 

 

 

 

 

멀티프로세서

멀티코어 마이크로프로세서 : 칩당 두 개 이상의 프로세서
• 명시적으로 병렬 프로그래밍 필요
     – 지침 수준 병렬화와 비교
          - 하드웨어가 한 번에 여러 명령을 실행합니다.
          - 프로그래머로부터 숨김
      – 하기 어렵다 (이유)
           - 성능을 위한 프로그래밍 : 프로그램이 정확하고 중요한 문제를 해결하며 그 프로그램을 사용하는 사용자나 인터                  페이스 제공하는 것에 충분하지 않고 실행시간도 빨라야한다.
           - 부하 분산 : 각 프로세서가 비슷한 일을 동시에 수행하도록 응용을 분할해야하고 잠재적인 성능의 이익을 침해하                  지 않도록 분할된 일을 스케줄링하고 조정하는 오버헤드가 작아야한다.
           - 통신 및 동기화 최적화 : 다른 모든 부분들이 끝나기 전에 쓸 수 없는 부분은 성능 미진의 원인이 된다.

SPEC and TPC

 성능 측정에 사용되는 프로그램(벤치마크) : CPU, Cloud....
– 작업 부하(workload) : 사용자가 실제로 실행하는 응용 프로그램들의 모음

• 표준성능평가회사(SPEC)

: 1989년 프로세스 성능에 초점을 맞춘 벤치마크를 처음 만들었다. 최근 SPEC CPU2017로 정수 벤치마크 10개와 부동 소수점 벤치마크 13개로 구성되어있다.

• 트랜잭션 처리 성과 위원회(TPC)

– 트랜잭션 처리 및 데이터베이스 벤치마크 정의

요약

- Amdahl's Law(Amdahl의 법칙)

: 어떤 개선책으로부터 얻을 수 있는 성능의 증가는 개선된 부분이 얼마나 많이 사용되느냐에 따라 제한된다는 법칙

- 성능 방정식

개선 후 실행시간 = 개선에 의해 영향을 받는 실행시간 / 개선의 크기 + 영향을 받지 않는 실행시간
예제
컴퓨터에서 100초 걸리는 프로그램이 그중 80초는 곱하기 계산에 소요된다고 할 때, 5배 더 빠르게 실행되게 하려면 곱셈 속도를 얼마나 개선해야 할까?
개선 후 실행시간 = 80초 / n + (100 - 80초)
이때, 5배의 성능 개선을 원하므로 개선 후 실행시간은 20초가 되어야 한다.
20초 = 80 / n + 20
0 = 80 / n
그러므로 곱셈이 전체 부하의 80%인 경우 곱셈을 아무리 빠르게 하더라도 전체 성능을 5배 증가시킬 수는 없다.

- MIPS (Million Instructions Per Second)

: 프로그램의 실행 속도를 백만개의 명령어 단위로 나타내는 척도

MIPS = 명령어 개수 / (실행시간 X 10^6)

[문제점]

① MIPS는 단순히 명령어를 실행하는 속도를 나타낼 뿐이지, 그 명령어 하나가 얼마나 많은 일을 수행하는지는 반영X

② 명령어 집합에 따라 명령어 개수 달라지므로 단순히 MIPS값으로 성능 비교X

같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS값이 달라진다.