1-1. 서론
컴퓨터 응용 분야의 종류와 그 특성
- 개인용 컴퓨터(Personal computer, PC)
- 낮은 가격으로 단일 사용자엥게 좋은 성능을 제공하는 것을 중요시 여김
- 서버(server)
- 과거 대형 컴퓨터로 불리던 것의 현대적 형태
- 네트워크를 통해서만 접근
- 대형 작업 수행에 이용
- 신용도(dependability)를 매우 강조
- 수퍼컴퓨터(supercomputer)
- 처리 능력에서는 최정상의 자리
- 컴퓨터 시장 전체 판매 금액 중에서는 얼마 되지 않음
- 임베디드 컴퓨터(embedded computer)
- 가장 많이 사용되는 컴퓨터
- 자동차에 들어 있는 마이크로프로세서, 디지털 텔레비전 등에서 사용되는 컴퓨터, 현대식 비행기나 화물선을 제어하는 프로세서 네트워크
- 사물인터넷(Internet of things, IoT)
- 한 가지 응용을 수행하거나 서로 연관된 일련의 프로그램을 실행
- 최소한의 성능만 유지하면서 가격과 소모전력은 엄격히 제한
- 가격이 싸더라도 약간의 고장 감내 기능을 갖추고 있는 경우도 있음
포스트 PC 시대
- 개인 휴대용 기기(personal mobile device, PMD)
- 배터리로 동작
- 무선으로 인터넷에 연결
- 터치스크린을 사용
- 클라우드 컴퓨팅(cloud computing)
- 창고 규모의 컴퓨팅(warehouse-scale computing, WSC)으로 알려진 거대 규모의 데이터센터를 이용
- 서버로서의 소프트웨어(Software as a Service, SaaS)
- 응용의 일부만 PMD가 수행하고 나머지는 클라우드에서 수행
1-2. 컴퓨터 구조 분야의 일곱 가지 위대한 아이디어
설계를 단순화하는 추상화
- 생산성을 높이기 위한 기술 개발 필요
추상화(abstraction)
- 하위 수준의 상세한 사항을 안 보이게 함으로써 상위 수준 모델을 단순화
자주 생기는 일을 빠르게
- 드물게 생기는 일을 최적화하는 것보다 성능 개선에 도움이 됨
- 자주 생기는 일은 단순하여 성능을 개선하기 쉬운 경우가 많음
병렬성을 통한 성능 개선
파이프라이닝을 통한 성능 개선
예측을 통한 성능 개선
- 아무것도 안 하고 기다리는 것보다는 무엇이라도 하고 잘못되면 그때 뒷수습을 하는 것이 더 낫다
- 예측이 틀렸을 때 이를 복구하는 비용이 비싸지 않고 예측이 맞을 확률이 비교적 높은 경우, 확실해질 때까지 기다리는 것보다 추측해서 일단 시작하는 것이 평균적으로 빠름
메모리 계층구조

- 최상위 계층에는 가장 빠르고, 가장 작고, 비트당 가격이 제일 비싼 메모리 사용
- 최하위 계층에는 느리지만 크고, 가격이 싼 메모리를 사용
- 삼각형 모양이 속도와 가격과 크기를 나타냄
- 위로 갈수록 빠르고 비싸며 아래로 갈수록 크다
여유분을 이용한 신용도 개선
- 신뢰할 수 있어야 한다
- 'Moore'의 법칙을 고려한 설계
'Moore'의 법칙 : 1년마다 칩에 집적되는 소자의 수가 2배가 된다
컴퓨터 구조 발전의 근간을 이루어 왔지만 지수함수적인 성장이 영원히 계속될 수 없어 이제는 잘 맞지 않는다
- 컴퓨터 설계자는 프로젝트 시작 시점의 기술이 아니라 종료 시점의 기술에 초점을 맞추어야 한다
Moore법칙의 전성기 때에는 칩 소자당 단가가 떨어졌다
최신 기술이 발전한 후에는 공정이 정교해지고 최첨단 기술에 투자할 수 있는 회사가 줄어들어 가격이 올라갔다
1-3. 프로그램 밑의 세계
- 응용 프로그램이 필요로 하는 여러 가지 기능을 구현하는 복잡한 소프트웨어 라이브러리를 사용
- 컴퓨터 하드웨어는 단순한 저수준의 명령어를 실행
- 추상화 : 복잡한 응용에서 출발해서 단순한 명령어까지 내려가려면 높은 수준의 작업을 단순한 컴퓨터 명령어로 번역 또는 해독하는 소프트웨어 필요

