3-1 프로세스와 스레드

1. 프로세스 개요

1-1. 프로세스 개념

  • 프로세스는 '실행 중인 프로그램'이다.

  • 여기서 실행중인 프로그램이란 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태를 말한다. 다시말해, 해당 프로세스가 사용하고 있는 메모리 영역이 존재함을 의미한다.

  • 프로세스는 메모리에 아래와 같은 주소 공간을 갖는 능동적인 개체다.

  • 프로세스 주소 공간의 각 영역

    • 실행스택(Stack) : 호출된 프로시저(함수)의 복귀 주소와 지역 변수처럼 일시적인 데이터를 저장하는 영역
    • 실행 힙(Heap) : 프로그램 실행 중 시스템 호출을 통해 사용되다가 해지되는 등 자유자재로 사용할 수 있다.
    • 데이터(정적 변수) : 프로세스 실행 중에 동적으로 할당받는 영역으로 전역 또는 정적 변수를 저장한다.
    • 텍스트(코드) : 프로세서가 실행하는 코드를 저장한다.

1-2. 프로세스의 종류

  • 3가지로 구분이 된다.
    • 운영체제 프로세스
    • 사용자 프로세스
    • 병행 프로세스 : 프로세스 여러 개가 동시에 실행되면 병행프로세스라고 부른다. 독립프로세스와 협동 프로세스로 구분된다.

1-3. 프로세스 상태

  • 프로세스는 실행과 비실행으로 나눌 수 있다.

프로세스 상태 구분

  • 실행상태 프로세스는 실행, 대기, 준비로 세분화할 수 있다.

프로세스 상태

-    실행 : 명령어가 실행되는 상태, 즉, 프로세스가 프로세서를 점유한 상태
-    대기 또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나기를 기다리는 상태
-    준비 : 프로세스가 프로세서를 할당받으려고 기다리는 상태
  • 여기서 중효한 것은 대부분의 프로세스는 준비나 대기(보류) 상태고 어느 한 순간에 한 프로세스만 실행 상태가 된다는 것이다.

1-4. 프로세스의 상태변화

  • 운영체제는 작업 스케줄러, 프로세스 스케줄러 같은 프로세서 스케줄러를 이용해 프로세스 상태 변화를 관리한다.

  • 실행 프로세스가 자발적으로 프로세서를 반환하기 전에 할당된 시간이 경과하면 준비 상태가 된다.
  • 실행프로세스가 프로세서에서 실행을 하다가 입출력 명령이 발생하면 대기(보류) 상태가 된다.
  • 대기 프로세스는 보류 이유가 제거되면 준비상태가 되고, 준비 프로세스는 디스패처(Dispatcher)가 프로세서를 할당하면 다시 실행 상태가 된다.

  • 실행 -> 준비
    운영체제는 특정 프로세서를 계속 독점하는 것을 방지하기 위해 인터럽트 클록(Interrupt Clock) 을 두어 지정 시간 동안만 프로세서를 점유하게 한다.
    즉, 특정 프로세스가 일정 시간이 지나도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제가 프로세서 제어권을 갖게 한다.

1-5. 프로세스 제어 블록(PCB, Process Control Block)

  • 프로세스를 관리하기 위해 유지되는 데이터 블록

  • 프로그램 카운터 : 프로세스 실행을 위한 다음 명령의 주소를 표시
  • 레지스터 저장 영역 : 인터럽트가 발생하면 프로그램 카운터와 함께 저장되어 다시 실행될 때 원상 복귀할 수 있게 한다.

1-6. 프로세스 교환

  • 실행 중인 프로세스가 인터럽트되면 운영체제는 다른 프로세스를 실행상태로 바꾸고 제어를 넘겨준다.
  • 이때 프로세서에 있는 레지스터의 내용은 나중에 프로세스가 올바르게 사용될수 있도록 저장해야 한다.

프로세스의 교환은 인터럽트와 트랩, 시스템 호출로 나타낸다.

2. 프로세스 관리

문맥교환

  • 인터럽트는 현재 실행되는 프로세스와 별도로 외부에서 발생되는 여러 종류의 이벤트(예를들면 입출력 동작의 종료)에 의해 발생한다.

  • 트랩은 소프트웨어가 발생시키는 메세지이지만 인터럽트는 하드웨어가 발생시키는 메세지입니다.

  • 트랩은 부적절한 파일 접근이나 현재 실행중인 프로세스에 의해 발생되는 오류나 예외 상황 때문에 발생한다.

  • 인터럽트의에는 대표적으로 입출력 인터럽트, 클록 인터럽트가 있다.

  • 입출력 인터럽트 : 입출력 동작이 발생한 사실을 확인 후 이벤트를 기다리는 프로세스를 준비상태로 바꾸고 실행할 프로세스를 결정한다.

  • 클록 인터럽트 : 현지 실행 중인 프로세스의 할당 시간을 조사하여 실행 중인 프로세스를 준비상태로 바꾸고 다른 프로세스를 디스패치하여 실행 상태로 바꾼다.

  • 프로세스를 다른 프로세스로 교환하려면 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재해야 하는데, 이런 일련의 과정을 문맥교환(Context Switching) 이라 한다.

  • 예를 들어, 프로세스가 '준비->실행', '실행->준비', '실행->대기' 상태로 변할 때 발생한다.

  • 현대의 운영체제는 스레드(Thread)를 이용하여 문맥교환을 효율적으로 처리한다.

'Computer > OS' 카테고리의 다른 글

1. 컴퓨터 시스템 구성요소  (0) 2020.07.28
4. 병행 프로세스와 상호배제  (0) 2020.02.19
3-2 프로세스와 쓰레드  (0) 2019.06.10
2-1 운영체제의 역할과 목적  (0) 2019.06.09
2. 컴퓨터 시스템의 동작  (0) 2019.06.02

댓글

Designed by JB FACTORY