Book 60

3.7 TCP Congestion Control

3.7.1 Classic TCP Congestion ControlClassic TCP Congestion Control은 TCP가 네트워크 혼잡 상황에서 데이터를 어떻게 송신 속도를 조정하며 안정적인 전송을 보장하는지 설명하는 핵심적인 메커니즘이다.TCP는 네트워크 혼잡이 감지되었을 때 송신 속도를 줄이고, 혼잡이 해소되었다고 판단되면 송신 속도를 점진적으로 증가시키는 과정을 통해 혼잡을 관리한다. TCP 송신 속도 제한 방법 TCP 송신자는 네트워크 혼잡을 방지하기 위해 송신 속도를 제한한다. 이를 위해 다음과 같은 핵심 변수들이 사용된다: • Congestion Window (cwnd): 송신자가 네트워크에 보내는 데이터의 양을 제어하는 주요 변수이다. cwnd의 값은 혼잡 상태에 따라 증가하거나 감..

3.6 Principles of Congestion Control

3.6.1 The Causes and the Costs of Congestion  네트워크 혼잡(congestion)은 데이터를 보내는 송신자가 많아지며 네트워크 용량을 초과할 때 발생한다.이로 인해 패킷 손실, 지연 증가, 네트워크 성능 저하가 나타난다. 혼잡 문제를 해결하려면 혼잡의 원인과 그로 인한 비용을 이해해야 한다. 혼잡의 원인과 결과를 이해하기 위한 3가지 시나리오 Scenario 1: Two Senders, a Router with Infinite Buffers  • 환경: Host A와 Host B가 동일한 라우터와 단일 홉 링크를 공유한다. 라우터의 버퍼는 무한하다고 가정한다. • 상황 설명: • 두 호스트가 동일한 전송률()로 데이터를 전송하며, 공유 링크의 용량은 이다. • 링크 용..

3.5 Connection-Oriented Transport: TCP

3.5.1 The TCP Connection TCP 연결: 신뢰성 있는 데이터 전송을 위한 기반 TCP(Transmission Control Protocol)는 인터넷의 핵심적인 전송 계층 프로토콜로, 신뢰성 있는 데이터 전송을 제공한다.TCP는 “연결 지향적(connection-oriented)“이라는 특징을 가지며, 데이터 전송 전에 두 프로세스가 서로 연결을 설정해야 한다.이 연결 과정에서 데이터의 전송 및 수신을 위한 여러 상태 변수들이 설정된다. 1. 연결 지향적 (Connection-Oriented)의 의미 TCP가 연결 지향적이라는 것은, 데이터를 주고받기 전에 두 애플리케이션 프로세스가 반드시 **“핸드셰이크(handshake)”**를 통해 서로를 확인하고 연결을 설정해야 한다는 뜻이다.이..

5.3 The Basics of Caches

1. Cache (캐시):컴퓨터에서 프로세서와 메인 메모리 사이에 위치하여 데이터 접근 속도를 향상시키는 작고 빠른 임시 저장소이다.캐시는 데이터를 저장하고, 필요한 데이터를 메모리에서 가져오지 않고 빠르게 읽을 수 있도록 한다.캐시는 지역성(Locality) 원리를 기반으로 작동한다.  2. Direct-Mapped Cache (직접 매핑 캐시):캐시 구조 중 하나로, 각 메모리 주소가 캐시의 특정 위치에 고정적으로 매핑되는 방식이다.한 번에 특정 메모리 블록만 특정 캐시 슬롯에 저장될 수 있다.  3. Tag (태그):캐시에 저장된 데이터가 메모리의 어떤 블록에서 왔는지 식별하기 위한 추가 정보이다.메모리 주소의 일부가 태그로 사용된다.  4. Valid Bit (유효 비트):캐시 블록이 유효한 데이..

5.2 Memory Technologies

메모리 계층 구조는 크게 네 가지 주요 기술로 구성된다.1. SRAM (Static Random Access Memory): 주로 캐시에 사용되는 빠르고 비싼 메모리.2. DRAM (Dynamic Random Access Memory): 메인 메모리에 사용되는 비교적 느리지만 저렴한 메모리.3. Flash Memory: 모바일 기기 등에서 사용되는 비휘발성(non-volatile) 메모리.4. Magnetic Disk: 하드 디스크와 같이 대용량 데이터를 저장하는 데 사용되는 비휘발성 메모리. • Access Time데이터에 접근하는 데 걸리는 시간. SRAM이 가장 빠르고 Magnetic Disk가 가장 느리다.  • Cost메모리 용량당 비용. SRAM이 가장 비싸고 Magnetic Disk가 가장 ..

