프로세스는
실행 중인 프로그램으로, 순차적으로 실행된다.
즉,프로그램이 실행되면프로세스가 되고, 이는 컴퓨터메모리에서 실행되는 프로그램의 인스턴스이다.
실행할 다음 명령의 주소를 추적하는 포인터중요한 프로세스 관련 정보를 저장하는 작고 빠른 스토리지 위치실제 프로그램 코드 또는 CPU가 실행해야 하는 명령어가 저장전역 변수가 저장함수 호출을 관리하고 실행 순서를 유지하는 데 중요합니다.동적으로 할당되는 메모리 영역프로그램은 실행 파일이 메모리에 로드될 때 프로세스가 된다.
즉, 운영 체제가 디스크에서 실행 파일을 읽고 메모리에 로드하여 CPU가 실행할 수 있도록 준비할 때 프로세스가 생성된다.

텍스트 섹션은 프로그램의 기계어 코드를 저장하는 영역입니다. 이 영역은 읽기 전용이며, 프로세스 실행 도중 변경되지 않습니다.
데이터 섹션은 전역 변수와 정적 변수를 저장하는 영역입니다. 프로세스가 실행되는 동안 이 영역의 값은 변경될 수 있습니다.
스택은 함수 호출과 관련된 데이터를 저장하는 영역입니다. 함수 매개변수, 반환 주소, 지역 변수 등이 스택에 저장됩니다. 스택은 Last-In-First-Out (LIFO) 방식으로 동작하며, 함수 호출 시 스택에 데이터가 쌓이고, 함수 종료 시 데이터가 제거됩니다.
힙은 프로세스가 실행 중에 동적으로 메모리를 할당하는 영역입니다. 프로세스는 필요에 따라 힙에서 메모리를 할당받거나 해제할 수 있습니다. 힙의 메모리 공간은 프로세스 실행 도중 필요한 만큼 확장 및 축소될 수 있습니다.
프로세스의 구성 요소를 통해 프로그램이 실행되고, 데이터를 저장하며, 동적 메모리 할당을 처리할 수 있습니다. 이러한 구성 요소들이 결합되어 프로세스가 시스템에서 원활하게 작동하게 됩니다.

프로세스 상태는 운영 체제에서 수명 동안
프로세스의 현재 상태 또는 조건을 나타냄. 프로세스 상태는PCB에 저장되어 있음.
new
생성되는 단계running
명령어를 실행하고 있는 상태waiting
특정 이벤트가 발생하기를 기다리고 있는 상태ready
CPU에 할당되기를 기다리는 상태terminated
실행을 완료한 상태
프로세스 제어 블록(Process Control Block, PCB)은 운영 체제에서 프로세스의 중요한 정보를 저장하는
자료 구조이다.메모리에 상주한다.
Process state
Program counter
CPU registers
CPU scheduling information
Memory-management information
Accounting information
I/O status information
프로세스 스케줄링은 운영 체제가 사용 가능한 프로세스에
CPU 시간을 효율적으로 할당하여 CPU 사용률을 극대화하는 메커니즘이다.
프로세스 스케줄러는 사용 가능한 프로세스 풀에서 CPU에서 실행할다음 프로세스를 선택하는 일을 담당한다.
이러한 프로세스를 관리하고 구성하기 위해 스케줄러는Job queue,Ready queue,Device queue등을 사용한다
스케쥴링 큐는 운영 체제에서 프로세스를 관리하기 위해 사용되는 자료 구조로, 여러 종류의 큐가 있습니다. 각 큐의 목적과 관계를 아래와 같이 설명하겠습니다.
Job queue
모든 프로세스를 포함하는 큐Ready queue
실행을 기다리는 모든 프로세스의 집합Device queues
I/O 장치를 기다리는 프로세스의 집합
프로세스는 이러한 큐 간을 이동하며 실행 과정을 거칩니다.
이 과정은 다음과 같습니다:
스케줄러는 운영 체제의 컴포넌트로, 시스템에서 실행할 프로세스를 선택하고 관리합니다. 스케줄러는 크게 단기 스케줄러(Short-term Scheduler)와 장기 스케줄러(Long-term Scheduler)로 나누어집니다.
단기 스케줄러(Short-term Scheduler)
CPU에 할당할 프로세스를 선택장기 스케줄러(Long-term Scheduler)
메모리에 로드할 프로세스를 선택장기 스케줄러와 단기 스케줄러는 각각 시스템의 성능과 자원 관리를 최적화하는 데 중요한 역할을 담당합니다. 이 두 스케줄러가 협력하여 프로세스를 메모리에 로드하고, CPU를 효율적으로 사용하여 시스템의 전반적인 성능을 개선합니다.

