[CSAPP 8장 완전 정복] 8.1~8.3 예외와 프로세스, 시스템의 흐름을 바꾸는 힘

2025. 4. 19. 11:08·크래프톤 정글/컴퓨터구조(CSAPP)
목차
  1. 예외와 프로세스, 시스템의 흐름을 바꾸는 힘
  2. 8.1 예외상황
  3. 8.2 프로세스
  4. 8.3 시스템 호출의 에러 처리
  5. 핵심 요약

예외와 프로세스, 시스템의 흐름을 바꾸는 힘

우리는 이전 장까지 프로그램이 어떻게 메모리에 올라가고 실행되는지를 배웠습니다. 그런데 실행 도중, 프로그램의 흐름은 예상치 못하게 외부에서 끊기거나 전환되기도 하는데요. 이런 현상은 모두 예외(Exception)라는 이름 아래에서 일어납니다.

 

이번 글에서는 CSAPP 8.1~8.3절을 바탕으로 예외란 무엇인지, 그것이 어떻게 프로세스와 연결되는지, 그리고 시스템 호출 실패에 어떻게 대응해야 하는지를 개념과 코드 중심으로 정리합니다.

 

 

8.1 예외상황

예외(exception)란, 프로세스의 정상적인 명령 실행 흐름을 예기치 않게 바꾸는 이벤트입니다.

 

예외는 일반적으로 다음과 같은 원인으로 발생하게 됩니다.

  • 하드웨어 장치의 인터럽트
  • 에러나 조건에 대한 응답 (0으로 나누기, 페이지 폴트 등)
  • 명시적인 시스템 호출 (syscall 명령 등)

 

예외 발생 후의 상황

  • 현재 실행 중인 명령어의 흐름은 즉시 중단된다.
  • 커널로 전환되고, 커널은 적절한 예외 핸들러로 점프한다.
  • 예외 처리 후, 다시 원래 위치(혹은 재시작 가능한 위치)로 복귀하거나 종료된다.

 

예외의 종류

종류 설명 예시
Interrupt 비동기 하드웨어 이벤트 키보드 입력, 네트워크 패킷
Trap 명시적 요청, 복귀 가능 syscall
Fault 복구 가능한 에러 페이지 폴트
Abort 복구 불가능한 치명적 에러 하드웨어 에러, 코드 손상

대부분의 운영체제는 예외 처리를 통해 사용자 프로그램을 보호하고, 커널을 안전하게 유지합니다.

 

 

8.2 프로세스

예외상황은 단지 이벤트라고만 볼 수는 없습니다. 그 이유는 곧 프로세스(Process)라는 실행 단위를 만들어내는 기반이 되기 때문인데요. 프로세스는 메모리에서 실행 중인 프로그램의 인스턴스를 뜻합니다. 프로그램 자체가 정적인 코드 덩어리라면, 프로세스는 동적인 실행 흐름인 것이죠.

 

프로세스의 특징

특징 설명
고유 PID 프로세스 ID로 식별됨
사적 주소 공간 각 프로세스는 독립된 가상 메모리를 사용
사용자/커널 모드 구분 사용자 모드는 제한적 권한, 커널은 전체 제어가 가능
문맥 전환 실행 중인 프로세스의 상태를 저장하고 다른 프로세스로 교체

동시 실행 흐름 (Concurrency)

하나의 CPU는 한 번에 하나의 프로세스만을 실행할 수 있습니다. 다만 여러 프로세스가 짧은 시간 동안 번갈아 실행(interleaving)함으로써 사용자에게는 마치 동시에 실행되는 것처럼 보이게 만들 수 있는데요. 이를 동시 실행 흐름(Concurrency)이라 합니다. 이것이 가능한 이유는 바로 빠른 문맥 전환(context switch) 덕분입니다.

 

문맥 전환이란?

문맥 전환이란 현재 프로세스의 PC, 레지스터, 스택 포인터 등의 상태 값을 저장한 뒤, 새 프로세스의 상태를 복원하는 작업입니다. 커널이 스케줄러를 통해 이 과정을 관리하죠.

 

