📖
Mini's Today I Learned
  • Today I Learned
  • 💻Computer Science
    • 🧱Computer Science
      • Computer Architecture
    • 🦕OperatingSystem
      • System Structure
      • 01. 운영체제 역할
      • 02. History로 이해하는 운영체제
      • 03. 운영체제 구조
      • 04. 프로세스 스케쥴링
      • 05. 스케쥴링 알고리즘
      • 06. 프로세스 상태와 스케쥴러
      • 07. 인터럽트
      • 08. 프로세스와 컨텍스트 스위칭
      • 09. 프로세스간 커뮤니케이션(IPC 기법)
      • 10. Thread(스레드)
      • 11. 가상메모리 (Virtual Memory System)
      • 12. 파일시스템 이해
      • 13. 부팅의 이해
      • 14. 가상머신(Virtual Machine)
  • 📈Database
    • MySQL CLI (Frequently used)
    • 1-Tier, 2Tier, 3Tier
    • Basic SQL
    • Built in function
    • Sub Query
    • View
    • Stored Program
    • index
    • Normalization(정규화)
    • Transaction
    • Transaction
  • 🌐 Network
    • 🔌 TCP&IP Basic
      • 01 TCP/IP 맛보기
      • 02 TCP/IP 개요
      • 03 통신 서비스와 프로토콜
      • 04 애플리케이션 계층
      • 05 트렌스포트 계층
      • 06 네트워크계층
      • 07 데이터 계층과 물리계층
      • 08 라우팅
      • 09 보안
      • 10 HTTP 프로토콜
    • 🐿️HTTP 완벽 가이드 요약
      • 1. HTTP: 웹의 기초
      • 2. URL 과 리소스
      • 3. HTTP Message
      • 4. Connection Management
      • 5. Overview of web server architectures
      • 6. Proxies
      • 7.Caching
      • 8. Integration Points: Gateways, Tunnels, and Relays
      • 9. Web Robots
      • 10. HTTP/2.0
      • 11. Client Identification and Cookies
      • 12. Basic Authentication
      • 13. Digest Authentication
      • 14. Secure HTTP
      • 15. Entities and Encodings
      • 16. Internationalization
      • 17. Content Negotiation and Transcoding
      • 18. Web Hosting
  • 🏴Language
    • ☕JAVA
      • Comparable vs Comparator
  • 🛠️ Framework
  • 🧩Design Pattern
    • 객체 지향 설계 원칙 (SOLID)
    • Design Pattern 개요
    • Template method
    • Singleton
  • 🐥FrontEnd
    • HTML&CSS
      • 01 Intro
      • 02 HTML Basic
      • 03 Content Section
      • 04 Block and Inline Elements
      • 05 Text Contents
      • 06 Inline Elements
      • 07 Multi Media
      • 08 Table&Form&etc
      • 09 Global Attribute & etc
      • 10 css basic
      • 11 css config
      • 12 css unit
      • 13 Box Model
      • 14 Font & Text
      • 15 Float(띄움) & Position
      • 16 Background
      • 17 Transitions & Transforms
      • 18 Animation & Multi Columns(다단)
      • 19 Flex
      • 20 Grid
    • Sass(SCSS)
    • TypeScript
    • Webpack Introduction
      • 웹팩의 기본 구조
      • CommonJS
      • ESM
      • WebpackConfig
        • 1. Handlebars
        • 2. Caching
        • 3. Minification & Mangling
        • 4. Mode(Development mode & Production Mode)
        • 5. 이미지 파일 모듈로 다루어보기(file-loader)
        • 6. 이미지 파일 모듈로 다루어보기(url-loader)
        • 7. SASS Loader
        • 8. Post CSS
        • 9. BLOWSERS LIST
        • 10. Stylelint
        • 11. Babel
      • Webpack-Practice
    • ETC
      • GIT
      • MarkDown
Powered by GitBook
On this page

Was this helpful?

  1. Computer Science
  2. 🦕OperatingSystem