- 응용 프로그램이 가장 바깥쪽에 위치
- 시스템 소프트웨어가 하드웨어와 응용 소프트웨어 사이에 존재
시스템 소프트웨어(system software)
: 공통적으로 필요로 하는 서비스를 제공하는 소프트웨어
시스템 소프트웨어의 대표적인 예시
- 운영체제(operating system)
- 사용자 프로그램과 하드웨어 간의 인터페이스
- 각종 서비스와 감독 기능을 제공
- 기본적 입출력 작업의 처리
- 보조기억장치 및 메모리 할당
- 컴퓨터를 동시에 사용하는 여러 응용들 간의 컴퓨터 공유 방법 제공
- 컴파일러(compiler)
- 상위 수준 언어로 작성된 프로그램을 하드웨어가 실행할 수 있는 명령어로 번역
상위 수준 언어에서 기계어까지
- 대화를 하기 위해서 전기 신호를 보내야함
- 0과 1로 표현할 수 있음 (이진수)
- 각 문자를 이진 자릿수(binary digit) 또는 비트(bit)라고 부른다
- 명령어 : 컴퓨터에게 내리는 명령
- 어셈블러 : 기호식 표현을 이진수로 바꾸는 프로그램
add A, B 명령어를 어셈블러가 1001010100101110으로 바꿔줌
- 어셈블리 언어 : 기호 형태의 언어에 붙여진 이름
- 기계어 : 기계가 이해하는 언어
어셈블리 언어 <-> 기계어
추상화의 예시 : 상위 수준 언어와 이것을 기계어로 번역하는 컴파일러

상위 수준 언어의 장점
- 프로그래머가 영어 단어와 수학 기호를 사용해서 자연스러운 언어로 생각할 수 있게 함
- 프로그래머의 생산성을 높여줌
아이디어를 표현하기 위해 필요한 문장 수가 적으면 적을수록 개발 기간이 단축
- 어느 컴퓨터에서든 실행이 가능
1.4 케이스를 열고
- 입력장치 : 마이크와 같이 컴퓨터에 정보를 공급하는 장치
- 출력장치 : 스피커와 같이 연산의 결과를 사용자나 다른 컴퓨터에 보내주는 장치
무선 네트워크와 같이 입출력을 겸하는 장비도 있다
컴퓨터 구성 요소

1. 입력 : 메모리에 데이터를 씀
2. 출력 : 메모리에서 데이터를 읽음
3. 메모리
4. 데이터패스(datapath)
5. 제어 유닛 : 데이터패스, 메모리, 입력장치, 출력장치의 동작을 결정하는 신호를 보냄
- 프로세서 : 데이터패스 + 제어유닛
메모리에서 명령어와 데이터를 읽음
디스플레이
- 그래픽 디스플레이 : LCD를 사용
LCD
- 스스로 빛을 내는 대신 통과하는 빛을 제어
- 액체 상태의 막대 모양 분자가 디스플레이에 들어오는 빛을 굴절
- 막대들이 꼬인 나선 모양으로 배열되어 빛을 굴절시키다가 전류를 흘리면 똑바로 퍼져서 빛을 통과
- 트랜지스터를 배치하여 전류를 정밀하게 제어하는 능동 행렬을 사용하여 더욱 선명한 이미지 제공
- 매 화소마다 빨강-초록-파랑 마스크가 원색의 강도를 결정
- 화소마다 3개의 트랜지스터 스위치
- 각 화상은 화소의 행렬로 구성하며 비트맵이라 부름
- 빛의 삼원색(빨강, 파랑, 초록) 각각마다 8비트씩, 모두 24비트

