운영체제입문 - 3장

taehoyoon·2023년 4월 21일

운영체제

목록 보기
3/6
post-thumbnail

프로세스

프로세스 개념

개념

프로세스는 실행 중인 프로그램으로, 순차적으로 실행된다.
즉, 프로그램이 실행되면 프로세스가 되고, 이는 컴퓨터 메모리에서 실행되는 프로그램의 인스턴스이다.

구성요소

  • 프로그램 카운터
    프로세스의 현재 활동, 특히 실행할 다음 명령의 주소를 추적하는 포인터

  • 프로세서 레지스터
    CPU 내에서 중간 값 및 기타 중요한 프로세스 관련 정보를 저장하는 작고 빠른 스토리지 위치

  • 텍스트 섹션
    실제 프로그램 코드 또는 CPU가 실행해야 하는 명령어가 저장

  • 데이터 섹션
    프로세스에서 사용되는 전역 변수가 저장

  • 스택
    함수 매개 변수, 반환 주소 및 로컬 변수를 저장하는 메모리 구조
    스택은 함수 호출을 관리하고 실행 순서를 유지하는 데 중요합니다.


  • 프로세스의 런타임 중에 동적으로 할당되는 메모리 영역
    일부 프로그래밍 언어에서 "new" 키워드로 만든 개체와 같이 크기나 수명이 가변적인 데이터를 저장하는 데 사용

프로그램은 실행 파일이 메모리에 로드될 때 프로세스가 된다.
즉, 운영 체제가 디스크에서 실행 파일을 읽고 메모리에 로드하여 CPU가 실행할 수 있도록 준비할 때 프로세스가 생성된다.

Process in memory

  1. Text section: program code

텍스트 섹션은 프로그램의 기계어 코드를 저장하는 영역입니다. 이 영역은 읽기 전용이며, 프로세스 실행 도중 변경되지 않습니다.

  1. Data section: global variables

데이터 섹션은 전역 변수와 정적 변수를 저장하는 영역입니다. 프로세스가 실행되는 동안 이 영역의 값은 변경될 수 있습니다.

  1. Stack: function parameters, return addresses, local variables

스택은 함수 호출과 관련된 데이터를 저장하는 영역입니다. 함수 매개변수, 반환 주소, 지역 변수 등이 스택에 저장됩니다. 스택은 Last-In-First-Out (LIFO) 방식으로 동작하며, 함수 호출 시 스택에 데이터가 쌓이고, 함수 종료 시 데이터가 제거됩니다.

  1. Heap: memory dynamically allocated in run time

힙은 프로세스가 실행 중에 동적으로 메모리를 할당하는 영역입니다. 프로세스는 필요에 따라 힙에서 메모리를 할당받거나 해제할 수 있습니다. 힙의 메모리 공간은 프로세스 실행 도중 필요한 만큼 확장 및 축소될 수 있습니다.
프로세스의 구성 요소를 통해 프로그램이 실행되고, 데이터를 저장하며, 동적 메모리 할당을 처리할 수 있습니다. 이러한 구성 요소들이 결합되어 프로세스가 시스템에서 원활하게 작동하게 됩니다.

Process State

프로세스 상태는 운영 체제에서 수명 동안 프로세스의 현재 상태 또는 조건을 나타냄. 프로세스 상태는 PCB에 저장되어 있음.

  1. new

    • 프로세스가 생성되는 단계
    • 이 상태에서 프로세스는 시스템에서 필요한 자원을 할당받고 초기화 작업을 수행합니다.
  2. running

    • CPU에서 명령어를 실행하고 있는 상태
    • 프로세스는 CPU를 차지하며, 자신의 작업을 수행하게 됨
  3. waiting

    • 프로세스는 특정 이벤트가 발생하기를 기다리고 있는 상태
    • 예를 들어, 입출력 작업이 완료되기를 기다리거나 다른 프로세스와의 동기화를 위해 대기할 수 있다
  4. ready

    • CPU에 할당되기를 기다리는 상태
    • 프로세스가 실행을 위한 모든 준비를 마쳤으나, 다른 프로세스가 CPU를 사용 중일 때 이 상태로 전환됨
    • 스케줄러에 의해 선택되면, 프로세스는 running 상태로 전환
  5. terminated

    • 실행을 완료한 상태
    • 프로세스는 시스템 자원을 해제하고, 종료 메시지를 반환한 후, 시스템에서 제거됨

