컴퓨터 시스템 : CSAPP 9장 정리 - 9.1 ~ 9.2
Chapter 9: Virtual Memory (가상 메모리)가상 메모리는 현대 시스템에서 매우 중요한 메모리 추상화 개념이다. 이 추상화는 각 프로세스에게 독립적이고 균일한 메모리 주소 공간을 제공하며, 다음 세 가지 주요 기능을 제공한다:캐싱 도구로서의 VM메모리에 전부 올려놓기에는 프로그램이 너무 크거나, 메모리가 부족할 수 있다. 가상 메모리는 주기억장치를 디스크 기반의 큰 주소 공간에 대한 캐시로 사용함으로써 효율적인 메모리 사용을 가능하게 한다.메모리 관리 도구로서의 VM사용자 수준의 메모리 할당자 (예: malloc) 구현에 도움을 준다. 가상 메모리를 사용하면 프로그램은 큰 연속적인 주소 공간을 가지고 있는 것처럼 보이므로, 다양한 할당 전략이 가능하다.메모리 보호 도구로서의 VM하나의 프..
- 크래프톤 정글 (컴퓨터 시스템: CSAPP)/9장 가상 메모리
- · 2025. 4. 20.
컴퓨터 시스템 : CSAPP 8장 정리 - 8.6 ~ 마지막 까지
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장 예외적 제어 흐름
- · 2025. 4. 19.
컴퓨터 시스템 : CSAPP 8장 정리 - 8.5 Signals Part.2 8.5.7 까지
8.5.5 Writing Signal Handlers (시그널 핸들러 작성)시그널 핸들러를 올바르게 작성하는 방법에 대해 설명한다. 시그널 핸들러는 예외적으로 실행되며, 메인 프로그램과 동시에 실행될 수 있기 때문에 작성이 까다롭다.시그널 핸들러 작성의 어려움시그널 핸들러는 메인 프로그램과 동시에 실행되며, 전역 변수를 공유함.언제 시그널이 수신되는지는 예측이 어려움 → 비순차적 실행시스템마다 동작 방식이 다를 수 있어 이식성 문제도 있음.안전한 시그널 핸들러 작성 지침G0. 핸들러를 최대한 단순하게 유지가능한 한 간단한 동작만 수행해야 함예: 전역 변수에 플래그를 설정하고 바로 반환 → 메인 루프가 주기적으로 플래그를 검사하여 처리G1. async-signal-safe 함수만 호출시그널 핸들러 내에서..
- 크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
- · 2025. 4. 19.
컴퓨터 시스템 : CSAPP 8장 정리 - 8.5 Signals Part.1 8.5.4 까지
8.5 Signals이 절에서는 시그널(Signal)이라는 고수준 예외적 제어 흐름(high-level exceptional control flow) 메커니즘을 소개한다.시그널은 커널 또는 다른 프로세스가 특정 프로세스에 이벤트 발생을 알려주는 작은 메시지다.시그널의 개요시그널은 하드웨어 예외처럼 비동기적으로 발생할 수 있으며, 사용자 수준 프로세스에 도달할 수 있는 예외다.예: 사용자가 Ctrl+C를 누르면 커널이 SIGINT 시그널을 해당 프로세스에 보냄시그널은 총 30여 개 종류가 있으며, 각 시그널은 특정 이벤트에 대응한다:SIGSEGV: 잘못된 메모리 참조SIGCHLD: 자식 프로세스 종료SIGKILL: 강제 종료SIGALRM: 타이머 만료시그널은 C에서 예외(exception)를 다룰 수 있는..
- 크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
- · 2025. 4. 19.
컴퓨터 시스템 : CSAPP 8장 정리 - 8.4 Process Control
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장 예외적 제어 흐름
- · 2025. 4. 19.
컴퓨터 시스템 : CSAPP 8장 정리 - 8.3 System Call Error Handling
8.3 System Call Error Handling (시스템 콜 에러 처리)유닉스 시스템 콜이 실패했을 때의 에러 처리 방식과, 이를 간편하게 처리하기 위한 에러 처리 래퍼(wrappers)에 대한 설명이다.기본 에러 처리 메커니즘대부분의 Unix 시스템 콜은 실패 시 -1을 반환하고,전역 변수 errno를 설정하여 에러 원인을 나타냅니다.errno는 #include 에 정의되어 있으며, 에러 번호를 정수로 저장한다.이 번호에 대응하는 에러 메시지는 strerror(errno)를 이용해 문자열로 얻을 수 있다.예시: fork() 시스템 콜의 에러 체크if ((pid = fork()) 사용자 정의 에러 처리 함수반복되는 에러 처리를 간소화하기 위해 에러 출력 전용 함수를 정의할 수 있다.예: unix_..
- 크래프톤 정글 (컴퓨터 시스템: CSAPP)/8장 예외적 제어 흐름
- · 2025. 4. 19.