프로세스와 스레드

아몬드봉봉·2023년 12월 15일
0

운영체제

목록 보기
2/3

프로그램

프로그램은 일반적으로 하드 디스크 등에 저장 되어 있는 실행코드를 뜻하고, 컴퓨터가 실행할 수 있는 명령어들의 집합.

프로세스

프로그램을 실행 시켜 정적인 프로그램이 동적으로 변하여 프로그램이 돌아가고 있는 상태. 즉, 컴퓨터에서 작업 중인 프로그램을 의미한다. 여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고 한다.

  • 운영체제로부터 자원을 할당받은 작업의 단위
  • 각각의 프로세스는 독립된 메모리의 공간을 할당 받음
  • 명령어들과 데이터를 가짐

프로세스의 구조

프로세스가 만들어지면 4가지의 메모리 영역으로 구성되어 할당 받는다.


(사진 출처 : https://velog.io/@lamknh/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-3.-Processes)

  • 코드 영역(Code/Text) : 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어 형태로 저장.
  • 데이터 영역(Data) : 코드가 실행되면서 사용하는 전역 변수나 여러 데이터들이 모여 있음.
  • 스택 영역(Stack) : 함수 호출시 할당되고 호출이 완료 되면 소멸한다. 이 때 함수 안에서 선언된 지역변수, 매개변수, 리턴 값 등이 저장됨. Stack영역을 초과하면 Stack Overflow 에러 발생.
  • 힙 영역(Heap) : 메모리 주소에 의해서 참조되고 사용되는 영역. 동적으로 할당되는 데이터들을 위해 존재하는 공간.

멀티 프로세스

하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술

장점
  • 프로그램 안정성 : 각 프로세스가 독립적인 메모리 공간을 가지므로, 한 프로세스가 비정상적으로 종료되어도 다른 프로세스에 영향을 주지 않는다.
  • 프로그램 병렬성 : 다중 CPU 시스템에서 각 프로세스를 병렬적으로 실행하여 성능을 향상 시킬 수 있다.
  • 시스템 확장성 : 새로운 기능이나 모듈을 추가하거나 수정할 때 다른 프로세스에 영향을 주지 않는다.
단점
  • 컨텍스트 스위칭 오버헤드 : 메모리를 공유하지 않기 때문에 컨텍스트 스위칭 과정에서 성능 저하가 올 수 있다.
  • 자원 공유 비효율성 : 독립적인 메모리 공간을 가지기 때문에 결과적으로 메모리 사용량이 증가한다.

컨텍스트 스위칭 오버헤드
컨텍스트 스위칭이 일어나는 과정에서 두 개 이상의 프로세스의 상태(context)를 보관하고 복구하는 과정에서 생기는 간극을 말한다.

멀티 프로그래밍

하나의 프로그램이 종료되지 않고 I/O 작업을 한다고 해도 쉬지 않고 다음 프로그램을 실행한다. 즉, 입출력이 완료될 때까지 기다리는 시간을 버리지 않고 다른 프로세스를 처리할 수 있도록 해주는 것이다.

특징
  • 멀티 프로그램은 cpu 사용률을 극대화 시키는데 목적이 있다.
단점
  • cpu 사용 기간이 길어지면 다른 프로세스는 계속 대기.

멀티 태스킹

프로세스가 한번 cpu를 사용할 때 아주 짧은 시간(quantum)만 cpu에서 실행되도록 한다. 멀티 프로그래밍처럼 동시에 여러 프로그램을 실행시킨다는 면에서는 비슷하지만 cpu 실행 시간을 쪼개서 그 쪼개진 시간 안에서 프로그램들이 번갈아 가면서 실행될 수 있도록 했다는 차이가 있다.

특징
  • 프로세스의 응답 시간을 최소화 시키는데 목적이 있다.
단점
  • 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함.

스레드

  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
  • 프로세스는 한 개 이상의 스레드를 가질 수 있다.
  • cpu에서 실행되는 단위.
  • 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
  • 스레드들은 자신들이 속한 프로세스의 힙 메모리 영역을 공유


(사진 출처 : https://thsd-stjd.tistory.com/149)

멀티 스레딩

멀티 태스킹의 확장된 방식으로 동작을 하며 병렬적으로 스레드가 실행되어 동시에 프로그램 실행이 가능하며 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것을 말한다.

특징
  • 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적이 있다.
장점
  • 프로세스보다 가볍다 : 프로세스 내에서 생성되기 때문에 스레드의 실행 환경을 설정하는 작업이 매우 간단해서 생성 및 종료가 빠르다.
  • 자원의 효율성 : 프로세스 내에서 여러개의 스레드가 생성되기 때문에, 힙 영역의 메모리를 공유 해서 시스템 자원 소모가 줄어든다.
  • 컨텍스트 스위칭 비용 감소 : 프로세스 컨텍스트 스위칭은 메모리를 공유하지 않기 때문에 스위칭을 할 때 메모리 주소를 변환해주고 캐시를 비워주고 새로운 프로세스 정보를 캐시에 담아줘야 하지만 스레드 컨텍스트 스위칭은 스레드간 공유하는 자원을 제외한 스레드 정보만 교체하면 돼서 상대적으로 비용이 낮다.
  • 응답시간 단축 : 프로세스보다 가볍고 오버헤드가 작기 때문에 응답 시간이 빠르다.
단점
  • 안정성 : 프로세스는 독립적으로 동작하여 하나의 프로세스에 문자가 발생하여도 프로그램이 종료되지 종료되지 않고 계속 동작할 수 있지만, 스레드는 자원을 공유하기 때문에 다른 스레드들도 영향을 받아 프로그램이 종료 될 수 있다.
  • 동기화로 인한 성능 저하 : 동기화 작업으로 동시 수정과 같은 현상을 일어나지 않지만, 여러 스레드들의 접근을 제한하게 되어 병목 현상이 일어나서 성능 저하될 사능성이 높다.
  • 데드락 : 서로 하나의 자원을 점유하여 무한정 기다리게 되는 상황이 발생할 수 있는데 이는 멀티 프로스세도 스레드와 같은 상황이 발생할 수 있다.
  • 컨텍스트 스위칭 오버헤드 : 프로세스 컨텍스트 스위칭 오버헤드보다는 작다고 하지만 그래도 오버헤드 비용을 무시할수는 없다.
  • 디버깅 : 여러 개의 스레드가 동시에 실행되기 때문에 추적하기 어렵고, 어떤 순서로 실행되는지 등을 파악하기 어려울 수 있다.

컨텍스트 스위칭

cpu/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것. 구체적으로 설명하자면, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업. 컨텍스트란 cpu, 메모리 등에서 프로세스/스레드의 상태를 말한다.

발생

주어진 time slice(quantum)를 프로세스/스레드가 다 사용했거나, I/O 작업을 해야하거나, 다른 리소스를 기다려야 하거나 등의 이유로 컨텍스트 스위칭이 발생한다. 이 때 컨텍스트 스위칭은 커널모드에서 실행된다.
스위칭이 발생하면 cpu의 레지스터 상태를 교체한다.

이 때 컨텍스트 스위칭을 실행하는 주체는
OS 커널(Kernel)이 실행한다.
OS 커널은 각종 리소스를 관리/감동하는 역할을 한다.

프로세스 컨텍스트 스위칭

cpu에서 실행되기 위해 어느 한 프로세스에서 다른 프로세스로 교체되는 것. 프로세스 교체시 서로의 메모리 주소가 다르기 때문에 가상(virtual) 메모리 주소 관련 처리를 추가로 수행해야 한다. 스위칭이 발생하면 MMU(Memory Management Unit)이 새로운 프로세스의 주소를 바라보도록 수정을 하고 캐시 역할을 하는 TLB(Translation Lookaside Buffer)를 비워줘야 한다.

스레드 컨텍스트 스위칭

같은 프로세스의 스레드들끼리 스위칭 하는 것이다. 프로세스 컨텍스트 스위칭과는 반대로 스레드는 메모리를 공유하기 때문에 주소를 수정하고 TLB를 비워줘야하는 일련의 작업을 하지 않는다.


출처

프로세스 위키백과
쉬운코드 youtube
쉬운코드 youtube
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
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html#google_vignette
https://sorjfkrh5078.tistory.com/56

profile
성장을 즐기는 백엔드 자바 개발자

0개의 댓글