[운영체제] PCB와 IPC

Judy·2022년 10월 24일
0

운영체제

목록 보기
5/14

IPC

프로세스 간 통신(inter-Process Communication)

프로세스들 사이에서 서로 데이터를 주고받는 방법이나 경로

  • 프로세스는 종종 다른 프로세스와 통신할 필요가 있음
  • 인터럽트를 사용하지 않는 잘 정의된 형태의 프로세스간 통신에 대한 필요성이 존재하는데 이것이 IPC

주요 방식

1. 파이프(익명 PIPE)

  • 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 가능 ➡️ 단방향 통신
  • 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다. (ex. 부모-자식 프로세스 간 통신)
  • 부모프로세스가 자식 프로세스를 생성하는 경우에 파일 지정 번호를 상속받아 익명파이프로 통신 (형제 관계도 가능)
  • 송/수신을 모두 하기를 원한다면 두개의 파이프를 만들어야 함

2. 지명 파이프(Named PIPE)

  • 프로세스 통신을 위해 이름이 있는 파일을 사용
  • 전혀 모르는 상태의 프로세스들 사이의 통신에 사용
  • 단방향 통신

3. 메시지 큐(Message Queue)

  • 입출력 방식은 Named PIPE와 동일
  • 파이프가 아니라 어디에서나 물건을 꺼낼 수 있는 컨테이너 벨트라고 보면 된다
  • 메시지 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.
  • 단방향 통신

4. 메모리 맵 파일

  • 메모리 맵 파일을 통해 프로세스의 가상 메모리 주소공간에 파일을 매핑한 뒤 가상 메모리 주소에 직접 접근하는 것으로 파일 읽기/쓰기를 대신
  • 대용량 자료를 처리할 때 유리

5. 공유 메모리

  • 여러 프로그램이 동시에 접근할 수 있는 메모리
  • 공유 메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용
  • 과다한 복사를 피하거나 프로그램 간 통신을 위해 고안
  • 중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동

6. 소켓

  • 네트워크 소켓 통신을 통해 데이터를 공유
  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용

IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하고자 세마포어와 뮤텍스를 사용 ( 공유된 자원에 여러 프로세스가 동시 접근하는 것을 막기 위해)


PCB

프로세스 제어 블럭((Process Control Block)

"PCB는 운영 체제가 프로세스를 표현한 것이다."

  • 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조

포함 정보

  • 프로세스 식별자(Process ID)
  • 프로세스 상태(Process State)
  • 프로그램 카운터(Program Counter)
    - 프로세스가 다음에 실행할 명령어의 주소를 가리킴
  • 레지스터(Register)
  • CPU 스케줄링 정보
  • 메모리 정보
    - 해당 프로세스의 주소 공간
  • 프로세스 계정 정보
    - 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
  • 입출력 상태 정보

blob:https://velog.io/ac0906a0-2559-49d9-839b-c32faa7c9981

PCB 위치

  • 중요한 정보를 담고 있어 보호된 메모리에 위치
  • 커널 스택에 위치하곤 함
  • 프로세스의 문맥이 저장되어 있음
    ➡️ 문맥 교환 시 이용

문맥 교환

context switch

프로세스(또는 스레드)에서 다른 프로세스(또는 스레드)로 CPU (중앙 처리 장치)를 전환하는 것

프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 현재 프로세스의 상태(=문맥)를 보관하고 새로운 프로세스의 상태를 적재하는 작업

커널이 CPU에서 한 프로세스의 실행을 일시 중단하고 이전에 일시 중단된 다른 프로세스의 실행을 재개하는 것

문맥

특정 시점의 CPU 레지스터 및 프로그램 카운터의 내용

과정

  1. 한 프로세스의 진행을 일시 중단, 해당 프로세스의 CPU 상태(=문맥)을 메모리에 저장
  2. 메모리에서 다음 프로세스의 문맥을 CPU 레지스터에서 복원
  3. 프로세스를 재개하기 위해 프로그램 카운터에 표시된 위치(프로세스가 중단된 코드라인)로 복귀

특징

  • 커널 모드에서만 발생
  • 멀티 태스킹 운영체제에서 여러 프로세스가 동시에 실행되는 것 처럼 보이도록 동작하는데 이는 아주 빠르게(초당 수십~수백번) 이뤄지는 문맥 교환을 통해 달성

언제 발생?

  • 프로세스가 자발적으로 CPU 활용 시간을 포기
  • 프로세스의 CPU 타임 슬라이스를 모두 사용했을 때 스케줄러가 전환
  • 하드웨어 장치(예: 키보드, 마우스, 모뎀 또는 시스템 클록)에서 커널로 보내는 신호인 하드웨어 인터럽트가 발생

비용

  • 문맥 교환은 일반적으로 집약적인 계산이 필요
  • 초당 수십-수백개에 달하는 문맥 교환에 나노 초 정도의 상당한 시간이 필요
  • 문맥 교환은 CPU 시간 측면에서 상당한 비용을 나타냄. 실제로 운영체제에서 가장 비용이 많이 드는 작업이 될 수 있음

➡️ 운영체제 설계에서 불필요한 문맥 교환을 줄이는 것이 중요
➡️ 실제로 달성하기는 어려운 목표
➡️ CPU 클럭 속도를 증가시키는 방향으로 발전




참조 링크

위키백과 - IPC
프로세스 간 통신
문맥 교환 - 마이크로소프트 개발자 네트워크 (MSDN)
프로세스 간 통신 방법

profile
iOS Developer

0개의 댓글