Process Control Block

프로세스 제어 블록(Process Control Block, PCB)은 운영 체제에서 프로세스의 중요한 정보를 저장하는 자료 구조이다. 메모리에 상주한다.

  1. Process state

    • 프로세스의 현재 상태를 나타냄 (위에 있는 Process state 맞음)
    • 프로세스는 실행 중(running), 대기 중(waiting), 준비(ready) 등의 상태를 가질 수 있으며, 이 상태는 프로세스의 생명 주기 동안 변화
  2. Program counter

    • 다음에 실행될 명령어의 메모리 주소를 나타냄
    • 프로그램 카운터는 프로세스가 현재 실행 중인 명령어 위치를 추적합니다.
  3. CPU registers

    • 프로세스 관련 레지스터의 내용을 저장
    • 레지스터는 CPU에서 직접 접근 가능한 작은 메모리 단위로, 프로세스가 실행되는 동안 중요한 데이터와 연산의 결과를 저장
  4. CPU scheduling information

    • 프로세스의 스케줄링 우선 순위 및 스케줄링 큐 포인터 등을 포함합니다. 이 정보는 CPU 스케줄러가 프로세스를 실행 순서를 결정하는 데 사용됩니다.
  5. Memory-management information

    • 프로세스에 할당된 메모리에 관한 정보를 저장합니다.
    • 이 정보는 프로세스의 주소 공간, 페이지 테이블, 세그먼트 테이블 등을 포함할 수 있습니다.
  6. Accounting information

    • 프로세스에 대한 회계 정보를 저장
    • 이 정보에는 사용된 CPU 시간, 프로세스 시작 이후 경과한 클록 시간, 시간 제한 등이 포함
  7. I/O status information

    • 프로세스에 할당된 I/O 장치 및 열린 파일 목록 등의 I/O 상태 정보를 저장
    • 이 정보는 프로세스가 I/O 작업을 수행하는 동안 관리 및 추적을 위해 사용됩니다.

Process Scheduling

프로세스 스케줄링은 운영 체제가 사용 가능한 프로세스에 CPU 시간을 효율적으로 할당하여 CPU 사용률을 극대화하는 메커니즘이다.
프로세스 스케줄러는 사용 가능한 프로세스 풀에서 CPU에서 실행할 다음 프로세스를 선택하는 일을 담당한다.
이러한 프로세스를 관리하고 구성하기 위해 스케줄러는 Job queue, Ready queue, Device queue 등을 사용한다


Scheduling Queues

스케쥴링 큐는 운영 체제에서 프로세스를 관리하기 위해 사용되는 자료 구조로, 여러 종류의 큐가 있습니다. 각 큐의 목적과 관계를 아래와 같이 설명하겠습니다.

  1. Job queue

    • 시스템 내의 모든 프로세스를 포함하는 큐
    • 프로세스가 생성되면 먼저 job queue에 들어가며, 여기에서 프로세스는 메모리에 로드되기를 기다림
  2. Ready queue

    • 주 메모리에 존재하며 실행을 기다리는 모든 프로세스의 집합
    • 프로세스가 메모리에 로드되면 ready queue로 이동하여 CPU에서 실행될 차례를 기다림
  3. Device queues

    • I/O 장치를 기다리는 프로세스의 집합
    • 프로세스가 특정 I/O 장치를 사용하려면 해당 장치의 사용이 가능해질 때까지 device queue에서 기다려야 함

프로세스는 이러한 큐 간을 이동하며 실행 과정을 거칩니다.
이 과정은 다음과 같습니다:

  1. 프로세스 생성 시, job queue에 들어갑니다.
  2. 프로세스가 메모리에 로드되면 ready queue로 이동합니다.
  3. CPU 스케줄러에 의해 선택되면 프로세스가 실행되며, 필요한 경우 device queue에서 I/O 장치를 기다립니다.
  4. I/O 작업이 완료되면 프로세스는 다시 ready queue로 이동하여 실행을 계속 기다립니다.
  5. 프로세스가 완료되면 시스템에서 제거됩니다.

Schedulers

