CSAPP 30

[CSAPP] 10장 시스템 수준 입출력(System-Level I/O) - 10.5

요약네트워크 소켓이나 파이프 I/O에서 read(fd, buf, N)나 write(fd, buf, N)와 같은 기본 Unix I/O 호출은 요청한 바이트 수를 한 번에 처리해주지 못하는 Short Count 현상이 자주 발생합니다. 예를 들어, read는 아직 커널 버퍼에 도착하지 않은 데이터가 있으면 가능한 만큼만 반환하고 멈추며, write는 비블로킹 파이프에서 버퍼 용량만큼만 전송하고 나머지를 잘라버립니다. CSAPP 10.5장의 RIO(Robust I/O) 패키지는 이 문제를 자동으로 처리하고, 내부 8KB 버퍼를 활용해 시스템 콜 횟수를 획기적으로 줄이는 버퍼링 기법을 제공합니다.1. 기본 Unix I/O의 한계: Short Count 현상1.1 Short Read현상: read(fd, buf,..

CSAPP/10장 2025.05.05

[CSAPP] 11장 네트워크 프로그래밍(Network Programming) 11.4

11.4 소켓 인터페이스(Socket Interface)1. 소켓(socket)네트워크 소켓은 프로세스 간 또는 호스트 간 데이터 송수신을 위한 소프트웨어 구조로,커널 관점에서는 패킷의 입·출력을 중개하는 통신의 종단점(endpoint)애플리케이션 관점에서는 read()/write() 가능한 파일 디스크립터(fd)라고 볼 수 있습니다.– 도메인(domain): AF_INET(IPv4), AF_INET6(IPv6), AF_UNIX(로컬) 등을 지정– 타입(type): SOCK_STREAM(연결 지향/TCP), SOCK_DGRAM(비연결 지향/UDP) 등– 프로토콜(protocol): 보통 0으로 두면 타입에 따라 기본 프로토콜(TCP, UDP)을 자동 선택합니다.비유: 소켓은 ‘전화기’, 커널은 ‘전화 교..

CSAPP/11장 2025.05.03

소켓

1. 소켓(Socket)이란?네트워크 소켓은 프로세스가 네트워크 상에서 데이터를 주고받기 위한 소프트웨어 구조로, IP 주소·포트 번호·전송 프로토콜의 조합으로 식별됩니다.이러한 소켓은 운영체제의 소켓 API(대표적으로 Berkeley Sockets)로 생성·조작되며, UNIX 계열에서는 파일 디스크립터와 동일하게 취급됩니다.비유하자면소켓을 전기 플러그(소켓)에, 포트를 플러그 구멍에, IP 주소를 건물 주소에 비유할 수 있습니다.한 건물(IP) 내 특정 방(포트)을 통해 전기를 공급(데이터 송수신)하는 것처럼, 소켓을 통해 네트워크 연결이 이루어집니다.2. 소켓의 주요 특징2.1 전송 방식스트림 소켓 (TCP): 연결 지향(connection-oriented)으로 순서 보장·오류 제어를 제공데이터그램 ..

CSAPP/11장 2025.05.02

[CSAPP] 11장 네트워크 프로그래밍(Network Programming) 11.1 ~ 11.3

1. 클라이언트 - 서버 프로그래밍 모델클라이언트-서버 모델은 분산 애플리케이션 구조로, 클라이언트(서비스 요청자)와 서버(서비스 제공자)가 네트워크를 통해 메시지를 교환하는 형태입니다.클라이언트는 서버에 요청(request)을 보내고, 서버는 요청을 처리한 후 응답(response)을 반환합니다.클라이언트와 서버는 물리적 호스트가 아니라 프로세스 단위로 구분되며, 같은 호스트 내 여러 프로세스가 동시에 동작할 수 있습니다.전체 흐름도 : 요청 전송 → 서버 처리 → 응답 전송 → 클라이언트 처리요청 전송클라이언트가 필요한 서비스를 얻기 위해 서버에 요청(request)을 보냅니다. 예를 들어 웹 브라우저가 HTML 파일을 받기 위해 HTTP GET 메시지를 전송합니다.서버 처리서버는 요청을 수신하여 해..

CSAPP/11장 2025.05.02

시스템 콜(System Call)

지금 CSAPP 8장 8.3절에서는 시스템 콜의 에러 처리(error handling)를 다루고 있습니다. 시스템 콜이 실패했을 때 함수는 일반적으로 -1을 반환하고, 전역 변수 errno를 통해 오류 종류를 알려줍니다. 먼저, 이 에러 핸들링 메커니즘을 이해하기 전에 시스템 콜 자체가 무엇인지부터 정리해 보겠습니다.1. 시스템 콜이란?1.1 정의시스템 콜(system call)은 응용 프로그램이 운영체제 커널에 정의된 서비스를 요청하기 위한 공식 인터페이스입니다.핵심 요약사용자 공간(User Space)의 프로그램이 커널 영역(Kernel Space)의 자원(파일 I/O, 프로세스 제어, 네트워크 통신 등)을 안전하게 사용하기 위해 반드시 거쳐야 하는 유일한 통로입니다.1.2 비유로 한눈에 이해하기사용..

CSAPP/8장 2025.05.01

Malloc Lab 후기

1. 메모리 할당 전략 비교전략특징장점단점사용 예시First-Fit- 가용 리스트의 처음부터 탐색하여 요청 크기 이상인 첫 번째 블록을 할당- "가장 빠른" 할당 방식을 제공- 구현이 간단하고 빠름- 작은 프로세스들끼리 비슷한 크기라면 외부 단편화가 비교적 적음- 메모리가 단편화될 경우, 시작 부분의 작은 구획 때문에 큰 요청을 처리하기 어려움- 빈번한 리스트 순회로 비용 증가 가능임베디드 시스템, 단일 파티션 관리 등 리소스가 제한적인 환경Next-Fit- First - Fit 과 유사하나, 마지막으로 할당한 위치부터 탐색을 재개- 리스트의 처음 부분을 반복 탐색하지 않아 순회 비용 절감 가능- 블록 재분배가 고르지 않아 균등하지 않은 단편화 발생 위험실시간 시스템에서 빠른 재할당이 필요할 때Best-..

CSAPP/9장 2025.04.30

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.11 ~ 9.9.14)