- 프레임 버퍼(frame buffer) : 비트맵을 기억. 프레임 버퍼에 저장하였다가 비트 패턴을 재생 속도에 맞추어 그래픽 디스플레이로 보냄
터치스크린
- 터치를 감지하는 디스플레이
- 정전용량 감지 기법 : 유리 같은 절연체 위에 투명한 도체를 코팅. 손에 전기가 통해 스크린의 정전기장이 찌그러지면서 정전용량이 변하게 됨
상자를 열고
- 직접회로(integrated circuit, ID) 또는 칩(chip), CPU : 프로그램의 지시대로 일을 하는 부분으로 보드 내에서 가장 역동적인 부분
데이터패스(근육) + 제어 유닛(두뇌)

정전용량식 멀티터치 스크린과 LCD 디스플레이

가장 큰 직접회로 A12칩
- 데이터패스 : 연산을 수행
- 제어 유닛 : 데이터패스, 메모리, 입출력 장치가 할 일을 지시
메모리
- 실행 중인 프로그램과 프로그램이 필요로 하는 데이터를 기억
- 메인메모리
- DRAM(dynamic random access memory) 칩으로 구성
RAM
: 메모리의 어떤 부분을 읽든지 같은 시간이 걸린다
- 캐시메모리
- 프로세서 내부에 존재
- DRAM의 버퍼 역할을 하는 작고 빠른 메모리
- SRAM (static random access memory) 이라는 메모리 기술 이용
SRAM과 DRAM은 메모리 계층구조의 두 계층을 구성
ABI
- 응용 프로그래머에게 제공되는 기본 명령어 집합과 운영체제 인터페이스
명령어 집합 구조 or 구조
: 프로세서와 하드웨어와의 통신을 위한 어휘를 구성하는 단어(명령어)의 집합
- 독립적으로 컴퓨터의 기능을 생각할 수 있음
- 구조와 구조의 구현을 분리해서 생각
데이터의 안전한 저장소
- 휘발성 메모리
- 컴퓨터 내부의 메모리
- 전원이 끊기면 모든 기억이 지워짐
- 메인메모리(DRAM)
- 비휘발성 메모리
- DVD
- 전원이 끊겨도 모든 기억이 지워지지 않음
- 보조기억장치(자기 디스크, 플래시 메모리)
플래시 메모리
- DRAM보다 느리지만 훨씬 싸고 비휘발성
- 디스크보다 단가가 비싸지만, 작고 튼튼하며 전력 소모가 적고 훨씬 소용량으로 생산
- PMD의 표준 보조기억장치
- 쓰기의 횟수를 파악하여 저장 기능이 상실되는 것을 피하도록 많이 사용되는 데이터를 이동시키는 등의 정책 사용
컴퓨터 간의 통신
- 컴퓨터 네트워크 : 컴퓨터 전체가 서로 연결되어 사용자의 계산 능력을 확장
- 통신 속도가 빨라지거나 전송 거리가 멀어질 때 통신비용이 상승
1) 통신 : 컴퓨터끼리 고속으로 정보를 주고받을 수 있음
2) 자원 공유 : 네트워크상의 모든 컴퓨터가 입출력 장치 공유
3) 원격 접근 : 멀리 떨어져 있는 컴퓨터도 쉽게 이용할 수 있음
- 근거리 네트워크(local area network, LAN)
- 이더넷(Ethernet)
- 한 건물의 같은 층에 있는 컴퓨터를 연결
- 원거리 네트워크(wide area network, WAN)
- 라우팅 서비스와 보안을 제공하는 스위치를 사용하면 LAN들을 서로 연결
- 광섬유로 구성
1.5 프로세서와 메모리 생산 기술
직접회로
- 트랜지스터 집적
트랜지스터
- 전기로 제어되는 온/오프 스위치
- 'Moore의 법칙'에서 트랜지스터의 수로 예측
- 트랜지스터의 급격한 증가를 초대규모직접회로 (Very large scale integrated circuit, VLSI) 라고 함

직접회로 공정과정

