본문 바로가기
CS전공지식

[CS 전공지식] 프로세스와 스레드

by JINJINC 2025. 3. 26.
728x90
반응형

프로세스와 메모리 구조, IPC 통신 정리

운영체제에서 프로세스, 메모리 구조, 프로세스 상태, 문맥 교환, 그리고 프로세스 간 통신(IPC)은 시스템 프로그래밍의 핵심 개념입니다.


📌 포그라운드 / 백그라운드 / 데몬 프로세스

  • 포그라운드 프로세스: 사용자와 상호작용하며 실행되는 프로세스
  • 백그라운드 프로세스: 사용자 눈에 보이지 않는 곳에서 실행
  • 데몬(Daemon): 별다른 상호작용 없이 작업만 수행하는 특별한 백그라운드 프로세스 (Windows에서는 '서비스'라고 부름)

🧠 프로세스를 구성하는 메모리 구조

커널 영역

  • PCB(Process Control Block): 프로세스 관리 정보가 저장된 구조체

사용자 영역

  • 코드 영역: 실행 가능한 명령어 저장 (읽기 전용)
  • 데이터 영역: 전역 변수, 정적 변수 저장
  • 힙 영역: 동적 메모리 할당 공간 (프로그래머가 관리)
  • 스택 영역: 함수 실행 중 생기는 지역 변수, 매개변수, 반환 주소 저장

🧪 스택 트레이스(Stack Trace): 스택에 저장된 함수 호출 정보를 기반으로 문제 발생 지점 추적 가능


📋 PCB와 문맥 교환(Context Switching)

PCB에 저장되는 정보

  • PID (프로세스 ID)
  • 프로세스 상태
  • 레지스터 값
  • CPU 스케줄링 정보
  • 메모리 정보
  • 파일 및 입출력 정보 등
struct task_struct {
    pid_t pid;
    int prio;
    unsigned int_state;
    struct mm_struct * mm;
    void * stack;
    struct files_struct * files;
};
  • 프로세스 테이블: 실행 중인 PCB들의 집합
  • 좀비 프로세스: 종료됐지만 정리되지 않은 PCB

문맥 교환 과정

  • 타이머 인터럽트 발생 → PCB에 문맥 저장 → 새로운 PCB 로드 → 프로세스 전환

문맥 교환은 과도하게 발생 시 오버헤드 초래 → 성능 저하 가능


🔁 프로세스 상태 전이

[생성][준비][실행][종료][대기]
  • 생성: 메모리에 적재되고 PCB 생성됨
  • 준비: CPU 할당 대기
  • 실행: CPU를 받아 명령어 수행
  • 대기: 입출력 등으로 인해 대기 상태
  • 종료: 실행 완료 후 메모리와 PCB 정리

⌨ 블로킹 vs 논블로킹 I/O

방식 설명
블로킹 I/O 입출력 작업 중 실행이 멈춤 (대기 상태)
논블로킹 I/O 입출력 요청 후 곧바로 다음 명령어 실행

🤹 멀티프로세스 vs 멀티스레드

항목 멀티프로세스 멀티스레드
실행 단위 프로세스 단위 스레드 단위
자원 공유 안함 공유함
안정성 높음 낮음 (문제 발생 시 전체 영향)
성능 낮음 높음

웹 브라우저 탭 = 각각의 프로세스 예시


🧵 스레드 Join

  • join()을 호출하면, 해당 스레드가 종료될 때까지 기다림
  • 스레드 간의 작업 동기화를 위해 사용

📨 프로세스 간 통신 (IPC: Inter Process Communication)

프로세스 간 자원을 공유하거나 데이터를 주고받는 방식

공유 메모리 방식

  • 공통 메모리 공간을 설정하여 직접 읽고 쓰기
  • 빠르지만 동기화 문제 고려 필요

메시지 전달 방식

  • 커널을 통해 메시지를 송수신
  • 커널 개입이 많아 느리지만 안정성 높음

주요 방식

  • 파이프 (Pipe): 익명/지명 파이프 (단방향 통신)
  • 시그널 (Signal): 이벤트 알림 (예: SIGINT, SIGKILL)
  • 소켓 (Socket): 네트워크 기반 IPC
  • RPC (Remote Procedure Call): 원격 함수 실행

🚨 시그널과 시그널 핸들러

  • 시그널: 프로세스에게 발생한 이벤트를 알리는 비동기적 신호
  • 시그널 핸들러: 시그널 발생 시 실행될 사용자 정의 함수
시그널 설명
SIGINT 인터럽트 (Ctrl+C)
SIGKILL 강제 종료
SIGSEGV 세그먼트 오류

시그널을 IPC 방식으로 활용할 수도 있음


🧱 코어 덤프(Core Dump)

  • 비정상 종료된 프로그램의 메모리 상태를 저장한 파일
  • 디버깅 시 유용하게 사용

728x90
반응형

댓글