09. 프로세스간 커뮤니케이션(IPC 기법)

  • 프로세스간 통신이 왜 필요할까?

    • 성능을 높이기 위해 여러 프로세스를 만들어 동시실행

    • 이 때 프로세스간 상태 확인 및 데이터 송수신 필요

  • 프로세스간 통신 예제

    • fork()시스템콜

      • fork()함수로 프로세스 자신을 복제해서 새로운 프로세스로 만들 수 있음

        • 부모 프로세스, 자식 프로세스

      • 프로세스를 fork()해서 여러 프로세스를 동시 실행 할 수 있음

        최근 CPU안에 코어가 8개 되는 경우도 많고 각 프로세스를 각 코어에서 동시 실행 가능하기 때문(병렬 처리 가능)

    • 여러 프로세스 동시 실행하기 예

      • 1~10000까지 더하기

        • fork()함수로 10개의 프로세스를 만들어서 1~1000,1001~2000,... 더하기

          (core가 10개 있다고 생각하면 병렬로 각 프로세스를 처리 가능)

        • 각각 더한 값을 모두 합하면 더 빠르게 동작 가능

      • 단, 이 때 각 프로세스가 더한 값을 수집해야 하므로, 프로세스 간 통신 필요

        CPU 병렬 처리 가능하면 빠른 대응 가능 각 프로세스 제어 및 상태 정보 교환을 위해 프로세스간 통신필요

  • 프로세스간 공간은 완전히 분리되어있음

    • 하나의 프로세스는 총 4GB(가상주소)

      • 0~3GB: 사용자모드(user mode)

      • 3~4GB: 커널모드

    • 각 프로세스의 사용자 공간 끼리는 서로 접근이 불가능하지만(stack, heap, bss, data,code)

    • 커널 공간은 실제 물리 메모리에 동일한 공간을 공유할 수 있게끔 만들어져 있음.

    • 가상주소 != 물리주소

    • 더 깊은 내용은 가상 메모리 참조

  • InterProcess Coummunication(IPC)기법

    원칙적으로는 프로세스 간 공간에 쉽게 접근 불가능 프로세스 데이터나 코드가 바뀌면 위험하니까~~! 따라서, 원칙상 프로세스는 다른 프로세스의 공간에 직접 접근 불가능! 프로세스 간 어떻게 커뮤니케이션을 할 수 있을까? 프로세스간 통신 방법을 제공! => IPC 기법

    • 한 가지 방법: file 사용

      • 간단히 다른 프로세스에 전달할 내용을 file에 쓰고, 다른 프로세스가 해당 파일을 읽으면 됨

      • 다만, file을 사용하면 실시간으로 원하는 프로세스에 데이터 전달 어려움

        • 해당 프로세스가 파일을 읽어야 하는데, 실시간으로 읽기 어려우니까.

        • 저장 매체에 다녀와야 하니까 오래 걸림

      • (커널 공간 사용하지 않음)

    • 그래서 보다 다양한 IPC 기법이 있음

      • 핵심: 커널 공간을 사용하는 것(물리 메모리에 있음)

      • file을 사용하는 것보다 빠른편

      • pipe

      • message queue

      • shared memory

      • signal

      • semaphore

      • socket

      • ...

[정리]

  • 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위해 프로세스 간 통신 필요

  • 프로세스 간 공간 완전 분리

  • 프로세스 간 통신을 위해 특별한 기법 필요

    • IPC(InterProcess Communicate)

  • 대부분의 IPC기법은 결국 커널 공간을 활용하는 것

    • 이유: 커널 공간은 공유하기 때문

각 IPC 기법 이해하기

  • pipe

    • 기본 파이프는 단방향 통신[부모(write) => 자식(read)]

    • fork() 실행 다음 코드부터

      • 부모 프로세스

      • 자식 프로세스(부모로 부터 복사한 프로세스)

      • ProcessID값이 다름(부모: 실제 프로세스 ID, 자식: 0)

    • fork()로 자식 프로세스 만들었을 때, 부모와 자식 간의 통신

    • 실제 데이터는 kernel 위치에 있음

  • message queue

    • 기본은 FIFO정책으로 데이터 전송

    • msgsnd()로 메세지를 넣고

    • msgrcv()로 해당 주소의 메세지를 읽어옴.

    • 동일한 key값을 통해서 각 프로세스를 데이터 송수신을 할 수 있다.

    • 먼저 넣은 데이터가 먼저 읽힌다.

    • 부모/자식 관계는 없음

    • 양방향가능

  • 공유 메모리(shared memory)

    • 노골적으로 kernel space에 메모리 공간을 만들고 해당 공간을 변수처럼 쓰는 방식

    • 공유 메모리 key를 가지고 여러 프로세스가 접근 가능

      • shmget()으로 공유 메모리 생성

      • shmat()으로 공유메모리 주소 얻기

      • shmaddr() 읽고, 쓰기 가능.

    • 커널 공간에 아예 메모리 공간을 하나 파는 개념

  • signal(가장 많이 사용됨!)

    • 유닉스에서 30년 이상 사용된 전통적인 기법

    • 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지 알려주는 기법

      • (커널 <=> 프로세스)

      • (프로세스 <=> 프로세스)

    • 시그널은 미리 정의되어 있는 이벤트들

      (기본 OS (Linux, Unix) 에서 이미 정의되어 있음)

      • SIGKILL

      • SIGALARM

      • SIGSTP

      • ....

      • 특별한 동작을 정의할 수도 있다.

        터미널에 kill -l 입력하면 이미 정의된 시그널 종류를 볼 수 있음.

    • 프로세스 관련 코드에 관련 시그널 핸들러를 등록해서 해당 시그널 처리 실행

    • PCB에서 해당 프로세스가 block또는 처리 해야 하는 시그널 관련 정보 관리

    • 커널 모드에서 사용자 모드로 전환 시 시그널 사용.

  • socket

    • 네트워크 통신을 위한 기술

    • 기본적으로는 클라이언트와 서버 등 두 개의 다른 컴퓨터 간에 네트워크 기반 통신을 위한 기술

    • 하나의 컴퓨터 안에서, 두 개의 프로세스 간에 통신 기법으로도 사용 가능

Previous08. 프로세스와 컨텍스트 스위칭Next10. Thread(스레드)

Last updated 4 years ago

Was this helpful?

💻