프로세스의 개념 / 구조 / 상태 변화

0andme·2021년 8월 12일
0

운영체제

목록 보기
5/6

◼ 프로세스의 개념

  • 실행 중인 프로그램
  • 비동기식 행위
  • 실행 중인 프로시저
  • 운영체제에 들어있는 프로세스 제어 블록
  • 프로세서에 할당하여 실행할 수 있는 개체 디스패치가 가능한 대상

위와 같이 프로세스를 다양하게 정의할 수 있는데 일반적인 정의는 실행 중인 프로그램이다. 프로그램이 실행 중이라는 것은 디스크에 저장되어 있던 프로그램을 메모리에 저장한 뒤 운영체제의 제어를 받을 수 있는 상태가 된 것을 의미한다.

프로세스가 실행중인 프로그램이 되기 위해서는 운영체제로부터 프로세서 점유시간,메모리,파일,입출력 장치를 할당받아야한다.

※ 프로그램은 정적인 데이터를 포함하는 개체이며 프로세스는 현재 어떤 자원을 사용하고 있는지에 대한 정보를 담고 있는 동적인 개체라고 생각하면 된다.


◼ 프로세스 메모리 구조

프로세스는 다음과 같이 스택, 힙, 데이터, 코드로 구성되어 있다.

◻ 스택

  • 데이터를 일시적으로 저장하는 영역이다.
  • 지역변수를 저장하는데 사용되고 해당 변수가 범위를 벗어나면 공간이 해제된다.
  • 호출한 함수의 반환 주소, 반환 값, 매개 변수 등에 사용된다.
  • 값들이 쌓일 때마다 힙이 있는 방향으로 점점 커지며 두 공간이 만나게 되면 메모리가 소진되었다는 뜻이다.

◻ 힙

  • 동적으로 메모리를 할당하는데 사용되는 영역이다.
  • 스택과 마찬가지로 동적 메모리 할당이 발생하면 스택이 있는 위쪽 방향으로 커진다.

◻ 데이터

  • 프로그램이 실행될 때 생성되고 종료되면 시스템에 반환된다.
  • 전역 변수나 정적 변수를 저장하거나 할당한다.
  • DATA 영역과 BSS영역으로 구분되어 있다.
    • DATA : 초기화 된 데이터
    • BSS : 초기화되지 않은 데이터

◻ 코드

  • 프로그램의 코드 자체를 저장하는 영역이다.
  • 기계어로 제어되는 메모리 영역이다.
  • 읽기 전용이기 때문에 프로그램이 쓰기를 시도하면 오류가 발생한다.

◼ 프로세스 종류

프로세스의 역할에 따라 커널 프로세스, 사용자 프로세스로 나눌 수 있다.

  • 커널 프로세스
    모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스이다. 프로세스 실행 순서를 제어하거나 다른 사용자 및 커널영역을 침범하지 않도록 감시하고 사용자 프로세스를 생성하는 기능을 한다.

  • 사용자 프로세스
    사용자 코드를 수행하는 프로세스이다.


◼ 프로세스 상태 변화

프로세스를 아래와 같이 세분화할 수 있다. 운영체제의 종류에 따라 프로세스의 상태를 다르게 표현하기도 하는데 중요한 것은 한 순간에 실행 중인 프로그램은 하나이라는 점이다.

  • 준비 -> 실행(dispatch)
    (스케쥴러에 의해 선택된) 준비큐 맨 앞에 있는 프로세스에게 프로세서를 할당하는 것을 디스패치라고 한다.
  • 실행 -> 준비(timeout)
    운영체제는 한 프로세스가 독점하는 것을 막기 위해 timer를 두어 특정 프로세스가 할당된 시간 만큼만 프로세서를 점유하게 한다. 해당 시간이 끝나면 timer는 인터럽트를 발생시켜 운영체제에게 프로세서 제어권을 부여한다. 그러면 시간을 전부 소진한 프로세스는 준비상태로 가고 준비큐 맨 앞의 프로세스가 실행상태가 된다.
  • 실행 -> 대기(block)
    프로세스를 실행하다가 입출력 명령이나 시간이 많이 필요한 이벤트가 발생하면 프로세서를 스스로 반납하고 대기 상태가 된다.
  • 대기 -> 준비(wakeup)
    대기 상태에서 입출력 작업이 끝나면 대기에서 준비 상태가 된다

profile
개발이 하고 싶어? 정말 하고 싶긴 한거야?

0개의 댓글