프로세스 관리 - 1

초보개발·2022년 2월 7일
0

OS

목록 보기
20/38

프로세스의 개념

프로세스는 실행중인 프로그램(Program in execution)을 말한다.

프로세스 구조

  • text(code): 코드
  • data: 변수/초기화된 데이터(bss, data)
  • stack: 함수 호출, 로컬 변수 등 임시 데이터
  • heap: 코드에서 동적으로 만들어지는 데이터

디스크에 있던 실행파일을 메모리에 적재시켜 실행하면 프로그램은 프로세스가 되어 CPU를 할당받아 코드 연산을 수행하거나 입출력 작업을 위해 CPU를 반환해 수행하고 정해진 일을 끝내고나면 종료되어 사라진다.
프로세스의 문맥(context)는 프로세스가 현재 어떤 상태에서 수행되는지 정확히 알기위해서 필요한 정보를 의미한다. 시분할 시스템에서 프로세스는 CPU를 다시 획득하여 명령 수행을 재개하게 될 때, 이전의 CPU 보유 시기에 어느 부분까지 수행했는지 시점의 정확한 상태를 재현하기 위해 프로세스의 문맥이 필요하다.

  • 프로세스 문맥이 포함하고 있는 정보: 주소 공간과 레지스터에 어떤 값을 갖고 있었는지 시스템 콜을 통해 커널에서 수행한 일의 상태, 그 프로세스에 관해 커널이 관리하고 있는 각종 정보 등을 포함한다.

프로세스 문맥의 분류: 하드웨어 문맥, 프로세스의 주소 공간, 커널에서의 문맥

  • 하드웨어 문맥: CPU의 수행 상태를 나타내는 것, PC 값과 각종 레지스터에 저장하고 있는 값

또한 PCB와 커널 스택도 문맥을 구성하는 중요한 요소이다.

프로세스의 상태


프로세스의 상태: 실행(running), 준비(ready), 봉쇄(blocked, wait, sleep)

  • 실행 상태: 프로세스가 CPU를 할당받아 기계어 명령을 실행하고 있는 상태
  • 준비 상태: 프로세스가 CPU를 할당받지 못한 상태
  • 봉쇄 상태: CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스 상태
    • 프로세스가 요청한 입출력 작업이 진행중인 경우

문맥 교환(Context Switch)
실행시킬 프로세스를 변경하기 위해 원래 수행중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정

  • 타이머 인터럽트가 발생하거나 실행 상태에 있던 프로세스가 입출력 요청 등으로 봉쇄 상태로 바뀌는 경우
    이때 준비 상태에 있는 프로세스 중에서 CPU를 할당받을 프로세스를 고르고 CPU의 제어권을 넘겨받는 과정을 디스패치(Dispatch)라고 한다.

(예시) 디스크 입출력 작업이 필요한 프로세스

디스크 입출력을 요청한 프로세스의 상태 변화를 알아보도록 하자.
디스크 입출력 명령이 필요한 프로세스는 디스크 입출력이 진행되는 동안 CPU를 반환하고 완료될 때까지 기다리며 봉쇄 상태로 바뀌게 된다. 그 동안 준비 상태의 프로세스 중 CPU 스케줄러가 적절한 프로세스 하나를 골라 CPU를 할당하여 실행 상태로 변경된다.
디스크 입출력을 요청한 프로세스는 레디 큐에 저장되어 있다가 자기 순번이 와서 디스크 컨트롤러부터 서비스를 받고 나면 CPU에게 인터럽트를 발생시켜 입출력이 완료되었다는 사실을 알린다. CPU는 다른 프로세스를 처리하다가 인터럽트가 발생한 것을 인지하고 그에 대한 적절한 루틴을 수행한다. 이 루틴이 진행될 때 CPU에서 수행되던 프로세스의 상태는 사용자 모드 실행 상태에서 커널 모드 실행 상태로 바뀌게 된다.

특별한 경우, 인터럽트 당한 프로세스에게 CPU를 다시 돌려주지 않고 입출력이 완료된 프로세스의 우선순위가 더 높을 경우 문맥교환을 통해 CPU 제어권을 넘길 수 있다.

PCB


프로세스 제어 블록: 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조

PCB에 저장되는 정보

  • PID
  • 프로세스 상태: CPU를 할당해도 되는지 결정하기 위해 사용
  • 프로그램 카운터의 값: 다음에 수행할 명령어의 위치
  • CPU 레지스터 값: 연산을 위해 현 시점에 레지스터에 어떤 값을 저장하고 있는지 나타냄
  • CPU 스케줄링 정보
  • 메모리 관리 정보: 메모리 할당을 위한 정보
  • 자원 사용 정보
  • 입출력 상태 정보

0개의 댓글