1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신
- hello 스트링을 telnet 클라이언트에 입력 후 엔터키 누름
- 클라이언트 프로그램은 이 스트링을 telnet 서버로 보냄
- telnet 서버는 받은 스트링을 원격 쉘 프로그램에 전달
- 원격 쉘은 hello 프로그램을 실행 후 출력은 다시 telnet 서버로 전달.
- telnet 서버는 네트워크를 거쳐서 출력 스트링을 telnet 클라이언트로 전달하고 클라이언트 프로그램은 출력 스트링을 자신의 로컬 터미널에 표시.

- telnet : 네트워크 프로토콜. 프로토콜의 클라이언트 일부 기능이 추가된 소프트웨어를 일컬음
1.9 중요한 주제들
1.9.2 Amdahl의 법칙
- 우리가 어떤 시스템의 한 부분의 성능을 개선할 때, 전체 시스템 성능에 대한 효과는 그 부분의 중요도와 얼마나 속도가 빨라졌는 지가 관계 있음.

a : 시간의 소모 비율, k : 개선하려는 성능 배수, aTold : 원래의 소모 시간
aTold/k : 개선 후 소모 시간, S : 개선된 속도
- 비록 시스템의 주요 부분에 대해 실질적 개선을 하여도, 총 속도 향상은 매우 적다.
Amdahl 법칙의 주요 통찰
1.9.3 동시성과 병렬성
- 동시성(concurrency) : 다수로 동시에 벌어지는 일을 갖는 시스템에 관한 일반적인 개념을 말할 때 사용.
- 병렬성(parallelism) : 동시성을 사용해서 시스템을 보다 빠르게 동작하도록 하는 것. 컴퓨터 시스템의 다양한 수준의 추상화에서 활용 가능.
쓰레드 수준 동시성
-- 프로세스 추상화 개념의 이용 -> 다수의 프로그램이 동시에 실행되는 시스템 -> 동시성
-- 쓰레드를 이용하면 하나의 프로세스 내에서 실행되는 다수의 제어흐름을 가질 수도 있음.
ex) 여러 명이 한 개의 웹 서버로부터 페이지를 사용하고자 할 때 처럼 다수의 사용자들이 시스템을 동시에 교신할 수 있게 함.
ex) 윈도우 하나에 웹 브라우저, 다른 윈도우에 문서 편집기, 동시에 스트리밍 음악 플레이를 실행
-
실질적 계산은 하나의 프로세서 : 단일 프로세서 시스템
-
여러 개의 프로세서로 하나의 운영체제 커널의 제어 하에 동작 : 멀티 프로세서 시스템
-- 최근에는 멀티코어 프로세서와 하이퍼 쓰레딩 기법의 출현으로 흔해짐
-
하이퍼 쓰레딩 : CPU 코어 수의 쓰레드를 2배로 보이게 해서 처리 성능을 향상시킨다.

-
멀티코어 프로세서 : 여러 개의 CPU(코어라는)를 하나의 집적화돈 칩에 내장.

- 다수의 태스크에서 동시성을 시뮬레이션할 필요를 줄여줌.
- 한 개의 응용프로그램을 빠르게 실행할 수 있지만, 프로그램이 병렬로, 효율적으로 실행할 수 있는 멀티 쓰레드 형태에만 가능.
인스트럭션 수준 병렬성
- 최근의 프로세서들은 더 낮은 수준에서의 추상화로 여러 개의 인스트럭션을 한 번에 실행 가능. -> 이를 병렬성이라 한다.
싱글 인스트럭션. 다중 데이터 병렬성(SIMD)
- 한 개의 인스트럭션이 병렬로 다수의 연산을 수행할 수 있는 특수 하드웨어를 가짐.
1.9.3 컴퓨터 시스템에서 추상화의 중요성
- java 에서의 class, C에서의 함수 프로토 타입
- 갖다 끌어쓸 수 있다고 생각.