컴퓨터의 발전
지속적인 컴퓨터의 발전은 우리 삶에 많은 영향을 미치고 있다. (자율주행 자동차, 모바일, 휴먼 게놈 프로젝트, WWW, AI 등..)
컴퓨터의 종류
PC, Server computer, Super computer, Embedded computer 등 전통적인 컴퓨터들이 있고, 하드웨어와 기술이 발전함에 따라 PostPC가 등장했다.
The PostPC Era
Personal Mobile Device
이젠 PC 산업보다 모바일 산업이 더 발전하고 있고, 이러한 스마트폰을 PMD라고 한다.
Cloud computing
기존 서버를 대체하는 클라우드 서비스
대용량의 자원을 인터넷을 사용하여 서비스한다.
소프트웨어 자원 또한 인터넷을 사용하여 서비스할 수 있다 (ex: MS Office)
Understanding Performance
어떠한 요소들이 프로그램의 성능에 영향을 미치는가
- Algorithm
수행되는 operation의 수로 정의된다.
- 프로그래밍 언어, 컴파일러, 아키텍처
operation 당 수행되는 machine instruction의 수로 정의된다.
operation은 좀 더 추상화된 개념이며, machine instruction은 CPU에서 수행되는 어셈블리 수준의 명령같이 기계어 수준을 말한다.
- 프로세서와 메모리 시스템
명령이 얼마나 빠르게 수행되는가로 정의된다.
- I/O 시스템
입출력 작업이 얼마나 빠르게 수행되는가로 정의된다.
Seven Great Ideas in Computer Architecture
- Use Abstraction to Simplify Design
추상화를 통해 Hardware와 Software를 구분하고, Hardware를 단순하게 디자인 할 수 있게 했다.
- Make the Common Case Fast
많이 쓰이는 Instruction을 빠르게 만들었다.
- Performance via Parallelism
대규모의 명령어를 한 번에 처리할 수 있도록 병렬 처리 기술을 발전시켰다.
- Performance via Pipelining
Instruction의 흐름을 효율적으로 처리할 수 있도록 시간적으로 병렬 처리를 할 수 있는 파이프라인 기술을 발전시켰다.
- Performance via Prediction
Instruction의 수행 결과를 예측하여 성능을 발전시켰다.
- Hierarchy of Memories
속도가 빠르고 용량이 큰 값싼 메모리는 없다.
상황에 맞게 빠르고 비싼 메모리는 작게 만들어 CPU 근처에 두고, 크고 느린 메모리는 Main memory로 둔다. (계층적 구조)
- Dependability via Redundancy
컴퓨터의 신뢰성을 높이기 위한 여분 저장 기술..
Below You Program - Program에 대해서 자세히..
- Applications software
일반적으로 사용자들이 사용하는 high-level language로 쓰여졌다.
high-level language : 사람의 입장에서 쓰이는 언어. 기계어를 사람이 쓰기 쉽게 만들었기 때문에 생산성과 이식성이 높다.
Assembly language : Instruction을 나타내는 문자 표현. high-level language가 컴파일러에 의해 어셈블리어로 번역된다.
Hardware representation : 이진 표현. Instruction과 Data를 나타낸다.
- Systems software
컴파일러나 OS같은 기본적인 시스템 소프트웨어.
컴파일러 : high-level language를 기계어로 번역시켜준다.
OS: 프로그램과 하드웨어 사이의 interface 역할. OS가 있기 때문에 PC에서 다양한 기능을 손쉽게 사용할 수 있다.
- Hardware
프로세서, 메모리, 입출력 장치 등 가장 마지막에 처리.
Components of Computer
컴퓨터의 구성 요소들
- I/O 장치를 갖추고 있음
- User-interface devices : 디스플레이, 키보드, 마우스 등
- Storage devices : HDD, SSD, CD 등 (휘발성/비휘발성)
- Network Adaptor : 다른 컴퓨터들과 상호작용하기 위한 것들
Abstractions
추상화는 low-level에서 신경써야할 복잡함을 줄여준다.
ISA (Instruction Set Architecture)
- 하드웨어와 소프트웨어 사이의 소통을 도와주는 인터페이스.
- 소프트웨어는 Instruction으로 구성되어 있고, 하드웨어는 이것을 실행하고 Instruction을 통해 데이터를 교환한다.
Application binary interface
컴파일러 등 system software가 application을 실행시킬 수 있도록 도와준다.
Implementation
low-level의 복잡한 것들을 감춰줌으로써 high-level의 것들을 좀 더 구현하기 쉽게 도와준다.
Instruction Set & Instruction Set Architecture
- 하드웨어와 소프트웨어는 각자 무엇을 하는지 모르고, 서로 instruction이 들어오면 처리해서 결과를 넘겨준다.
- 이 때, 하드웨어와 소프트웨어가 서로 연결될 수 있도록 도와주는 것이 바로 Instruction Set.
Instruction Set Architecture
- 하드웨어와 소프트웨어 사이의 가장 중요한 인터페이스.
- Instruction Set을 설계하고 구현하는 방법을 표준화한 것. 한마디로 ISA는 명령어의 집합을 설계하는 방법에 대한 명세서이고, Instruction Set은 명세서에서 정의한 명령어 집합 자체이다.
- 장점 : 같은 아키텍처로 다른 implement를 만들 수 있다. (ex: intel, amd의 프로세서. (x86 아키텍처 사용))
- 단점 : 새로운 아키텍처가 나오기 어렵다. (새로운 ISA가 도입되기 위해서는 기존과의 호환성이 보장되어야 하는데, 이것이 쉽지 않음)