Process & Thread

June·2022년 1월 17일
0
post-thumbnail

Process란?

  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)

  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위

    할당받는 시스템 자원의 예
    1.CPU 시간
    2.운영되기 위해 필요한 주소 공간
    3.Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역

  • 즉, 동적인 개념으로는 실행된 프로그램을 의미한다

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.

  • 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.

  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.

  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)

Thread란?

  • 프로세스의 특정한 수행 경로
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당 받고 Code, Data, Heap 영역은 공유한다.
  • 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.

멀티 프로세스(Multi Process)

  • 두개 이상의 CPU가 하나 이상의 작업(Task)들을 동시에 병렬로 처리하는걸 말한다.

    장점 : 독립된 구조로 안정성이 높고, 프로세스 하나가 문제가 생기더라도 정지 되거나 하지 않고 프로그램이 동작은 한다.
    단점 : Context Switching비용이 발생, 독립된 메모리 영역이기 때문에 작업량이 많을수록 오버헤드가 발생하여 성능저하가 발생할 수 있다.

Context Switching

CPU는 한번에 하나의 프로세스만 실행 가능한데, CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 이 과정을 Context Switching라 한다.
구체적으로는, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

멀티 스레드(Multi Thread)

  • 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.

    장점 : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소 전역 변수와 정적 변수에 대한 자료 공유 가능
    단점 : 안전성 문제. 하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)
    멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비함

Thread-safety란?

여러 스레드가 하나의 코드(함수)를 동시에 실행하더라도 각 스레드에서 출력되는 값이 동일한 값을 출력하게 된다면 thread-safety 하다고 할 수 있다. 즉 하나의 스레드를 호출할 때 같은 결과가 보장되어야 한다는 의미이다.

참고자료

  1. https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-os.html
  2. https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html
  3. https://brunch.co.kr/@babosamo/100
  4. https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/
  5. https://greatleee.github.io/what_is_the_thread_safety/
profile
회사와 “함께” 성장하는 개발자

0개의 댓글