본문 바로가기
컴퓨터구조

컴퓨터 구조 1주차

by mokhwasomssi 2021. 2. 18.

12/14 월 ~ 12/20 일 : 6시간 / 10시간

이번주 계획

1. 그런거 없었다.

이번주 정리

1. 1장이 끝났다. 내가 평소에 궁금해 하던 것들이 정리되어 있어서 컴구 공부하길 잘했다고 생각했다.

2. 1장은 막 그렇게 어려운 내용 없고 그냥 중요하고 보편적인 내용

3. 정작 진도는 다 나갔는데 강의 듣기가 싫다.


강의가 짧은 시간안에 핵심만 추리기 때문에

강의를 보면 책 내용이 눈에 안들어올것같아서

책본 후에 핵심파악 및 복습할 겸 강의 들을까 한다.

새 책을 시작하는 건 언제나 신나는 일!

12/12 토 : 42분 (저번주)

목차 정리하고 머리말 읽음

진도는 내일부터~

▶ 12/14 화 : 2시간

1. 컴퓨터 추상화 및 관련 기술

1.1 서론

컴퓨터 응용 분야의 종류와 그 특성

개인용 컴퓨터

서버

임베디드 컴퓨터

포스트 PC 시대

개인 휴대용 기기

클라우드 컴퓨팅

서비스로서의 소프트웨어

이 책에서는 어떤 것을 배울 수 있는가

프로그램 성능의 이해

하드웨어 또는

소프트웨어 구성 요소

성능에 미치는 영향

관련 부분

알고리즘

소스 프로그램 문장 수와 입출력 작업 수를 결정

다른 책

프로그래밍 언어, 컴파일러, 컴퓨터 구조

각 소스 프로그램 문장에 해당하는 기계어 명령어 수 결정

2, 3장

프로세서와 메모리 시스템

명령어의 실행 속도 결정

4, 5, 6장

입출력 시스템

(하드웨어 및 운영체제)

입출력 작업의 실행 속도 결정

4, 5, 6장

1.2 컴퓨터 구조 분야의 8가지 위대한 아이디어

Moore의 법칙을 고려한 설계

설계를 단순화하는 추상화

자주 생기는 일을 빠르게

병렬성을 통한 성능 개선

파이프라이닝을 통한 성능 개선

예측을 통한 성능 개선

메모리 계층구조

여유분을 이용한 신용도 개선

1.3 프로그램 밑의 세계

하드웨어 < 시스템 소프트웨어 < 응용 소프트웨어

시스템 소프트웨어

- 공통적으로 필요한 서비스를 제공하는 소프트웨어

- 운영체제, 컴파일러, 로더, 어셈블러

운영체제

- 사용자 프로그램과 하드웨어 간의 인터페이스 역할

- 각종 서비스와 감독 기능 제공

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

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

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

컴파일러

- C, C++, 자바나 Visual Basic 같은 상위 수준 언어로 작성된 프로그램을

하드웨어가 실행할 수 있는 명령어로 번역

상위 수준 언어에서 기계어까지

이진 자리수, 비트

명령어

- 컴퓨터가 이해할 수 있는 비트들의 집합

어셈블러

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

상위 수준 언어 → 컴파일러 → 어셈블리 언어 → 어셈블러 → 이진 기계어

상위 수준 언어의 장점

1. 프로그래머가 영어 단어와 수학 기호를 사용해서 자연스러운 언어로 생각할 수 있다.

2. 프로그래머의 생산성을 높여 준다. 어떤 아이디어를 표현하기 위해 필요한 문장 수가 적다.

3. 컴파일러나 어셈블러가 상위 수준 언어 프로그램을 어떤 컴퓨터의 기계어로도 번역할 수 있기 때문에

어느 컴퓨터에서든 실행이 가능하다.

1.4 케이스를 열고

모든 컴퓨터의 하드웨어는

데이터 입력, 데이터 출력, 데이터 처리, 데이터 저장 의 네 가지 기본 기능을 수행한다.

컴퓨터의 고전적 구성 요소 다섯 가지

- 입력, 출력, 메모리, 데이터 패스, 제어

- 프로세서 : 데이터 패스 + 제어

▶ 12/18 금 : 2시간

입력장치 : 컴퓨터에 데이터 공급

출력장치 : 사용자에게 계산 결과 보여줌

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

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

디스플레이

LCD, 능동 행렬, 화소, 프레임 버퍼

터치스크린

상자를 열고