중기 스케줄러는 다음과 같은 상황에서 작동할 수 있습니다:
메모리 부족
시스템 내에서 실행 중인 프로세스의 수가 많아져 메모리가 부족한 경우, 중기 스케줄러는 일부 프로세스를 일시적으로 메모리에서 제거하여 공간을 확보합니다.
효율성 향상
중기 스케줄러는 메모리에서 일시 중지된 프로세스를 다시 로드하여 프로세스의 실행을 재개시키기도 합니다. 이를 통해 시스템의 전반적인 성능과 자원 사용률을 개선할 수 있습니다.
중기 스케줄러는 이러한 작업을 통해 시스템의 메모리 사용 효율성을 높이고, 자원 경쟁이나 메모리 부족 문제를 완화하여 시스템 성능을 개선하는 데 기여합니다. 이를 통해 프로세스 실행 시간을 최소화하고 시스템의 처리량을 최대화하는 데 도움이 됩니다.

Context Switch:
현재 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태를 로드하여 CPU가 동시에 여러 작업을 효율적으로 관리할 수 있도록 하는 프로세스
Context Switch는 CPU가 한 프로세스를 실행에서 다른 프로세스로 전환할 때 발생
멀티태스킹 기능을 제공하고 운영 체제에서 여러 프로세스를 동시에 관리하기 위해 필요함
Context Switch 중에 시스템은 이전 프로세스의 상태를 저장하고 새 프로세스에 대해 저장된 상태를 로드, 프로세스 상태는 PCB에 저장됨
Context Switch 시간은 CPU가 스위치를 실행하는 동안 프로세스를 활성화하지 않기 때문에 오버헤드로 간주됨
Context Switch에 소요되는 시간은 하드웨어 지원에 따라 다름
CPU당 여러 개의 레지스터 세트와 같은 일부 하드웨어 기능은 한 번에 여러 개의 컨텍스트를 로드할 수 있으므로 컨텍스트 전환 시간을 줄이고 효율성을 향상시킬 수 있음
Process creation은 부모 프로세스가 하위 프로세스를 생성하는 메커니즘으로, 효율적인 시스템 성능을 보장하기 위해 리소스 공유 및 실행 옵션을 관리하면서 계층 구조를 형성합니다.
상위 프로세스에 의해 하위 프로세스가 생성되어 프로세스 트리가 생성됨
이 계층 구조는 시스템에서 상위 프로세스와 하위 프로세스 간의 관계를 나타냄
각 프로세스는 고유 프로세스 식별자(PID)를 사용하여 식별되고 관리되며, 이는 프로세스 생성 중에 운영 체제에 의해 할당됨
상위 프로세스와 하위 프로세스 간의 리소스 공유 옵션은 모든 리소스 공유, 상위 리소스의 하위 집합 공유 또는 리소스를 전혀 공유하지 않는 등 다양할 수 있음
리소스 공유의 선택은 통신, 메모리 관리 및 전체 시스템 성능에 영향을 미침
부모 프로세스와 자식 프로세스의 실행 옵션에는 부모 프로세스와 자식 프로세스가 동시에 실행되는 동시 실행 또는 부모 프로세스가 종료될 때까지 기다리는 순차 실행이 포함
실행 옵션의 선택은 제어 흐름과 전체 시스템의 효율성에 영향을 미침

리눅스에서 프로세스 생성은 주로 fork()와 exec() 시스템 호출(System call)을 사용하여 수행된다. 이 과정에서 프로세스 식별자(PID)는 각 프로세스에 고유한 식별자로 사용된다.
fork()
exec()
PID
프로세스 종료는 리눅스와 유닉스 기반 시스템에서 exit(), wait(), abort() 함수를 사용하여 이루어진다.이 함수들은 프로세스가 정상적으로 종료되거나 예기치 않은 상황에서 종료되는 경우를 다룬다.
exit()
wait()
abort()
Zombie 프로세스와 Orphan 프로세스는 두 가지 특수한 종류의 프로세스이다. 이들은 프로세스 생성과 종료 과정에서 발생하는 특정 상황에서 만들어진다.
Zombie 프로세스
종료 상태를 회수하지 않은 경우, 자식 프로세스는 좀비(zombie) 프로세스가 된다.Orphan 프로세스
이러한 상황을 피하기 위해, 프로세스 생성 및 종료를 올바르게 관리하고, 부모 프로세스는 자식 프로세스의 종료 상태를 적절히 회수해야 합니다.

