3.1 프로세스 (Process)
프로세스 (The Process)
- 프로세스는 일반적으로 프로세서에 의해 처리되는 사용자 프로그램/시스템 프로그램
- 실행중인 프로그램 , job, task라고도 부름
- A program is a passive entity (e.g., a file containing a list of
instructions stored on disks (executable file)).
- 명령어 리스트를 내용으로 가진 디스크에 저장된 파일(실행 파일이라고 불림)과 같은 수동적인 존재(passive entity)
- A process is an active entity with a program counter.
- 다음에 실행할 명령어를 지정하는 프로그램 카운터(PC)와 관련 자원의 집합을 가진 능동적인 존재(active entity)
- A program becomes a process when an executable file is loaded
into memory.
- 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 됨
- Multiple processes can be created by a program.
- A process includes, code (or text) section, data section, stack
and heap, and program counter.
Process in Memory
Process State
-
new : The process is being created
-
ready : The process is waiting to be assigned to the CPU.
- 프로세스가 Processor에 할당되기를 기다림
-
running : Instructions are being executed.
-
waiting : The process is waiting for some event to occur.
- 프로세스가 어떤 이벤트(입출력 완료 또는 신호의 수신 같은)가 일어나기를 기다림
-
terminated : The process has finished execution.
-
어느 한 순간에 한 Processor의 코어에서는 오직 하나의 프로세스만이 실행된다는 것을 인식하는 것이 중요
-
그렇지만 많은 프로세스가 ready or waiting 상태에 있을 수 있다.
Process Control Block (PCB)
- Information associated with each process
- 각 프로세스는 운영체제에서 프로세스 제어 블록(process control block, PCB)에 의해 표현
- 운영체제가 프로세스에 대한 중요한 정보를 저장하는 곳
- 각 프로세스가 생성될 때마다 고유의 PCB가 생성되며 프로세스가 완료되면 제거
- Process state
- 프로세스의 상태(new, ready, running, waiting, …)
- Process number
- Program counter
- 프로그램 카운터는 이 프로세스가 다음에 실행할 명령어의 주소
- CPU registers
- CPU scheduling information
- 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함
- Memory-management information
- 운영체제에 의해 사용되는 메모리 시스템에 따라 기준 레지스터와 한계 레지스터의 값, 운영체제가 사용하는 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
- Accounting information
- CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 번호, 잡 또는 프로세스 번호 등을 포함
- I/O status information
- 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함
3.2 Process Scheduling
Concept of Process Scheduling
프로세스 스케줄링은 CPU에서 실행 중인 프로세스의 제거와 특정 전략을 기반으로 다른 프로세스의 선택을 처리하는 프로세스 관리자의 활동
- The objective of multiprogramming is to have some process running at all times, to maximize CPU utilization.
- 다중 프로그래밍의 목적은 CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행되도록 하는 데 있다.
-
The objective of time-sharing is to switch the CPU among processes so frequently that users can interact with each program.
- 시분할의 목적은 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 CPU코어를 빈번하게 교체하는 것
-
A uni-processor system can have only one running process.
- 유니 프로세서 시스템에는 실행 중인 프로세스가 하나만 있을 수 있습니다.
-
If more processes exist, the rest must wait until the CPU is free and can be rescheduled => This requires process scheduling.
- 프로세스가 더 있는 경우 나머지는 CPU가 사용 가능할 때까지 기다려야 하며 => 다시 예약가능함 / 이 경우 process scheduling 필요 !
-
The # of processes currently in memory is known as the degree of multiprogramming.
- 현재 메모리에 있는 프로세스 수를 다중 프로그래밍 정도
-
Processes can be described as either:
- I/O-bound process spends more time doing I/O than computations.
(I/O-bound 프로세스는 계산보다 I/O에 더 많은 시간을 소비)
- CPU-bound process generates I/O infrequently, using more time doing computations.
(CPU 바운드 프로세스는 계산을 수행하는 데 더 많은 시간을 사용하여 I/O를 자주 생성 X
=> 이 두 프로세스가 균형있게 유지되도록 스케줄러가 조정해줘야 한다.
Process Scheduling Queues
- Ready queue
- set of all processes residing in main memory, ready and waiting to execute.
- 프로세스가 시스템에 들어가면 준비 큐(Ready Queue)에 들어가서 준비 상태가 되어 CPU 코어에서 실행되기를 기다린다.
- CPU 코어에서 실행되기를 WAIT 하는 모든 프로세스들의 집합
- Device queues (I/O wait queue)
- set of processes waiting for an I/O device.
- I/O 완료와 같은 특정 이벤트가 발생하기를 기다리는 프로세스
Schedulers - CPU 스케줄링 (CPU Scheduling
- CPU 스케줄러의 역할 : 준비 큐에 있는 프로세스 중에서 선택된 하나의 프로세스에 CPU 코어를 할당하는 것
- CPU scheduler – selects which process should be executed next
and allocates CPU
- CPU 스케줄러는 CPU를 할당하기 위한 새 프로세스를 자주 선택
- sometimes it can be advantageous to remove process from memory (swap out)
- and at some later time the process can be reintroduced into memory and continues its execution (swap in)
문맥 교환 (Context Switch)
- 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업
- 프로세스 제어 블록에 CPU의 상태 또는 컨텍스트를 저장하고 복원하여 나중에 동일한 지점에서 프로세스 실행을 재개할 수 있도록 하는 메커니즘
- 스케줄러가 CPU를 한 프로세스 실행에서 다른 프로세스 실행으로 전환하면 현재 실행 중인 프로세스의 상태가 프로세스 제어 블록에 저장
-
The state of a process such as program counter (PC), the value of the CPU registers, the process state, and memory-management information, etc. is called a context of a process.
- 프로세스의 context :
- 프로그램 카운터(PC)
- CPU 레지스터 값
- 프로세스 상태
- 메모리 관리 정보
등과 같은 프로세스의 상태
-
When CPU switches to another process, the system must save the state of the old process in its PCB and restore the saved state of the new process scheduled to run.
- CPU 코어를 다른 프로세스로 교환하려면 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업이 필요
- This task is known as a context switch.
-
인터럽트는 운영체제가 CPU 코어를 현재 작업에서 뺏어 내어 커널 루틴을 실행할 수 있게 함
-
이러한 연산은 범용 시스템에서는 자주 발생
-
인터럽트가 발생하면 시스템은 인터럽트 처리가 끝난 후에 문맥(Context)을 복구할 수 있도록 현재 실행 중인 프로세스의 문맥을 저장할 필요 있음
=> 현재 실행 중인 프로세스의 문맥을 PCB에 저장
-
When CPU switches to another process, the system must save the state of the old process in its PCB and restore the saved state of the new process scheduled to run. (== context switch)
- CPU가 다른 프로세스로 전환되면, 시스템은 PCB에 이전 프로세스의 상태를 저장하고 실행하도록 예약된 새 프로세스의 저장된 상태를 복원해야 함
프로세스 생성 : Process Creation
-
Process is identified and managed via a process identifier (pid).
프로세스는 프로세스 식별자(pid)를 통해 식별 및 관리
-
Parent process creates children processes, which, in turn create other processes, forming a tree of processes.
상위 프로세스는 하위 프로세스를 생성하고, 하위 프로세스는 프로세스 트리를 형성
-
언제나 pid가 1인 systemd 프로세스가
- 모든 사용자 프로세스의 루트 부모 프로세스 역할을 수행하고
- 시스템이 부트될 때 생성되는 첫 번째 사용자 프로세스
- 시스템이 부팅되면 systemd프로세스는 다양한 사용자 프로세스를 생성
-
프로세스가 실행되는 동안 프로세스는 여러 개의 새로운 프로세스들 생성 가능
Process Creation Option
① Resource sharing option
- Parent and children share all resources.
- Children share subset of parent’s resources.
- Parent and child share no resources.
- 상위 및 하위는 모든 리소스를 공유합니다.
- 자녀가 부모 자원의 부분 집합을 공유합니다.
- 부모 및 자식 간에 리소스를 공유하지 않습니다.
② Execution option
- Parent and children execute concurrently.
- Parent waits until children terminate.
- 상위와 하위가 동시에 실행
- 부모는 하위 항목이 종료될 때까지 기다립니다.
③ Address space option
- Child is a duplicate of the parent.
- Child has a program loaded into it.
- 하위 항목이 상위 항목의 복제 항목
- 하위 항목에 프로그램을 로드
Process Creation in UNIX
-
Parent process uses a fork system call to create a child process.
- 상위 프로세스는 fork 시스템 호출을 사용하여 하위 프로세스를 만듭니다.
- 새로운 프로세스는 fork() 시스템 콜로 생성되고, 원래 프로세스의 주소 공간의 복사본으로 구성
-
The child process consists of a copy of the address space of the parent process.
- 하위 프로세스는 상위 프로세스의 주소 공간 사본으로 구성됩니다.
-
Both processes continue execution at the instruction after fork() with one difference: Returned pid values are different
(i.e., parent : child pid (pid > 0), child : 0 (pid == 0)).
-
The exec system call is used after a fork to replace the process’ memory space with a new program.
- exec system call는 fork 다음에 프로세스의 메모리 공간을 새 프로그램으로 대체하기 위해 사용
- exec() 시스템 콜은 이진 파일을 메로리로 적재(load) & 그 프로그램을 실행을 시작
- 원래의 프로그램의 메모리 이미지를 파괴
Example of a Process Creation
Operations: Process Termination
-
Process executes last statement and asks the operating system to
delete it using the exit(status) system call.
- Parent can get a status value from child (via wait(&status)).
- Process’ resources are de-allocated by operating system.
-
Parent (or user) may terminate execution of children processes (or
processes) via kill system call or via kill command.
-
(부모(또는 사용자)는 kill 시스템 호출 또는 kill 명령을 통해 자식 프로세스(또는 프로세스) 실행을 종료 가능)
- Child has exceeded allocated resources.
- Tasks are no longer required.
- When parents (or processes) are terminated,
-
부모 프로세스는 다음과 같이 여러가지 이유로 자식 중 하나의 실행을 종료할 수 있다.
- ①자식이 자신에게 할당된 자원을 초과하여 사용할 때
- ②자식에게 할당된 태스트가 더이상 필요 없을 때
- ③부모가 exit를 하는데, 운영체제는 부모가 exit 한 후에 자식이 실행을 계속하는 것을 허용하지 않는 경우
- Some operating system does not allow child to continue if its
parent terminates => Cascading termination (부모(또는 프로세스)가 종료되었을 때, 일부 운영 체제는 부모(또는 프로세스)가 종료되면 자식(자녀)이 계속되지 못하게 함)
- UNIX variants (including Linux) in general re-parent the child
process to the init process. (일반적으로 UNIX 변형(Linux 포함)은 자식 프로세스를 init 프로세스로 다시 부모화)
Zombie vs. Orphan Processes
- 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식 프로세스는 고아프로세스 !
- 자식 프로세스가 종료되었지만 부모 프로세스가 자식 프로세스의 종료 상태를 회수하지 않았을 경우에 자식 프로세스를 좀비 프로세스 !
Zombie Processes
종료되었지만 부모 프로세스가 아직 wait() 호출을 하지 않은 프로세스
-
A process that has terminated, but its parent has not yet collected the status via wait
- usually because of bugs or coding errors.
- 종료되었지만 상위 프로세스가 아직 wait를 통해 상태를 수집하지 않은 프로세스
- 보통 버그나 코딩 오류 때문
-
All processes can normally exist as zombies only briefly.
- 모든 프로세스는 일반적으로 잠시 동안만 좀비로 존재할 수 있습니다.
-
When the parent calls wait, the child terminates normally.
- 부모가 wait을 호출하면 아이는 정상적으로 종료됩니다.
-
Parent is executing, while the child is dead.
-
A zombie process or defunct process is a process that has completed execution but still has an entry in the process table.
-
zombie 프로세스 또는 defected 프로세스는 실행을 완료
- BUT 프로세스 테이블에 항목이 있는 프로세스
Orphan Processes
- 부모가 wait() 를 호출하지 않고 대신 종료되면 하위 프로세스는 orphan 프로세스 ( 예 : 여전히 실행 중)
Process Address Space
- Each process has a logical memory space called process address space (or virtual address space) which is mapped to physical address space.
- 각 프로세스에는 프로세스 주소 공간(또는 가상 주소 공간)이라는 논리 메모리 공간이 있으며 물리적 주소 공간에 매핑됩니다.
- Typically contiguous memory from 0 to max address.
- 일반적으로 0 ~ 최대 주소의 연속 메모리
- Physical memory may not be contiguous.
- 물리적 메모리는 연속적이지 않을 수 있습니다
- When a process asks for dynamic memory (e.g., through malloc()), it doesn’t get additional physical memory; instead, it gets the right to use a new range of virtual address space.
- 프로세스가 동적 메모리를 요청할 때(예: malloc()를 통해) 추가 물리적 메모리를 얻지 못합니다. 대신 새로운 범위의 가상 주소 공간을 사용할 수 있는 권한 얻음
Paging Overview
- 연속되어 저장 x 여도 paging 기법으로 저장관리 해줘서 it's okay yo~
- page : 프로그램을 일정 크기로 나눈 단위
- page frame : 페이지 크기로 일정하게 나눠진 주기억장치의 단위
- 페이징이란 논리주소의 고정된 페이지(Page)라고 불리는 블록들로 분할 관리하는 기법이다.
- 각각의 페이지는 물리 메모리의 프레임과 맵핑한다.
- 페이지를 가리키는 논리주소에서 프레임을 카리키는 물리주소로 변환한다.
- 페이징 기법은 가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(page)를 동일하게 나눠진 주기억장치의 영역(page frame)에 적재시켜 실행하는 방법
-
Divide logical memory into blocks of same size called pages (size is power of 2, between 512 bytes and 8192 bytes).
- 물리적 메모리를 프레임이라 불리는 고정 크기의 블록으로 나눕니다.
- 프레임은 물리적 , 페이지는 논리적
-
Page and frame size are usually the same.
-
Keep track of all free frames.
-
To run a program of size n pages, we need to find m free frames (m can be smaller than n; partially load -> virtual memory)
- n pages 크기의 프로그램을 실행하려면, m 사용 가능한 프레임(m은 n보다 작을 수 있음, 부분적으로 로드 -> 가상 메모리)을 찾아야 합니다.
=> 필요한 공간보다 실제 frame이 부족할 수 있다.
-
Each process sets up a page table to translate logical to physical addresses.
- 각 프로세스는 논리적 주소를 물리적 주소로 변환하는 페이지 테이블을 설정
Address Translation Scheme
Address generated by CPU is divided into:
(1) Page number (p)
used as an index into a page table which contains base address of each page in physical memory.
- 페이지번호(p)
- 실제 메모리에 있는 각 페이지의 기본 주소를 포함하는 페이지 테이블에 인덱스로 사용됩니다.
(2) Page offset (d) => 얘는 변하지 않는다.
combined with base address to define the physical memory address that is sent to the memory unit.
- 페이지 오프셋 (d)
- 기본 주소와 결합하여 메모리 장치로 전송되는 물리적 메모리 주소를 정의합니다.
Two-Level Page-Table Scheme (글은 따로 X)
- page number : 20bit
- p1-page number : 10bit
- p2-page offset : 10bit
- page offset : 12bit
- 즉 p1은 outer page table(바깥 테이블)의 index이고, p2는 해당 바깥 테이블에서의 위치를 나타낸다.
- p1을 통해 outer-page table의 인덱스를 찾고, 해당 인덱스가 가리키는 page table에서 p2를 통해 physical 메모리의 frame번호를 찾는다. 마지막으로 d를 통해 physical 메모리에서의 위치를 찾는다.
Cooperating Processes
< 프로세스 두 가지 유형 >
Independent process. 독립 프로세스.
Co-operating process. 협력 프로세스.
< Advantages of process cooperation >
① Information sharing 정보 공유
② Computation speed-up 계산 속도 up
③ Modularity 모듈화
④ Convenience 편의성
Inter-Process Communication (프로세스 간 통신(IPC))
- Mechanism for processes to communicate and to synchronize their actions.
- 프로세스를 통신하고 작업을 동기화하는 메커니즘
- Using shared variables (or memory) 공유 변수(또는 메모리) 사용
- Using message passing 메시지 전달 사용
POSIX Shared Memory ( Producer & Consumer )
- Producer
- Consumer
(+)
- 생산자는 일부 품목을 생산하고 소비자는 그 품목을 소비
- 두 프로세스는 버퍼라고 알려진 공통 공간 또는 메모리 위치를 공유하며,
- 여기서 생산자에 의해 생산된 품목이 저장되고 소비자가 필요한 경우 해당 품목을 소비
(+)
POSIX 공유 메모리는 memory-mapped 파일을 사용하여 구현된다. memory-mapped 파일은 공유 메모리의 특정 영역을 파일과 연관시킨다.
-
프로세스는 fd = shm_open(name, O_CREAT | O_RDWR, 0666)
와 같이 시스템 콜을 사용하여 공유 메모리 객체를 생성한다.
-
ftruncate(fd, SIZE)
와 같은 함수를 사용하여 공유 메모리 객체의 크기를 바이트 단위로 설정한다.
-
ptr = (char *)mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)
와 같은 함수를 사용하여 공유 메모리 객체를 포함하는 memory-mapped 파일을 구축한다.
Message Passing System
-
Message passing system processes communicate with each other without sharing the same address space.
-
메시지 전달 시스템 프로세스는 동일한 주소 공간을 공유하지 않고 서로 통신
-
IPC (message passing) facility provides two operations:
- send(message) – message size fixed or variable
- receive(message)
-
If P and Q wish to communicate, they need to:
- establish a communication link (logical link) between them.
- 두 사람 사이의 커뮤니케이션 링크(논리 링크)를 설정합니다.
- exchange messages via send/receive.
- 메시지를 보내기/보내기 방식으로 교환
-
Issues designing message passing system
① Naming 이름 지정
② Synchronization 동기화
③ Buffering 버퍼링
(+)
- 메시지 전달 시스템에서의 프로세스 간 통신 (IPC in Message-Passing Systems)
- 메시지 전달 방식은 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고, 그들의 동작을 동기화할 수 있도록 허용하는 기법을 제공
- 특히 분산된 환경에서 유용
① Naming 이름 지정
(①-1) Direct Communication
- Processes must name each other explicitly:
- 직접 통신하에서, 통신을 원하는 각 프로세스는 통신의 수신자 또는 송신자의 이름을 명시
- send (P, message)
: send a message to process P. 프로세스 P에 메시지를 전송
- receive (Q, message)
: receive a message from process Q. 프로세스 Q로부터 메시지를 수신
(+)
< 특성 >
- 통신을 원하는 각 프로세스의 쌍들 사이에 연결이 자동으로 구축된다.
- 프로세스들은 통신하기 위해 상대방의 신원(identity)만 알면 된다.
- 연결은 정확히 두 프로세스 사이에만 연관
- 통신하는 프로세스들의 각 쌍 사이에는 정확히 하나의 연결이 존재
(①-2) Indirect Communication :
-
Messages are directed and received from mailboxes (also referred to as ports).
-
간접 통신에서 메시지들은 메일박스(mailbox) 또는 포트(port)로 송신되고, 그것으로부터 수신
- Each mailbox has a unique id.
- Processes can communicate only if they share a mailbox.
- mailbox 만 공유한다면 여러 process 가 사용이 가능!
- Primitives are defined as:
- send (A, message) – send a message to mailbox A.
- receive (A, message) – receive a message from mailbox A.
(+) < 특성 >
- 한 쌍의 프로세스들 사이의 연결은 이들 프로세스가 공유 메일박스를 가질 때만 구축
- 연결은 두 개 이상의 프로세스들과 연관될 수 있다.
- 통신하고 있는 각 프로세스 사이에는 다수의 서로 다른 연결이 존재할 수 있고,
- 각 연결은 하나의 메일박스(포트)에 대응
② Synchronization 동기화
-
Message passing may be either blocking or non-blocking.
-
메세지 전달은 blocking or non blocking일 수 있다.
-
Blocking is considered synchronous / Non-blocking is considered asynchronous.
-
Send and receive primitives may be either blocking or non- blocking.
-
프로세스 간의 통신은 send와 receive 프리미티브에 대한 호출에 의해 발생
-
각 프리미티브를 구현하기 위한 서로 다른 설계 옵션이 있다.
-
메시지 전달은 봉쇄형(blocking)이거나 비봉쇄형(nonblocking) 방식으로 전달된다.
-
②-1 : Blocking send** (받을 때까지 보내는 쪽 봉쇄)
- The sending process is blocked until the message is received by the receiving process or by the mailbox.
- 수신 프로세스 또는 사서함에 의해 메시지가 수신될 때까지 송신 프로세스가 차단
- 송신하는 프로세스는 메시지가 수신 프로세스 또는 메일박스에 의해 수신될 때까지 봉쇄
-
②-2 : Non-blocking send** (항상 보내)
- The sending process sends the message and resumes operation.
- 전송 프로세스는 메시지를 보내고 작업을 다시 시작
- 송신하는 프로세스가 메시지를 보내고 작업을 재시작
-
②-3 : Blocking receive** (상대가 보낼 때까지 받는 쪽 봉쇄)
- The receiver blocks until a message is available.
- 메시지를 사용할 수 있을 때까지 수신기는 차단
- 송신하는 프로세스가 메시지를 보내고 작업을 재시작
-
②-4 : Non-blocking receive** (항상 받아)
- The receiver retrieves either a valid message or a null.
- 송신하는 프로세스가 유효한 메시지 또는 null을 받음
-
send()와 receive()가 모두 봉쇄형일 때, 우리는 송신자와 수신자 간에 랑데부(rendezvous)를 하게 된다
-
(+) 랑데부 ? : 송신자 프로세스와 수신자 프로세스가 직접 만나야(*랑데부) IPC가 이루어지는 것이다. 송신이든 수신이든 먼저 요청한 프로세스는 상대방도 요청할 때 까지 대기상태로 전환
③ Buffering 버퍼링
- Queue of messages attached to the link;
- 통신이 직접적이든 간접적이든 간에, 통신하는 프로세스에 의해 교환되는 메시지는 임시 큐에 들어 있다.
< 큐를 구현하는 3가지 방식 >
③-① Zero capacity – 0 messages
- 큐 자체 길이가 0, 응답자 올 때까지 기다려
- 링크는 자체 안에 대기하는 메시지들을 가질 수 없다.
- 이 경우에,송신자는 메시지를 수신할 때까지 기다려야 한다.
- Sender must wait for receiver (rendezvous).
③-② Bounded capacity – finite length of n messages
- Sender must wait if link full.
- 큐는 유한한 길이 n을 가진다.
- 즉, 최대 n개의 메시지가 그 안에 들어 있을 수 있다. 큐가 가득 차면 봉쇄된다.
③-③ Unbounded capacity – infinite length
- Sender never waits.
- 큐는 잠재적으로 무한한 길이를 가진다. 따라서 메시지들이 얼마든지 큐 안에서 대기할 수 있다.
- 송신자는 절대 봉쇄 X
IPC in UNIX
Inter-Process Communication :
- Mechanism for various processes to communicate among them.
- 다양한 프로세스가 프로세스 간에 통신하기 위한 메커니즘
- Different processes run on different address space.
- 각기 다른 프로세스가 각기 다른 주소 공간에서 실행
- OS needs to provide mechanisms to communicate -> IPC.
- OS는 통신하기 위한 메커니즘을 제공 -> IPC.
< Types of IPCs in UNIX >
- Traditional UNIX IPCs : signal, pipe, socket
- System V IPCs : message queue, semaphore, shared memory
(1) 파이프 (Pipes) : 두 process 간 통신허용
- 파이프는 두 프로세스가 통신할 수 있게 하는 전달자로서 동작
(1)-1 일반 파이프 (Ordinary Pipes)
- 일반 파이프는 생산자-소비자 형태로 두 프로세스 간에 통신 허용
- 생산자는 파이프의 한 종단(쓰기 종단)에 쓰고,
- 소비자는 다른 종단(읽기 종단)에서 읽는다.
- 결과적으로 일반 파이프는 한쪽으로만 데이터를 전송할 수 있으며 오직 단방향 통신만을 가능하게 함
- 양방향 통신이 필요하다면 각각 다른 방향으로 데이터를 전송할 수 있는 두 개의 파이프를 사용해야 한다
-
Restrictive in that it only allows communication between
processes with a common ancestor which is a creator of a pipe.
-
파이프의 작성자인 공통 조상을 가진 프로세스 간의 통신만 허용한다는 점에서 제한적
-
Created by a process and the transmission for associated
descriptors is achieved only by inheritance by its descendants.
(i.e., by creating a child process using fork() system call)
-
프로세스에 의해 생성되고 관련 설명자에 대한 전송은 하위 항목에 의한 상속에 의해서만 수행됨
-
(+) 일반 파이프는 파이프를 생성한 프로세스 이외에는 접근할 수 없다. 따라서 통상 부모 프로세스가 파이프를 생성하고 fork()로 생성한 자식 프로세스와 통신하기 위해 사용
- fd 배열은 파일 디스크립터와 부모 및 자식 프로세스의 관계를 보여준다.
- 이 그림에서 보듯이 부모가 파이프의 쓰기 종단(fd[1])에 데이터를 쓰면
- 파이프의 읽기 종단(fd[0])에서 자식이 읽을 수 있다.
< Use of Pipe - Example >
- (+) UNIX와 Windows 시스템 모두에서 통신하는 두 프로세스는 부모-자식 관계를 가져야 한다는 것을 꼭 명심하라!!
- 이 유형의 파이프는 동일한 기계상의 두 프로세스끼리만 통신이 가능하다는 것을 의미한다.
(1)-2 지명 파이프 (Named Pipes) - FIFO
- 지명 파이프(Named Pipes)는 양방향으로 통신이 가능
- 부모-자식 관계도 필요로 하지 않는다.
- Named Pipes가 구축되면 여러 프로세스들이 이를 사용하여 통신 가능
-
Remove the constraint of anonymous pipe (i.e., no name, only used between processes that have a parent process in common) because they are entries in the file system.
-
익명 파이프는 파일 시스템의 항목이기 때문에 해당 제약 조건을 제거
-
Has a name and handled exactly like files with respect to file operations (e.g., open, close, read, write).
-
지명 파이프는 파일 시스템의 보통 파일처럼 존재한다.
-
Created by mkfifo or mknod commands.
-
시스템 콜로 생성
-
Can be created by C functions : mkfifo().
int mkfifo(const char *path, mode_t mode);
-
Reading from / writing to a named pipe can be achieved by using standard read() and write() system calls.
클라이언트 서버 환경에서 통신 (Communication in Client-Server Systems)
- 클라이언트 서버에서 사용할 수 있는 두 가지 다른 통신 전략
① Socket
② RPC
① Socket
-
A socket is defined as an endpoint for communication.
- 소켓(socket)은 통신의 극점(endpoint)
-
Concatenation of IP address and port number
- (1) IP 주소 / (2) PORT 번호
- 각 소켓은 IP 주소와 포트 번호 두가지를 접합(concatenate)해서 구별
-
The socket 161.25.19.8:1625 refers to port 1625 on host 161.25.19.8
-
Communication consists between a pair of sockets.
- 통신은 소켓 쌍으로 이루어진다, 소켓이 쌍으로 있어야 통신 가능!
< Socket Communication >
- (+) 클라이언트 프로세스가 연결을 요청 => 호스트 컴퓨터가 포트 번호를 부여한다. 이 번호는 1024보다 큰 임의의 정수가 된다.
- (+) 두 호스트 사이에 패킷들이 오갈 때 그 패킷들은 이 목적지 포트 번호가 지정하는 데 따라 적절한 프로세스로 배달, 모든 연결은 유일한 소켓 쌍으로 구성되어야 한다!!
② RPC : 원격 프로시저 호출 (Remote Procedure Calls)
(+) 원격 프로시저 호출(RPC) (From Wiki)
- 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술이다.
- 다시 말해, 원격 프로시저 호출을 이용하면, 프로그래머는 함수가 실행 프로그램에 로컬 위치에 있든 원격 위치에 있든 동일한 코드를 이용할 수 있다.
- Remote procedure call (RPC) abstracts procedure calls between processes on networked systems.
- 네트워크에 연결된 두 시스템 사이의 통신에 사용하기 위하여 프로시저 호출 기법을 추상화하는 방법으로 설계
< Main Components of RPC >
- (+) RPC는 클라이언트가 원격 호스트의 프로시저 호출하는 것을 마치 자기의 프로시저 호출하는 것처럼 해준다.
- (+) RPC 시스템은 클라이언트 쪽에 스텁을 제공하여 통신을 하는데 필요한 자세한 사항들을 숨겨준다.
REFERENCE
https://imbf.github.io/computerscience(cs)/2020/10/02/Process.html