이 모든 흐름은 결국 예외 처리 메커니즘과 깊이 연결되어 있습니다. 왜냐하면 문맥 전환 자체가 하드웨어 인터럽트나 시스템 호출과 같은 예외 상황을 통해 트리거되기 때문입니다. 커널은 이런 예외가 발생했을 때 현재 프로세스의 상태를 저장하고, 적절한 시점에 다른 프로세스를 실행하기 위해 문맥 전환을 수행합니다.

 

 

8.3 시스템 호출의 에러 처리

시스템 호출(System Call)은 사용자 모드 프로그램이 파일 읽기, 프로세스 생성 등 커널 기능을 요청하는 인터페이스입니다. 이는 예외(Exception) 상황의 일종이기 때문에, 언제든지 실패할 가능성을 내포하고 있습니다.

 

시스템 호출이 실패하는 이유

  • 잘못된 인자를 전달했을 때 (없는 파일을 open하는 경우 등)
  • 권한이 부족할 때 (읽기 권한이 없는 경우 등)
  • 리소스가 부족할 때 (메모리, 파일 디스크립터가 한계인 경우 등)

 

에러 처리 방식

C 언어에서 대부분의 시스템 호출은 실패 시 -1을 반환하며, 전역 변수 errno에 에러 코드를 저장합니다.

 

예를 들어보겠습니다.

int fd = open("foo.txt", O_RDONLY);
if (fd < 0) {
    perror("open failed");
}
  • perror()는 errno 값을 기반으로 사람이 읽을 수 있는 문자열 형태의 에러 메시지를 출력합니다.
  • 그리고 strerror(errno)로 직접 메시지를 가져오는 것도 가능합니다.

 

에러 대응 전략

에러가 발생했을 때 다양한 전략을 통해 이에 대응할 수 있는데요. 구체적인 예시는 다음과 같습니다.

전략 설명
에러 확인 반환값 확인 ( < 0, NULL 등)
복구 시도 리소스 재요청, 입력 수정 등
우아한 종료(Graceful Shutdown) 사용자에게 에러를 알리고 종료
로깅 에러 메시지를 기록해 디버깅 용이성을 향상

 

 

핵심 요약

  • 예외는 프로그램의 현재 제어 흐름을 바꾸는 이벤트이며, 동기 또는 비동기적으로 발생할 수 있다
  • 예외 종류에는 Interrupt, Trap, Fault, Abort가 있다
  • 프로세스는 실행 중인 프로그램의 인스턴스로, PID와 주소 공간, 그리고 상태를 포함하고 있다
  • 문맥 전환은 CPU에서 기존 프로세스의 상태를 저장하고 새 프로세스의 상태를 복원해 실행 흐름을 전환하는 것이다
  • 시스템 콜 에러는 errno, perror, strerror 등의 전역 변수와 함수를 사용해 확인하고 처리할 수 있다
저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 8장 완전 정복] 8.5 시그널, 비동기 흐름의 시작  (0) 2025.04.21
[CSAPP 8장 완전 정복] 8.4 프로세스를 만들고 제어하는 기술들 - fork, exec, wait 완전 정복  (0) 2025.04.19
[CSAPP 7장 완전 정복] 7.14~7.15 오브젝트 파일 분석과 실행 흐름 마무리  (0) 2025.04.18
[CSAPP 7장 완전 정복] 7.13 라이브러리 삽입 완전 이해하기  (0) 2025.04.18
[CSAPP 7장 완전 정복] 7.12 공유 라이브러리의 핵심 기술 - PIC, GOT, PLT  (0) 2025.04.18
  1. 예외와 프로세스, 시스템의 흐름을 바꾸는 힘
  2. 8.1 예외상황
  3. 8.2 프로세스
  4. 8.3 시스템 호출의 에러 처리
  5. 핵심 요약
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 8장 완전 정복] 8.5 시그널, 비동기 흐름의 시작
  • [CSAPP 8장 완전 정복] 8.4 프로세스를 만들고 제어하는 기술들 - fork, exec, wait 완전 정복
  • [CSAPP 7장 완전 정복] 7.14~7.15 오브젝트 파일 분석과 실행 흐름 마무리
  • [CSAPP 7장 완전 정복] 7.13 라이브러리 삽입 완전 이해하기
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리)
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무) N
        • 마이 정글(WIL, 에세이) N
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 8장 완전 정복] 8.1~8.3 예외와 프로세스, 시스템의 흐름을 바꾸는 힘

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.