스케줄러는 운영 체제의 컴포넌트로, 시스템에서 실행할 프로세스를 선택하고 관리합니다. 스케줄러는 크게 단기 스케줄러(Short-term Scheduler)와 장기 스케줄러(Long-term Scheduler)로 나누어집니다.

  1. 단기 스케줄러(Short-term Scheduler)

    • 준비 상태의 프로세스 중(ready queue)에서 CPU에 할당할 프로세스를 선택
    • 이 스케줄러는 높은 빈도로 작동하며, 프로세스 전환 시 발생하는 오버헤드를 최소화하고 시스템 성능을 최적화하는 데 중요한 역할
    • 단기 스케줄러는 일반적으로 CPU 스케줄링 알고리즘(예: FCFS, SJF, Round Robin 등)을 사용하여 프로세스를 선택
    • 속도 빨라야함, 자주 실행됨
  2. 장기 스케줄러(Long-term Scheduler)

    • 시스템 내의 프로세스 집합(job queue)에서 메모리에 로드할 프로세스를 선택
    • 시스템의 메모리 및 시스템 성능을 관리하는 데 중요한 역할을 담당하며, 멀티프로그래밍의 정도를 조절
    • 메모리에 로드된 프로세스의 수를 적절히 유지하며, 프로세스의 성격(입출력 중심, CPU 중심 등)에 따라 균형을 맞추어 시스템의 전반적인 성능을 향상시킴
    • 속도 느려도 괜찮, 간헐적으로 실행됨

장기 스케줄러와 단기 스케줄러는 각각 시스템의 성능과 자원 관리를 최적화하는 데 중요한 역할을 담당합니다. 이 두 스케줄러가 협력하여 프로세스를 메모리에 로드하고, CPU를 효율적으로 사용하여 시스템의 전반적인 성능을 개선합니다.

  1. 중기 스케줄러(Medium-term Scheduler)
    • 장기 스케줄러와 단기 스케줄러 사이에서 작동하는 스케줄러
    • 메모리의 사용 효율성을 높이고 시스템의 성능을 개선
    • 주요 역할은 프로세스를 메모리에서 일시적으로 제거하거나(swapping out) 다시 메모리로 로드하는(swapping in) 작업을 수행하는 것

중기 스케줄러는 다음과 같은 상황에서 작동할 수 있습니다:

  • 메모리 부족
    시스템 내에서 실행 중인 프로세스의 수가 많아져 메모리가 부족한 경우, 중기 스케줄러는 일부 프로세스를 일시적으로 메모리에서 제거하여 공간을 확보합니다.

  • 효율성 향상
    중기 스케줄러는 메모리에서 일시 중지된 프로세스를 다시 로드하여 프로세스의 실행을 재개시키기도 합니다. 이를 통해 시스템의 전반적인 성능과 자원 사용률을 개선할 수 있습니다.

중기 스케줄러는 이러한 작업을 통해 시스템의 메모리 사용 효율성을 높이고, 자원 경쟁이나 메모리 부족 문제를 완화하여 시스템 성능을 개선하는 데 기여합니다. 이를 통해 프로세스 실행 시간을 최소화하고 시스템의 처리량을 최대화하는 데 도움이 됩니다.


Context Switch

Context Switch:
현재 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태를 로드하여 CPU가 동시에 여러 작업을 효율적으로 관리할 수 있도록 하는 프로세스

  • Context Switch는 CPU가 한 프로세스를 실행에서 다른 프로세스로 전환할 때 발생

  • 멀티태스킹 기능을 제공하고 운영 체제에서 여러 프로세스를 동시에 관리하기 위해 필요함

  • Context Switch 중에 시스템은 이전 프로세스의 상태를 저장하고 새 프로세스에 대해 저장된 상태를 로드, 프로세스 상태는 PCB에 저장됨

  • Context Switch 시간은 CPU가 스위치를 실행하는 동안 프로세스를 활성화하지 않기 때문에 오버헤드로 간주됨

    • 운영 체제와 PCB가 복잡할수록 context switch 시간이 길어짐
    • 이러한 오버헤드는 전체 시스템 성능에 영향을 미칠 수 있음
  • Context Switch에 소요되는 시간은 하드웨어 지원에 따라 다름
    CPU당 여러 개의 레지스터 세트와 같은 일부 하드웨어 기능은 한 번에 여러 개의 컨텍스트를 로드할 수 있으므로 컨텍스트 전환 시간을 줄이고 효율성을 향상시킬 수 있음


