Process

초보개발·2021년 10월 27일
0

OS

목록 보기
4/38
post-custom-banner

Program과 Process의 차이

프로그램은 저장장치에 저장되어 있는 정적인 상태이고 프로세스는 실행을 위해 메모리에 올라온 동적인 상태이다.
프로그램은 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어놓은 것이고 프로세스는 '실행한다'라고 표현하는데, 이는 프로그램으로 작성된 작업 절차를 실제로 실행에 옮긴다는 뜻이다. 따라서 프로그램이 실행되면 프로세스가 된다.

Process

프로세스는 실행 중인 프로그램이며, 프로그램이 실행되어 메모리에 적재되어 있고 CPU의 할당을 받을 수 있는 상태를 의미한다. 프로세스는 함수의 매개변수, 복귀 주소와 로컬 변수와 같은 임시 자료를 갖는 프로세스 스택과 전역 변수들을 수록하는 데이터 섹션 그리고 힙을 포함한다.

PCB(Process Control Block)

프로세스 제어 블록에는 특정 프로세스에 대한 중요한 정보들이 저장되어 있다. OS는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성한다. 프로세스는 CPU를 할당받아 작업을 처리하다가 프로세스의 전환이 발생하면 진행하던 작업을 PCB에 저장하고 CPU를 반환한다. 그리고 다시 CPU를 할당 받게 되면 PCB에 저장되어 있던 내용을 불러와 이전에 종료한 시점부터 작업을 재개한다.

PCB에 저장되는 정보

  • PID : 프로세스 식별 번호
  • 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
  • Program Counter(PC) : 프로세스가 다음에 실행할 명령어의 주소
  • CPU 레지스터
  • CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
  • 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보 포함
  • 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
  • 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정 번호 등

프로세스 상태 전이

  • 생성 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태, PCB가 생성된다.
  • 준비(Ready) : 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태이다. PCB는 ready queue에서 기다리며 CPU 스케줄러에 의해 관리된다.
  • 대기(Waiting) : 프로세스에 입출력 처리가 필요하면 현재 실행 중인 프로세스가 중단되고, 입출력 처리가 완료될때 까지 대기하고 있는 상태이다.
  • 실행(Running) : 준비 상태에 있는 프로세스 중 하나다 CPU를 할당받아 실제 작업을 수행하는 상태이다.
    실행 상태로 들어간 프로세스는 일정 시간동안 CPU를 사용할 권리를 갖는데, 이 시간동안 작업을 끝내지 못했다면 timeout(PID)가 실행되어 프로세스는 준비 상태로 돌아가서 다음 차례를 기다린다. 작업이 완료되면 eixt(PID)가 실행되어 프로세스가 정상 종료된다. 작업이 끝날 때까지 준비와 실행 상태를 왔다 갔다 한다.
    실행 상태의 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행하여 해당 프로세스를 대기 상태로 전환한다. CPU 스케줄러는 새로운 프로세스를 실행 상태로 가져온다(dispatch).
  • 완료(Terminate) : 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 전환되고 PCB는 사라진다.

프로세스 상태 전이 관련 용어

  • Dispatch : 준비 상태의 어떤 프로세스 PCB를 선택하는 작업을 dispatch(PID) 명령으로 처리한다. CPU 스케줄러가 dispatch(PID)를 싱행하면 해당 프로세스가 준비 상태에서 실행 상태로 바뀌어 작업이 이루어진다.

Context switch

여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 task의 상태를 PCB에 저장하고 다음에 진행할 task의 상태값을 읽어 적용하는 과정을 말한다. CPU는 하나의 프로세스만 실행하는 것은 비효율적이므로 여러 프로세스(task)를 빠르게 번갈아가면서 실행하는데, 이 때 레지스터에 저장된 PCB를 통해 task의 정보를 switch한다.

Context switch의 과정

  1. task의 대부분 정보는 레지스터에 저장되고 PCB로 관리된다.
  2. 현재 실행하고 있는 task의 PCB 정보를 저장한다.
  3. 다음 실행할 task의 PCB 정보를 읽어 레지스터에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있다.

Process와 Thread의 차이

프로세스는 컴퓨터에서 실행중인 프로그램을 말하고 고유한 공간과 자원을 할당받아 사용한다. 반면에 스레드는 프로세스 안에서 실행되는 여러 흐름의 단위로 프로세스 내의 자원을 공유하고 고유한 Stack만을 각자 할당 받는다.

post-custom-banner

0개의 댓글