1. 실리콘
- 모래의 구성 성분
- 반도체 천연 원소
반도체
: 전기가 통하기는 하는데 썩 잘 통하는 편은 아닌 물질
- 불순물을 첨가하면 다음 세 가지 중 하나로 변질
1) 전기의 양도체 혹은 도체(구리, 알루미늄)
2) 절연체(플라스틱 피복, 유리)
3) 반도체(스위치, 트랜지스터)
- 실리콘 결정 괴
- 직경 8 ~ 12인치, 길이 12 ~ 24인치
- 웨이퍼
- 실리콘 결정 괴를 0.1인치 이하의 두께로 얇게 자른 것
- 웨이퍼에 화학물질을 첨가하여 도체, 절연체, 반도체로 바꾸는 공정 진행
- 트랜지스터는 한 층에 배치되고 도체는 2 ~ 8개의 계층을 구성하는데 각 계층의 도체는 절연체 층으로 분리
- 다이

- 웨이퍼의 결함을 막기 위해 만든 독립적인 컴포넌트
- 웨이퍼에 결함이 생겼을 때 해당 다이만 폐기
수율
: 웨이퍼상의 전체 다이 중 양호한 다이의 비율
다이 크기가 커지면 웨이퍼에 넣을 수 있는 다이가 적어지고 수율이 떨어짐
- 본딩
- 결함이 없는 다이를 패키지의 입출력 핀과 연결
- 고객 납품
직접회로의 가격

웨이퍼당 다이의 수 : 둥근 웨이퍼에서 사각형의 다이를 만들 수 없는 경계 부분의 면적을 빼지 않았기 때문에 근사식
원가 : 결함의 비율이나 다이와 웨이퍼의 크기에 따라 달라지기 때문에 다이 크기에 선형 비례하지 않음
직접회로 대량 생산
- 대량으로 생산하면 생산 공정을 특정 설계에 맞추어 조정할 수 있으므로 수율이 높아진다
- 칩 제작에 사용되는 마스크가 비싸기 때문에, 대량으로 생산하면 칩당 단가가 낮아진다
1.6 성능
성능의 정의
- 개인 : 응답시간(response time) or 실행시간(execution time)이 중요
응답시간(response time) or 실행시간(execution time)
: 디스크 접근, 메모리 접근, 입출력 작업, 운영체제 오버헤드 및 CPU 시간을 모두 포함
- 데이터센터 관리자 : 처리량(throughput) or 대역폭(bandwidth)이 중요
처리량(throughput) or 대역폭(bandwidth)
: 단위 시간당 완료하는 태스크의 수를 나타냄
처리량과 응답시간
- 응답시간을 단축시키면 대부분 처리량이 좋아진다
- 처리에 대한 요구가 처리량보다 커지면 일부는 큐에 넣어 기다리게 하는데, 처리량이 커지면 큐에서 기다리는 시간이 짧아지므로 응답시간도 개선된다
하나가 변하면 다른 쪽에도 영향을 미친다
성능과 실행시간

x의 성능이 y의 성능보다 좋다면

x가 y보다 n배 빠르다면

- 성능 비교에는 "..보다 빠르다" 라는 용어만 사용
- 증가와 감소 사이에는 "..개선된다" 라는 용어만 사용
성능의 측정
- 사용자 CPU 시간(user CPU time)
- 같은 작업을 최단 시간에 실행하는 컴퓨터가 가장 빠른 컴퓨터
실행시간
: 프로그램을 처리하는 데 걸린 시간을 초 단위로 표시한 것
벽시계 시간(wall-clock time), 응답시간(resposne time), 경과시간(elapsed time)
- 한 작업을 끝내는데 필요한 전체 시간
- 사용자가 느끼는 응답시간
- CPU 성능
- CPU 실행시간(CPU execution time) or CPU 시간(CPU time) or 시스템 CPU 시간(System CPU time)
- 한 프로세서가 여러 프로그램을 동시에 실행하는 경우, 처리량을 최적화하는 것이 중요
- 프로세서가 순수하게 이 프로그램을 실행하기 위해 소비한 시간을 계산해야 함
- 입출력에 걸리는 시간이나 다른 프로그램을 실행하는데 걸린 시간은 포함되지 않음
- 다른 부하가 없는 시스템에서의 경과시간
프로그램 성능의 이해
- 클럭 사이클(clock cycle)
- 하드웨어 이벤트가 발생하는 시점을 결정하는 클럭의 시간 간격
- 클럭 주기(clock period)
CPU 성능과 성능 인자

