[운영체제] 프로세스와 스레드

찬들이·2022년 8월 9일
0

컴퓨터공학

목록 보기
9/34

🎯 프로세스와 스레드

프로세스

  • 프로세스는 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태를 의미한다.

  • 프로세스는 code, data heap, stack 영역으로 구분되어 있다.

    • code : 프로그래머가 작성한 프로그램이 코드 영역에 작성된다.
    • data : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있다.
    • stack: 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현 할 때 사용 된다.
    • heap : 동적으로 할당되는 데이터들을 위해 존재하는 공간이다.
  • 서로 다른 프로세스간에 메모리 공간 접근은 허용되지 않는다

  • 단! IPC를 구현하면 접근을 할 수 있다.

    스레드

  • 스레드는 어떠한 프로그램 내에서 실행되는 흐름의 단위를 말한다.

  • 일반적으로 하나의 어플리케이션은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.

  • 스레드는 프로세스 내에서 각각 stack만 따로 할당받고 code, data,heap 영역은 공유한다.

  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다.

    프로세스 vs 스레드

  • 프로세스는 자원을 공유하지 않지만, 스레드는 자원을 공유한다!!

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

멀티 프로세스

  • 멀티 프로세스란 하나의 어플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

  • 멀티 프로세스의 특징
    여러개의 자식 프로세스 중 하나에 문제가 발생해도 다른 자식 프로세스에 영향이 확산되지 않는다
    구현이 비교적 간단하고 각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당된다.
    프로세스 간 통신을 하기 위해서는 IPC를 사용해야 한다.
    메모리 사용량이 많다
    * 스케쥴링에 따른 Context Switch가 많아지고 성능 저하의 우려가 있다.

    멀티 스레드

  • 멀티 스레드란 하나의 어플리케이션을 여러개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다.

  • 사용자와 상호작용하는 어플리케이션의 경우 단일 스레드로 network 또는 DB와 같은 긴 작업을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.

  • 멀티 스레드의 특징

    • 자식 스레드의 요류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 수행된다.
    • 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
    • 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
    • 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
    • 구현 및 테스트, 디버깅이 어렵다.
    • 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
    • 동기화 또는 교착상태가 발생하지 않도록 주의해야 한다.
    • 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다.

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

  • 멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에게는 영향을 끼치지 않지만, 멀티 스레드는 디버깅이 어렵기 때문에 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 준다.

  • 멀티 프로세스는 각각 독립된 메모리 영역을 갖고 있어 오버헤드 또는 Context Switching이 발생하여 성능이 저하되지만 멀티 스레드의 경우 코드영역과 데이터 영역을 공유하기 때문에 자원소모가 적고 응답시간이 단축되어 시스템 처리율이 향상된다.

  • 출처 및 더 자세한 설명 : 프로세스 vs 스레드

프로세스의 상태 5가지

  • 상태 5가지
    • 생성 : 프로세스 생성 상태
    • 실행 : 프로세스가 CPU에 할당되어 실행 중인 상태
    • 준비 : 프로세스가 CPU에 할당되기를 기다리는 상태
    • 대기 : 보류라고도 하며, 프로세스가 입출력이나 이벤트를 기다리는 상태
    • 종류 : 프로세스 종료 상태
  • 프로세스의 상태 전이
    • 승인(Admitted) : 프로세스 생성이 가능하여 승인됨.
    • 스케줄러 디스패치(Scheduler Dispatch) : 준비 상태에 있는 프로세스 중 하나를 선택하여 실행시키는 것.
    • 인터럽트(Interrupt) : 예외,입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를 줂비 상태로 바꾸고, 해당 작업을 먼저 처리하는 것.
    • 입출력 또는 이벤트 대기(I/O or Event wait) : 실행 중인 프로세스가 입출력이나 이벤트를 처리해야 하는 경우, 입출력/이벤트가 모두 끝날 떄까지 대기 상태로 만드는 것.
    • 입출력 또는 이벤트 완료(I/O or Event Completion) : 입출력/이벤트가 끝난 프로세스를 준비 상태로 전환하여 스케줄러에 의해 선택될 수 있도록 만드는 것.
profile
Junior-Backend-Developer

0개의 댓글