프로세스와 스레드

문딤·2022년 8월 9일
0
post-thumbnail

프로세스(Process)

프로세스 란?

프로세스는 디스크에 있는 프로그램이 실행되서 운영체제에 의해 독립된 메모리 영역을 할당받고, cpu의 할당을 받을 수 있는 상태를 의미 한다.

=> 최소 하나의 스레드를 포함한 PCB를 가진 프로그램이다.
=> 자원에 접근하기위해서는 IPC를 사용한다.

PCB(Process Control Block)

  • 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳, 상태 정보를 저장하는 구조체이다.
  • 프로세스 상태 관리와 문맥 교환을 위해 필요하다.
  • PCB는 프로세스 생성 시 만들어지며, 주기억장치에 유지된다.

📍 포인터
프로세스의 현재 위치를 저장하는 포인터의 정보이다.

📍 프로세스 상태
프로세스의 각 상태를 저장.

📍 프로세스 번호
모든 프로세스에는 프로세스 식별자를 저장하는 고유한ID가 할당된다.

📍 프로그램 카운터
프로세스를 위해 실행될 다음 명령어의 주소를 포함하는 카운터를 저장한다.

📍 레지스터
누산기, 베이스 ,레지스터 및 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보이다.

📍 메모리 제한
운영 체제에서 사용하는 메모리 관리 시스템에 대한 정보가 포함된다.

📍 열린 파일 목록
이 정보에는 프로세스를 위해 열린 파일 목록이 포함된다.

IPC(Inter- process Communication)

프로세스 간에 통신하여 상호 커뮤니케이션을 하는 기법.
직접 대화하는 방법은 없지만,소통이 필요하기 때문에 만들어진 기법이다.

왜 직접소통하지 않는가❓
💨 프로세스끼리 쉽게 접근이 가능하면, 데이터나 코드가 다른 프로세스에 의해 쉽게 바뀔 우려가 있으므로, 직접적인 소통방법은 없다.

통신이 필요한 이유는❓

성능을 높이기 위해서이다.
로직 하나를 하나의 프로세스에서 수행하기보다, 여러 프로세스에 나눠서 수행한다면 보다 빠른 성능을 기대할 수 있다.
그 과정중에 필요한 데이터를 서로 공유할 수 있어야 한다.

IPC의 종류

  1. FILE 사용

텍스트 파일을 통해 데이터를 주고 받는것.

💨 실시간으로 직접 원하는 프로세스에 데이터를 전달하는게 어렵다.
=> 프로세스에 적재(LOAD) 되는 과정중에 컨텍스트 스위칭, 인터럽트등의 이벤트가 발생시 처리해야 한다.

  1. PIPE

단방향 통신, 즉 부모 프로세스에서 자식 프로세스로 일방적으로 통신하는 기법이다.
fork()를 통해 자식 프로세스를 만들고 나서 부모의 데이터를 자식에게 보낸다.

  1. 메시지 큐(Message Queue)

FIFO 방식으로 데이터가 전송되는 기법이다.

대용량 데이터를 처리하기 위한 배치 작업이나, 채팅 서비스, 비동기 데이터를 처리할 때 사용한다.

메시지 큐의 장점

비동기(Asynchronous): 큐에 넣기 때문에 나중에 처리할 수 있다.
비동조(Decoupling): 애플리케이션과 분리할 수 있습니다.
탄력성(Resilience): 일부가 실패시 전체에 영향을 받지 않는다.
과잉(Redundancy): 실패할 경우 재실행이 가능합니다.
보증(Guarantees): 작업이 처리된걸 확인할 수 있습니다.
확장성(Scalable): 다수의 프로세스들이 큐에 메시지를 보낼 수 있다.

ex) api 송수신, 비동기통신, 이메일 발송 및 문서 업로드, 많은 양의 프로세스 처리

파이프 vs. 메시지 큐

파이프는 부모-자식간의 통신이지만, 메시지 큐는 어떤 프로세스던지 통신이 가능하다.

  1. 공유 메모리

커널 공간에 메모리 공간을 만들고, 해당 공간을 변수처럼 쓰는 방식이다.
공유 메모리 key를 통해 여러 프로세스가 접근을 가능하게 한다.

  1. 시그널(signal)

가장 많이 사용하는 기법 중 하나이다. IPC를 위한 기법은 아니지만, 활용가능

커널 혹은 프로세스에서 다른 프로세스에 이벤트가 발생되었는지를 알려주는 기법이다.

프로세스 관련 코드에 관련 시그널 핸들러를 등록해서, 해당 시그널 처리를 실행하는 방식으로 공유한다.

EX)

1.SIGKILL : 프로세스를 죽여라. 슈퍼 관리자가 사용하는 시그널로, 어떤 경우든 프로세스를 죽인다.
2.SIGALRAM : 알람을 발생시켜라.
3.SIGSTP : 프로세스를 멈춰 → Ctrl+Z
4.SIGCONT : 멈춘 프로세스를 실행시킨다.

스레드

스레드 란?