Process Creation

Process creation은 부모 프로세스가 하위 프로세스를 생성하는 메커니즘으로, 효율적인 시스템 성능을 보장하기 위해 리소스 공유 및 실행 옵션을 관리하면서 계층 구조를 형성합니다.

  • 상위 프로세스에 의해 하위 프로세스가 생성되어 프로세스 트리가 생성됨
    이 계층 구조는 시스템에서 상위 프로세스와 하위 프로세스 간의 관계를 나타냄

  • 각 프로세스는 고유 프로세스 식별자(PID)를 사용하여 식별되고 관리되며, 이는 프로세스 생성 중에 운영 체제에 의해 할당됨

  • 상위 프로세스와 하위 프로세스 간의 리소스 공유 옵션은 모든 리소스 공유, 상위 리소스의 하위 집합 공유 또는 리소스를 전혀 공유하지 않는 등 다양할 수 있음
    리소스 공유의 선택은 통신, 메모리 관리 및 전체 시스템 성능에 영향을 미침

  • 부모 프로세스와 자식 프로세스의 실행 옵션에는 부모 프로세스와 자식 프로세스가 동시에 실행되는 동시 실행 또는 부모 프로세스가 종료될 때까지 기다리는 순차 실행이 포함
    실행 옵션의 선택은 제어 흐름과 전체 시스템의 효율성에 영향을 미침


Process fork

리눅스에서 프로세스 생성은 주로 fork()와 exec() 시스템 호출(System call)을 사용하여 수행된다. 이 과정에서 프로세스 식별자(PID)는 각 프로세스에 고유한 식별자로 사용된다.

  • fork()

    • fork() 시스템 호출은 부모 프로세스의 메모리 공간을 자식 프로세스에 복사하여 새로운 프로세스를 생성
    • 이렇게 생성된 자식 프로세스는 부모 프로세스의 사본이므로, 코드, 데이터, 스택, 힙 영역 등의 상태가 동일
    • fork()가 성공적으로 수행되면, 부모 프로세스에게는 자식 프로세스의 PID가 반환되고, 자식 프로세스에게는 0이 반환 → 이를 통해 부모와 자식 프로세스를 구분
  • exec()

    • 자식 프로세스가 생성되고 나면, exec() 시스템 호출을 사용하여 원하는 다른 프로그램을 실행할 수 있음
    • exec()는 자식 프로세스의 메모리 공간에 새로운 프로그램을 덮어쓰고, 해당 프로그램의 실행을 시작
    • 이 때, 자식 프로세스의 PID는 유지되며, 부모 프로세스와 동일한 PID를 가지게 됨
  • PID

    • 리눅스에서 각 프로세스는 고유한 프로세스 식별자(PID)를 가짐
    • PID는 프로세스 간의 관계를 파악하거나 특정 프로세스에 시그널을 보내기 위한 목적으로 사용
    • 부모 프로세스는 fork() 호출로 생성된 자식 프로세스의 PID를 얻게 되고, 이를 통해 해당 프로세스를 관리할 수 있음

Process termination

프로세스 종료는 리눅스와 유닉스 기반 시스템에서 exit(), wait(), abort() 함수를 사용하여 이루어진다.이 함수들은 프로세스가 정상적으로 종료되거나 예기치 않은 상황에서 종료되는 경우를 다룬다.

  • exit()

    • exit() 함수는 프로세스가 정상적으로 종료될 때 호출되는 함수
    • 프로세스는 작업이 완료되거나 더 이상 수행할 작업이 없을 때 exit() 함수를 호출하여 자원을 반납하고 종료
    • exit()는 종료 상태 값을 인자로 전달받아, 부모 프로세스가 이 값을 사용하여 자식 프로세스의 종료 상태를 확인할 수 있음
  • wait()

    • 부모 프로세스는 자식 프로세스가 종료되기를 기다리기 위해 wait() 함수를 사용
    • wait() 함수는 자식 프로세스가 종료될 때까지 부모 프로세스를 블로킹(blocking) 상태로 만듦
      이를 통해 자식 프로세스의 종료 상태 값을 얻거나, 종료된 자식 프로세스가 남긴 자원을 정리할 수 있음
    • 부모 프로세스가 여러 자식 프로세스를 가질 때, wait() 함수를 사용하여 특정 자식 프로세스 또는 모든 자식 프로세스가 종료될 때까지 기다릴 수 있음
  • abort()

    • abort() 함수는 프로세스가 예기치 않은 상황에서 강제로 종료되어야 할 때 호출되는 함수
    • 프로그램에서 심각한 오류가 발생하거나, 프로세스가 더 이상 정상적으로 수행될 수 없는 상태에 이르렀을 때 abort() 함수를 호출하여 프로세스를 종료
    • abort() 함수는 프로세스를 종료시키면서, SIGABRT 시그널을 발생시켜 운영체제에 프로세스 종료를 알림

