[CS] 프로세스의 개요

정은아·2024년 1월 22일
post-thumbnail

프로세스 관리는 운영체제의 핵심 서비스이다. 운영체제가 관리하는 프로세스가 무엇인지 알아보고, 프로세스가 실행되는 과정들을 살펴보자!

프로세스 직접 확인하기

포그라운드 프로세스(forground process)

  • 사용자가 볼 수 있는 공간에서 실행되는 프로세스를 말한다.

백그라운드 프로세스(background process)

  • 사용자가 볼 수 없는 공간에서 실행되는 프로세스이다.
  • 유닉스 체계의 운영체제에서 백그라운드 프로세스를 데몬(demon)이라고 한다.
  • 윈도우 운영체제에서 백그라운드 프로세스를 서비스(service)라고 한다.

💡 윈도우 작업 관리자의 [서비스] 탭에서 서비스 목록을 확인할 수 있다.


프로세스 제어 블럭(PCB. process control block)

  • 운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분한다. 이를 위해 운영체제는 프로세스 제어 블록(PCB)를 이용한다.
  • 프로세스와 관련된 정보를 저장하는 자료 구조이다.
  • 프로세스를 식별하기 위한 정보들이 포함된다.

타이머 인터럽트는 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트이다. 타임아웃 인터럽트라고도 부른다.

프로세스 ID(PID. process ID)

  • 프로세스를 식별하기 위해 부여하는 고유한 번호를 말한다.

레지스터 값

  • 자신의 실행상태가 돌아왔을 때 이전에 사용했던 레지스터 값을 복원하는데 필요한 값이 담긴다.

프로세스 상태

  • 현재 프로세스의 상태정보가 PCB에 저장된다.

CPU 스케줄링 정보

  • 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보를 PCB에 기록한다.

메모리 관리 정보

  • 프로세스마다 메모리에 저장된 위치가 다르므로 PCB에는 정보가 있어야한다. PCB에는 베이스 레지스터, 한게 레지스터 값과 같은 정보들이 담긴다.
  • 페이지 테이블 정보도 PCB에 담긴다.

사용한 파일과 입출력장치 목록

  • 프로세스가 실행 과정에서 특정 입출력장치나 파일을 사용할시 PCB에 기록된다.

문맥 교환

  • 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것을 말한다.

  • 문맥이란? 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보.
    문맥 교환이 매우 빠르게 이루어져 사람의 눈에는 여러 프로세스들이 동시에 실행되는 것 처럼 보임.

💡 문맥 교환이 너무 자주 일어나면 오버헤드가 발생할 수 있기 때문에 문맥 교환이 자주 일어난다고 해서 반드시 좋은 것은 아니다.

  • 오버헤드(overhead)란? 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 혹은 메모리.

프로세스의 메모리 영역

코드 영역(code segment)

  • 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다.
  • 쓰기 금지공간. Read-only 공간이라고 한다.
  • 텍스트 영역(text segment)라고도 부른다.

데이터 영역(data segment)

  • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간을 뜻한다.
  • 전역변수 등이 저장된다.

힙 영역(heap segment)

  • 프로그래머가 직접 할당할 수 있는 저장 공간이다.
  • 직접 할당할 시에 메모리 누수를 주의해야한다.
    • 메모리 누수란? 할당한 공간이 메모리 내에 남아 메모리 낭비를 초래하는 것.

스택 영역(stack segment)

  • 데이터를 일시적으로 저장하는 공간.
  • 지역 변수 등이 저장된다.
  • 일시적으로 저장될 데이터는 스택 영역에 PUSH로 저장한다.
  • 필요하지 않은 데이터는 POP으로 삭제.

💡 코드 영역과 데이터 영역은 크기가 고정된 영역 = 정적 할당 영역
💡 힙 영역과 스택 영역은 프로세스 실행 과정에서 크기가 변할 수 있는 영역
     = 동적 할당 영역

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글