정리하고기록하자

프로세스 ( Process ) , 스레드 ( Thread ) 본문

개발 상식

프로세스 ( Process ) , 스레드 ( Thread )

정리하고기록하자 2022. 7. 10. 03:38
반응형

프로그램

어떤 작업을 위해 운영체제 위에서 실행 할 수 있는 파일

ex ) 웹 브라우저, 워드 프로세스, 카카오톡 등.


프로세스 ( Process )

운영 체제 위에서 실행중인 하나의 프로그램

프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 실행 대기중인 상태

즉 실행되고 있는 프로그램으로, 프로세스는 각 메모리 공간을 시스템으로부터 할당 받는다.

  • 실행중인 프로그램
  • CPU를 할당하는 대상
  • 시스템 내부에서의 작업 단위
  • PCB ( Process Control Block ) 에 존재하는 개체
  • 하나의 스레드( 프로그램 내의 실행 단위 )로 구성된 테스크

프로세스의 메모리 구조

Code 영역

실행할 프로그램의 코드가 저장된다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 된다.

Data 영역

전역변수와 정적변수가 저장된다. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸된다.

Stack 영역

지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터르 저장하는 영역이다. 함수 호출 시 할당되고 함수 반환 시 소멸된다. 로드 시 ( 컴파일 타임 ) 크기가 결졍된다.

Heap 영역

동적 데이터 영역이다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서 프로그램 동작 시 크기가 결정된다.

프로세스의 상태

프로세스는 다섯 가지 상태 중 하나를 가진다.

  • 생성 ( new ) : 갓 생성된 상태, OS의 커널에 PCB ( Process Control Block )등이 생성 된다
    • PCB : 운영 체제 커널의 자료구조로서 프로세스에게 할당할 자원을 설정하고 감시하는 데 필요한 프로세스의 정보를 PCB 라고 한다.
  • 준비 ( ready ) : CPU의 서비스를 받기 위해 Ready Queue에서 대기하고 있는 상태
  • 실행 ( running ) : CPU에 의해 실행되고 있는 상태
  • 대기 ( waiting or blocked ) : I/O 나 다른 event를 기다리며 멈춰있는 상태
  • 종료 ( terminated ) : 실행을 완료하는 등의 이유로 종료된 상태

PCB ( Process Controll Block )

프로세스 데이터들을 저장해 놓는 곳이다. 하나의 PCB 안에는 하나의 프로세스의 정보가 담겨있다.

PCB 상세 구조

PCB 가 필요한 이유

CPU 에서는 프로세스의 상태에 따라 교체 작업이 이루어진다 ( 인털럽트가 발생해서 할당받은 프로세스가 Block 상태가 되고 다른 프로세스를 running 으로 바꿀 때 )

이때, 앞으로 다시 수행할 Block 상태의 프로세스의 상태값을 PCB에 저장해두는 것이다.

PCB의 관리 방식

Linked List 방식으로 관리가 됩니다. PCB List Head 에 PCB들이 생성될 때마다 붙게 된다. 주솟값으로 연결이 이루어져 있는 연결 리스트 형태로, 삽입 삭제가 용이하다

즉, 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료 시 제거 된다

이렇게 수행 중인 프로세스를 변경 할 때, CPU의 레지스터 정보가 변경되는 것을 프로세스 문맥 교환 ( Context Switching ) 이라고 한다.

프로세스 문맥 교환 ( Context Switch )

다양한 사람들이 동시에 사용하는 것처럼 하기 위해서 Context Switching이 필요하게 되었다.

  • 컴퓨터 멀티태스킹을 통해 빠른 반응속도로 응답이 가능하다.
  • 빠르게 Task를 바꿔가면서 실행하기에 사람은 실시간처리가 되는 것처럼 보인다.
  • CPU가 Task를 바꿔가면서 실행하기 위해 Context Switching이 필요하게 되었다.

스레드 ( Thread )

스레드란 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위 라고 할 수 있다.

  • 사전적 의미
    • 프로세스 내에서 실행되는 여러 흐름의 단위
    • 프로세스의 특정한 수행 경로
    • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 특징
    • 스레드는 프로세스 내에서 각각 Stack 만 따로 할당받고, Code, Data, Heap 영역을 공유한다.
    • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
    • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.

장점

  • 응답성 : 다중 스레드로 구성된 Task 구조에서 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 Task 내의 다른 스레드가 실행되어 빠른 처리가 가능하다.
    • 예를 들어 웹 브라우저가 스레드를 여러 개 가지고 있을 때, 하나의 스레드는 이미지를 비롯한 추가 데이터를 받기 위해 서버에 요청으 걸어서 blocked 상태가 된 후, 다른 스레드가 이미 받아 놓은 HTML 텍스트를 화면에 출력할 수 있다. 이러한 비동기식 입출력을 통해 응답성을 높일 수 있다.
  • 자원 공유 : 하나의 프로세스 안에 CPU 수행 단위인 스레드를 두게 되면 code, data, resource 자원을 공유하여 효율적으로 자원 활용이 가능하다.
  • 경제성 : 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
  • 멀티 프로세서 아키텍처에서의 이용성 : 각각의 스레드가 서로 다른 CPU를 가지고 병렬적으로 작업을 진행해서 훨씬 효율적으로 작업을 수행 할 수 있다.

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

멀티 프로세싱은 여러 개의 플로세스가 각자 하나의 작업 ( Task )을 맡아 처리하는 것을 말한다.

멀티 스레딩은 여러 개의 스레드가 각자 하나의 작업 ( Task ) 을 맡아 처리하는 것을 말한다.

  • 멀티 프로세싱
    • Context Switching 이 발생하면 캐시에 존재하는 모든 데이터를 리셋 하고 다시 캐시 정보를 불러와야 한다. 즉 Cntext Switching의 오버헤드가 커서 비용이 크다
    • 프로세스간의 통신에 복잡한 IPC를 사용하여 통신해야 한다.
    • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스에만 이상이 생기고 다른 프로세스에는 영향을 주지 않는 장점도 있다.
  • 멀티 쓰레딩
    • 시스템 자원 소모가 감소한다. 프로세스를 생성하는 system call이 줄어들어 자원을 효율적으로 관리 할 수 있다.
    • 시스템 처리량이 증가한다.
    • 프로세스 내의 Data, Code, Heap 영역을 공유하기 때문에 스레드 간의 통신이 간단하다
    • 스레드 간의 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.
    • 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 준다.

참고 :

반응형

'개발 상식' 카테고리의 다른 글

쿠키, 세션, JWT  (0) 2022.06.19
네트워크 시스템의 Layer and Architecture  (0) 2022.06.11
TCP / IP  (0) 2022.06.05
Spring - PSA  (0) 2022.05.02
Spring - DI  (0) 2022.05.02