Zombie & Orphan Process

Zombie 프로세스와 Orphan 프로세스는 두 가지 특수한 종류의 프로세스이다. 이들은 프로세스 생성과 종료 과정에서 발생하는 특정 상황에서 만들어진다.

  • Zombie 프로세스

    • 자식 프로세스가 종료되었지만 부모 프로세스가 아직 자식 프로세스의 종료 상태를 회수하지 않은 경우, 자식 프로세스는 좀비(zombie) 프로세스가 된다.
    • 좀비 프로세스는 프로세스 테이블에서 자리를 차지하고 있지만 실제로 실행되지 않음
    • 부모 프로세스가 wait() 시스템 호출을 통해 자식 프로세스의 종료 상태를 회수하면, 좀비 프로세스는 완전히 종료되고 프로세스 테이블에서 제거됨
    • 부모 프로세스가 자식 프로세스의 상태를 회수하지 않으면, 좀비 프로세스는 시스템에 남아있게 됨
  • Orphan 프로세스

    • 부모 프로세스가 종료되었지만 자식 프로세스가 아직 실행 중인 경우, 해당 자식 프로세스는 고아(orphan) 프로세스가 됨
    • 부모 프로세스가 종료되면, init 프로세스(PID 1)가 고아 프로세스의 새로운 부모 프로세스가 되어 자식 프로세스를 회수
    • 고아 프로세스는 새로운 부모 프로세스인 init 프로세스에 의해 관리되며, 종료 시 종료 상태는 init 프로세스에 의해 회수됨

이러한 상황을 피하기 위해, 프로세스 생성 및 종료를 올바르게 관리하고, 부모 프로세스는 자식 프로세스의 종료 상태를 적절히 회수해야 합니다.


Interprocess Communication

IPC(Inter-Process Communication) 는 프로세스가 서로 통신하고 작업을 동기화하여 운영 체제 내에서 프로세스 간의 효율적인 조정 및 협력을 가능하게 하는 메커니즘이다.
주로, message passingshared memory를 통해 프로세스 간 통신을 가능케 한다.


Shared Memory

공유 메모리는 여러 프로세스 간에 공유되는 메모리 영역으로, 프로세스 간에 데이터를 직접 통신하고 교환할 수 있다

  • 공유 메모리 영역 내의 통신은 운영 체제가 아닌 사용자 프로세스 자체에 의해 관리
    • 이는 프로세스가 공유 메모리 영역 내에서 액세스, 조정 및 데이터 교환을 제어하는 역할을 한다는 것을 의미

  • 공유 메모리의 주요 문제 중 하나는 공유 메모리에 액세스할 때 사용자 프로세스 간에 동기화가 필요하다는 것
    • 경쟁 조건, 데이터 불일치 및 공유 리소스에 대한 동시 액세스로 인해 발생할 수 있는 기타 문제를 방지하려면 적절한 동기화를 보장하는 것이 중요
    • 뮤텍스, 세마포어 및 모니터와 같은 동기화 기술은 일반적으로 이러한 문제를 해결하기 위해 사용되며 강의 자료의 5장에서 자세히 설명합니다.

Message Passing

Message passing은 프로세스가 동일한 주소 공간을 공유하지 않고 서로 통신할 수 있도록 하는 프로세스 간 통신 방법이다. (IPC의 방법 중 하나)

  • 이 방법은 프로세스가 공유 메모리 영역에 액세스하지 않고 데이터 또는 신호를 교환해야 할 경우 특히 유용

  • Message passing은 일반적으로 send(message)와 receive(message)의 두 가지 주요 작업을 제공

    • 이러한 작업을 통해 프로세스는 고정 또는 가변 크기의 메시지를 송수신할 수 있음
  • 두 프로세스, 즉 P와 Q가 메시지 전달을 사용하여 통신하려면 두 프로세스 간에 communication link(logical link라고도 함)를 설정해야 함

    • 이 링크를 사용하면 프로세스 간에 메시지를 전송할 수 있음