Apple iPad 2 뜯어봄

프로세서

- 데이터패스 + 제어 유닛

데이터패스

- 산술연산을 수행하는 프로세서 구성 요소

제어 유닛

- 프로그램의 명령어에 따라 데이터패스, 메모리, 입출력장치에 지시를 하는 프로세서 구성 요소

메모리

- 실행 중인 프로그램과 프로그램 실행에 필요한 데이터의 저장소

DRAM (dynamic random access memory)

- 집적회로로 만든 메모리의 일종. 어떤 위치는지 임의로 접근할 수 있다.

- 자기 테이프와 같은 순차 접근 메모리와는 반대로 메모리의 어떤 부분을 읽든지 같은 시간이 걸림

캐시 메모리 (cache memory)

- 느리고 큰 메모리의 버퍼로 동작하는 작고 속도 빠른 메모리

SRAM (static random access memory)

- 집적회로로 만들어지는 것은 같지만, DRAM보다 빠르면서 집적도가 낮은 메모리

명령어 집합 구조 (instruction set architecture) (= 구조)

- 하드웨어와 최하위 계층 소프트웨어 사이의 인터페이스, 명령어, 레지스터, 메모리 접근, 입출력 등을 포함해서

정확히 작동하는 기계어 프로그램을 작성하기 위해서 알아야 하는 모든 정보

ABI (application binary interface)

- 명령어 집합 중 사용자 부분과 응용 프로그래머가 사용하는 운영체제 인터페이스를 합친 것.

컴퓨터 간 이진 이식성의 표준을 정의한다.

구현 (implementation)

- 구조 추상화를 준수하는 하드웨어

데이터의 안전한 저장소

휘발성 메모리

- 메인 메모리

- DRAM과 같이 전원이 공급되는 동안만 데이터를 기억하는 기억장치

비휘발성 메모리

- 보조기억장치

- 전원 공급이 끊어져도 데이터를 계속 기억하는 기억장치로, 다음이 실행될 때까지 프로그램을 저장하는 데 사용된다

자기 디스크

- 하드 디스크라고도 한다.

- 자성 기록 매체가 코팅된 회전 원반으로 구성된 비휘발성 메모리

플래시 메모리

- 비휘발성 반도체 메모리

- DRAM보다 싸지만 느리고, 자기 디스크보다는 비싸고 빠르다.

- 접근시간은 5~50 μs 정도

컴퓨터 간의 통신

네트워크로 컴퓨터들을 연결했을 때의 장점

- 통신 : 컴퓨터끼리 고속으로 정보를 주고받을 수 있다.

- 자원 공유 : 컴퓨터마다 입출력장치를 따로따로 갖출 필요 없이 네트워크상의 모든 컴퓨터가 입출력장치를 공유할 수 있다.

- 원격 접근 : 컴퓨터들을 연결하면 멀리 떨어져 있는 컴퓨터도 쉽게 이용할 수 있다.

근거리 네트워크 (LAN : local area network)

- 지리적으로 제한된 지역 (예를 들면 한 건물 내)에서 데이터를 주고받도록 설계된 네트워크

원거리 네트워크 (WAN : wide area network)

- 대륙 전체를 연결할 수 있는 수백 km 이상의 네트워크

1.5 프로세서와 메모리 생산 기술

트랜지스터 (transistor)

- 전기 신호로 제어되는 온/오프 스위치

집적회로

- 수십, 수백 개의 트랜지스터를 칩 하나에 집적

초대규모집적회로 (very large scale integrated circuit)

- 수십만 내지 수백만 개의 트랜지스터를 포함하고 있는 장치

1.6 성능

성능의 정의

응답시간 (response time)

- 실행시간 (execution time)이라고도 한다

- 컴퓨터가 태스크를 완료하기까지의 총 소요시간으로

디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간을 다 포함한다.

처리량 (throughput)

- 대역폭 (bandwidth)이라고도 한다.

- 단위시간당 완료하는 태스크의 수를 나타내는 또 다른 성능 척도

성능의 측정

응답시간 / 경과시간 (elapsed time)

- 한 작업을 끝내는 데 필요한 전체 시간

- 디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 등 모든 시간을 다 더한 것

CPU 실행시간 (CPU execution time) / CPU 시간 (CPU time)

- 컴퓨터를 공유하는 경우, 프로세서 하나가 여러 프로그램을 동시에 실행하는 경우가 많기 때문에

