[운영체제]Process vs Thread

yellong·2020년 6월 8일
0

Tech-Interview

목록 보기
7/14

프로세스(Process)란?

  • 프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 뜻합니다.
  • 프로세스는 프로세스 스택데이터 섹션, 을 포함합니다.
  • 프로세스 스택: 로컬 변수와 같은 임시 자료를 보관하는 곳
  • 데이터 섹션: 전역 변수를 수록하는 곳
  • 힙: 프로세스 실행 중에 동적으로 할당되는 메모리

프로세스 제어 블록(Process Control Block)이란?

  • 특정 프로세스에 대한 중요한 정보를 가지고 있는 운영체제의 자료구조입니다.
  • 프로세스를 생성과 동시에 PCB는 생성됩니다.
  • 프로세스는 CPU의 할당을 받아 작업을 처리하다가도, 전환이 발생하게 되면 CPU를 반환하게 되는데, 이 때 정보들을 모두 PCB에 저장하게 됩니다. 또한, 다시 CPU의 할당을 받게 될 때, PCB에 저장된 정보를 불러와 작업을 처리하게 됩니다.

프로세스 제어 블록(Process Control Block)에 저장되는 정보

  • 프로세스 식별자(PID, Process ID)
  • 프로세스 상태: new, ready, running, waiting, terminated 등의 상태를 저장
  • 프로그램 카운터(PC): 프로그램이 다음에 실행해야 할 명령어의 주소
  • CPU Register
  • CPU 스케줄링 정보: 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
  • 메모리 관리 정보: 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보
  • 입출력 상태 정보: 프로세스에 할당된 입출력 장치들과 열린 파일 목록
  • 어카운팅 정보: 사용된 CPU 시간, 시간 제한, 계정 번호 등

스레드(Thread)란?

  • 스레드는 프로세스의 실행 단위입니다.
  • 스레드는 프로세스 내의 공간 또는 자원을 공유할 수 있습니다.
  • 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 그리고 스택으로 구성됩니다.
  • 멀티 스레딩: 하나의 프로세스를 다수의 실행단위로 구분하여 자원을 공유하면서 자원의 중복과 생성을 최소화하여 수행 능력을 향상시키는 것. 스레드는 독립적으로 작업을 수행하기에 각 스레드마다 스택PC 레지스터를 가집니다.
  • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값, 함수 내에서 선언하는 변수 등을 저장하는 메모리 공간이기 때문에, 독립적인 스택을 가졌다는 것은, 독립적인 함수 호출이 가능하다는 것입니다. 독립적인 함수 호출이 가능하다는 것은 독립적인 실행 흐름이 추가된다는 것입니다. 즉, 스택을 가짐으로써 스레드는 독립적인 실행 흐름을 가질 수 있게 됩니다.
  • PC Register은 프로그램이 어디까지 실행했는지를 나타냅니다. 스레드는 CPU를 할당 받았다가, 스케줄링에 의하여 CPU를 반환하게 되는데, 이 때 각 스레드가 어디까지 수행했는지를 PC Register에 기록하게 됩니다. 이를 위해 PC Register을 가지게 됩니다.

멀티 스레드

멀티 스레딩의 장점

  • 멀티 스레드를 사용하게 되면 메모리 공간과 시스템 자원의 소모가 줄어든다는 장점이 있습니다.
  • 스레드간의 통신을 위해서는 동적으로 할당되는 이나, 전역 변수의 공간을 활용하여 통신을 하게 되므로, 별도의 자원을 필요로 하지 않습니다.
  • 또한 스레드는 context switch를 할 때 캐시 메모리를 비울 필요가 없어 더 빠릅니다. 그에 반해, 프로세스는 context switch를 할 때 캐시 메모리를 삭제해야 합니다.
  • 따라서 시스템의 처리량이 향상되고, 자원 소모가 줄어들어, 자연스럽게 응답 속도가 빨라지게 됩니다.

멀티 스레딩의 문제점

  • 멀티 스레딩을 사용하게 될 경우, 자원을 공유하기 때문에 한 자원에 동시에 접근하는 일이 없도록 해주어야 합니다.
  • 스레드는 데이터와 힙 영역을 공유하기 때문에, 다른 스레드에서 사용 중인 변수나 자료 구조에 접근하여 엉뚱한 값을 읽어오거나 사용하게 될 수도 있습니다.
  • 그렇기 때문에, 스레드 작업에서는 동기화 작업이 필요합니다.
  • 동기화 작업을 통해 작업 처리 순서와 공유하는 자원에 대한 접근을 통제하는 것입니다.
  • 하지만 이는 병목 현상이 발생하여 성능이 저하될 가능성이 높습니다. 그래서 과도한 락으로 인한 병목 현상이 발생하지 않도록 유의해야 합니다.

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

  • 멀티 스레드는 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있으나, 동기화 문제를 안고 있습니다. 하나의 스레드가 종료되면 전체 스레드가 종료될 수도 있는 것입니다. 그에 반해 멀티 프로세스는 비록 멀티 스레드보다는 많은 메모리 공간을 차지하고 문맥 전환이 느리나, 동기화 문제가 없어, 한 프로세스에서의 오류가 타 프로세스에 영향을 미치지 않는다는 장점이 있습니다. 시스템의 특성에 따라 멀티 프로세스/멀티 스레드를 잘 선택하는 것이 중요합니다.

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS#%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4

0개의 댓글