본문 바로가기

코딩베이스/운영체제

[운영체제] 프로세스

본 글의 내용은 그림으로 배우는 구조와 원리 - 운영체제 를 참고하여 작성되었습니다.

보통 우리가 사용하는 컴퓨터는 다중 프로그래밍 환경입니다. 여러 프로그램을 메모리에 적재하고 병행 실행할 수 있는 환경을 사용하고 있습니다. 병행 실행을 하게 되면, 필수불가결적으로 컴퓨터 자원을 공유할 수밖에 없고, 이를 운영체제에서 제어해야만 합니다.

프로세스란?

보통 프로세스를 한 마디로 이야기 하자면, 실행 중인 프로그램 또는 프로시저라고 말할 수 있습니다. 프로그램이 실행 중이라는 것은 디스크에 있던 프로그램을 메모리에 올린 후 운영체제에 의해 제어를 받고 있음을 의미합니다. 즉, 프로그램은 실행되는 동안에는 메모리 어느 한 구석을 차지하고 있고, 이를 프로세스라 합니다.

프로세스의 메모리 영역

하나의 프로그램은 기계어 덩어리로써, 일반적으로 스택, 힙, 데이터(BSS, initilized data), 코드로 메모리 영역을 구성하고 있습니다. 이 메모리 영역은 세그먼트(segment)라고도 부릅니다.

  • 스택 : 데이터를 일시적으로 저장하는 영역
    지역변수에 사용하며, 변수가 지역 스코프 밖으로 이동하면 공간을 해제합니 다. 할당될 때마다 낮은 주소 쪽으로 메모리 주소를 감소합니다.
  • 힙 : 런타임에서 자유롭게 메모리를 할당할 수 있는 영역
    시스템 콜(메모리 할당 함수들)을 사용했다가 해제하는 방법으로 활용하며, 할당될 때마다 높은 주소 쪽으로 메모리 주소를 증가합니다. 스택 포인터와 힙 포인터가 만나면 메모리 초과로 판단합니다.
  • 데이터 : 프로그램의 상수, 전역변수, 정적변수 등을 저장하는 영역
    프로그램의 시작과 끝까지 사용되는 변수들을 저장하는 공간
  • 코드(code segment/text) : 실행 가능한 명령어들을 저장하는 영역
    읽기 전용으로, 컴파일된 프로그램을 저장합니다.

프로세스의 상태 변화

프로세스의 상태는 크게 실행-비실행 상태로 구분되며, 비실행에서 실행으로 상태가 바뀔 때 디스패치라 하고, 실행에서 비실행으로 상태가 바뀔 때를 인터럽트라 합니다. 좀 더 구분해서 나타내면 다음과 같은 형태가 나옵니다.

생성 ⇢     준비    ⇢   (디스패치)   ⇢    실행    ⇢ 종료
           ⇡(이벤트 완료)⇠ 대기 ⇠(이벤트 발생)⇣

여기서 디스패치는 스케쥴러가 프로세스를 선택하여 디스패쳐를 통해 준비 상태인 프로세스를 할당하여 실행하도록 합니다. 실행에서 준비 상태로 갈 수도 있는데, 그 때는 타임아웃으로 인하여 갈 경우입니다.

인터럽트는 프로세스 외부에서 이벤트를 감지하면 발생하는데, 이 때 인터럽트 처리 루틴으로 제어권이 넘어갑니다. 인터럽트 처리 루틴에는 입출력 인터럽트클록 인터럽트가 있습니다.

※ 인터럽트는 보통 하드웨어에서 발생하는 이벤트지만, 소프트웨어쪽에서 발생하는 이벤트는 트랩이라고 합니다.

프로세스 제어 블록

프로세스 제어 블록(PCB=TCB)은 프로세스의 정보를 저장하는 블록입니다. 보통 보호된 메모리 (커널) 영역 안에 저장됩니다. 블록의 내용은 보통 다음과 같습니다.

  • 프로세스 ID(PID)
  • 프로세스 상태
  • 프로그램 카운터 : 다음에 실행할 명령어의 주소
  • 레지스터 : 누산기, 스택포인터, 인덱스 레지스터 등의 정보
  • 프로세스 (스케쥴링/계정) 정보 : 프로세스 우선순위, 스케쥴링 큐 포인터, 소유자 등
  • 입출력/메모리 정보 : 프로세스에 할당된 입출력장치 목록, 파일 목록 등

프로세스의 관리

프로세스의 구조는 계층 구조로 부모-자식 관계를 유지하여 생성됩니다. 프로세스가 생성되는 과정은 다음과 같습니다.

  1. OS/프로그램에서 프로세스를 생성
  2. OS가 새로운 프로세스 ID와 메모리 할당
  3. PCB를 만들어 초기화 후 프로세스 준비 큐에 삽입

프로세스는 위 순서로 생성되며, 종료할 때는 프로세스 삭제를 OS/프로그램에서 요청하면 삭제됩니다.

프로세스 컨텍스트 스위칭

스케쥴러가 인터럽트나 시스템 콜 등으로 실행중인 프로세스 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것을 말합니다. 두 프로세스의 PCB 상태 레지스터를 교체하는 작업입니다.

컨텍스트 스위칭이 발생하면, CPU는 블록되어 아무런 일을 하지 못하게 되며 시간 비용이 들어가는 오버 헤드가 발생합니다. 이 때문에, 프로세스 중단(일시정지)-재시작 상태를 통해 문제를 해결합니다. 여기서 프로세스 중단은 할당받은 상태에서 기다리는 상태입니다(프로세스 대기는 자원을 할당받기 위해 기다리는 상태입니다).

참고

geeksforgeeks

'코딩베이스 > 운영체제' 카테고리의 다른 글

[운영체제] 쓰레드  (0) 2019.07.06