[프로세스 구조와 프로세스 통신]

2023. 1. 11. 20:22·CS/OS

프로세스와 스레드란?

프로세스 : 메모리에 올라간 프로그램을 말한다. 즉, 실행 중인 프로그램이다. 운영체제의 CPU 스케쥴러에 따라 CPU가 프로세스를 실행한다.

스레드 : 프로세스 내 작업의 흐름을 말한다.

프로세스의 상태

프로세스는 여러 상태 값을 가진다.

생성 상태 (create)

프로세스가 생성된 상태를 의미한다. fork() or exec() 함수를 통해 생성된다. 이때, PCB가 할당된다.

  • fork: 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수
  • exec: 새롭게 프로세스를 생성하는 함수

대기 상태 (ready)

메모리 공간이 충분하지 않아 CPU 스케쥴러로부터 CPU 소유권이 넘어오기를 기다리는 상태를 의미한다. 메모리 공간이 충분하면 메모리를 할당받고 실행상태가 된다.

대기 중단 상태 (ready suspended)

메모리 부족으로 일시 중단된 상태이다.


실행 상태

CPU 소유권과 메모리를 할당받아 명령어가 수행 중인 상태를 의미한다. 

 

중단 상태

어떤 이벤트로 발생하여 프로세스가 차단된 상태를 의미한다. 주로 I/O 디바이스 인터럽트로 인해 이런 현상이 발생한다. 

 

일시 중단 상태

중지 상태에서 프로세스를 실행하려고 했지만 메모리 부족으로 일시 중단된 상태를 의미한다.

 

종료 상태

CPU 소유권과 메모리를 모두 놓고 가는 것을 말한다.

 

프로세스의 메모리 구조

운영체제는 프로세스에 적절한 메모리를 할당한다. 메모리 구조는 다음과 같다.

메모리는 스택, 힙, 데이터 영역(BSS segment, Data Segment), 코드 영역 4가지로 나뉜다.

스택은 위에서 부터 주소가 할당되고 힙은 아래서부터 주소가 할당된다.

스택

지역변수, 매개변수, 함수를 저장하는 공간이다. 컴파일 시에 크가 결정된다. 스택 영역은 함수가 재귀적으로 호출되면서 크기가 늘어날 수 있는데, 스택과 힙의 영역이 겹치지 않도록 사이의 공간을 비워 놓는다.

힙

동적 할당될 때 사용하는 공간이다. 벡터와 같은 동적 배열이 힙에 저장된다. 런타임 시에 크기가 결정되는 특징을 가진다.

 

데이터 영역

전역 변수, 정적 변수를 저장하는 공간이다. BSS 영역과 Data 영역으로 나뉜다.

  • BSS segment: 초기화되지 않은 전역 변수가 저장된다. 이때, 0으로 초기화하여 저장된다.
  • Data segment: 초기화된 전역 변수가 저장된다. 

코드 영역

프로그램에 내장된 소스코드를 저장하는 공간이다. 이 영역은 수정 불가능한 기계어로 저장되어 있다. 

 

PCB (Process Control Block)

운영체제에서 프로세스의 메타데이터를 저장한 데이터를 말한다. 프로세스가 생성되면 PCB가 할당된다. 프로세스의 중요한 정보를 담고 있기 때문에, 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다.

PCB 저장 정보

  • 프로세스 스케쥴링 상태 : '대기', '준비' 등 프로세스의 상태
  • 프로세스 ID: 프로세스의 고유 번호
  • 프로세스 권한: 컴퓨터 자원 or I/O 디바이스에 대한 권한 정보
  • 프로그램 카운터: 프로세스에서 실행해야할 다음 명령어의 주소를 가리키는 포인터. 
  • CPU 레지스터: 프로세스를 실행하기 위해 필요한 레지스터 정보 
  • CPU 스케쥴링 정보: CPU 스케쥴러에 의해 중단된 시간 등에 대한 정보
  • 계정 정보: CPU 사용시간, CPU 사용량, 실행한 유저의 정보 
  • I/O 상태 정보: 프로세스에 할당된 I/O 디바이스 목록

컨텍스트 스위칭 (Context Switching) 

컨텍스트 스위칭은 PCB를 교환하는 과정을 말한다. 즉, 프로세스를 교체하는 과정을 말한다.

한 시점에 실행할 수 있는 프로세스는 하나이다. 그런데, 우리는 일상에서 컴퓨터가 여러 개의 프로그램을 실행하는 것을 흔히 볼 수 있다. 어떻게 그럴 수 있는 것일까? 


아주 빠르게 컨텍스트 스위칭을 해서 마치 여러 개의 프로세스가 동시에 구동되는 것처럼 보이는 것이다. 참고로 현대 컴퓨터는 멀티코어 CPU를 가지기 때문에 무조건 한 시점에 한 개의 프로그램을 돌릴 수 있다는 것은 틀린 설명이다. 하지만 컨텍스트 스위칭의 이해를 위해서 보통 싱글코어를 기준으로 설명한다.

 

-- 동작 과정

 

위의 컨텍스트 스위칭 동작 과정을 설명하면 다음과 같다.

  1. 실행중인 프로세스의 실행을 멈추고 PCB를 저장한다.
  2. 실행하려는 프로세스의 PCB를 로드하고 실행한다.