5. Large and Fast: Exploiting Memory Hierarchy(5.1 Introduction)

용어 정리  1. Principle of Locality (지역성의 원리) • Temporal Locality (시간적 지역성)프로그램에서 접근한 데이터는 가까운 미래에도 다시 접근될 가능성이 높음.예를 들어, 반복문에서 변수를 계속 사용하는 경우 해당 데이터에 시간적 지역성이 존재  • Spatial Locality (공간적 지역성) 프로그램이 특정 메모리 주소를 참조하면, 그와 가까운 주소들도 곧 참조될 가능성이 높음.예를 들어, 배열을 순차적으로 탐색할 때 데이터가 연속적으로 저장되어 있을 가능성이 높음   2. Memory Hierarchy (메모리 계층 구조) • 컴퓨터 시스템에서 메모리를 여러 계층으로 나누어 설계한 구조.CPU와 가까운 상위 레벨은 빠르고 비싸며 용량이 적고, CPU에서 먼 ..

4. The Processor (4.11 Parallelism via Instructions)

1. Pipelining과 Instruction-Level Parallelism (ILP) Pipelining은 여러 명령어가 동시에 실행되는 구조로, **Instruction-Level Parallelism (ILP)**을 활용하여 성능을 향상시킨다.ILP는 명령어들 간의 병렬성을 의미하며, 이를 극대화하기 위한 두 가지 방법이 있다.  • 파이프라인 깊이를 늘려서 병렬성 증가예를 들어, 세탁기를 세 개의 기계로 나누어 각기 다른 세탁 단계를 동시에 수행하면 전체 세탁 시간을 단축할 수 있다.파이프라인을 확장하여 명령어를 겹쳐서 실행할 수 있도록 한다.  • Multiple Issue 기법 사용 한 클록 사이클에서 여러 명령어를 실행할 수 있도록, 여러 명령어를 동시에 발행하는 기술이다. 세탁기를 여러..

4. The Processor (4.10 Exceptions)

예외와 인터럽트의 차이  • 예외 (Exception)프로그램 내에서 발생하는 예기치 않은 사건이다.예를 들어, 정의되지 않은 명령어가 실행되거나 하드웨어 고장이 발생하는 경우가 예외이다.  • 인터럽트 (Interrupt)외부 장치나 하드웨어가 발생시키는 이벤트이다.예를 들어, I/O 장치가 데이터를 준비했다고 알리거나 시스템의 타이머가 주기적인 작업을 요청하는 경우가 이에 해당한다. RISC-V에서는 예외라는 용어를 사용하여 프로그램 내에서 발생하는 모든 예기치 않은 이벤트를 의미하며, 인터럽트는 외부에서 발생하는 예외를 지칭한다.  예외 처리 방법 RISC-V 시스템에서 예외가 발생하면, 두 가지 주요 작업이 수행된다.  1. 예외가 발생한 명령어의 주소를 저장예외가 발생한 시점에서 현재 실행 중인..

4. The Processor (4.9 Control Hazards)

Control hazards 또는 branch hazards는 조건부 분기(instruction)의 실행 시 발생하는 문제이다.파이프라인에서 조건부 분기의 결과가 결정되기 전에 다른 명령들이 계속 실행되므로, 이러한 분기 명령이 언제 발생할지를 정확히 알 수 없다.예를 들어, 분기 명령을 포함한 파이프라인에서는 해당 명령이 언제 실행될지를 결정하기까지 지연이 발생하며, 이로 인해 예상된 명령 순서대로 실행되지 않으면 파이프라인의 성능에 영향을 미칠 수 있다. 여기서 핵심은 예측이다. 분기 예측(branch prediction)은 파이프라인이 진행될 때 분기가 발생할지 안 할지를 예측하여 성능 저하를 방지하는 방식이다.예측을 통해 분기가 발생할 경우 필요한 명령을 미리 로드하고, 예측이 틀린 경우에는 명령..

4. The Processor (4.8 Data Hazards:Forwarding versus Stalling)

sub x2, x1, x3 // Register x2 written by suband x12, x2, x5 // 1st operand (x2) depends on subor x13, x6, x2 // 2nd operand (x2) depends on subadd x14, x2, x2 // 1st(x2) & 2nd(x2) depend on subsw x15, 100(x2) // Base (x2) depends on sub여기서 x2 레지스터는 첫 번째 sub 명령어의 결과로 설정된다. 이후 다른 명령어들이 이 값을 사용하며 데이터 의존성을 발생시킨다. 예를 들어:•and 명령어는 x2 값을 첫 번째 피연산자로 사용한다.•or 명령어는 x2 값을 두 번째 피연산자로 사용한다.•add 명령어는 x2 값을 ..