메시지 전달 시스템을 설계할 때 고려해야 할 몇 가지 문제는 다음과 같습니다:

  • naming
    • Direct: PIC나 이름으로 서로를 참조
    • Indirect: mailbox나 port와 같은 중간 엔티티를 통해 송수신

  • synchonization
    • blocking: 프로세스가 메시지를 보내거나 받을 때까지 대기해야함
    • nonblocking: 프로세스가 메시지 전송의 완료를 기다리지 않고 계속 실행되도록 허용

  • buffering
    통신 프로세스 중에 메시지 저장소를 관리

바로 아래에서 다시 설명하겠음!


naming - direct communication

프로세스 간 직접적으로 메시지를 주고받는 방법

예)
프로세스 Q에 메시지를 보내려면 : send(Q, message)
프로세스 P에서 메시지를 수신하려면 : receive(P, message)

  • 통신 링크는 통신이 필요한 모든 프로세스 쌍 간에 자동으로 설정됨
    즉, 프로세스는 연결을 설정하고 메시지를 교환하기 위해 서로의 ID(예: 프로세스 식별자)만 알면 됨

  • Direct communication에서는 각 링크가 정확히 한 쌍의 통신 프로세스와 연결됨
    이렇게 하면 메시지가 의도된 발신인과 수신인 사이에서만 교환됨

  • Direct communication의 통신 링크는 일반적으로 양방향이며 메시지를 양방향으로 보내고 받을 수 있지만 메시지가 한 방향으로만 전송되는 단방향일 수도 있음


naming - indirect communication

프로세스가 mailbox나 port를 이용해 메시지를 주고받는 방법

예)
메일박스 A에 메시지를 보내려면 : send(A, message)
메일박스 A에서 메시지를 수신하려면 : receive(A, message)

  • 각 mailbox에는 고유한 식별자가 있으며 프로세스는 common mailbox를 공유하는 경우에만 통신 가능

  • Communication link의 속성

    • 프로세스가 Common mailbox를 공유하는 경우에만 통신 링크가 설정됨.
      즉, 프로세스가 메시지를 교환하려면 동일한 mailbox에 액세스할 수 있어야 함
    • 각 프로세스 쌍은 서로 다른 여러 mailbox를 공유할 수 있음
    • 통신은 단방향과 양방향 모두 가능
    • 일대일, 다대일 및 다대다 통신 패턴 사용 가능

synchronization - blocking

프로세스는 메시지 송수신을 처리 완료할 때까지 대기해야함
동기적(Synchronous)

  • Blocking send
    메시지를 보낸 프로세스는 수신자가 메시지를 성공적으로 수신할 때까지 대기

  • Blocking receive
    메시지를 받는 프로세스는 받은 메시지가 사용 가능할 때까지 대기


synchronization - nonblocking

프로세스는 메시지 송수신 요청이 되면 다른 작업할 수 있음
비동기적(Asynchronous)

  • Non-blocking send
    메시지를 보내고 수신 여부 상관 없이 다른 작업 가능

  • Non-blocking receive
    메시지를 받으면 사용 가능한 메시지든 null 메시지든 일단 받음


buffering

발신자와 수신자 간에 메시지가 전송되는 동안 메시지를 일시적으로 저장하는 대기열(queue)

  1. Zero capacity
  • Queue 용량 제로
  • 발신인은 수신인이 메시지를 수신할 준비가 될 때까지 기다려야 메시지를 보낼 수 있음
  • 랑데부(rendezvous)라고도 함

  1. Bounded capacity
  • 큐 길이가 유한
  • 링크가 꽉 찬 경우, 발신인은 새 메시지를 발송하기 전에 대기열에 공간이 있을 때까지 기다려야 함

  1. Unbounded capacity
  • 큐 길이 무한
  • 보낸 사람은 메시지를 보내기 전에 기다릴 필요가 없음

Communications in client-server systems

Sockets

