2025-12-11

오늘 배운 것

10-1 프로세스 개요

프로세스 직접 확인하기

  • 포그라운드 프로세스 : 사용자가 보는 앞에서 실행되는 프로세스
  • 백그라운드 프로세스 : 사용자가 보지 못하는 뒤편에서 실행되는 프로세스
    • 사용자와 상호작용할 수 있는 백그라운드 프로세스가 있고
    • 사용자와 상호작용 하지 않고 정해진 일만 수행하는 백그라운드 프로세스도 있음
      • 유닉스 → 데몬
      • 윈도우 → 서비스

프로세스 제어 블록

  • 운영체제는 프로세스 제어 블록(PCB)를 이용하여 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분
  • PCB : 프로세스와 관련된 정보를 저장하는 자료 구조
    • 커널 영역에 생성
    • PCB로 특정 프로세스를 식별하고 해당 프로세스를 처리하는 데 필요한 정보를 판단
    • 프로세스 생성 시 만들어지고 실행이 끝나면 폐기됨

PCB에 담기는 정보

  • 프로세스 ID : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호
  • 레지스터 값 : 해당 프로세스가 실행하며 사용했던 프로그램 카운터를 비롯한 레지스터 값
    • 자신의 실행 차례로 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원
  • 프로세스 상태
    • 입출력 장치를 사용하기 위해 기다리고 있는지, CPU를 사용하기 위해 기다리고 있는지 등등 프로세스 상태 정보가 저장
  • CPU 스케줄링 정보 : 프로세스가 언제, 어떤 순서로 CPU를 할당 받을지
  • 메모리 관리 정보
    • 프로세스가 어느 주소에 저장되어 있는지
    • 베이스 레제스터, 한계 레지스터 값
    • 페이지 테이블 정보 → 프로세스 주소를 알기 위한 또다른 중요 정보 중 하나
  • 사용한 파일과 입출력 장치 목록
    • 프로세스가 실행과정에서 사용한 특정 입출력 장치나 파일 정보

문맥 교환

  • 문맥 : 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
  • 문맥 교환 : 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로 복구하여 새로운 프로세스를 실행하는 것

프로세스의 메모리 영역

코드 영역

  • 텍스트 영역이라고도 부름
  • 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장
  • 읽기 전용 공간임

데이터 영역

  • 프로그램이 실행되는 동안 유지할 데이터기 저장되는 공간
    • 예 : 전역 변수
  • 코드와 데이터 영역은 크기가 고정된 영역 → 정적 할당 영역

힙 영역

  • 프로그래머가 직접 할당할 수 있는 저장 공간
  • 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 함
  • 메모리 누수 : 메모리 공간을 반환하지 않아 메모리 낭비를 초래하는 것

스택 영역

  • 데이터를 일시적으로 저장하는 공간
    • 예 : 매개변수, 지역 변수
  • 힙과 스택 영역은 실시간으로 크기가 변할 수 있음 → 동적 할당 영역
  • 힙 영역은 메모리 낮은 주소에서 높은 주소
  • 스택 영역은 높은 주소에서 낮은 주소로 할당

10-2 프로세스 상태와 계층 구조

프로세스 상태

생성 상태

  • 프로세스를 생성 중인 상태
  • 막 메모리에 적재되어 PCB를 할당 받은 상태
  • 곧바로 실행되지 않고 준비 상태가 되어 CPU의 할당을 기다림

준비 상태

  • CPU를 할당 받기 위해 대기하는 상태
  • 할당 받으면 실행상태가 됨
  • 디스패치 : 준비 상태 → 실행상태 전환

실행 상태

  • CPU를 할당 받아 실행 중인 상태
  • 실행 상태인 프로세스는 할당된 일정 시간 동안만 CPU를 사용 가능
  • 할당된 시간을 모두 사용 → 준비상태로 전환
  • 실행 도중 입출력 장치 사용 → 대기상태로 전환

대기 상태

  • 입출력 장치의 작업을 기다리는 상태
  • 입출력 작업 완료 → 준비상태로 전환
  • 입출력 외에도 특정 이벤트가 기다릴 때 프로세스는 대기 상태가 됨

종료 상태

  • 프로세스가 종료된 상태
  • 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리 정리

프로세스 계층 구조

  • 부모 프로세스 : 새프로세스를 생성한 프로세스
  • 자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
    • 일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID가 기록됨
  • 자식 프로세스도 실행과정에서 또다른 자식 프로세스 생성 가능
    • 많은 운영체제는 이처럼 프로세스가 프로세스를 낳는 계층적인 구조로써 프로세스들을 관리
  • 컴퓨터 부팅시 최초의 프로세스 실행됨
    • 유닉스 → init
    • 리눅스 → systemd
    • macOS → launchd
    • 최초의 프로세스 PID는 항상 1번
    • 모든 프로세스의 최상단에 있음

프로세스 생성 기법

  • 부모프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행
    • 부모 프로세스는 fork를 통해 자신의 복사본을 자식 프로세스로 생성
      • 메모리 내용, 열린 파일의 목록 등이 자식 프로세스에 상속
      • 복사된 자식 프로세스라 할지라도 PID값이나 저장된 메모리 위치는 다름
    • 만들어진 복사본은 exec를 통해 자신의 메모리 공간을 다른 프로그램으로 교체
      • exec를 호출하면 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역 초기화
  • 부모 프로세스가 자식 프로세스를 fork한 뒤에 부모 프로세스와 자식프로세스 누구도 exec를 호출하지 않는 경우
    • 같은 코들 병행하여 실행하는 프로세스가 됨

10-3 스레드

  • 스레드 : 프로세스를 구성하는 실행의 흐름 단위
    • 하나의 프로세스는 여러 개의 스레드를 가질 수 있음
    • 스레드를 이용하면 하나의 프로세스에서 여러 부분을 동시에 실행

프로세스와 스레드

  • 단일 스레드 프로세스 : 실행 흐름 단위가 하나인 프로세스
  • 스레드의 구성요소
    • 각기 다른 스레드 ID
    • 프로그램 카운터 값을 비롯한 레지스터 값
    • 스택
    • 이를 통해 스레드마다 각기 다른 코드 실행 가능
  • 스레드는 실행에 필요한 최소한 정보만을 유지한 채 프로세스 자원을 공유하며 실행

멀티 프로세스와 멀티 스레드

  • 멀티 프로세스 : 여러 프로세스를 동시에 실행하는 것
  • 멀티 프로세스 : 여러 스레드로 프로세스를 동시에 실행하는 것
    • 장점
      • 프로세스끼리는 기본적으로 자원을 공유하지 않고, 스레드 끼리는 같은 프로세스 내의 자원을 공유
        • 따라서 같은 작업을 하는 동일한 프로세스를 동시에 실행하면 동일한 내용들이 중복해서 존재하는 낭비가 발생
        • 스레드를 활용하면 메모리를 더 효율적으로 사용할 수 있음
    • 단점
      • 멀티 프로세스 환경에서는 하나의 프로세스에 문제가 생겨도 다른 프로세스에 지장이 적거나 없음
      • 멀티 스레드 환경에서는 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있음

results matching ""

    No results matching ""