⏱️ 4. 프로세스
📄 1. 프로세스의 PCB 구성 요소
PCB 구성 요소 | 설명 |
---|---|
① 프로세스 식별자 (PID) | |
② 프로세스 이름 | |
③ 프로세스 상태 정보 | 1. 준비, 실행, 대기, 종료 2. 프로그램카운터 (PC) : 다음에 실행할 명령어 주소 3. CPU 레지스터 값 |
④ 가상 메모리 정보 | 가상 메모리와 실제 메모리 매핑 정보 |
⑤ 스케쥴링 정보 | 1. 우선순위 2. CPU 점유 시간 3. 프로세스가 입출력 작업을 완료할 때까지 대기해야하는 정보 |
⑥ 자원의 타입 | 1. CPU 점유 시간 2. 메모리 공간 3. I/O 장치 |
📄 2. 프로세스 상태 & 상태 전이
상태 (Node) & 상태 전이 (Arrow)
1). 상태
상태 | 설명 |
① 생성 (new) | 1. "Ready" 상태로 이동하기 전의 초기화 단계 2. PCB 생성 |
② 준비 (Ready) | 1. 실행 큐에 위치 2. CPU 이용 여부가 결정된다면 "Running" 상태로 전환 혹은 CPU를 반납하여 다시 할당받아야 하는 상태임 3. 메모리 최적화를 위해 Swap-in & Swap-out 과정이 포함됨 실행이 가능하지만 메모리가 부족할 때, 스왑 아웃하여 메모리를 확보할 수 있음 |
③ 실행 (Running) | 1. CPU를 점유하는 단계, 다음 3가지 요인으로 다른 상태로 중간에 전환됨 "1. Timeout" / "2. I/O 요청" / "3. 선점 인터럽트" |
④ 대기 (Waiting) | 1. I/O 요청에 의해 전환된 상태, 완료되면 다시 Ready로 전환 2. CPU을 자발적으로 반납한다. 3. 메모리 최적화를 위해 Swap-in & Swap-out 과정이 포함됨 * 입출력 작업을 기다리는 동안 CPU를 사용하지 기 때문에 이러한 프로세스는 실행을 위해 즉각적으로 메모리에 있을 필요가 없으므로, 시스템의 메모리가 부족할 때 스왑 아웃의 우선 대상이 될 수 있음 |
⑤ 종료 (Terminated) | 1. 프로세스 작업이 완료되고 프로세스가 해제되어 소멸하는 상태 2. 모든 자원을 해제하고 PCB가 삭제됨 |
2). 상태 전이
상태 전이 | 설명 |
---|---|
① Dispatch (Ready -> Running) | 작업을 시작 |
② TimeOut (Running->Ready) | CPU 점유시간이 모두 사용되었을때 Ready로 전환하는 상태 ❌ Running->Waiting이 아니다! ❌ |
③ Preemption (Running -> Ready) | CPU 점유시간이 비록 사용되지 않더라도 높은 우선순위 프로세스에 의해 CPU를 뺏기기도 한다. |
④ Block (Running -> Waiting) | I/O 요청을 기다려야 할 때, 자발적으로 CPU를 반납하고 Waiting 으로 전환하는 과정 |
⑤ Wake-up (Waiting -> Ready) | I/O 요청이 완료되어 Ready 상태로 전환하는 과정 |
⑥ Terminate (Running -> Terminated) | 작업이 완료되거나 오류로 실행할 수 없을때, 프로세스 자원을 해제하고 PCB를 삭제함 |
📄 3. Context Switching
CPU 입장에서 프로세스가 다른 프로세스로 전환할 때 발생하는 과정
- Running 이였던 프로세스 상태를 저장 == "Context를 저장하고"
- Dispatch 하여 Next 프로세스를 실행할때, 이전 복원할 내용이 있으면 상태를 복원 하는 작업을 수행한다.
- 문맥 교환 타이밍은 스케쥴링 기법에 따라 정해진다.
- 각 스레드에 대한 동적 우선 순위를 유지하며,
인터랙티브 스레드를 우선시하여 특정 스레드가 기아상태가 되는것을 방지한다.
- 각 스레드에 대한 동적 우선 순위를 유지하며,
1). 절차
① Current Process's Context Save
PCB에 다음 컨택스트들을 저장한다.
- CPU 레지스터 컨택스트 : "프로그램 카운트", "스택 포인터"
- 메모리 주소 공간 컨택스트 : 현재 프로세스가 사용하는 메모리 주소 공간을 저장
② Next Process's Context Reload
Next Process의 컨택스트를 읽어온다.
- CPU 레지스터 컨택스트 : "프로그램 카운트", "스택 포인터"
- 메모리 주소 공간 컨택스트 : 현재 프로세스가 사용하는 메모리 주소 공간을 저장
문맥교환 Context_Switcing
Stop thread 1 ->
Schedule thread 1 out ->
Schedule thread 2 in ->
Start thread 2
다른 스레드로 Context_Switcing한다면
현재 스레드의 리소스, 데이터를 저장하고
또 다른 스레드의 리소스를 CPU & 메모리에 복원해야 한다.
2). 컨택스트 스위칭 연산.
- 컨텍스트 스위칭은 CPU 자원을 사용하는 작업이라 오버헤드가 당연히 발생한다.
컨텍스트 저장 및 복원해야 하는 작업은 데이터에 비례해 연산량이 높아짐.
스레싱
- 너무 많은 스레드를 가동하게 되면 스레싱이 발생한다.
- Context_Switcing에 더 많은 비용이 들어가는 문제가 생긴다.
📄 4. 협력 프로세스(Cooperative Processes)와 자원 공유
협력 프로세스의 특징
① 자원 공유 : 프로세스 사이에 자원 공유
② 동기화 : 프로세스는 작업 진행 상황에 따라 서로 동기화가 필수, 세마포어, 뮤텍스 기법이 존재한다.
③ 통신 : IPC로 서로 정보를 주고 받으며, 파이프, 메세지큐, 공유 메모리 방식이 있음
1). IPC 통신 방법
통신 방법들 | 설명 |
---|---|
① 파이프 | 데이터 스트림 전송, "한 프로세스의 출력"->"다른 프로세스의 입력" |
② 메시지 큐 | 프로세스간 전 메시지(데이터 블록)를 전송, 선입선출, 비동기적으로 송수신 가능 |
③ 공유 메모리 | 같은 공유 메모리를 사용해 프로세스간 자원 교환이 훨씬 빠름, 동기화 기법을 사용해야함 |
④ 소켓 | 네트워크를 통한 프로세스 통신이 가능함, TCP/UDP 프로토콜을 사용함 |
⑤ 시그널 | 비 동기적으로 다른 프로세스에 이벤트를 발생했음을 날린다. |
④ 소켓 통신
- 서버 차례 (소켓 생성) : 서버는 소켓을 생성하고, 특정 포트에 바인드 하여, 클라이언트측 연결 요청을 대기함, 클라이언트의 연결을 수락하는 책임 또한 있다, 마지막으로 데이터를 받고 응답을 전송하는 역할도 해야한다.
- 클라이언트 차례 (서버에 연결 요청) : 서버의 "IP 주소& 포트번호"를 사용해 서버에 연결을 시도, 마찬가지로 데이터 전송과 응답을 받는 역할도 해야한다.
- 데이터 송수신 (소켓 사용) : 클라가 서버에 연결이 성립되면 소켓을 통해 데이터를 송수신 할 수 있음.
- 연결 종료 : 데이터 전송이 완료되면 양쪽 프로세스 모두 소켓 연결을 종료함
참조
'CS > OS' 카테고리의 다른 글
| 니앙팽이 - 멀티스레딩 | 6 | 스레드 (0) | 2025.01.18 |
---|---|
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법 (0) | 2025.01.18 |
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙 (0) | 2025.01.18 |