ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스와 쓰레드
    CS 2020. 8. 30. 17:35
    반응형

    프로세스

    메모리에 적재되어 실행되고 있는 프로그램. 프로그램의 인스턴스 라고 부르기도 한다.

    프로그램이란 실행할 수 있는 명령어의 집합이다.

    프로세스는 커널에 의해 관리되는데, 프로세스의 정보들을 담은 **PCB**(Process Control Block) 자료구조를 통해서 프로세스들을 제어한다. PCB 정보들은 커널 메모리에 있다.

    프로세스는 운영체제로부터 독립적인 아래 메모리들을 할당 받는다.

    • Code - 실제 실행 코드를 담은 영역

    • Data - 전역 변수 및 Static 변수들을 담은 영역

    • Heap - 프로세스에서 동적으로 할당 되는 변수들을 담은 영역

    • Stack - 호출된 함수의 복귀 주소와, 지역 변수 등이 쌓이는 영역

    각 프로세스는 운영체제에 의해 독립적으로 관리된다. 그러므로 서로 겹치거나 메모리 영역을 공유하지 않는다. 예외적으로 같은 프로그램의 프로세스들의 경우에는 Code 영역은 서로 공유한다.

    프로세스간의 통신은 **IPC**(Inter Process Communication) 이라는 인터페이스를 통해서만 가능하다. 프로세스 간의 통신은 같은 컴퓨터 내에서 뿐만아니라 서로 다른 컴퓨터의 프로세스간의 통신도 포함한다. 이 때 각 컴퓨터의 시스템이 다를 수 있기 때문에 Protocol의 개념이 추가된다.

    프로세스 종류

    운영체제 프로세스

    • 커널 프로세스 or 시스템 프로세스 라고 불림

    • 사용자 프로세스 생성 및 시스템 운영에 필요한 작업 수행

    • 프로세스 실행 순서제어와 다른 프로세스와 사용자 영역을 침범하지 못하게 감시

    사용자 프로세스

    • 사용자가 실행한 프로세스

    병행 프로세스

    • 프로세스 여러개가 동시에 실행됨.

      1. 독립 프로세스

        • 서로 독립적으로 실행되어 상호 영향을 받지 않고 데이터를 공유하지 않음.

      2. 협동 프로세스

        • 상호 영향을 받으며 실행되는 프로세스

        • 상호 통신을 위한 수단과 동기화가 필요

    멀티 프로세스

    하나의 프로그램을 여러 개의 프로세스로 구성해 각 프로세스가 하나의 작업을 처리하도록 만든 것.

    장점

    • 여러개의 프로세스 중 하나가 에러 또는 비정상 종료되어도 나머지 프로세스에 영향을 주지 않는다.

    단점

    • 컨텍스트 스위칭에서 오버헤드가 발생할 수 있다.

    • 프로세스는 각각 독립된 메모리 영역을 할당받았기 때문에 상호 공유하고 있는 메모리가 없다. 때문에 컨텍스트 스위칭이 발생하면 캐시에 있는 데이터를 모두 지우고 다시 불러와야한다.

    • 프로세스간 통신을 하기 위해서는 IPC 라는 인터페이스를 통해 해야한다.

    쓰레드

    프로세스 내에서 실행되는 흐름의 단위이다.

    각 쓰레드는 Stack 메모리를 독립적으로 할당 받으며, 프로세스 내의 Code, Data, Heap 영역을 공유한다. 한 프로세스 내의 쓰레드는 한 개 일 수도 있고 여러개 일 수도 있다.

    멀티쓰레드

    여러 쓰레드가 독립적으로 작업을 병렬로 처리할 수 있는 방법.

    단일 쓰레드 만으로 하나의 프로세스를 구성한다면, 일련의 모든 과정들을 순서대로 실행 시키므로 대기할 필요가 없는 작업까지 기다리므로 병목현상이 발생할 수 있다는 단점이있다.

    예를 들면, 안드로이드 앱 내에서 서버통신을 하고, 해당 응답을 통해 무언가 작업한다고 생각하자. 이 일련의 과정들이 순차적으로 진행되기 때문에, 서버통신이 오래걸리는 경우 이 작업을 기다리느라 다른 작업들이 모두 멈추는 현상이 나타난다.

    쓰레드의 종류

    • 사용자 레벨 쓰레드

      • 사용자가 쓰레드 라이브러리를 통해서 생성할 수 있다. 라이브러리는 쓰레드 생성과 스케줄링 등에 대한 관리기능을 제공한다.

      • 동일한 메모리 영역에서 생성 되기 때문에 속도가 빠르다.

      • 하나의 쓰레드가 중단되면 커널에서 프로세스 내의 다른 쓰레드들을 인식하지 못하기 때문에 전체 프로세스가 중단될 수 있다.

    • 커널 레벨 쓰레드

      • 운영체제가 지원하는 쓰레드 기능으로 구현되고, 커널이 생성 및 스케줄링 등을 관리한다.

      • 쓰레드가 중단되더라도 커널이 다른 쓰레드를 중단시키지 않고 계속 실행시켜준다.

      • 사용자 쓰레드에 비해 생성 및 관리가 느리다.

    프로세스 VS 쓰레드

    • 프로세스는 운영체제에서 독립된 메모리자원을 할당 받아 실행 되고, 쓰레드는 한 프로세스 내에서 자원들을 공유하며 병렬적으로 실행된다.

    • 컨텍스트 스위칭에서 일반적으로 프로세스보다 쓰레드가 더 빠르다. 하지만 운영체제에 따라서는 거의 차이가 없거나 동일한 성능을 보이기도 한다.

    • 프로세스간 통신은 쓰레드간 통신보다 어렵다. 쓰레드에서는 프로세스 내의 공유되는 메모리에서 손쉽게 통신을 할 수 있지만, 프로세스간 통신은 IPC를 통해서만 통신할 수 있기 때문이다.

    반응형

    'CS' 카테고리의 다른 글

    NAT (network addess tanslation)  (0) 2021.02.06

    댓글

Designed by Tistory.