Ch 1.1 ~ 1.4 는 여기에서 확인할 수 있습니다.
Ch 1.5 ~ 1.7 은 여기에서 확인할 수 있습니다.
컴퓨터 시스템 Ch 1
1.1 정보는 비트와 컨텍스트로 이루어진다.개발자가 작성한 소스 프로그램은 텍스트 파일의 아스키 문자로 변환되고, 아스키 문자는 비트값이므로 비트로 저장이 된다. 같은 비트열도 컨텍스트
skylarcoding.tistory.com
컴퓨터 시스템 Ch 1
Ch 1.1 ~ 1.4 는 여기에서 확인할 수 있습니다. 컴퓨터 시스템 Ch 11.1 정보는 비트와 컨텍스트로 이루어진다.개발자가 작성한 소스 프로그램은 텍스트 파일의 아스키 문자로 변환되고, 아스키 문자
skylarcoding.tistory.com

1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신한다.
개별 시스템의 관점에서 네트워크는 또 다른 입출력 장치이다. 시스템이 메인 메모리로부터 네트워크 어댑터로 일련의 바이트를 복사할 때, 데이터는 로컬디스크 드라이브 대신에 네트워크를 통해서 다른 컴퓨터로 이동된다.
* telnet : TCP 연결 위에서 텍스트 스트림을 주고받는 원격 로그인 프로토콜
1.9 중요한 주제들
Amdahl 의 법칙
Amdahl 은 모든 작업을 개선하기 위한 일반적인 원칙을 설명한다. 우리가 어떤 시스템의 한 부분이 성능을 개선할 때, 전체 시스템 성능에 대한 효과는 그 부분이 얼마나 중요한가와 이 부분이 얼마나 빨라졌는가에 관계된다.

시스템의 주요 부분에 대한 실질적인 개선을 하였지만, 총 속도 향상은 매우 적다.
Amdahl 법칙의 특별한 경우는 k = ∞ 로 설정하는 것이다. 개선하지 않은 부분의 비율이 성능 향상의 한계를 정한다. 즉, 시스템의 60% 를 무한히 빠르게 만들어도 전체 속도개선율은 최대 2.5배이다. 그래서 저주라는 이름으로 부르기도 한다.

동시성과 병렬성
동시성은 여러 작업이 지속적인 전환을 통해 동시에 실행하는 것처럼 보이도록 하는 것이다. 병렬성은 실제로 작업이 동시에 실행되고 있는 것이다.
쓰레드 수준의 동시성
쓰레드를 이용하면 한 개의 프로세스 내에서 실행되는 다수의 제어흐름을 가질수도 있다. 시간공유 기법(time-sharing) 의 출현으로 동시 실행에 대한 지원이 시작되었다. 한 개의 컴퓨터가 실행하는 프로세스를 빠르게 전환하는 방법이 시뮬레이션 형태로 실행되었다. 이를 통해 다수의 사용자들이 시스템과 동시에 교신할 수 있게 하였다. 또, 한 명의 사용자가 다수의 태스크에 동시에 연관될 수 있게 해준다.
실질적인 계산은 한 개의 프로세서에 의해 이뤄지고, 단일 프로세서 시스템이라고 한다.
여러개의 프로세서를 가지고 하나의 운영체제 커널의 제어 하에 동작하는 경우를 멀티프로세서 시스템이라고 한다. 멀티코어 프로세서 + 하이퍼쓰레딩 기법의 출현으로 일반적인 환경이 되었다.
멀티코어 프로세스
멀티코어 프로세스는 여러개의 CPU를 하나의 칩에 내장하고 있다. 멀티 쓰레딩(=하이퍼쓰레딩)은 하나의 CPU가 여러 개의 제어 흐름을 실행할 수 있게 해주는 기술이다.
멀티 스레딩의 이용은 시스템 성능을 개선할 수 있다.
- 다수의 태스크를 실행할 때, 동시성을 시뮬레이션할 필요를 줄여준다.
- 멀티프로세싱으로 한 개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로 효율적으로 실행할 수 있는 멀티쓰레드의 형태로 표현되었을 때만 가능하다.
인스트럭션 수준 병렬성
인스트럭션 수준 병렬성은 훨씬 낮은 수준에서의 추상화로 여러 개의 인스트럭션을 한 번에 실행할 수 있다.
- 파이프라이닝 기법 :
- 하나의 인스트럭션을 실행하기 위해 요구되는 일들을 여러 단계로 나누고
- 프로세서 하드웨어가 일련의 단계로 구성되어 이들 단계를 하나씩 각각 수행한다.
- 병렬로 동작할 수 있다
- 서로 다른 인스트럭션의 다른 부분을 이용하여 작동한다
한 개 이상의 인스트럭션을 실행할 수 있는 프로세서를 슈퍼 스케일러라고 한다. 이 모델을 통해 작성한 프로그램의 성능을 이해할 수 있다.
싱글 인스트럭션, 다중 데이터 병렬성(SIMD)
SIMD 병렬성이라는 모드로 인스트럭션 한 개가, 데이터 여러개를 처리한다. 일반 레지스터가 float 하나를 담는 상자라면, SIMD 레지스터는 그 상자 8칸이 나란히 붙은 특수 하드웨어이다. 덧셈기도 8개가 나란히 있어 한번에 8칸을 동시에 처리한다.
이들은 대개 영상, 소리, 동영상 데이터 처리를 위한 응용프로그램의 속도를 개선하기 위해 제공된다. SIMD는 하드웨어 기능이라 어셈블리로 직접 짜야한다. 컴파일러가 C 프로그램에서 SIMD 병렬성을 자동으로 뽑아내려고 시도하기도 하지만, 결과는 보장되지 않는다. GCC 같은 컴파일러에서 지원하는 벡터 데이터 형을 사용하여 프로그램을 작성하는 것이 더 안전한 방법이다.
세 가지 병렬성이 점점 낮은 수준으로 내려가는 구조이다. 스레드 수준 → 인스트럭션 수준 → SIMD
컴퓨터 시스템에서 추상화의 중요성
추상화는 복잡한 내부 구조나 세부 내용을 숨기고, 핵심적인 기능만 간단하게 쓸 수 있도록 단순화하는 것이다. 함수들을 간단한 응용프로그램 인터페이스 API로 정형화하는 것이다.
인스트럭션 집합 구조는 실제 프로세서 하드웨어의 추상화를 제공한다. 이 덕분에 기계어 코드 프로그램은 한 번에 하나의 인스트럭션을 실행하는 프로세서에서 실행되는 것처럼 동작한다.
- 파일 : 입출력 장치의 추상화
- 가상 메모리 : 프로그램 메모리의 추상화
- 프로세스 : 실행 중인 프로그램의 추상화
- 가상머신 : 운영체제, 프로세서, 프로그램 모두를 포함하는 컴퓨터 전체의 추상화