컴퓨터 시스템 : CSAPP 8장 정리 - 8.6 ~ 마지막 까지
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
8.6 Nonlocal Jumps (비지역 점프)C 언어에서 제공하는 비지역 점프(nonlocal jump)라는 고급 제어 흐름 기능을 설명한다.이는 함수 호출과 반환의 일반적인 흐름을 무시하고, 한 함수에서 다른 함수의 실행 지점으로 직접 점프하는 기능이다.핵심 함수: setjmp와 longjmp#include int setjmp(jmp_buf env);void longjmp(jmp_buf env, int val); setjmp는 현재 호출 환경(PC, SP, 레지스터 등)을 저장하고 0을 반환longjmp는 setjmp로 저장된 위치로 되돌아감. 이때 setjmp는 val 값을 반환하게 됨즉, setjmp는 한 번 호출되지만 여러 번 반환될 수 있음주요 활용: 에러 복구함수 호출이 깊이 중첩된 상황에..
컴퓨터 시스템 : CSAPP 8장 정리 - 8.5 Signals Part.2 8.5.7 까지
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
8.5.5 Writing Signal Handlers (시그널 핸들러 작성)시그널 핸들러를 올바르게 작성하는 방법에 대해 설명한다. 시그널 핸들러는 예외적으로 실행되며, 메인 프로그램과 동시에 실행될 수 있기 때문에 작성이 까다롭다.시그널 핸들러 작성의 어려움시그널 핸들러는 메인 프로그램과 동시에 실행되며, 전역 변수를 공유함.언제 시그널이 수신되는지는 예측이 어려움 → 비순차적 실행시스템마다 동작 방식이 다를 수 있어 이식성 문제도 있음​.안전한 시그널 핸들러 작성 지침G0. 핸들러를 최대한 단순하게 유지가능한 한 간단한 동작만 수행해야 함예: 전역 변수에 플래그를 설정하고 바로 반환 → 메인 루프가 주기적으로 플래그를 검사하여 처리G1. async-signal-safe 함수만 호출시그널 핸들러 내에서..
컴퓨터 시스템 : CSAPP 8장 정리 - 8.5 Signals Part.1 8.5.4 까지
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
8.5 Signals이 절에서는 시그널(Signal)이라는 고수준 예외적 제어 흐름(high-level exceptional control flow) 메커니즘을 소개한다.시그널은 커널 또는 다른 프로세스가 특정 프로세스에 이벤트 발생을 알려주는 작은 메시지다.시그널의 개요시그널은 하드웨어 예외처럼 비동기적으로 발생할 수 있으며, 사용자 수준 프로세스에 도달할 수 있는 예외다.예: 사용자가 Ctrl+C를 누르면 커널이 SIGINT 시그널을 해당 프로세스에 보냄시그널은 총 30여 개 종류가 있으며, 각 시그널은 특정 이벤트에 대응한다:SIGSEGV: 잘못된 메모리 참조SIGCHLD: 자식 프로세스 종료SIGKILL: 강제 종료SIGALRM: 타이머 만료시그널은 C에서 예외(exception)를 다룰 수 있는..
컴퓨터 시스템 : CSAPP 8장 정리 - 8.4 Process Control
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
8.4 Process Control유닉스 시스템에서 프로세스를 생성, 종료, 관리하는 시스템 콜들을 소개한다. 프로세스를 제어하기 위한 함수들이 어떻게 동작하는지, 어떤 시점에 어떤 함수가 사용되는지를 예제와 함께 설명한다.주요 기능:프로세스 ID 확인프로세스 생성 (fork)프로세스 종료 (exit)자식 프로세스 회수 (wait)프로그램 실행 (exec)일시 중단 및 재개8.4.1 Obtaining Process IDs (프로세스 ID 얻기)각 프로세스는 시스템 내에서 고유한 양의 정수인 PID(Process ID)를 갖는다.관련 함수들#include #include pid_t getpid(void); // 현재 프로세스의 PID 반환pid_t getppid(void); // 부모 프로세스..
컴퓨터 시스템 : CSAPP 8장 정리 - 8.3 System Call Error Handling
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
8.3 System Call Error Handling (시스템 콜 에러 처리)유닉스 시스템 콜이 실패했을 때의 에러 처리 방식과, 이를 간편하게 처리하기 위한 에러 처리 래퍼(wrappers)에 대한 설명이다.기본 에러 처리 메커니즘대부분의 Unix 시스템 콜은 실패 시 -1을 반환하고,전역 변수 errno를 설정하여 에러 원인을 나타냅니다.errno는 #include 에 정의되어 있으며, 에러 번호를 정수로 저장한다.이 번호에 대응하는 에러 메시지는 strerror(errno)를 이용해 문자열로 얻을 수 있다.예시: fork() 시스템 콜의 에러 체크if ((pid = fork()) 사용자 정의 에러 처리 함수반복되는 에러 처리를 간소화하기 위해 에러 출력 전용 함수를 정의할 수 있다.예: unix_..
컴퓨터 시스템 : CSAPP 8장 정리 - 8.2 Processes
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
8.2: Processes운영체제가 프로세스를 제공하는 핵심 기법은 예외(Exception)를 기반으로 하며, 이를 통해 프로그램은 마치 시스템 전체를 독점하고 있는 것처럼 보이는 환상을 경험하게 된다.프로세스란?고전적인 정의: 실행 중인 프로그램의 인스턴스각 프로세스는 실행에 필요한 전체 컨텍스트(context)를 포함한다:코드, 데이터, 스택일반 레지스터, 프로그램 카운터(PC)환경 변수, 파일 디스크립터 등프로세스를 통해 얻는 두 가지 핵심 추상화논리적 제어 흐름 (Logical Control Flow)→ 프로그램이 CPU를 독점하고 실행되는 듯한 착각을 제공개인 주소 공간 (Private Address Space)→ 프로그램이 메모리를 독점하는 듯한 착각을 제공8.2.1 Logical Contro..
컴퓨터 시스템 : CSAPP 8장 정리 - 8.1 Exceptions
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
Exceptional Control Flow (ECF)는 프로그램의 일반적인 순차 흐름을 예외적으로 변경하는 메커니즘으로, 운영체제의 핵심 기능인 입출력, 프로세스, 가상 메모리 등을 구현하는 데 사용된다. 프로그래머에게 중요한 이유는 다음과 같다:시스템 개념 이해에 필수적: 프로세스 생성, 종료, 신호 처리 등은 모두 ECF를 기반으로 구현된다.운영체제와의 상호작용 이해: 응용 프로그램이 시스템 콜을 통해 OS 서비스를 요청할 때 trap이라는 형태의 ECF를 사용한다.응용 프로그램 작성 능력 향상: 예를 들어 유닉스 셸이나 웹 서버 같은 프로그램은 ECF 메커니즘을 적극적으로 활용한다.동시성(concurrency) 이해의 기초: 인터럽트, 프로세스, 스레드, 시그널 핸들러 등의 개념은 모두 ECF의 ..