클럭 사이클 시간과 클럭 속도는 역수이므로

성능 개선 : 클럭 사이클의 길이 감소, 클럭 사이클의 수 감소
둘 중 하나를 감소시키면 다른 하나가 증가하는 경우가 종종 발생
명령어 성능
- 컴파일러가 실행할 명령어를 생성하고, 컴퓨터는 이 명령을 실행하기 때문에 실행시간은 프로그램의 명령어 수와 관계가 있음

- 명령어당 클럭 사이클 수(clock cycles per instruction, CPI)
- 명령어마다 실행 시간이 다르므로 모든 명령어의 평균값을 사용
- 명령어 집합 구조가 같을 경우 필요한 명령어 수가 같으므로 CPI는 성능 비교의 한 가지 기준이 될 수 있음
CPU 성능식

클럭 속도는 클럭 사이클 시간의 역수이므로


-
명령어 개수(instruction count)
- 실행 과정을 추적하는 소프트웨어 도구나 컴퓨터 구조의 시뮬레이터를 이용
- 하드웨어 카운터 : 대부분의 프로세서에 장착된 실행 명령어 수나 평균 CPI, 성능 저하의 원인을 찾아내는 도구
- 구조에 따라서 달라지며, 구현 방법과는 관계 없음
-
CPI
- 명령어 집합이 같더라도 구현 방식에 따라서 달라질 뿐 아니라 응용 프로그램에 따라 달라짐
- 명령어 배합에 따라 달라지므로 클럭 속도가 같더라도 명령어 개수와 비교해보아야 함
- 프로그램에 대한 평균 클럭 속도를 사용할 필요가 있음
Intel Core i7 칩은 너무 뜨거워지기 전까지 한시적으로 클럭 속도를 10% 올리는 터보 모드로 변환하기 때문이다
하드웨어 또는 소프트웨어 구성요소 | 영향을 끼치는 인자 | 어떻게? |
---|
알고리즘 | 명렁어 개수, CPI | 알고리즘은 수행할 명령어의 수를 결정한다. 알고리즘이 빠른 명령어 / 느린 명령어를 선호할 경우 CPI에도 영향이 끼친다. |
프로그래밍 언어 | 명렁어 개수, CPI | 프로세서 명령어로 변환되기 때문에 명령어 개수에 영향을 끼친다. 언어의 어떠한 특성 때문에 언어가 CPI에도 영향을 끼칠 수 있다. |
컴파일러 | 명렁어 개수, CPI | 컴파일러는 소스 언어를 컴퓨터 명령어로 변환하는 역할을 하므로 얼마나 효율적인지에 따라 CPI가 변할 수 있다. |
명령어 집합 구조 | 명렁어 개수, CPI, 클럭 속도 | 명령어의 수, 각 명령어 당 사이클의 수, 프로세서의 클럭 속도에 영향을 미치므로 CPU 성능의 세 인자에 모두 영향을 끼친다. |
ICP
- Instruction per clock cycle
- 클럭 사이클 당 명령어 수
- 프로세서는 매 클럭 사이클마다 여러 개의 명령어를 인출하고 수행하므로 참고 가능한 CPU 성능 척도
1.7 전력 장벽
- 속도와 전력은 같이 증한다.
- 상용 마이크로프로세서의 냉각 문제 때문에 사용할 수 있는 전력이 한계에 도달해 최근 성장이 지체되었다.
- 에너지 척도인 줄(joule)이 와트(watt)보다 더 나은 척도
와트(watt)
: 단위 시간 당 에너지(joule/sec)에 해당하는 전력을 나타내는 단위
에너지 소비 원인
-
동적에너지(dynamic energy)
-
정적 에너지
- 트랜지스터가 꺼져 있을 때도 흐르는 누설전류 발생
- 전체 에너지 소모의 40%를 차지
- 전압을 더 낮출 경우 트랜지스터의 누설 전류가 커진다
1.8 현저한 변화 : 단일프로세서에서 멀티프로세서로의 변화
마이크로프로세서 (멀티코어 마이크로프로세서)
- 여러 개의 프로세서(코어)를 집적
- 응답 시간 보다는 처리량이 개선
쿼드코어 마이크로프로세서 : 4개의 프로세서(코어)를 연결한 칩
병렬 프로그램
- 성능을 중시하는 프로그램
- 코어의 수가 증가할 때마다 코드의 성능을 개선해 나가야 하므로 필요한 프로그램
- 부하를 공평하게 분배하여야 하므로 프로그래밍의 어려움이 가중됨
- 다른 모든 부분들이 끝나기 전에 쓸 수 없는 부분이 없는 동기화 오버헤드를 줄여야함
1.9 실례 : Intel Core i7 벤치마킹
SPEC CPU 벤치마크
작업부하(Workload)
- 같은 프로그램들을 매일 반복해서 실행시킬 경우 좋은 척도
- 실행시키는 프로그램들의 집합
벤치마크(benchmark)
- 성능을 측정하기 위해 선택된 프로그램의 집합
- 성능을 잘 반영할 것으로 생각되는 프로그램들로 구성된 작업부하
- 자주 생기는 일을 빠르게 하기 위해서 어떤 일이 자주 생기는지 정확히 예측하는 것이 중요
SPEC
- System Performance Evaluation Cooperative
- 최신의 컴퓨터 시스템을 위한 표준 벤치마크를 만들기 위하여 여러 컴퓨터 회사가 만든 것
- 프로그램들의 실행시간, 명령어 개수, CPI와 클럭 사이클 시간을 보여줌
- SPECspeed 2017

