컴퓨터 구조
- 컴퓨터 과학에서 컴퓨터 시스템의 기능, 조직, 구현에 대한 법칙과 방법을 통칭한다.
- 또 다른 정의로는 명령어 집합 구조(ISA), 마이크로아키텍쳐 설계, 논리 설계 및 구현을 의미한다.
컴퓨터 구조를 통해 다음에 관한 문제에 답할 수 있는 능력을 갖추게 됩니다.
1.C나 Java같은 상위 수준 언어로 작성된 프로그램이 어떻게 하드웨어 언어로 번역되며, 하드웨어는 번역된 프로그램을 어떻게 실행 하는가?
- 이 개념들을 잘 파악하면 프로그램 성능에 영향을 미치는 하드웨어와 소프트웨어 양쪽의 특성을 이해할 수 있다.
2.소프트웨어와 하드웨어 사이의 인터페이스는 무엇이며, 소프트웨어는 어떻게 필요한 일을 하드웨어에게 지시하는가?
- 이 개념은 여러 종류의 소프트웨어 작성 방법을 이해 하는데 중요하다.
3.프로그램의 성능을 결정하는 요소는 무엇이며, 프로그래머는 어떻게 성능을 개선할 수 있는가?
- 이 문제는 소스 프로그램, 프로그램 번역 소프트웨어, 프로그램을 실행하는 하드웨어 효율성 모두와 관련이 있다.
4.성능을 위해 하드웨어 설계자는 어떤 기술을 사용할 수 있는가?
- 이 책은 현대 컴퓨터 설계와 관련된 기본 개념만을 소개하고 있다. 이 책의 상급판인 Computer Architecture : A Quantitative Approach에서는 더 많은 기술을 심도있게 다루고 있다.
5.에너지 효율성을 개선하기 위해 하드웨어 설계자는 어떤 기술을 사용할 수 있는가? 프로그래머가 에너지 효율을 높이는 것을 어떻게 돕거나 방해할 수 있는가 ?
6.순차적인 처리에서 병렬 처리로 넘어가는 이유는 무엇이며, 그 결과는 어떠한가?
- 이 책은 이러한 변화의 동기를 설명하고 병렬성을 지원하는 하드웨어 기법들을 소개하며, "멀티코어" 마이크로프로세서가 이끄는 새로운 세대를 개략적으로 살펴본다.
" 컴퓨터 구조 분야의 일곱 가지 위대한 아이디어 "
이 아이디어를 채용한 컴퓨터가 처음 나온 지 매우 오래된 지금까지도 이를 모방한 기종이 계속 만들어지는 것을 보면 이 아이디어들이 얼마나 위대한가를 알 수 있다.
1. 설계를 단순화하는 추상화
- 컴퓨터 설계자와 프로그래머는 자원의 수가 급격히 증가함에 따라 설계 시간이 길어지는 것을 방지학 ㅣ위해서 생산성을 높이기 위한 기술을 개발해야 했다. 추상화는 하위 수준의 상세한 사항을 안보이게 함으로써 상위 수준 모델을 단수화한다.
2. 자주 생기는 일을 빠르게
- 자주 생기는 일을 빠르게만드는 것이 드물게 생기는 일을 최적화하는 것보다 성능 개선에 도움을 준다.
3. 병렬성을 통한 성능 개선
- 컴퓨팅의 여명기부터 컴퓨터 설계자들은 작업을 병렬적으로 수행하여 성능을 높이는 설계를 해 왔다. 앞으로 여러 가지 병령성의 예를 살펴볼 것이다.
4. 파이프라이닝을 통한 성능 개선
- 파이프라이닝은 컴퓨터 구조에서 많이 볼 수 있는 병령성의 특별한 형태이다.
5. 예측을 통한 성능 개선
- 무언가를 하려면 앞날을 예측해야 한다. 예측이 틀렸을 때 이를 복구하는 비용이 비싸지 않고 예측이 맞을 확률이 비교적 높은 경우, 확실해질 때까지 기다리는 것보다 추측해서 일단 시작하는 것이 평균적으로 빠를 수 있다.
6. 메모리 계층구조
- 빠르고 값싼 메모리를 사람들이 원한다. 컴퓨터 설계자들은 이렇게 상충되는 요구를 메모리 계층(memory hierarchy)로 해결하고 있다.
7. 여유분을 이용한 신용도 개선
- 모든 물리 소자는 장애가 발생할 수 있으므로, 장애를 감지하고 장애가 난 소자를 대치할 수 있도록 여유분을 준비하면 컴퓨터의 신용도를 개선할 수 있다.
" 프로그램 밑의 세계 "
대형 데이터베이스 시스템 같은 전형적인 응용은 수백만 줄의 코드로 구성될뿐 아니라 복잡한 소프트웨어 라이브러리를 사용하게 된다. 하지만 컴퓨터 하드웨어는 아주 단순한 저수준의 명령어를 샐행할 수 있을 뿐이다. 복잡한 응용에서 출발해서 단순한 명령어까지 내려가려면 높은 수준의 작업을 단순한 컴퓨터 명령어로 번역 또는 해독하는 여러 겹의 소프트웨어가 필요한데, 이를 추상화라고 하는 아이디어의 예이다.
이러한 소프트웨어는 계층적으로 구성된다. 밑 그림과 같이 응용 프로그램이 가장 바깥쪽에 위치하며, 여러가지 시스템 소프트웨어(systems software)가 하드웨어와 응용 소프트웨어 사이에 존재한다.
시스템 소프트웨어에는 운영체제와 컴파일러가 있다.
운영체제(operating system)는 사용자 프로그램과 하드웨어 간의 인터페이스 역할을 하면서 다음과 같은 각종 서비스와 감독 기능을 제공한다.
- 기본적 입출력 작업의 처리
- 보조기억장치 및 메모리 할당
- 컴퓨터를 동시에 사용하는 여러 응용들 간의 컴퓨터 공유 방법 제공
컴파일러(compiler)는 C,C++과 같은 상위 수준 언어로 작성된 프로그램을 하드웨어가 실행할 수 있는 명령어로 번역하는 중요한 일을 한다.
상위 수준 언어에서 기계어까지
전자 장비와 대화하기 위해서는 전기 신호를 보내야 한다. 기계가 이해할 수 있는 가장 쉬운 신호는 0과1 on/off이다. 따라서 기계 언어는 단 두 종류의 문자로 되어 있다. 그러므로 보통 기계어는 이진수라고 생각한다. 각 문자를 이진 자릿수 또는 비트(bit)라고 부른다. 명령어는 컴퓨터가 이해할 수 있는 비트들의 집합에 불과하므로, 이것도 역시 숫자로 생각할 수 있다. 예를 들어 다음 비트
1001010100101110
는 어떤 컴퓨터에게는 두 숫자를 더하라는 명령이 된다. 왜 명령어와 데이터를 숫자로 표시할까? 이는 다음 챕터에서 다룰 것이다. 우선 명령어와 데이터를 숫자로 표현하는 것이 컴퓨터의 기초라는 점만 알고 있자.
초창기 프로그래머들은 컴퓨터와 이진수로 대화하였으나, 이는 매우 지겨운 일이다. 선구자들에 의해 컴퓨터에 프로그램하는 것을 컴퓨터 자신이 도와주도록 만들었다. 이런 프로그램을 어셈블러(assembler)라 불렀다. 이 프로그램은 기호로 된 명령어를 이진수로 바꾸어 준다.
예를들어 프로그래머가 add A,B라 쓰면 어셈블러가 이것을 1001010100101110으로 바꾼다. 이러한 기호 형태의 언어에 붙여진 이름이 어셈블리 언어(assembly language)이다. 이와 비교하여 기계가 이해하는 언어를 기계어(machine language)라 한다.
하지만 어셈블리 언가 많이 개선되기는 했지만 아직도 많은 불편한점이 있다. 어셈블리 언어는 컴퓨터가 수행할 명령어를 한 줄에 하나씩 써야 하기 때문에 프로그래머에게 기계식 사고방식을 강요한다. 오늘날 프로그래머가 정신 건강을 잃지 않으면서도 높은 생산성을 유지할 수 있는 거은 상위 수준 언어(high-level-language)와 이것을 기계어로 번역하는 컴파일러가 있기 때문이다. 다음 그림은 프로그램과 언어 간의 이러한 관계를 보여주는데 이것이 추상화의 위력을 보여주는 또 하나의 예이다.
'Computer Architecture > 컴퓨터 구조' 카테고리의 다른 글
[5] CH1 컴퓨터 추상화 및 관련 기술 < Intel Core i7 벤치마킹 > (0) | 2022.01.11 |
---|---|
[4] CH1 컴퓨터 추상화 및 관련 기술 < 단일프로세서에서 멀티프로세서로의 변화 > (0) | 2022.01.11 |
[3] CH1 컴퓨터 추상화 및 관련 기술 < 성능 > (0) | 2022.01.11 |
[2] CH1 컴퓨터 추상화 및 관련 기술 < 프로세서와 메모리 생산 기술 > (0) | 2022.01.11 |
[1] CH1 컴퓨터 추상화 및 관련 기술 < 하드웨어 관점 > (0) | 2022.01.11 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!