csapp 10

[Computer System] ⑫ 동시성 프로그래밍 (2)

12.4 쓰레드 프로그램에서 공유 변수어떤 변수 x는 다중 쓰레드들이 x의 어떤 인스턴스instance를 참조할 때만 공유된다고 정의한다.다음 질문들에 대답해야 한다.쓰레드를 위한 메모리 모델은?변수들의 인스턴스는 어떻게 메모리에 매핑되나?얼마나 많은 쓰레드가 각 인스턴스를 참조하나?12.4.1 쓰레드 메모리 모델컨셉적 모델다중 쓰레드는 단일 프로세스의 컨텍스트에서 실행된다.각 쓰레드는 분리된 쓰레드 컨텍스트를 가진다. (TID, 스택, 스택 포인터, PC 등)모든 쓰레드들은 나머지 프로세스 컨텍스트를 공유한다. (코드, 데이터, 힙, 공유 라이브러리 세그먼트 등)동작적인 측면에서, 이 모델은 엄격하게 수행되지 않는다.레지스터 값들은 확실히 분리되고 보호되지만...어떤 쓰레드는 다른 쓰레드의 스택에 읽고..

[Computer System] ⑫ 동시성 프로그래밍 (1)

지난 11장에서 구현했던 iterative server는 한 번에 하나의 요청만 처리할 수 있기 때문에, 둘 이상의 클라이언트가 존재할 때 한 클라이언트의 요청을 처리하는 동안 다른 클라이언트는 끝날 때까지 기다려야 하는 문제가 있었다. 여러 클라이언트를 동시에 처리해야 할 때는 concurrent server를 사용하는 것이 더 적절하다.Process 기반커널이 자동적으로 다중 논리 흐름을 끼워넣는다.각 흐름은 각각의 사적 주소 공간을 가진다.Event 기반개발자가 직접 다중 논리 흐름을 끼워넣는다.모든 흐름은 같은 주소 공간을 공유한다.I/O 다중화라는 기술을 사용한다.Thread 기반커널이 자동적으로 다중 논리 흐름을 끼워넣는다.각 흐름은 같은 주소 공간을 공유한다.프로세스 기반 + 이벤트 기반12..

[Computer System] ⑪ 네트워크 프로그래밍 (2)

10.5 RIO 패키지를 사용한 Robust I/O🔹 개요Robust는 '견고한'이라는 의미로, 여기서는 입력 데이터의 이상치나 노이즈에 덜 민감하다는 의미로 사용되었다. RIO 패키지는 자동적으로 shourt counts 다루는 패키지로, short counts를 해야 하는 네트워크 프로그램 등의 응용프로그램에서 편리하고, robust하고, 효율적인 입출력을 제공한다.Short counts는 예상보다 짧은 입력 데이터가 들어온 상황을 의미한다. 다음과 같은 상황이 short counts에 해당된다. - read 도중 EOF(end-of-file)을 만난 경우 - text lines를 터미널로부터 read할 때 - 네트워크 소켓 통신 시 RIO는 2가지 다른 종류의 함수를 제공한다.이진 데이터의 Unb..

[Computer System] ⑪ 네트워크 프로그래밍 (1)

11.1 클라이언트-서버 프로그래밍 모델🔹 모든 네트워크 애플리케이션은 클라이언트-서버 모델에 기반함🔹 클라이언트는 서비스를 요청하고, 서버는 자원을 관리하며 그 요청을 처리함🔹 트랜잭션 순서 1. 클라이언트가 요청 전송 2. 서버가 요청 처리 3. 서버가 응답 전송 4. 클라이언트가 응답 수신 및 처리 🔹 클라이언트와 서버는 모두 프로세스이며, 같은 호스트에서도 실행될 수 있음 클라이언트 서버 모델client–server model은 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션 구조이자 네트워크 아키텍처를 나타낸다. 웹 시스템도 확장된 클라이언트 서버 시스템으로 분류되나, 일반적으로는 클라이언트 서버 시스템이라고 하면 웹..

[Computer System] ⑨ 가상메모리 (2)

9.9 동적 메모리 할당동적 메모리 할당기Dynamic memory allocator는 힙heap이라고 하는 프로세스의 가상메모리 영역을 관리한다. 여기서 힙은 미초기화된 데이터 영역 직후에서 시작해 위쪽(높은 주소 방향)으로 커지는 무요구 메모리demand-zero memory 영역이라고 가정한다. 각각의 프로세스에 대해서 커널은 힙의 Top을 가리키는 변수 brk(break)를 사용한다. 할당기는 힙을 다양한 크기의 블록block들의 집합으로 관리한다. 각 블록은 할당allocated되었거나 가용free 상태인 가상메모리의 연속적인 묶음(contiguous chunk)이다. 할당기의 두 가지 기본 유형은 다음과 같다:명시적 할당기Explicit allocator : 응용 프로그램이 명시적으로 할당된 ..

[Computer System] ⑨ 가상메모리 (1)

