상세 컨텐츠

본문 제목

운영체제 - 프로세스

공부

by myeongjaechoi 2024. 4. 21. 20:24

본문

프로그램과 프로세스

  • 프로그램
    • 파일 시스템에 파일 형태로 존재하는 실행 파일
  • 프로세스
    • CPU와 메모리를 사용하여 실행 중인 프로그램
    • OS에서 하나의 작업 단위로써 태스크 라고도 함 (process = job = task)
    • 각 프로세스가 생성될 때 프로세스를 제어하는데 필요한 정보인 PCB가 생성됨

프로세스 상태

  • new(생성)
    • 프로그램이 메모리에 올라와 프로세스가 생성되는 상태
    • PCB가 생성됨
  • ready(준비)
    • 준비 큐에서 프로세스가 CPU를 할당 받기위해 기다리는 실행 준비 상태
  • running(실행)
    • 프로세스가 CPU를 사용하여 실행 중인 상태
    • 문맥 교환이 이뤄짐
    • 예 : 시분활 시스템에서 프로세스에게 할당된 CPU 사용시간이 완료되면 실행이 다 끝나지 않아도 프로세스가 준비상태로 됨)
  • terminated(완료)
    • 프로세스의 실행이 완료된 상태
    • PCB가 삭제됨
  • waiting(대기)
    • 실행 중인 프로세스가 데이터 I/O를 처리해야 하는 경우, I/O controller를 사용하여 I/O가 완료될 때까지 대기하는 상태

프로세스 상태 전이

  • admitted(승인)
    • 새롭게 생성된 프로세스들이 승인 받아 준비 상태에 이르는 과정
  • scheduler dispatch(스케줄러 디스패치)
    • CPU 스케줄러에 의해 준비 상태의 준비 큐에서 프로세스 중 하나를 선택하여 실행시키는 것
  • interrupt(인터럽트)
    • 예외, 입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를 준비 상태로 바꾸고, 발생한 작업을 먼저 처리하는 것
  • I/O wait(입출력 대기)
    • 실행 중인 프로세스가 입출력을 처리해야 하는 경우, 입출력 처리가 모두 끝날 때까지 대기 상태로 만드는 것
  • I/O completion(입출력 완료)
    • 입출력이 끝난 프로세스를 준비 상태로 전환하여 스케줄러에 의해 선택될 수 있도록 만드는 것

PCB

  • OS가 프로세스를 제어하는데 필요한 정보를 담고 있음
  • 프로세스가 생성될 때 메모리의 OS영역에 생성됨
  • 프로세스 상태 전이와 문맥 교환을 위해 사용됨
  • Pointer
    • 준비상태의 준비 큐와 대기상태의 대기 큐 내에서 다음 프로세스의 PCB를 가리키는 포인터로 사용됨
  • Process state
    • 프로세스 상태인 생성, 준비, 실행, 대기, 종료를 나타냄
  • Process number
    • OS 내에서 여러 프로세스를 구분하기 위해 사용됨
  • CPU scheduling information
    • 프로세스 우선순위 정보가 저장됨
    • 준비 큐와 대기 큐에서 높은 우선순위의 프로세스가 낮은 우선순위의 프로세스보다 먼저 실행됨
  • I/O status information
    • 프로세스를 실행하기 위해 사용된 입출력 장치나 파일에 대한 정보가 저장됨(예 : file list)
  • Accounting information
    • 프로세스 실행을 완료하기 위해 사용된 총 CPU 시간 및 이 시간의 한도가 저장됨
  • PPID & CPID
    • 부모 프로세스의 PID와 자식 프로세스의 PID가 저장됨

Program counter(PC)

  • 다음에 실행될 명령어의 주소 또는 코드의 행 번호가 저장됨

Registers

  • 프로세스가 실행되는 중에 사용하던 register 값이 저장됨

문맥 교환

  • Timeout 또는 인터럽트에 의해 CPU에서 현재 실행 중인 프로세스를 다른 프로세스로 전환하는 과정
  • Context : CPU가 프로세스를 실행하기 위해 필요한 정보로서 CPU의 register에 저장됨
  • 프로세스의 PCB를 통해 CPU의 register를 다시 설정함

프로세스의 메모리 구조

  • 프로세스가 생성될 때
    • 메모리의 OS 영역 : PCB가 할당됨
    • 메모리의 사용자 영역 : 코드 영역, 데이터 영역, 힙 영역, 스택 영역이 할당됨
  • 코드 영역
    • 디스크에서 읽어온 실행하려는 빌드된 프로그램이 저장됨
  • 데이터 영역
    • 전역 변수 또는 정적 변수가 저장됨
  • 스택 영역
    • 지역 변수가 저장됨
    • 변수는 범위 밖으로 이동하면 스택에 할당된 변수는 소멸됨
  • 힙 영역
    • 프로세스 실행 중에 동적으로 메모리를 할당 및 해제하기 위해 사용됨
    • malloc()과 free() 함수를 사용하여 동적 메모리를 할당하고 해제함

fork()

  • 프로세스를 복사하는 함수
  • 실행 중인 프로세스는 부모 프로세스가 되고, 복사본이 자식 프로세스가 됨

exec()

  • 프로세스에서 프로그램을 실행하도록 하는 함수
  • 프로세스에서 PCB는 변경되지 않고 프로그램을 실행시키기 위해 코드, 데이터, 힙, 스택 영역이 변경됨

좀비 프로세스

  • 자식 프로세스의 실행이 완료되면 자식 프로세스가 사용한 자원을 부모 프로세스가 회수
  • But, 2가지 경우에 회수 불가
    • 자식 프로세스보다 부모 프로세스가 먼저 종료된 경우
    • 자식 프로세스가 비정상적으로 종료된 경우
  • 이때, 자식 프로세스는 종료되었으나 프로세스에 대한 자원이 사라지지 않고 남아있는 좀비 프로세스가 됨
  • 고아 프로세스라고도 함

관련글 더보기