경과시간과 구분해서 프로세서가 순수하게 이 프로그램을 실행하기 위해 소비한 시간만 계산

CPU 시간 = 사용자 CPU 시간(user CPU time) + 시스템 CPU 시간(system CPU time)

- 사용자 CPU 시간 : 프로그램 자체에 소비된 CPU 시간

- 시스템 CPU 시간 : 프로그램의 수행을 위해서 운영체제가 소비한 CPU 시간

시스템 성능

- 다른 부하가 없는 시스템에서의 경과시간으로 계산한 것

 

CPU 성능

- 사용자 CPU 시간으로 계산한 것

클럭 사이클(clock cycle) / 클럭 주기(clock period)

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

클럭 속도

- 클럭 주기의 역수

CPU 성능과 성능 인자

프로그램의 CPU 실행시간 = 프로그램의 CPU 클럭 사이클 수 * 클럭 사이클 시간

= 프로그램의 CPU 클럭 사이클 수 / 클럭 속도

명령어 성능

프로그램 실행에 필요한 클럭 사이클 수

- CPU 클럭 사이클 수 = 명령어 수 * 명령어당 평균 클럭 사이클 수

명령어당 클럭 사이클 수(clock cycles per instruction) / CPI

- 명령어마다 실행시간이 다르므로 CPI는 프로그램이 실행한 모든 명령어에 대해 평균한 값을 사용

고전적인 CPU 성능식

명령어 개수(instruction count)

- 프로그램이 실행한 명령어의 수

CPU 시간을 성능에 영향을 미치는 세 가지 핵심 인자로 표현

- CPU 시간 = 명령어 개수 * CPI * 클럭 사이클 시간

= ( 명령어 개수 * CPI ) / 클럭 속도

▶ 12/20 일 : 2시간

명령어 배합 (instruction mix)

- 하나 또는 여러 개의 프로그램에서 수행된 명령어들의 동적 빈도수에 대한 척도

프로그램 성능의 이해

알고리즘, 언어, 컴파일러, 컴퓨터 구조가 CPU의 성능식 인자(명령어 개수, CPI, 클럭 속도)에 미치는 영향

하드웨어 또는 소프트웨어 구성 요소

영향을 끼치는 인자

어떻게?

알고리즘

명령어 개수, CPI

알고리즘은 소스 프로그램이 수행할 명령어의 수,

결국 프로세서가 수행할 명령어의 수를 결정한다.

알고리즘이 빠른 명령어를 선호하느냐 느린 명령어를

선호하느냐에 따라 CPI에 영향을 미칠 수도 있다.

예를 들어 나눗셈을 많이 하는 알고리즘은 높은 CPI를 갖게 될 것이다.

프로그래밍 언어

명령어 개수, CPI

프로그래밍 언어로 표현된 문장은 프로세서 명령어로 변환되기 때문에

확실히 명령어 개수에 영향을 미치게 된다.

또 언어의 어떤 특성 때문에 언어가 CPI에 영향을 미칠 수 있다.

예를 들어 자바같이 데이터 추상화를 많이 사용하는 언어는

함수의 간접 호술을 필요로 하는데,

이는 CPI가 높은 명령어를 사용하게 된다.

컴파일러

명령어 개수, CPI

컴파일러는 소스 언어를 컴퓨터 명령어로 변환하는 역할을 하므로

얼마나 효율적인가에 따라 명령어 개수와 CPI가 영향을 받는다.

컴파일러의 기능이 매우 복잡한 만큼

CPI에 복잡한 방법으로 영향을 끼친다.

명령어 집합구조

명령어 개수, 클럭 속도, CPI

명령어 집합 구조는 어떤 기능을 수행하기 위해

필요한 명령어의 수, 각 명령어당 사이클의 수,

그리고 프로세서의 클럭 속도에 영향을 미치므로

CPU 성능의 세 인자에 모두 영향을 미친다.

1.7 전력 장벽

속도와 전력이 같이 증가하는 이유는 둘이 서로 연관되어 있기 때문이고,

최근에 성장이 정체된 이유는 상용 마이크로프로세서의 냉각 문제 때문에

실제로 사용할 수 있는 전력이 한계에 도달하였기 때문이다.

집적회로의 주된 기술인 CMOS(complementary metal oxide semiconductor)가

에너지를 소비하는 주원인은 동적 에너지(dynamic energy)이다.

동적 에너지

- 트랜지스터가 0에서 1로 혹은 그 반대로 스위칭하는 동안에 소비되는 에너지

