EverGiver

Process States 본문

전공/운영체제

Process States

친절한개발초보자 2022. 3. 21. 15:55
728x90
Process management

 

  • 프로세스의 생성 시기
    - 일괄처리 환경 : 작업이 도착할 때 프로세스 생성
    - 대화형 환경 : 새로운 사용자가 log-on/loading 할 때 프로세스 생성
  • 프로세스 생성 시 필요한 세부 작업 순서
    1. 새로운 프로세스에 process ID(pid) 할당
    2. 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 PCB 공간 할당
    3. PCB initalization (프로세스 상태, 프로그램 카운터 등 초기화, 자원 요청, 프로세스 제어 정보(우선순위) 등을 포함)
    4. 링크 (해당 큐에 삽입)
  • 프로세스가 새로운 프로세스 생성
    - 프로세스 실행 중 프로세스 생성 시스템 호출을 이용하여 새로운 프로세스를 생성
    - 생성하는 프로세스는 parent process, 생성되는 프로세스는 child process 또는 subprocess
    - 부모 프로세스와 자식 프로세스가 동시에 실행
    - 부모 프로세스는 자식 프로세스가 모두 종류 할 때까지 대기
  • Process termination
    - 사용하던 자원을 시스템에 돌려주고 PCB 회수, 해당 프로세스는 시스템 리스트나 테이블에서 삭제
    - 프로그램은 여전히 디스크에 저장됨
    - 프로세스 종료 종류
      ▷ 정상 종류
          - 마지막 명령 실행 후 운영체제의 서비스 호출
          - exit 명령어 : 프로세스 종류를 위한 서비스 호출 조건 만족 시 실행
      ▷ 강제 종류
          - 사용자 개입 : 사용자가 log-off, 실행창 닫기, 종료 명령(abort, quit, ^C 등)
          - 시간 초과
          - Exception 발생 : 산술 오류, 보호 오류, 데이터 오류 등, 메모리 부족, 액세스 위반 등
            → Exception handler 실행
    - Parent process의 child process 종료
      ▷ 보통 부모 프로세스를 종료하면 운영체제가 자식 프로세스도 종료 (연속 종료)
      ▷ 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때
      ▷ 자식 프로세스에 할당한 작업이 더는 없을 때
      ▷ wait 명령어 : 부모 프로세스가 자식 프로세스의 종료를 기달린다.
  • Orphan process
    - 프로세스가 종료된 후에도 비정상적으로 남아 있는 프로세스
    - C 언어의 exit() 또는 return() 문은 자식 프로세스가 작업이 끝났음을 부모 프로세스에 알리는 것으로 미아 프로세스 발생을 미연에 방지

exit 함수

 

Process suspend & resume

 

  • Multi-process system에서 ready / waiting queue가 가득 차는(full) 문제
    - 자원 부족 상태 또는 장시간의 입출력 대기
    - Process suspend (일시 정지) 상태 추가
  • Process suspend
    - Swap out low priority process to secondary storage
    - 시스템 전체의 부하를 증가시키지 않고 process에 서비스 제공
    - 원인이 해소될 때까지 process를 suspend 상태에 두어 다른 process가 원활하게 수행되도록 한다.
    - 장시간 중단 시 해당 프로세스에 할당된 자원을 반환한다.
    - 자원의 성질에 따라 반환 자원을 결정한다.
      ▷ 메인 메모리 : 프로세서 중단 즉시 반환
      ▷ 보조 메모리 : 중단 시간을 예측할 수 없거나 너무 길 때 반환한다.
    - 중단한 프로세스는 중단한 지점부터 다시 시작한다.
      ▷ PCB 보존

중단과 재시작을 추가한 프로세스의 상태 변화

 

프로세서의 생성과 복사

 

  • fork() 시스템 호출의 개념
    - 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수
    - 실행 중인 프로세스와 똑같은 프로세스가 하나 더 만들어진다.
      ▷ parent - child

fork() 시스템 호출의 개념

  • fork() 시스템 호출의 동작 과정
    - fork() 시스템 호출을 하면 프로세스 제어 블록을 포함한 부모 프로세스 영역의 대부분이 자식 프로세스에 복사되어 똑같은 프로세스가 만들어진다.
    - 단, 프로세스 제어 블록의 내용 중 다음이 변경된다.
      ▷ PID (Process ID)
      ▷ 메모리 관련 정보
      ▷ PPID (Parent Process ID)와 CPID (Child Process ID)

  • fork() 시스템 호출의 장점
    - 프로세스의 생성 속도가 빠르다.
    - 추가 작업 없이 자원을 상속할 수 있다.
    - 시스템 관리를 효율적으로 할 수 있다.
  • fork() 시스템 호출의 예
    - 부모 프로세스의 코드가 실행되어 fork() 문을 만나면 똑같은 내용의 자식 프로세스를 하나 생성
    - 이때 fork() 문은 부모 프로세스에 0보다 큰 값을 반환하고 자식 프로세스에 0을 반환
    - 만약 0보다 작은 값을 반환하면 자식 프로세스가 생성되지 않은 것으로 여겨 'Error'를 출력

 

프로세스의 전환

 

  • exec() 시스템 호출의 개념
    - 기존의 프로세스를 새로운 프로세스로 전환(재사용)하는 함수
      ▷ fork() : 새로운 프로세스를 복사하는 시스템 호출
      ▷ exec() : 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출
  • exec() 시스템 호출의 동작 과정
    - exec() 시스템 호출을 하면 코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 변경
    - 스택/힙 영역 리셋
    - PCB의 내용 중 PID, PPID, CPID, 메모리 관련 사항 등은 유지하고 프로그램 카운터 레지스터 값을 비롯한 각종 레지스터와 사용한 파일 정보가 모두 리셋
    - 기존 process를 재활용하여 새로운 program을 실행

exec() 시스템 호출의 개념

  • exec() 시스템 호출의 예
    - 부모 프로세스에서 fork() 문을 실행 → 자식 프로세스를 생성하고, wait() 문을 실행 → 자식 프로세스가 끝날 때까지 기다린다.
    - 자식 프로세스는 부모 프로세스와 동일한 코드
    - exec() 시스템 호출을 사용하여 새로운 프로세스로 전환 → PCB의 PID, PPID, CPID 등 유지 → 자식 프로세스가 종료된 후 부모 프로세스로 돌아올 수 있다. → 부모 프로세스 계속 실행

 

Process Hierarchy

 

  • UNIX의 process hierarchy
    - 유닉스의 모든 프로세스는 init 프로세스의 자식이 되어 트리 구조를 이룸

유닉스의 프로세스 계층 구조

728x90

'전공 > 운영체제' 카테고리의 다른 글

Linux Basic Shell Command  (0) 2022.03.26
Linux Outline  (0) 2022.03.26
Process Concept  (0) 2022.03.21
컴퓨터 동작  (0) 2022.03.13
컴퓨터 시스템 소개  (0) 2022.03.12
Comments