IPC(Inter-Process Communication) 는 프로세스가 서로 통신하고 작업을 동기화하여 운영 체제 내에서 프로세스 간의 효율적인 조정 및 협력을 가능하게 하는 메커니즘이다.
주로,message passing과shared memory를 통해 프로세스 간 통신을 가능케 한다.
공유 메모리는 여러 프로세스 간에 공유되는 메모리 영역으로, 프로세스 간에 데이터를 직접 통신하고 교환할 수 있다
프로세스 자체에 의해 관리프로세스 간에 동기화가 필요하다는 것Message passing은 프로세스가 동일한 주소 공간을 공유하지 않고 서로 통신할 수 있도록 하는 프로세스 간 통신 방법이다. (IPC의 방법 중 하나)
이 방법은 프로세스가 공유 메모리 영역에 액세스하지 않고 데이터 또는 신호를 교환해야 할 경우 특히 유용
Message passing은 일반적으로 send(message)와 receive(message)의 두 가지 주요 작업을 제공
두 프로세스, 즉 P와 Q가 메시지 전달을 사용하여 통신하려면 두 프로세스 간에 communication link(logical link라고도 함)를 설정해야 함
메시지 전달 시스템을 설계할 때 고려해야 할 몇 가지 문제는 다음과 같습니다:
바로 아래에서 다시 설명하겠음!
프로세스 간 직접적으로 메시지를 주고받는 방법
예)
프로세스 Q에 메시지를 보내려면 : send(Q, message)
프로세스 P에서 메시지를 수신하려면 : receive(P, message)
통신 링크는 통신이 필요한 모든 프로세스 쌍 간에 자동으로 설정됨
즉, 프로세스는 연결을 설정하고 메시지를 교환하기 위해 서로의 ID(예: 프로세스 식별자)만 알면 됨
Direct communication에서는 각 링크가 정확히 한 쌍의 통신 프로세스와 연결됨
이렇게 하면 메시지가 의도된 발신인과 수신인 사이에서만 교환됨
Direct communication의 통신 링크는 일반적으로 양방향이며 메시지를 양방향으로 보내고 받을 수 있지만 메시지가 한 방향으로만 전송되는 단방향일 수도 있음
프로세스가 mailbox나 port를 이용해 메시지를 주고받는 방법
예)
메일박스 A에 메시지를 보내려면 : send(A, message)
메일박스 A에서 메시지를 수신하려면 : receive(A, message)
각 mailbox에는 고유한 식별자가 있으며 프로세스는 common mailbox를 공유하는 경우에만 통신 가능
Communication link의 속성
프로세스는 메시지 송수신을 처리 완료할 때까지 대기해야함
동기적(Synchronous)
Blocking send
메시지를 보낸 프로세스는 수신자가 메시지를 성공적으로 수신할 때까지 대기
Blocking receive
메시지를 받는 프로세스는 받은 메시지가 사용 가능할 때까지 대기
프로세스는 메시지 송수신 요청이 되면 다른 작업할 수 있음
비동기적(Asynchronous)
Non-blocking send
메시지를 보내고 수신 여부 상관 없이 다른 작업 가능
Non-blocking receive
메시지를 받으면 사용 가능한 메시지든 null 메시지든 일단 받음
발신자와 수신자 간에 메시지가 전송되는 동안 메시지를 일시적으로 저장하는 대기열(queue)
컴퓨터 네트워크에서 통신을 위한 엔드포인트(주로 웹 주소)
클라이언트와 서버가 소켓을 통해서 통신한다
1. Connection-Oriented
- TCP(Transmission Control Protocol)를 사용
- 두 엔드포인트 간에 안정적이고 순서가 지정된 오류 검사 통신을 제공
- TCP 소켓은 데이터를 교환하기 전에 연결을 설정하고 데이터가 정확하게 전송되는지 확인
2. Connection-less
- UDP(User Datagram Protocol)를 사용
- UDP는 안정성, 순서 지정 또는 오류 확인을 보장하지 않는 더 간단하고 빠른 프로토콜
- 스트리밍 미디어나 온라인 게임과 같이 정확도보다 속도가 중요한 애플리케이션에 적합
3. Multicast
- 멀티캐스트 IP 주소를 사용하여 여러 수신자에게 동시에 데이터를 보냄
- 그룹 통신, 화상 회의 또는 방송과 같은 응용 프로그램에 유용
분산 시스템의 프로세스 간에 프로시저 호출을 추상화하는 데 사용되는 방법
서로 다른 컴퓨터에서 실행되는 응용 프로그램 간의 프로세스 간 통신에 사용됨
RPC는 서비스 차별화를 위해 포트를 사용합니다
Stub
XDR(eXternal Data Representation)
프로세스 간 통신에 사용되는 메커니즘으로, 서로 다른 프로세스 간에 데이터를 전송할 수 있다.
Ordinary Pipes(Anonymous Pipes)와 Named Pipes(FIFO special file) 있음

Producer: 한 쪽에서 정보를 쓰는 대상
Consumer: 다른 쪽에서 정보를 읽는 대상
머임 교수님 강의자료 없자나요 ㅡㅡ
걍 건너뜁니다~