[운영체제] CH03. 프로세스

PikminProtectionAssociation·2024년 11월 7일

행성 탈출기

목록 보기
9/21
post-thumbnail

Process

Concept

  • Program의 표현
    • jobs : batch system
    • user programs or tasks : time-shared systems
  • Process : 실행 중인 프로그램
    • 프로그램 그 자체는 프로세스가 아님
    • 프로그램은 CPU 명령들을 그 내용으로 가진 디스크에 저장되어 있는 실행 파일과 같이 수동적인 존재
    • 프로세스는 다음에 실행할 CPU 명령을 지정하는 프로그램 카운터 레지스터와 실행에 필요한 자원의 집합을 가진 능동적인 존재

  • 프로세스가 메모리에 로드된 모습
    • 실행 파일의 형태인 프로그램이 메모리에 적재되어야만 비로소 프로세스가 됨
  • Stack
    • 프로그램이 실행하는 도중 함수의 동작과 관련된 내용들이 저장되는 공간
    • 함수의 Parameter, 복귀 주소, 지역 변수 등
    • 함수가 호출될 때마다 Stack에 Push 되고 함수가 종료하면 Pop
  • Heap
    • 프로세스 실행 중 동적으로 메모리가 할당되는 경우 사용
    • malloc 함수는 Heap 영역 메모리를 할당
  • Data
    • 전역변수들이 위치해있는 영역
  • Text
    • 프로그램의 명령들, 즉 코드 부분에 해당
    • 코드뿐만 아니라 실행과 관련된 프로그램 카운터를 포함한 각종 Register도 함께 생각
  • 화살표의 의미
    • Stack과 Heap 영역 사이 파란색 공간은 프로세스 영역이지만 아직 사용되지 않은 빈 공간임
    • Stack이나 Heap 영역은 프로세스 실행에 따라 커질 수 있기 때문
  • 하나의 프로그램을 동시에 여러 번 실행하는 경우 프로그램은 하나지만 연관된 프로세스는 여러 개가 될 수 있음
    • Text는 동일하지만 Data, Heap, Stack 영역은 프로세스마다 다름

State

  • 프로세스는 실행을 하며 상태가 변하게 됨
  • new
    • 프로세스가 만들어지고 있지만 정식 프로세스는 아닌 상태
  • ready
    • CPU에 할당되기를 기다리는 상태
    • CPU가 주어지면 즉시 실행할 수 있는 상태
  • running
    • 프로세스가 실행 중인 상태
    • CPU가 하나만 있는 컴퓨터 시스템은 많은 프로세스 중에 running 상태의 프로세스는 단 하나밖에 없음
  • waiting
    • 프로세스가 어떤 사건이 발생하기를 기다리고 있는 상태 (입출력 완료 등)
    • ready 상태의 프로세스와 달리 CPU가 주어지더라도 즉시 실행할 수는 없는 상태
  • terminated
    • 프로세스가 실행을 마친 상태
    • 수행은 마치고 아직 소멸되지는 않은 상태

프로세스 상태 전이

  1. new -> ready

    • 프로세스는 생성 직후 new 상태에서 시작
    • OS는 new 상태의 프로세스 중 정식 프로세스가 될 대상을 선택해서 ready 상태로 만듦
  2. ready -> running

    • OS는 ready 상태의 프로세스 중에서 선택하여 CPU를 할당해 실행을 시작시킴
    • scheduler dispatch의 결과
  3. running -> ready

    • 보통 time sharing 시스템 같은 경우 실행 중인 프로세스가 너무 장시간 실행을 이어가는 경우 OS가 이 프로세스로부터 CPU를 빼앗아서 한 프로세스가 CPU를 독점하는 것을 방지
    • 프로세스로부터 CPU를 빼앗는 동작은 interrupt를 활용 (timer interrupt)
  4. running -> waiting

    • 실행 중인 프로세스가 입출력을 요청하는 경우 해당
  5. waiting -> ready

    • 입출력을 요청하고 입출력의 완료를 기다리는 프로세스에게 입출력이 끝났다고 하는 완료 interrupt가 발생하는 경우
    • OS가 interrupt를 처리하는 과정에서 해당 프로세스를 변경시킴
  6. running -> terminated

    • 실행 중인 프로세스가 종료하는 시스템콜을 호출하면 OS가 해당 프로세스 상태를 terminated로 변경

Process Control Block (PCB)

  • kernel이 개별 프로세스를 관리하기 위해서 유지하는 자료구조
    • 현재 동작하는 프로세스들의 모든 PCB를 모아서 연결리스트 형태로 관리
  • 프로세스마다 하나씩 존재하며, 프로세스가 최초로 생성되면 해당 PCB가 만들어지고 프로세스가 소멸하면 PCB도 시스템에서 제거됨
  • Process State

    • kernel은 프로세스의 상태가 바뀔 때마다 이 필드에 기록
  • Process ID

    • kernel은 프로세스마다 고유의 식별 번호를 부여해서 프로세스를 구분
    • 프로세스 아이디, PID (보통 정수로 표현)
  • Program Counter

    • CPU 안에 있는 레지스터
    • 현재 실행 중인 명령의 위치, 주소를 저장
    • 여기서 PC 필드는 CPU의 프로그램 카운터 레지스터 값의 복사본을 저장하는 곳
    • 이 필드에 있는 값은 보통 프로세스가 running 상태가 아닌 경우에만 의미 있으며, 프로세스가 가장 최근에 실행을 멈춘 곳의 주소를 저장
    • 프로세스가 다시 실행할 때 PC에 저장된 주소로부터 실행이 재개됨
  • CPU Registers

    • PC를 제외한 나머지 레지스터
    • 가장 최근에 실행을 멈춘 시점의 CPU 레지스터 값을 이곳에 저장
    • 프로세스가 실행을 재개할 때 이 필드의 값들이 CPU 레지스터에 복원됨
  • CPU scheduling information

    • kernel이 CPU를 스케줄링 할 때 필요한 정보를 저장 (우선순위나 scheduling queue pointer 등)
  • Memory-management information

    • 프로세스들이 할당 받아서 사용하고 있는 메인 메모리 위치 등에 대한 정보 저장
  • Accounting information

    • 프로세스의 자원 사용 기록, CPU 사용 시간, 실행 시작 후 경과 시간, 각종 자원 사용 한도 등을 저장
    • 사용자에게 과금을 하는 시스템에서 이 정보를 활용
  • I/O status information

    • 프로세스에 할당된 입출력 장치, open file 등 프로세스의 입출력과 관련된 모든 정보 저장



참고 자료 : Operating System Concepts Essentials
*이미지 자료는 교재 자료를 직접 다시 만든 것으로 무단 불펌 금지입니다




나머지는 다음 편에 이어서 ~.~

0개의 댓글