[OS] 프로세스와 스레드

Choi Sang Rok·2022년 7월 18일
5
post-custom-banner

Nexters 21기 CS 스터디 첫 번째 주제로 프로세스와 스레드에 포스팅하게 되었습니다. 프로세스와 스레드의 차이를 알고 작동하는 방식에 대해 이해하는 것이 요점일 것 같습니다.



📜프로세스


프로세스는 수행 중인 프로그램을 의미합니다.

디스크에 저장된 실행 파일을 프로그램이라고 하고, 메모리에 적재되어 CPU 자원을 할당 받아 실행되고 있을 때 프로세스라고 부릅니다.

운영체제는 다양한 프로그램을 Windows에서 Ctr+Alt+Delete 명령어를 통해 운영체제에 의해 관리되고 있는 프로세스의 목록을 확인할 수 있습니다.


프로세스의 구성

  • 스택(Stack) : 임시 데이터 저장소(함수의 매개변수, 복귀 주소, 지역 변수)
  • 힙(Heap) : 실행 중에 동적으로 할당되는 메모리
  • 데이터 섹션(Data) : 전역 변수
  • 텍스트 섹션(Text) : 프로그램 코드를 포함
  • 프로그램 카운터, 레지스터

프로세스 제어 블록(PCB)

특정 프로세스와 연관된 여러 정보를 수록한 블록입니다.

하나의 프로세스가 CPU 자원을 사용하다가 다른 프로세스가 CPU 자원을 사용하기 위해서는, 이전 운영체제가 프로세스의 상태를 기억하고 있어야 합니다. 프로세스 간 병행 수행을 위해 CPU 할당을 스위치 하는 것을 문맥 교환이라고 하고, 문맥 교환을 위해서 PCB를 필요로 합니다.

PCB에는 다음과 같은 프로세스의 상태가 저장됩니다.

  • 프로세스 상태, 번호
  • 프로그램 카운터
  • CPU 레지스터
  • CPU 스케줄링 정보(우선순위, 스케줄링 큐 포인터)
  • 메모리 관리 정보(프로세스에 할당된 메모리)
  • 회계 정보(CPU 사용량, 경과 시간)
  • 입/출력 상태 정보(프로세스에 할당된 입출력 장치, 열린 파일 리스트)

멀티 프로세스

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

ex) 구글 크롬 브라우저같은 경우 브라우저, 렌더러, 플러그인 프로세스로 나뉨

  • 장점 : 프로세스 간 독립적이어서 동기화 작업이 필요하지 않으므로 안정성이 확보된다.
  • 단점 : 메모리를 공유하지 않으므로 IPC라는 통신 기법을 통해 프로세스 간 통신을 해야하는데, 이 과정이 어렵고 복잡하다. 또한 문맥 교환 과정에서 오버헤드가 발생할 가능성이 높다.



📍스레드


  • CPU 이용의 기본 단위
  • 프로세스의 실행 단위

스레드의 구성(Multi Thread)

스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택으로 구성되어 있습니다. 그리고 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호 같은 운영체제 자원을 공유합니다.

각자 스택PC 레지스터 값을 가지고 있어 각각의 스레드가 독립적인 작업을 수행할 수 있고, 명령어의 어디까지 수행 했는지 알 수 있습니다.


멀티 스레드

하나의 프로세스를 멀티 스레드를 통해 자원을 공유하고, 자원의 생성 및 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티 스레딩이라고 합니다.

ex) 디스플레이 갱신, 네트워크 요청 응답들은 대부분 멀티 스레드(2개 이상의 스레드)로 동작합니다.


장점

  • 응답성 : 프로세스의 일부분이 봉쇄되거나, 긴 작업을 수행해도 프로그램을 지속 수행할 수 있습니다. 특히 사용자 인터페이스 설계에 유용합니다.
  • 자원 공유 : 프로세스의 자원들과 메모리를 공유하기 때문에, 같은 주소 공간 내에 여러개의 다른 작업을 하는 스레드 수행이 가능합니다.
  • 경제성 : 스레드 생성과 문맥교환 오버헤드가 프로세스 보다 적습니다.
  • 규모 적응성 : 멀티 프로세서 구조에서 각각의 스레드를 병렬로 수행할 수 있습니다.

단점

  • 동기화 문제 : 멀티 스레드가 멀티 프로세스보다 확연한 장점을 보이지만, 이는 멀티 스레드의 동기화 문제를 잘 해결했을 때의 이야기 입니다. 서로 다른 스레드가 Data, Heap 공간을 공유하기 때문에, 스레드 동기화 기법을 통해 처리해야 합니다.
  • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받아 강제 종료될 수 있습니다.


📌 멀티 프로세스 대신 멀티 스레드를 사용하는 이유


  • 자원을 효율성 증대 및 처리 비용 감소 : 프로세스 생성 시 자원을 할당하는 시스템 콜이 감소하고, 스레드 간의 자원 공유가 간단하기 때문에 자원 소모가 적습니다.

  • 응답 시간 단축 : 프로세스의 경우 Context Switching 시 CPU 레지스터, RAM과 CPU 사이의 캐시 메모리가 초기화되기 때문에 오버헤드가 큰 반면, 스레드는 Context Switching시 Stack영역만 처리하면 되므로 스레드 간의 문맥 교환 속도가 빠릅니다.


대신, 서로 다른 스레드가 Data, Heap 공간을 공유하기 때문에, 스레드 동기화 기법을 통해 처리해야 합니다.


참고 자료
https://cocoon1787.tistory.com/688

profile
android_developer
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 7월 19일

잘 보고 갑니다~! 개념이 헷갈릴 때 마다 들어와서 봐야겠어요~!!ლ(╹◡╹ლ)

답글 달기