[운영체제] 프로세스

최솔·2023년 11월 13일
0

운영체제

목록 보기
3/6

프로세스 개요


프로세스란 ?

실행 중인 프로그램을 프로세스(process) 라고 한다.

컴퓨터가 부팅되는 순간부터 수많은 프로세스들이 실행되는데,
유닉스 체계의 운영체제에서는 ps 명령어를 통해 실행 중인 프로세스를 확인할 수 있다.

(ps 명령어는 현재 터미널에서 실행 중인 프로세스만 확인할 수 있으며,
시스템 내 전체 프로세스를 확인하려면 -ef 와 같은 옵션을 설정해야 한다.)

아래는 ps -ef 명령어의 출력 예시이다.

여기엔 직접 실행한 프로세스 외에도 운영체제에 의해 실행되는 다양한 프로세스가 존재한다.

  • 포그라운드 프로세스 (foreground process)
    사용자가 볼 수 있는 공간에서 실행되는 프로세스

  • 백그라운드 프로세스 (background process)
    보이지 않는 공간에서 실행되는 프로세스
    그 중에서도 사용자와 상호작용하지 않고 정해진 작업을 수행하는 것을 데몬(deamon) 이라 한다.

💡 프로그램과 프로세스의 차이

프로세스 제어 블록 (PCB)


여러 개의 프로세스가 한정된 시간동안 CPU를 돌아가며 사용하기 위해 타이머 인터럽트가 사용되는데,
타이머 인터럽트가 발생하면 프로세스가 자신의 차례를 양보하고 다음 차례를 기다린다.
그리고 이러한 작업을 하기 위해 운영체제는 프로세스와 관련된 정보를 저장하는 자료구조인
프로세스 제어 블록 (PCB - process control block) 을 이용한다.

PCB에는 각각의 프로세스를 식별하기 위해 필요한 정보가 포함되어 있으며, 커널 영역에 존재한다.
PCB에 담기는 정보는 운영체제마다 상이하지만 대표적으로 아래와 같은 것들이 있다.

  • 프로세스 ID (PID)
    프로세스를 식별하기 위해 부여하는 고유한 번호
    같은 프로그램도 두번 실행하면 PID가 다른 두 개의 프로세스 생성

  • 레지스터 값
    자신의 실행 차례가 돌아오면 복원할 레지스터 값들을 백업한 것

  • 프로세스 상태
    프로세스가 CPU를 이용하고 있는지, 기다리고 있는지, 입출력장치를 사용하려 하는지 등의 정보

  • CPU 스케줄링 정보
    프로세스가 언제, 어떠한 순서로 CPU를 할당받을지에 대한 정보

  • 메모리 관리 정보
    프로세스가 어느 주소에 저장되어 있는지에 대한 정보
    베이스 레지스터 한계 레지스터 값과 페이지 테이블 정보

  • 사용한 파일과 입출력장치 목록
    어떤 입출력장치가 이 프로세스에 할당되었는지, 어떤 파일을 열었는지 등의 정보

문맥 교환 (Context Switch)


Context ?
기존에 실행되던 프로세스에서 다른 프로세스에게 CPU 자원을 양보하는 상황에서
이전 프로세스가 사용하던 레지스터 값, 메모리 정보 등 중간 정보를 백업해야 하는데
이처럼 프로세스 수행을 재개하기 위해 기억해야 할 중간 정보문맥(context) 이라고 한다.

문맥은 CPU 사용 시간이 다 되거나 인터럽트가 발생하면 해당 프로세스의 PCB에 백업되며,
프로세스 수행이 재개될 때 PCB에 기록되어 있는 context를 복구한다.

Context Switch ?
이전 프로세스의 context를 해당 프로세스의 PCB에 백업하고
다음 프로세스의 context를 해당 프로세스의 PCB로부터 복구하여
새로운 프로세스를 실행하는 과정을 문맥 교환(context switch) 이라고 한다.


프로세스의 메모리 구조


하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.

  • 정적 할당 영역
    프로그램이 실행되는 동안 크기가 변하지 않는 영역

    • 코드 영역 (code segment)
      - 텍스트 영역(text segment) 이라고도 불린다.
      - 기계어로 이루어진 명령어가 저장되는 읽기 전용 공간
      ex) 실행할 프로그램의 코드

    • 데이터 영역 (data segment)
      - 전역 변수와 같이 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간
      ex) 전역 변수, 정적 변수

  • 동적 할당 영역
    프로그램이 실행되는 동안 크기가 변할 수 있는 영역

    • 힙 영역 (heap segment)
      - 프로그래머가 직접 공간을 할당, 반환하는 메모리 공간
      - 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 반환해야함
      - 반환하지 않는다면 메모리 낭비가 생기는데 이를 메모리 누수(memory leck)이라고 함
      - 일반적으로 메모리의 낮은 주소에서 높은 주소로 데이터가 쌓임
      ex) 사용자의 동적 할당

    • 스택 영역 (stack segment)
      - 데이터를 일시적으로 저장하는 공간
      - 함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수 등이 저장됨
      - PUSH로 데이터를 저장하고 POP으로 데이터를 인출함
      - 일반적으로 메모리의 높은 주소에서 낮은 주소로 할당됨
      ex) 지역 변수, 매개 변수

오버 플로우
한정된 메모리 공간이 부족하여 메모리 안에 있는 데이터가 넘쳐 흐르는 현상으로,

힙이 스택을 침범하는 경우를 힙 오버 플로우 라 하고,
스택이 힙을 침범하는 경우를 스택 오버 플로우 라고 한다.


0개의 댓글