◻ 프로그램 내에서 실행되는 프로그램 제어 흐름의 단위.
◻ 한 프로그램에 여러개의 스레드가 존재할 수 있다.
◻ 프로그램코드를 한 줄씩 실행하는 것이 스레드의 역활이다.
◻ 가벼운 프로세스라고 표현한다.

EX) 1개 단일 스레드, 2개 이상 멀티 스레드

프로세스 VS 스레드

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다.
스레드는 할당 받은 자원을 이용하는 실해의 단위이며, 프로세스내에 여러개 생길 수 있다.

멀티 프로세스 VS 스레드

Muiti proces는 하나의 프로그램을 여러개의 프로세스로 구성하여, 각 프로세스가 하나의 작업을 처리하는 것이다.

멀티 프로세스

⭕ 장점

하나의 프로세스가 잘못 되어도 프로그램은 동작함.

❌ 단점

context switching 비용 발생
멀티 스레드는 프로그램을 여러개의 스레드로 구성하고 각 스레드가 작업을 처리하는 것이다.

멀티 스레드
⭕ 장점

시스템 자원 소모 감소, 처리 비용 감소, 스레드간 자원 공유

❌ 단점

디버깅 어려움, 동기화 이슈 발생, 하나의 스레드의 오류로 전체 프
로세스에 문제 발생

멀티 스레드 vs 멀티 프로세스

✅ "멀티 스레드" 는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠른 장점이 있지만, 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료 될 위험을 갖고 있다.

✅ "멀티 프로세스" 는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리공간과 CPU 시간을 차지하는 단점이 있다.

✅ 두 방법은 동시에 여러 작업을 수행하는 점에서 동일하지만, 각각의 장단이 있으므로 적용하는 시스템에 따라 적합한 동작 방식을 선택하고 적용해야 한다.

+@ Context Switching

CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는데 이 과정을 의미한다.
동작중인 프로세스가 대기를 하면서 해당 프로세스의 상태(CONTEXT)를 보관하고 대기하다가 다시 실행할 때 복구하는 비용(시간)을 의미한다.

+@ Thread Safe

여러 thread가 동시에 사용되어도 안전하단 것을 뜻한다.

💨특정 함수 A와 변수 aa 가 여러 스레드에서 호출되어도 하나의 스레드에서 호출했을 때의 같은 결과가 보장되어야 한다는 의미이다.

프로세스의 상태 5가지

생성, 준비 , 실행, 대기 , 종료

Created State
프로세스가 생성되는 단계
작업을 커널에 등록하고, PCB를 할당한다.
가용 메모리 공간 체크, 할당받을 수 있는 메모리가 있는지 확인한다.

▶ 메모리가 할당되면 ,Ready State로 넘어간다.
|| 할당받을 수 있는 메모리가 없으면, Suspended Ready상태로 대기한다.

업로드중..

Ready State

프로세서만 제외, 메모리 등 다른 모든 자원을 할당 받은 상태
프로세서를 할당 받으면 즉시 실행이 가능한 상태

업로드중..

Running state

필요한 자원 및 프로세서를 모두 할당 받은 상태
프로세서를 차지하고 작업을 실행 중인 상태.

💨 Runing State에서 빠져나가는 두가지 상태

Preemption :
Ready State로 돌아가는 경우이다.
프로세서 스케줄링 등으로, 프로세서를 잃고 다시 프로세서 할당을 대기.

Block / Sleep :
입/출력 등의 특정한 Event 를 기다리게 된다.
할당받았던 프로세서를 반납하고, asleep(blocked) 상태가 되어I/O 자원 등 필요한 자원을 할당 받기를 기다린다.

Asleep / Blocked State :
프로세서 외 다른 자원을 기다리는 상태.
Wake-up : 자원을 할당받게 되면 Blocked State 에서 다시 Ready State 로 되는 것을 가리킨다.

Suspended State

메모리를 할당받지 못한, 혹은 빼앗긴 상태

Suspended Ready :

Ready State 처럼, 다른 자원을 할당 받은 상태이나
프로세서 및 메모리를 할당받지 못한 상태이다.

Suspended Blocked :

프로세스, 메모리, 기타 자원 모두 할당받지 못한 상태이다.

💨 Ready State 혹은 Blocked State 에서, 메모리를 잃게 되면 Suspended State 가 되고,

💨 메모리를 할당 받으면 다시 Ready State 혹은 Blocked State 로 돌아간다.

Terminated / Zombie State

◻ 프로세스 수행이 끝난 상태
◻ 프로세서, 메모리 등 모든 자원을 반납한다.
◻ 커널 내 일부 PCB 정보를 남겨, 프로세스 관리를 위한 정보 수집하기 위한 단계이다.
◻ 이 단계가 끝나면 프로세스는 삭제, 소멸된다.

참고

https://jhnyang.tistory.com/33

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_VS_%EC%8A%A4%EB%A0%88%EB%93%9C_%EA%B2%B0%EB%A1%A0

https://nostressdev.tistory.com/16

profile
풀스택개발자가 될래요

0개의 댓글