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

Eugenie Seo·2023년 3월 7일
3

FE STUDY - CS

목록 보기
2/20
post-thumbnail

프로그램?

✅저장 장치에 저장되어 있지만, 메모리에는 올라가 있지 않은 정적인 상태의 파일
✅어떠한 작업을 위해 실행할 수 있는 파일
✅모든 프로그램은 운영체제가 해당 프로그램을 위한 메모리 공간을 할당한 뒤, 자원을 할당해줘야 실행할 수 있다

⚡프로세스

📖정의

  • 실행중에 있는 프로그램. 프로그램이 실행되는 것
  • 프로그램이 실행되면서 운영체제로부터 자원(주소공간, 메모리 등의 시스템 자원)을 할당받고, 작업을 처리 할 때의 작업 단위

📖 프로세스 작업 방식

  • 동시성
  • 병렬성
  • 이 둘의 혼합으로 작업이 이루어 진다.

✔동시성 : 2개 이상의 작업이 있을 때, 다른 작업의 실행 시점에 상관없이 작업 실행이 가능(프로세서 하나가 각 작업의 일부분을 조금씩 돌아가면서 진행)
✔병렬성 : 2개 이상의 작업이 있을 때, 각 작업이 동시에 실행이 가능(프로세서 하나에 코어가 여러개 있어서 각각 동시에 작업 수행이 가능)

📖특징

운영체제는 각 프로세스의 독립된 메모리 영역을 Code, Data, Stack, Heap의 형식으로 할당한다.

Code : 코드 자체를 구성하는 메모리 영역
Data : 전역 변수, 정적 변수, 배열 등
Stack : 지역 변수, 매개 변수, 리턴 값
Heap : 동적 할당 시 사용 (new(), malloc() 등)

기본적으로 프로세스는 최소 1개의 스레드(메인 스레드)를 가지고 있고,
각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.

⚡스레드

📖정의

  • 프로세스 내에서 할당받은 자원을 분산하여 이용하는 실행 흐름의 단위(한 프로세스 안에 하나 이상 진행될 수 있는 일의 단위)

  • 할당 받은 자원을 이용하는 실행 단위이며, 프로세스 내에 여러 개가 생길 수 있다

  • 한 개의 버거를 만드는 작업이 하나의 프로세스라면 빵을 데우는 작업과 패티를 굽는 작업, 야채를 써는 작업은 스레드로 구분할 수 있다.

📖특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code,Data,Heap 영역은 공유한다.
  • 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유한다. 반면 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.

⚡프로세스와 스레드의 차이

📖 메인 메모리를 어떻게 함께 사용하는가

  • 멀티 프로세싱에서 각각의 프로세스는 자기 영역을 구분한다.(새우버거,치킨버거를 만들 공간이 분리되어 있는 것 처럼) 그렇기 때문에 동시에 진행되는 프로세스가 많아지면 메인 메모리는 그 배수만큼 필요하게 된다.

  • 스레드는 서로의 공간을 구분하지 않는다. (치즈버거 프로세스에 할당된 요리 탁자 공간은 해당 프로세스에 속한 모든 스레드가 공유한다.빵을 놓는 공간과 야채를 다듬을 공간을 따로 구분하지 않는다) 그렇기 때문에 스레드가 많아져도 메모리를 추가로 차지하지 않는다.
    프로세스와는 달리 영역을 옮겨 다닐 필요가 없기 때문에 컨텍스트 스위칭에 드는 부담도 덜하지만, 같은 메모리 공간을 여러 스레드가 사용하기 때문에 그 과정에서 발생할 수 있는 오류에 대비해서 프로그래밍해야 한다.

컨텍스트 스위칭?
CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정을 '컨텍스트 스위칭'이라 한다. 동작 중인 프로세스가 대기를 하며 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

📖 프로세스와 스레드의 장단점

✔프로세스

⭕장점
하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향이 가지 않고, 정상적으로 다른 프로세스를 수행할 수 있다.

❌단점
Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고, 많은 시간이 소모되는 등의 문제가 발생하게 된다.

각각 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching이 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 정보를 불러와야 한다.

멀티스레드보다 많은 메모리 공간과 CPU시간을 차지한다.

✔스레드

⭕장점
시스템 자원 소모 감소(자원의 효율성 증대). 멀티프로세스보다 적은 메모리 공간을 차지한다.

시스템 처리량 증가(처리 비용 감소). 스레드간 데이터를 주고 받는 것이 간단해지고 시스템 자원소모가 줄어들게 된다. 또한 스레드 사이의 작업량이 작아 Context Switching이 빠르다.

간단한 통신 방법으로 인한 프로그램 응답 시간 단축.스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.

❌단점

주의 깊은 설계가 필요하다.

다른 프로세스에서 스레드를 제어할 수 없다. (즉, 프로세스 밖에서 스레드 각각을 제어할 수 없다.)

하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

참고:
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4

1개의 댓글

comment-user-thumbnail
2023년 3월 14일

프로세스와 스레드가 다르다니 허거덩.. .이네용

답글 달기