정의

컴퓨터 네트워크에서 통신을 위한 엔드포인트(주로 웹 주소)
클라이언트와 서버가 소켓을 통해서 통신한다

  • 소켓 = IP 주소 + 포트 번호
    • 161.25.19.8:1625는 IP 주소가 161.25.19.8, 포트 번호 1625임
    • 127.0.0.1는 로컬호스트 (내 컴퓨터)
    • 1024 미만의 모든 포트는 표준 서비스 및 프로토콜용으로 사용되는 포트

소켓 유형

1. Connection-Oriented

  • TCP(Transmission Control Protocol)를 사용
  • 두 엔드포인트 간에 안정적이고 순서가 지정된 오류 검사 통신을 제공
  • TCP 소켓은 데이터를 교환하기 전에 연결을 설정하고 데이터가 정확하게 전송되는지 확인

2. Connection-less

  • UDP(User Datagram Protocol)를 사용
  • UDP는 안정성, 순서 지정 또는 오류 확인을 보장하지 않는 더 간단하고 빠른 프로토콜
  • 스트리밍 미디어나 온라인 게임과 같이 정확도보다 속도가 중요한 애플리케이션에 적합

3. Multicast

  • 멀티캐스트 IP 주소를 사용하여 여러 수신자에게 동시에 데이터를 보냄
  • 그룹 통신, 화상 회의 또는 방송과 같은 응용 프로그램에 유용

Remote Procedure Calls

분산 시스템의 프로세스 간에 프로시저 호출을 추상화하는 데 사용되는 방법

  • 서로 다른 컴퓨터에서 실행되는 응용 프로그램 간의 프로세스 간 통신에 사용됨

  • RPC는 서비스 차별화를 위해 포트를 사용합니다

  • Stub

    • 클라이언트와 서버는 프록시를 사용하는데 이를 stub이라고 부름
    • 클라이언트 측 스텁은 parameter를 marshall해 서버 스텁으로 전송
    • marshall은 parameter들을 XDR 형식으로 직렬화하는 과정을 의미함
    • 서버 측 스텁은 이 메시지를 수신함
    • parameter를 unmarshalling하고 서버에서 procedure 수행
  • XDR(eXternal Data Representation)

    • 서로 다른 종류의 컴퓨터 시스템 간에 데이터를 전송하는 데 사용되는 표준 데이터 직렬화 형식
    • RPC에서 데이터가 클라이언트와 서버 모두가 이해할 수 있는 형식으로 전송되도록 하는 데 사용됨
    • XDR은 네트워크를 통해 전송되기 전에 parameter를 플랫폼 독립적인 형식으로 변환하는 데 사용됨 (marshalling)
    • 그런 다음 파라미터는 수신측에서 원래 형식으로 다시 변환됨(unmarshalling)

Pipes

프로세스 간 통신에 사용되는 메커니즘으로, 서로 다른 프로세스 간에 데이터를 전송할 수 있다.
Ordinary Pipes(Anonymous Pipes)와 Named Pipes(FIFO special file) 있음

Ordinary Pipes(Anonymous Pipes)

Producer: 한 쪽에서 정보를 쓰는 대상
Consumer: 다른 쪽에서 정보를 읽는 대상

  • 단일 프로세스에 의해 생성되며, 파이프의 양쪽 끝은 해당 프로세스에서 상속되어야 함
  • 일시적이고 이름이 없음
  • Ordinary Pipes는 Unidirectional함
    한 쪽은 쓰기만, 한 쪽은 읽기만 가능. 반대 방향으로 하려면 pipe 하나를 더 만들어야 가능
  • 주로 부모-자식 관계의 프로세스에서 사용됨
  • 파이프를 통해 전송되는 데이터는 선입선출(FIFO) 순서로 처리됨

Named Pipes(FIFO special file)

  • 부모-자식 관계 없이 프로세스에서 액세스 가능
  • Named Pipes는 이름으로 식별되며 프로세스는 시스템의 다른 파일과 마찬가지로 파이프를 열고 통신 가능
  • 데이터를 처리하기 위한 선입선출(FIFO) 순서를 유지

Remote Method Invocation (Java)

머임 교수님 강의자료 없자나요 ㅡㅡ
걍 건너뜁니다~


profile
어흥🦁

0개의 댓글