프로세스 구조, 컨텍스트 스위칭

꾸준히·2023년 3월 16일
0

📌 프로세스 구조

현재 실행되고 있는 프로그램은 프로세스라는 이름으로 불리고, 관리된다. 프로세스는 어떤 구조로 이루어져 있을까?

📜 프로세스 구성

프로세스는 크게 아래와 같은 4가지 영역으로 구성된다.

code

  • 코드 ( 컴파일된 Binary 코드)

data

  • 변수 (초기화된 전역 변수)

stack

  • 임시데이터 (파라메터, 리턴 값, 로컬 변수 등)
    • 스택 자료구조와 마찬가지로, LIFO로 동작한다.
    • 최근 호출한 순서대로 값을 리턴한다.

heap

  • 코드에서 동적으로 만들어지는 데이터 (객체 등)
    • 동적 메모리 공간 -> 공간이 유동적
    • 객체를 위한 공간 - 객체가 생성되면 heap에 저장된다.
  • JVM의 GC(Garbage Collection) 대상이다.
    - 생성된 객체는 heap 메모리에 저장되기 때문에, 사용하지 않으면 삭제해 줘야한다.
    - 해당 객체를 가르키는 값이 없으면 GC 프로세스에 의해 지워진다.

📜 프로세스의 동작에 관여하는 레지스터

  • PC (Program Counter)
    • 다음 실행할 코드의 주소를 저장함
  • SP (Stack Pointer)
    • 스택의 최상단 데이터의 주소

📌 컨텍스트 스위칭

시분할 시스템이나 멀티 태스킹 같은 스케쥴 기법은 CPU에서 여러 작업을 동시에 수행하는데 이 때 프로세스를 바꿔가며 실행하는 것을 말한다.

📜 동작 방식

  • 다음 작업에 관여하는 CPU의 PC와 SP의 값을 바꿔주는 방식으로 구현 가능하다.

📜 PCB (Process Control Block)

  • 프로세스들의 정보 (PID, PC, SP 등)를 저장하고 있는 공간이다.
  • 이 곳에 PC와 SP 정보를 담고 있어서, 컨텍스트 스위칭 시 사용된다.

📌 프로세스간 통신

  • 기본적으로 프로세스는 다른 프로세스와 통신할 수 없다.
  • 하지만 멀티 프로그래밍 등의 이유로 다른 프로세스끼리 정보를 교환할 필요성이 생겼다.

📜 IPC

간단하게는 파일 형태로 정보를 저장해 둘 수 있다. 프로세스간 direct로 정보교환은 되지 않지만, 파일로 저장해 두면 접근이 가능하기 때문이다.

이처럼, 직접적인 데이터의 교환이 아닌, 공유지를 두고 해당 공간에 정보를 저장하는 식으로 정보를 교환하고 있다. 주로 커널 공간을 사용한다.

Kernal Space에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식이다.

  1. file
  2. Message Queue
  3. Shared Memory
  4. Pipe
  5. Signal
  6. Semaphore
  7. Socket

위와 같은 방식을 이용하여 다양하게 구현할 수 있다.

📌 정리

0개의 댓글