9.9.11 경계 태그 병합(Boundary-Tag Coalescing)해제된 블록과 인접한 빈 블록을 헤더·풋터(boundary tags) 정보를 이용해 즉시 합치는 방식입니다.풋터에 크기 정보를 복사해 두면, 해제 시 이전 블록의 크기를 O(1)로 알 수 있습니다​.free(ptr) 호출 시 왼쪽·오른쪽 이웃 블록의 할당 비트를 검사하고, 모두 자유 상태라면 세 블록을 하나로 합칩니다​. 즉시 병합(immediate coalescing)을 쓰면 외부 단편화를 효과적으로 줄이지만, 매 free마다 검사 비용이 추가될 수 있습니다​. Header/​Footer 모두에 블록 크기와 할당 비트(a/f)를 저장합니다.free 시 Footer로 이전 블록 크기를 즉시 알아낼 수 있어 빠른 병합이 가능합니다.병합..

CSAPP/9장 2025.04.26

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.6 ~ 9.9.10)

9.9.6 암시적 가용 리스트(Implicit Free List)힙의 모든 블록(할당·자유)을 헤더(header)·풋터(footer) 만으로 관리하고, 빈 블록을 찾을 때마다 힙을 처음부터 끝까지 순차 탐색합니다.헤더·풋터 구조크기(size) 필드: 블록 전체 크기(헤더+페이로드+패딩 포함)할당 비트(a): LSB로 “1=할당됨, 0=자유”를 표시동작 원리현재 블록의 헤더에서 크기와 할당 여부를 읽는다.다음 블록 주소로 포인터를 옮긴다.할당 비트가 0인 블록을 발견하면 그곳을 사용.힙 전체를 탐색하는 구조이므로 구현은 간단하지만, 블록 수 * n 에 비례한 O(n) 탐색 시간이 소요됩니다.9.9.7 할당 위치 선택(Placement)빈 블록 탐색 후 어떤 블록을 사용할지 결정하는 전략기법설명장,단점Fir..

CSAPP/9장 2025.04.25

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.9(9.9.1 ~ 9.9.5)

동적 메모리 할당은 C 프로그램이 실행 중에 힙(heap) 영역에서 메모리 블록을 확보·반환하는 기법입니다.힙은 초기화되지 않은 데이터 세그먼트(.bss) 바로 뒤에서 시작해, 커널이 brk/sbrk 호출로 demand-zero 페이지를 위로 확장하는 영역입니다.할당자는 힙을 크기가 다양한 블록들의 집합으로 유지하며, 각 블록은 할당됨(allocated) 또는 비어 있음(free) 상태로 표시됩니다.이때 메모리를 직접 malloc/free로 관리하는 방식을 명시적 할당자(explicit allocator), 가비지 콜렉터가 자동으로 해제하는 방식을 암시적 할당자(implicit allocator)라고 한다​구분명시적(explicit) 할당자암시적(implicit) 할당자관리 주체프로그래머가 직접 mall..

CSAPP/9장 2025.04.25

[CSAPP] 7.9 실행 가능 목적 파일(Executable Object Files)

들어가며리눅스에서 프로그램을 실행한다는 것은 단순히 저장장치에 있는 바이너리 파일을 읽어 들이는 것만을 의미하지 않습니다. 커널은 ELF 포맷의 실행 파일을 해석해, 필요한 부분만 골라 메모리에 올리고, 프로그램이 안전하게 돌아갈 수 있도록 다양한 초기화 작업을 수행하죠. 이번 글에서는 “실행 가능(executable) 상태”가 되기 위해 반드시 충족해야 하는 세 가지 핵심 조건을 짚어 보고, 링킹과 실행의 전체 흐름을 함께 살펴보겠습니다.링킹과 실행: 전체 흐름 요약아래 흐름도는 소스코드 작성 → 컴파일·어셈블 → 링킹 → ELF 파일 구조 정리 → 실행 시 로딩의 전 과정을 한눈에 보여줍니다.1. 소스코드 작성 (e.g. main.c, sum.c) • C 언어로 프로그램을 작성 • 고급 언어 ..

CSAPP/7장 2025.04.23