프로세스와 스레드

CinnamonTree·2022년 1월 24일
0

운영체제

목록 보기
1/4

1. 프로세스(Process)


운영체제로부터 시스템 자원을 할당받는 작업의 단위
프로세스는 실행중인 프로그램으로, 디스크로부터 메모리에 적재되어 CPU의 할당을 받을수 있는 것을 말한다. 실행될 때 운영체제에서 각각 독립된 메모리 영역(Code,Data,Stack,Heap)을 할당 받는다. 각 프로세스 간에는 서로 변수나 자료구조에 접근이 불가능하고, 한 프로세스가 다른 프로세스에 접근하려고 하면 프로세스간 통신(IPC)를 사용해야 한다.

프로세스 제어 블록 Process Control Block = PCB

PCB는 특정 프로세스에 중요한 정보를 저장핟고 있는 운영체제의 자료구조이다. 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 작성한다. 프로세스는 CPU를 할당받아 작업을 처리하다 프로세스 전환이 발생하면 작업을 저장하고 CPU를 반환해야 하는데, 이때 작업의 진행 상황을 모두 CPU에 저장하게 된다. 그리고 나중에 다시 CPU를 할당받게 되면 PCB에 저장되어있던 내용을 불러와 이전 종료시점부터 다시 작업을 수행한다.

  • PCB에 저장되는 정보: 프로세스식별자(PID), 프로세스 상태(new, ready, waiting...), 프로그램 카운터(다음에 실행할 명령어 주소), CPU레지스터, CPU스케줄링 정보, 메모리 관리 정보(페이지 테이블, 세그먼트 테이블), 사용된 CPU시간 등

2. 쓰레드


한 프로세스 내에서 할당받은 자원을 이용하는 실행흐름의 단위
쓰레드는 프로세스 내에서 별도의 Stack만 할당 받을 수 있고 Code,Data,Heap영역은 공유한다. 쓰레드는 Code/Data/Heap 영역을 공유하기 때문에 어떤 스레드에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두 강제로 종료되게 된다.

스택을 스레드마다 독립적으로 할당하는 이유는?

스택은 함수 호출 시 전달되는 인자 및 되돌아갈 주소값, 함수 내 변수등을 저장하기 위해 사용되는 메모리 공간이므로, 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고, 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드의 정의에 따라, 독립적인 실행흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

PC Register를 스레드마다 독립적으로 할당하는 이유?

PC값은 스레드가 명령어의 어디까지 수행했는지를 나타내는데, 스레드는 CPU를 반환했다가 나중에 다시 선점하는 경우를 위해 명령어가 어디부분까지 수행했는지를 기억할 필요가 있다.

3. 멀티프로세스


하나의 응용프로그램을 여러개의 프로세스로 구성해 각 프로세스가 하나의 작업을 처리

장점:

  • 프로세스마다 독립된 메모리 구조를 갖기 때문에 여러 자식 프로세스 중 하나에 문제가 발생해도 해당 자식 프로세스만 죽고 다른 프로세스에는 영향이 가지 않는다. 안정성이 높다.

단점:

  • 프로세스들이 동시에 실행되는 것이 아니라 각 프로세스들을 빠르게 왔다갔다 하며 실행하여 Context Switching이 일어난다.

    Context Switching이란
    CPU가 다른 프로세스를 사용하기 위해, 현재 프로세스 상태를 보관하고, 새로운 프로세스 상태를 적재하는 작업이다. 각 프로세스를 사용할 때 마다 해당 프로세스의 메모리 영역을 올려야 하는데 이때 CPU의 부담이 커지고 오버헤드가 발생하게 된다.

  • 프로세스는 Context Switching 발생 시 캐쉬 메모리를 리셋하고 다시 불러와야 한다.
  • 각각 독립된 메모리 영역을 할당받아 서로 자원 공유를 할 수 없다.

멀티쓰레드


하나의 응용프로그램을 여러개의 쓰레드로 구성하여 각 쓰레드가 하나의 작업을 처리하도록 함
윈도우, 리눅스 등 많은 운영체제가 멀티쓰레드를 기본으로 하고있다.

장점:

  • 시스템 자원소모량과 처리량이 감소한다.
  • 쓰레드 간 통신이 상대적으로 비용이 적고, 작업량이 적어 Context Switching이 빠르다.
  • 스택 외 모든 메모리를 공유하기 때문에 통신의 부담이 적어 응답시간이 빠르다.

단점:

  • 주의 깊은 설계가 필요하고 디버깅이 어렵다.
  • 하나의 쓰레드에 문제 발생 시 전체 프로세스가 영향을 받는다.
  • 자원 공유 때문에 동기화 문제가 발생

    동기화 문제
    멀티스레드를 사용할때는 어떤 스레드가 어떤 순서로 사용될 지 알 수 없는데, 만약 A스레드에서 B스레드로 제어권이 넘어가 B스레드가 어떤 자원을 수정했을때, 다시 제어권을 받은 A스레드에서 접근이 불가하는 등의 문제가 발생할 수 있다.
    이처럼 여러 스레드가 함께 전역 변수를 사용할 경우 발생하는 충돌을 동기화 문제라고 한다.

멀티프로세스에서 처리 가능한것을 멀티쓰레드로 하는 이유는?


프로세스를 생성하여 자원을 할당하는 시스템 콜이 감소함으로서 자원의 효율적 관리가 가능함.
프로세스 간 통신(IPC)보다 스레드간의 통신 비용이 적음

0개의 댓글