컨텍스트 스위칭이 일어날 때는 위의 그림처럼 유휴시간(idle time)이 발생한다. 또한, 캐시미시스라는 비용이 더 있다.

 *캐시미스: 컨텍스트 스위칭이 일어날 때 프로세스의 메모리 주소를 그대로 가지고 있으면 잘못된 주소 변환이 발생한다. 이를 해결하기 위해 캐시클리어 과정을 겪게 되는데, 이때 캐시미스가 발생한다.

 

스레드에서의 컨텍스트 스위칭

컨텍스트 스위칭은 스레드에서도 일어난다. 스레드는 스택 영역을 제외하고 모든 메모리를 공유하기 때문에 비용이 더 적고 시간도 적게 걸린다.

 

멀티 프로세싱

멀티 프로세싱은 여러 개의 프로세스를 통해 동시에 두 가지 이상의 일을 수행하는 것을 말합니다. 장점은 다음과 같습니다.

  • 일을 병렬로 처리할 수 있다.
  • 특정 프로세스, 메모리에 문제가 발생하더라도 다른 프로세스를 이용해서 처리할 수 있으므로 신뢰성이 높다.

웹 브라우저의 멀티 프로세스 구조

웹 브라우저는 멀티 프로세스 구조를 가지고 있으며 다음과 같습니다.

  • 브라우저 프로세스: 네트워크 요청이나 파일 접근 요청 권한을 담당
  • 렌더러 프로세스: 웹 사이트가 보이는 모든 부분을 제어
  • 플러그인 프로세스: 웹 사이트에서 사용되는 프러그인 제어
  • GPU 프로세스: GPU를 이용해 화면을 그리는 부분 제어

IPC (Inter Process Communication)

프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 것을 의미한다. 멀티프로세스는 IPC가 가능하다. 클라이언트가 서버에 요청하고 서버가 요청에 응하는 것도 IPC의 예이다. 종류는 다음과 같다.

  • 공유 메모리
  • 소켓
  • 파일
  • 익명 파이프 / 명명 파이프
  • 메세지 큐

공유 메모리

여러 프로세스가 동일한 메모리 블록에 대해 접근 권한이 부여된다. 각 프로세스는 다른 프로세스의 메모리의 접근할 수 없지만 공유 메모리를 통해 하나의 메모리를 공유할 수 있다. 특징은 다음과 같습니다.

  • 매개체를 통해 데이터를 주고받는 것이 아니기 때문에 불필요한 데이터 복사 헤드가 발생하지 않으며 IPC 중 가장 빠르다. 
  • 같은 메모리를 여러 프로세스가 공유하기 때문에 동기화 작업이 필요하다.

파일

디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터를 말한다. 이를 기반으로 프로세스 간 통신한다. 

소켓
네트워크 인터페이스를 통해 전달되는 데이터를 말한다. 동일 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 전달할 수 있다. TCP와 UDP가 있다.

 

익명 파이프

프로세스간 FIFO(First In First Out) 방식인 파이프를 두어 데이터를 주고받는 것을 말한다. 단방향 읽기/쓰기 작업을 할 때 주로 쓰인다. 부모 자식 관계 프로세스만 사용할 수 있으며 다른 네트워크에서는 사용이 불가하다.
한 쪽 프로세스에서는 읽기만 하고 다른 쪽 프로세스에서는 쓰기만 하는 단순한 데이터 흐름이라면 파이프를 쓰는 것이 현명한 선택일 것이다. 

 

명명 파이프

파이프 서버와 하나 이상의 클라이언트 파이프 클라이언트 간의 통신을 위해 명명된 단방향 또는 이중 파이프를 말한다. 동일한 컴퓨터의 다른 프로세스나 다른 네트워크상의 컴퓨터와 통신할 수 있다.

앞의 그림처럼 서버용 파이프와 클라이언트용 파이프로 구분되어 작동한다. 이때, 하나의 인스턴스나 여러 개의 인스턴스를 기반으로 통신할 수 있다.

 

메세지 큐

메세지 큐 데이터 구조 형태로 관리하는 것을 의미한다. 이는 커널의 전역변수 형태 등 커널에서 전역적으로 관리된다. 특징은 다음과 같다. 다른 IPC 방식에 비해 사용방법이 매우 직관적이고 간단하다. 공유 메모리를 통해 IPC를 구현할 때 쓰기 읽기의 빈도가 높아지면 동기화 때문에 기능을 구현하는 것이 어려워지는데, 이때 대안으로 메세지 큐가 종종 사용된다.

 

더보기

| References

CS 면접을 위한 전공지식 노트

'CS > OS' 카테고리의 다른 글

[CPU 스케줄링 알고리즘]  (0) 2023.01.18
[메모리 관리]  (0) 2023.01.10
[운영체제 역할과 구조]  (1) 2023.01.08
'CS/OS' 카테고리의 다른 글
  • [CPU 스케줄링 알고리즘]
  • [메모리 관리]
  • [운영체제 역할과 구조]
저스티
저스티
  • 저스티
    justy
    저스티
  • 전체
    오늘
    어제
    • 분류 전체보기 (20)
      • CS (14)
        • Computer Architecture (4)
        • Network (5)
        • OS (4)
        • Database (1)
      • TDD (4)
      • 생각 정리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    도메인주도설계
    유지보수성
    ㅕㄴㅗ
    DDD
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
저스티
[프로세스 구조와 프로세스 통신]
상단으로

티스토리툴바