ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Operating System] 운영체제 : 프로세스 개요
    Operating System 2024. 5. 18. 16:02

    프로세스와 PCB, 프로세스의 메모리 영역에 대해 정리하였습니다.


    참조 : 인프런 '개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제'


    < 프로세스란 >

    실행 중인 프로그램을 프로세스라고 합니다.

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

     

     

    백그라운드 프로세스는 다음 두 가지 프로세스로 나눌 수 있습니다.

    • 사용자와 직접 상호작용이 가능한 백그라운드 프로세스
    • 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 = 데몬(daemon), 서비스(service)

     

    프로세스 확인하기 : 작업관리자(윈도우), ps -ef 명령어(mac OS, linux)

     

     


    < 프로세스 제어 블록 PCB (Process Control Block) >

    프로세스들은 돌아가며 한정된 시간 만큼만 CPU를 이용합니다.
    - 자신의 차례에 정해진 시간만큼 CPU 이용
    - 타이머 인터럽트가 발생하면 차례 양보

     

    +. 타이머 인터럽트는 클럭 신호를 발생시키는 장치에 의해서 주기적으로 발생하는 하드웨어 인터럽트의 한 종류

     

     


    [ PCB (Process Control block) ]

    : 이를 위해 사용하는 자료구조가 프로세스 제어 블록 (PCB)입니다.

    • 프로세스 관련 정보를 저장하는 자료 구조입니다.(like 상품 태그)
    • 프로세스 생성 시 커널 영역에 생성되고 종료 시 폐기됩니다.
      ( PCB는 실행 완료 시 즉, 대기상태로 될 때 폐기되는 게 아니라, 프로세스 종료 시 폐기됩니다. )

     


    PCB에 담기는 대표적인 정보

    • 프로세스 ID ( = PID) : 특정 프로세스를 식별하기 위해 부여하는 고유한 번호 (like 학교 학번, 회사 사번)

    • 레지스터 값 : 프로그램 카운터, 스택 포인터 등을 저장
      (프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 값들을 모두 복원하여 실행을 재개합니다.)

    • 프로세스 상태 : 현재 CPU 사용을 위해 대기중인 상태인지, CPU를 이용 중인 상태인지 등을 저장

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

    • 메모리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보

    • 사용한 파일과 입출력장치 정보 : 할당된 입출력장치, 사용 증인(열린) 파일 정보

     

    PCB 이미지

     

     


    < 문맥 교환 (context switch) >

    문맥 교환 (context switching)은 프로세스 제어 블록(PCB)을 이용하여 다음 프로세스의 상태를 복원하는 과정
    (여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되기 때문)


    실행 문맥을 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있습니다.

     

     

    한 프로세스(A)에서 다른 프로세스(B)로 실행 순서가 넘어가면,

    1. 프로세스 A는 지금까지의 중간 정보를 백업하고,
    2. 프로세스 B의 백업한 중간 정보를 토대로 복원하여 실행을 재개합니다.

    +. 여기서 중간 정보가 곧 문맥 (context) 이고 이 문맥이 곧 PCB 입니다.

     

    문맥 교환 과정

     

     


    < 프로세스의 메모리 영역 >

    프로세스의 커널 영역에는 PCB가 저장되고, 사용자 영역에는 크게 코드 영역, 데이터 영역, 영역, 스택 영역이 저장됩니다.

    코드 영역과 데이터 영역은 크기가 고정된 정적할당 영역, 힙 영역과 스택 영역은 크기가 유동적인 동적할당 영역입니다.

     

     

    코드 영역 ( = 텍스트 영역)  

    • 실행할 수 있는 코드, 기계어로 이루어진 명령어를 저장합니다.
    • 데이터가 아닌 CPU가 실행할 명령어로 담기기에 쓰기가 금지된 영역입니다. (read-only)

     

    데이터 영역

    • 프로그램이 실행되는 동안 유지할 데이터를 저장합니다. (ex. 전역 변수)

     

    힙 영역

    • 프로그래머가 직접 할당할 수 있는 저장공간입니다.

     

    스택 영역

    • 일시적인 데이터가 저장되는 공간 (ex. 매개 변수, 지역 변수)

     


    힙 영역과 스택 영역의 크기는 가변적입니다. 그래서 사용 메모리가 겹지지 않게 하기 위해 일반적으로

    - 힙 영역은 낮은 주소 → 높은 주소로 할당하고,

    - 스택 영역은 높은 주소 → 낮은 주소로 할당합니다.

     

    힙 / 스택 주소 할당

     

     

    프로세스의 커널 영역 정보(예: PCB 등)와 사용자 영역 정보(코드, 데이터, 힙, 스택 등)은 메모리에 상주합니다.
    대기 중인 프로세스의 사용자 영역은 상황에 따라 메모리에 상주할 수도 있고 디스크로 스왑 아웃될 수도 있지만, 일반적으로 메모리에 저장되어 있다고 보면 될 것 같습니다.

     

     

     

    댓글

Designed by Tistory.