프로세스 관리

최정은·2022년 10월 27일
0

Backend Roadmap

목록 보기
16/23
post-thumbnail

프로세스란?

프로세스는 운영체제에서 하나의 작업 단위이며 태스크(task)라고도 부른다. 프로그램은 일반적으로 하드디스크 같은 저장장치에에 저장되어 있는 정적 상태고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태다.

프로그램에서 프로세스로의 전환

프로그램을 메모리의 적당한 위치로 가져올 때 PCB를 생성한다. 프로그램이 프로세스가 되었다는 것은 운영체제로부터 PCB를 받았다는 의미다.

프로그램과 프로세스의 관계
프로세스 = 프로그램 + PCB
프로그램 = 프로세스 - PCB

프로세스 제어 블록 (PCB)

프로세스 제어 블록(Process Control Block, PCB)은 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료 구조로, TCB(Task Control Block) 라고도 부른다. 모든 프로세스는 고유의 PCB를 가지며, 프로세스 생성시 만들어져서 프로세스가 실행을 완료하면 폐기된다.

PCB는 다음과 같이 구성된다.

  • 포인터 : 프로세스의 현재 위치를 저장하는 포인터다.
  • 프로세스 상태 : 프로세스가 현재 어떤 상태에 있는지 나타낸다.
  • 프로그램 구분자(PID) : 운영체제 내에 있는 여러 프로세스를 구별하기 위한 구분자다.
  • 프로그램 카운터 : 다음에 실행할 명령어의 주소값을 저장한다.
  • 각종 레지스터 정보 : 누산기, 색인 레지스터, 스택 포인터와 같은 레지스터의 값이 저장된다.
  • 등등..

프로세스 상태

  • 일괄 작업 시스템(한 번에 하나의 작업만 처리) 에서 프로세스 상태는 생성, 실행, 완료 상태가 존재한다.

  • 시분할 시스템(컴퓨터 자원을 시간적으로 분할하여 CPU를 할당하여 각 작업을 처리) 에서는 CPU를 얻어 실행 중인 프로세스가 중간에 다른 프로세스에 CPU를 넘겨주는 일이 빈번하기 때문에 준비 상태가 추가적으로 존재한다.

  • 오늘날 운영체제의 효율성을 고려하여 대기 상태가 존재한다. 인터럽트 시스템에서 프로세스가 입출력을 요구하면 CPU가 아닌 입출력 관리자가 작업을 수행한다.

상태설명작업
생성 상태프로세스가 메모리에 올라와 실행 준비를 완료한 상태메모리 할당, PCB 생성
준비 상태생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태dispatch(PID) : 준비→실행
실행 상태준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
프로세스 사이의 문맥 교환이 일어난다.
timeout(PID) : 실행→준비
exit(PID) : 실행→완료
block(PID) : 실행→대기
대기 상태실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
입출력이 완료되면 준비 상태로 이동한다.
wakeup(PID) : 대기→준비
완료 상태실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 진입한다.메모리 삭제, PCB 삭제

이 다섯 가지 상태를 활성 상태라고 한다. 대부분의 프로세스는 활성 상태로 운영된다.

프로세스 연산

프로세스 구조

프로세스는 코드, 데이터, 스택 영역으로 구성된다.

  • 코드 영역 : 프로그램의 본문이 기술된 곳으로 텍스트 영역이라고도 한다.

  • 데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳이다. 읽기와 쓰기가 가능하다. (전역 변수, static 변수 등)

  • 스택 영역 : 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다. 사용자에게 보이지 않는다. (지역 변수, 파라미터 등)

프로세스 생성 (fork)

  • fork() 시스템 호출은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수다.

  • 실행중인 프로세스는 부모 프로세스, 새로 생긴 프로세스는 자식 프로세스로서, 부모-자식 관계가 된다.

  • 자식 프로세스의 PCB 내용 중 일부가 변경된다.

    • PID
    • 메모리 관련 정보
    • 부모 프로세스 구분자(PPID)와 자식 프로세스 구분자(CID)

프로세스 전환 (exec)

  • exec() 시스템 호출은 기존의 프로세스를 새로운 프로세스로 전환하는 함수다.

  • 이미 만들어진 프로세스의 구조를 재활용하는 것이다.

  • exec() 시스템 호출을 하면 기존 코드 영역, 데이터 영역과 스택 영역이 리셋된다.

  • PCB 내용 중 PID, PPID, CID를 제외한 나머지 내용은 새로운 것으로 바꾼다.

Reference

쉽게 배우는 운영체제

profile
https://dolmeng22.tistory.com 로 이전했습니다~

0개의 댓글