- SPECpower

- 일정시간 동안 작업부하를 10%씩 증가시키면서 서버의 전력소모를 측정
- Java 비즈니스 응용을 위한 SPEC 벤치마크(SPECJBB2005)로부터 시작
- 프로세서와 캐시, 메인 메모리, Java 가상 머신, 컴파일러, 가비지 컬렉터, 운영체제의 일부를 작동
- 성능 척도 : 처리량

ssj_ops : 10%씩 증가될 때마다의 성능
power : 각 성능 수준에서 소비되는 전력
1.10 오류 및 함정
오류
- 많은 사람들이 공통적으로 잘못 알고 있는 부분
- 이용률이 낮은 컴퓨터는 전력 소모가 작다
- 서버는 작업부하가 가변적이기 때문에 이용률이 낮을 때의 전력 효율이 중요하다
- 작업부하가 겨우 10%일 때 최대 전력의 33%나 소비한다
- 성능에 초점을 둔 설계와 에너지 효율에 초점을 둔 설계는 서로 무관하다
- 프로그램이 수행되는 동안 최적화와 관련 없는 다른 부분이 에너지를 소모하기 때문에 실행시간이 짧아지면 시스템의 전체 에너지가 절약된다
함정
- 흔히 저지르기 쉬운 실수
- 특정 조건에서만 성립하는 원리를 성급하게 일반화한 것들
- 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라고 기대하는 것.
- 100초 걸리는 프로그램의 80초는 곱하기 계산에 소요된다고 가정할 때, 프로그램을 5배 빠르게 실행되게 하기 위해서 개선해야할 곱셈 속도
Amdahl의 법칙
: 어떤 개선책으로부터 얻을 수 있는 성능의 증가는 개선된 부분이 얼마나 많이 사용되느냐에 따라 제한된다는 법칙

- 곱셈을 아무리 빠르게 하더라도 전체 성능을 5배나 증가시킬 수 없다.
2. 성능식의 일부분을 성능의 척도로 사용하는 것
- 실행시간 대신에 쓸 수 있는 척도 : MIPS
MIPS
- million instructions per second
- 프로그램의 실행 속도를 백만 개의 명령어 단위로 나타내는 척도

- 빠른 컴퓨터일수록 높은 MIPS 값을 갖는다
- MIPS는 단순히 명령어를 실행하는 속도만 나타낼 뿐이지, 그 명령어 하나가 얼마나 많은 일을 수행하는지는 반영하지 못한다
- 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS 값은 달라진다
1.11 결론
- 어떤 요소 하나가 개별적으로 성능을 결정하는 것이 아니며, 전체의 곱인 실행 시간만이 유일하게 믿을 수 있는 성능 척도이다.

- 성능비를 개선하기 위해 병렬성과 메모리 계층구조에 대한 접근 지역성을 이용해야한다.