- 논리 값이 한 번 바뀔 때 소모되는 에너지 : 에너지 ∝ 1/2 × 용량성 부하 × 전압2

- 트랜지스터 하나가 소비하는 전력 : 에너지 ∝ 1/2 × 용량성 부하 × 전압2 × 스위칭 빈도

정적 에너지 소모

- 동적 에너지가 CMOS 에너지 소모의 주요인이기는 하지만

트랜지스터가 꺼져 있을 때도 흐르는 누설 전류 때문에 정적 에너지 소모가 존재한다.

- 서버에서 전체 에너지 소모의 40%는 누설 전류에 의한 것이다.

- 트랜지스터가 많아지면 비록 그것이 항상 꺼져 있어도 전력 소모가 늘어난다.

전력은 다음 두 가지 이유로 집적회로의 골치 아픈 문제

1. 전력이 칩 전체로 전달되어야 한다.

2. 전력이 열로 낭비되는데 열을 제거해야 한다.

1.8 현저한 변화 : 단일 프로세서에서 멀티프로세서로의 변화

데스크톱 마이크로프로세서의 프로그램 응답시간의 개선 속도가

2002년 부터 매년 1.5배에서 1.2배로 줄어들었다.

따라서 데스크톱과 서버 회사는 2006년에 칩에 여러개의 프로세서를 집적한 마이크로프로세서를 생산하였다.

프로세서 → 코어

마이크로프로세서 → 멀티코어 마이크로프로세서

1.9 실례 : Intel Core i7 벤치마킹

SPEC CPU 벤치마크

작업부하

- 사용자가 실제로 실행하는 응용 프로그램들의 모음

또는 그러한 모음과 유사한 특성을 갖도록 실제 프로그램에서 발췌하여 구성한 프로그램들의 집합

- 전형적인 작업부하는 프로그램 목록과 각 프로그램의 상대적인 실행 빈도를 같이 표시한다.

벤치마크

- 컴퓨터의 성능을 비교하기 위해 선택된 프로그램

SPEC 전력 벤치마크

1.10 오류 및 함정

함정 : 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라고 기대하는 것

팩트 : 성능을 개선하려는 노력이 얼마나 효과가 있는지는 그 사건이 얼마나 많이 발생하는지와 관련이 있다.

Amdahl의 법칙

- 어떤 개선책으로부터 얻을 수 있는 성능의 증가는

개선된 부분이 얼마나 많이 사용되느냐에 따라 제한된다는 법칙

오류 : 이용률이 낮은 컴퓨터는 전력 소모가 작다.

팩트 : 크다

오류 : 성능에 초점을 둔 설계와 에너지 효율에 초점을 둔 설계는 서로 무관하다.

팩트 : 실행시간이 짧아지면 시스템의 전체 에너지가 절약된다.

함정 : 성능식의 일부분을 성능의 척도로 사용하는 것

팩트 : 제한된 상황에서는 세 인자 중에 두 개를 사용하는 것이 타당한 경우도 있지만,

이 방법은 오용 가능성이 너무 크다.

MIP (million instructions per second)

- 실행시간 대신에 쓸 수 있는 척도 중 하나

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

1.11 결론


2. 명령어 : 컴퓨터 언어

2.1 서론

명령어는 사람이 프로그램을 작성할 때 사용하는 형태와

컴퓨터가 직접 읽을 수 있는 형태 두 가지로 표현된다.

이 장에서는 명령어의 표현 방식을 배운다.

표현 방식을 배우면 컴퓨터의 가낭 큰 비밀인 내장 프로그램 개념을 이해할 수 있다.

내장 프로그램 개념 (stored-program concept)

- 여러 종류의 데이터와 명령어를 메모리에 숫자로 저장할 수 있다는 개념.

- 이 개념에 따라 내장 프로그램 컴퓨터가 만들어짐.

2.2 하드웨어 연산

MIPS 산술 명령어는 반드시 한 종류의 연산만 지시하며

항상 변수 세 개를 갖는 형식을 엄격히 지킨다.

모든 명령어가 피연산자를 반드시 세 개씩 갖도록 제한하는 것은

하드웨어를 단순하게 하자는 원칙과 부합한다.

피연산자의 개수가 가변적이면 하드웨어가 복잡해진다.

이런 관점에서 하드웨어 설계의 3대 원칙 중 첫 번째를 도출할 수 있다.

- 설계 원칙 1 : 간단하게 하기 위해서는 규칙적인 것이 좋다.