메모리를 보다 효율적이고 더 적은 에러를 갖도록 관리하기 위해서 현대의 시스템은 가상메모리Virtual Memory(이하 VM)라고 알려진 메인 메모리의 추상화를 제공한다.메인 메모리를 디스크에 저장된 주소공간에 대한 캐시로 취급해서 메인 메모리 내 활성화 영역만 유지하고, 데이터를 디스크와 메모리 간에 필요에 따라 전송하는 방법으로 메인 메모리를 효율적으로 사용한다.각 프로세스에 통일된 주소공간을 제공함으로써 메모리 관리를 단순화한다.각 프로세스의 주소공간을 다른 프로세서에 의한 손상으로부터 보호한다.9.1 물리 및 가상주소 방식메모리에 접근하는 방식은 물리주소(PA) 방식과 가상주소(VA) 방식으로 나눌 수 있다. 현대의 프로세스들은 가상주소 방식을 사용한다.가상 주소 지정에서 CPU는 가상 주소(V..

[Computer System] ⑧ 예외적인 제어흐름

프로세서의 제어흐름에서 발생하는 점진적인 흐름이 아닌 갑작스러운 변화(jump나 call 리턴 등에 의해 발생)를 예외적인 제어흐름Exceptional Control Flow (이하 ECF)라고 부른다. 프로그래머로서 ECF를 이해하면 OS의 입출력, 프로세스, 가상 메모리 구현 등 중요한 시스템 개념을 이해하는 데 도움이 되고, 어떻게 응용 프로그램들이 OS와 상호작용하는 지 이해하는 데 도움이 될 수 있다.8.1 예외상황 ✅예외상황의 분석: 프로세서의 상태변화는 응용 프로그램에서 예외처리 핸들러로 급격한 제어이동(예외)를 촉발시킨다. 처리가 끝나면 핸들러는 제어를 중단되었던 프로그램으로 돌려주거나 실행을 중단시킨다. 예외상황Exception은 프로세서 상태의 변화에 대한 대응으로, 제어흐름의 갑작스런..

[Computer System] ⑦ 링커

링킹linking은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업이다. 링킹은 컴파일 시에 수행할 수 있고, 이 때 소스코드는 머신코드로 번역된다. 링킹은 대게 링커에 의해 처리된다. 링커는 SW 개발 시에 중요한 역할을 수행하는데, 그것은 이들이 독립적인 컴파일을 가능하게 하기 때문이다.7.1 컴파일러 드라이버 ✅대부분의 컴파일 시스템은 언어 전처리기, 컴파일러, 어셈블러, 링커를 필요에 따라 호출하는 컴파일러 드라이버를 제공한다. 예를 들어, 사용자는 GNU 컴파일 시스템을 사용해 프로그램을 작성하기 위해 다음 명령을 쉘에 입력해 GCC 드라이버를 호출할 수 있다.gcc -Og -o prog main.c hello.c드라이버는 먼저 C..

[Computer System] ① 컴퓨터 시스템으로의 여행 (2)

깜짝 Quiz!프로세스와 쓰레드의 차이를 설명하시오.더보기[정의]🔹 프로세스: 독립적으로 실행되는 프로그램의 인스턴스로, 자체적인 주소 공간, 메모리, 데이터 스택 및 다른 시스템 자원을 가진다.🔹 쓰레드: 프로세스 내부의 실행 흐름 단위로, 프로세스의 자원과 주소 공간을 공유하며 실행된다.[자원 공유]🔸 프로세스: 각 프로세스는 독립적인 메모리 공간과 시스템 자원을 가지므로, 프로세스 간 자원 공유는 IPC(Inter-Process Communication) 메커니즘을 통해 이루어진다.🔸 쓰레드: 같은 프로세스 내의 쓰레드들은 코드, 데이터 및 시스템 자원을 공유한다.1.5 캐시가 중요하다캐시가 중요한 이유는 오버헤드 때문이다.hello 프로그램의 기계어 인스트럭션들은 본래 하드디스크에 저장되어..

[Computer System] ① 컴퓨터 시스템으로의 여행 (1)

컴퓨터 시스템은 HW와 시스템 SW로 구성된다.1.1 정보는 비트와 컨텍스트로 이루어진다소스파일 (또는 소스 프로그램)0 또는 1로 표시되는 비트(bit)들의 연속바이트(byte) = 8bit 단위로 구성됨각 바이트는 프로그램의 텍스트 문자를 나타냄대부분의 컴퓨터 시스템은 텍스트 문자를 아스키(ASCII) 표준을 사용하여 표시함#include int main() { printf("hello, world\n"); return 0;}hello.c 파일은 연속된 바이트들로 구성되어 있다. 각 바이트는 특정 문자에 대응되는 정수 값을 가진다. 예를 들어, 첫 번째 바이트 35는 ASCII 표준 상 #에 대응된다.더보기# 35 i 105 n 110 c 99 l 108 u 117 d 100 e 101   32 s ..