꾸준한 기록을

프로세스(Process)와 통신기법 본문

프로그래밍 기초/운영체제

프로세스(Process)와 통신기법

masiljangajji 2023. 12. 29. 20:16

프로세스란

 

프로세스는 메모리에 적재되어 실행중인 프로그램을 말합니다.

 

프로세스의 메모리 구조는 다음과 같습니다.

 

Stack: 여기에는 메서드 호출 시 생성되는 지역 변수, 매개변수 및 자바의 기본 데이터 유형(primitive type) 값들이 저장됩니다.

재귀 함수 호출과 같이 런타임에 크기가 변경될 수 있습니다.

 

Heap: 참조 타입(Reference Type, Non-Primitive Type)의 객체들이 여기에 할당됩니다.
런타임에 크기가 동적으로 결정되며 Garbage Collector에 의해 관리됩니다.

 

Data: BSS 영역과 Data 영역으로 나뉩니다. 정적(static) 변수, 상수 등이 이 영역에 저장됩니다.

 

Code: 프로그램의 소스 코드가 컴파일되어 생성된 기계어 코드가 저장되는 영역입니다. 이 영역은 읽기 전용이며

프로그램이 실행될 때 수정되지 않습니다.

 

Stack , Heap 은 Dynamic한 특징을 Data , Code 는 Static한 특징을 갖습니다.

 

프로세스는 고유한 메모리를 갖습니다. 따라서 N개의 프로세스가 실행중이라면 실제로 N개의 Stack,Heap,Data,Code 영역을 갖습니다.

또한 프로세스가 실행되면 OS는 프로세스 관리를 위해 PCB(Process Control Block)을 생성합니다.

(이것 역시 N개의 PCB가 생성됩니다.)

 

PCB(Process Control Block)

 

아래 그림은 PCB의 구조입니다.

PCB는 운영체제가 프로세스를 관리하고 제어하기 위해 사용되는 자료구조이며 

Process를 설명하는 일종의 메타데이터입니다.

 

PCB의 주요 역할은 다음과 같습니다.

  1. 프로세스 상태(대기,실행)
  2. 프로세스 번호(프로세스의 고유 식별 번호 , PID)
  3. 프로그램 카운터(PC, 다음 실행될 명령의 주소를 나타냄)
  4. 레지스터

 

Context Switching

 

프로세스의 컨텍스트 스위칭(Context Switching)은 하나의 프로세스가 실행 중인 상태에서 다른 프로세스로 전환하는 과정을 말합니다.

 

이는 운영체제가 다중 프로세스를 실행하기 위해 필요한 기술로 컨텍스트는 프로세스가 현재 실행 중인

상태를 나타내는 정보의 집합(환경)을 나타냅니다

 

컨텍스트 스위칭은 PCB를 기반으로 동작합니다.(스레드 또한 가능)

 

Process1 실행중 -> 인터럽트 발생 -> PCB1저장 -> PCB2리로드 -> Process2실행 의 순서를 나타내며

 

이때 프로세스의 실행환경이 전환됩니다.

Context Switching 하기 위해서는 Interrupt가 필요하며 이는 CPU사용률을 낮춥니다.

(스레드의 경우 Stack영역을 제외한 모든 부분을 공유하기 떄문에 Switching에 대한 자원소모가 훨씬 적습니다.)

 

IPC(Inter Process Communication)

 

앞서 말했듯이 프로세스는 각각 고유한 메모리와 실행환경을 가집니다.
따라서 프로세스끼리 통신하기 위해서는 특정한 메커니즘이 필요합니다.

공유메모리(Shared Memory)

IPC 중에서 가장 빠른 통신 방법으로 여러 프로세스가 통신할 수 있도록 메모리를 공유하는 것을 말합니다.
메모리 자체를 매핑하여 공유하기 떄문에 불필요한데이터 복사의 오버헤드가 발생하지 않습니다.

전체 데이터를 메모리에 로드하지않고 필요한 부분을 선택적으로 로드할 수 있다는 장점또한 존재합니다.

 

 

파일

디스크에 저장된 데이터를 기반으로 통신하는 것을 의미합니다.

프로세스의 메모리에 데이터를 로드시키지 않기 떄문에 I/O관련 오버헤드가 발생합니다.

Socket

네트워크 인터페이스 (TCP , UDP , HTTP 등)를 기반으로 통신하는 것을 의미합니다.

예를들어 크롬브라우저에서(프로세스) www.naver.com 검색하면 네이버 서버에서 프로세스 띄워서 응답을 주게됩니다.

 

채팅프로그램의 경우에도 클라이언트 프로세스 , 서버 프로세스끼리의 통신이 필요합니다.

 

 

파이프

파이프 기법은 익명파이프(Anonymous Pipe) , 명명파이프(Named Pipe)로 나뉩니다.

익명파이프(Anonymous Pipe)

프로세스 사이에 FIFO기반 통신채널을 만들어 통신하는 것입니다.

파이프 하나당 단방향 통신이기 때문에 양방향 통신을 하려면 2개의 익명파이프를 만들어야 합니다.

부모-자식 프로세스 간에만 사용 가능하며 다른 네트워크상에서는 사용이 불가능합니다.

 

명명파이프(Named Pipe)

익명파이프의 확장된 개념으로 부모-자식 뿐 아니라 다른 네트워크 상에서도 통신할 수 있는 파이프입니다.

 

익명파이프의 경우 부를 이름이 없어 다른 네트워크에서 해당 파이프를 불러 통신하는게 불가능했지만    

명명파이프에는 이름이있어 다른 네트워크와 통신이 가능합니다.

 

보통 서버,클라이언트용 파이프를 구분해서 동작합니다.

 

메시지 큐

프로세스나 스레드 간에 비동기적으로 데이터를 주고받을 수 있도록 하는 통신 방식 중 하나로

메시지를 큐(Queue) 자료구조 형태로 관리하는 버퍼를 만들어 통신하는 것을 말합니다.

  1. 프로세스가 메시지를 보내거나 받기 전에 큐를 초기화합니다.
  2. 보내는 프로세스(sender)의 메시지는 큐에 복사되어 받는 프로세스(receiver)에 전달됩니다.

 

 

IPC기법을 자바로 나타낸 간단한 예제입니다.
https://github.com/masiljangajji/IPC_Example

 

GitHub - masiljangajji/IPC_Example

Contribute to masiljangajji/IPC_Example development by creating an account on GitHub.

github.com

도움이 되셨으면 좋겠습니다.

'프로그래밍 기초 > 운영체제' 카테고리의 다른 글

가상메모리(Virtual Memory)란  (0) 2023.12.28
운영체제(Operating System)란  (1) 2023.12.28