프로세스와 스레드

Minsu Kang·2020년 12월 22일
0

운영체제

목록 보기
2/3

프로세스

프로세스란?

프로세스란 실행중인 프로그램을 말한다. 프로세스는 현대의 컴퓨팅 시스템에서 작업의 단위이다.

프로세스 메모리 배치

  • 코드(텍스트) 영역: 실행 코드를 구성하는 메모리 영역
  • 데이터 영역: 전역변수
  • 힙 영역: 프로그램 실행중에 동적으로 할당되는 메모리
  • 스택 영역: 함수를 호출할 때 임시 데이터 저장장소 (함수 파라미터, 지역변수, 복귀 주소 등)

프로세스 상태

  • new: 프로세스가 생성 중이다.
  • running: 명령어들이 실행되고 있다.
  • waiting: 프로세스가 어떤 이벤트(입출력 완료 또는 신호의 수신 같은)가 일어나기를 기다린다.
  • ready: 프로세스가 처리기(cpu)에 할당되기를 기다린다.
  • exit(termintated): 프로세스의 실행이 종료되었다.

인터럽트

인터럽트의 개념

1) 인터럽트

프로세스가 수행 중에 다른 프로세스를 수행하기 위해 현재 수행중인 프로세스를 중단하거나 외부 입력 장치에 의해 프로세스가 중단되는 상태. 인터럽트는 어떤 이유에서든 H/W적, S/W적으로 현재 프로세스를 중단시키는 모든 행위

2) 인터럽트 처리를 위한 작업 순서

(1) 인터럽트가 발생하면 운영체제가 제어권을 받는다.

(2) 운영체제는 인터럽트 받은 현재의 프로세스 상태를 저장한다.

(3) 운영체제는 인터럽트의 정보를 분석하여 지정되어 있는 루틴으로 제어권을 넘겨준다.

(4) 인터럽트 처리 루틴이 인터럽트를 처리한다.

(5) 인터럽트가 걸렸던 이전 프로세스의 상태로 복구된다.

(6) 인터럽트가 걸렸던 시점 이후부터 프로세스가 실행된다

프로세스 스케줄링

CPU를 항상 바쁘게 만드는 것을 목적으로, 프로세스 스케줄러는 코어에서 실행 가능한 여러 프로세스 중에서 하나의 프로세스를 선택한다. 각 CPU 코어는 한 번에 하나의 프로세스를 실행할 수 있다.

스케줄링 시에, I/O 바운드 프로세스와 CPU 바운드 프로세스를 적절하게 섞어야 효율적인 스케줄링이 가능하다.

  • I/O 바운드 프로세스: 계산에 소비하는 것보다 I/O에 더 많은 시간을 소비하는 프로세스
  • CPU 바운드 프로세스: 계산에 더 많은 시간을 소비하여 I/O 요청을 자주 생서하지 않는 프로세스

일반적으로, CPU 버스트 시간이 짧은 I/O 바운드 프로세스에게 우선순위를 높여주는 것이 더 바람직하다.

스레드

스레드란?

스레드는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 즉, 프로세스 보다 작은 CPU 이용의 기본 단위이다.

스레드는 같은 프로세스에 속한 다른 스레드와 코드 영역, 데이터 영역 그리고 열린파일이나 신호와 같은 운영체제 자원들을 공유한다.

다중 스레드의 장점

  • 응답성: 응용 프로그램의 일부분이 봉쇄되거나, 응용 프로그램이 긴 작업을 수행하더라도, 프로그램의 수행이 계속되는 것을 허용함으로써, 사용자에 대한 응답성을 증가시킨다.

  • 자원 공유: 프로세를 끼리는 공유 메모리나 메시지 전달 기법등을 통해 서만 자원을 공유할 수 있다. 반면, 스레드는 자동으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다.

  • 경제성: 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 스레드를 생성하고 문맥교환(Context Switching)을 하는 것이 더욱 경제적이다. 일반적으로 스레드 생성은 프로세스 생성보다 시간과 메모리를 덜 소비한다.

  • 규모 적응성: 다중 스레드의 이점은 듀얼 코어와 같은 다중 처리기 구조에서 더욱 증가할 수 있다. 각각의 스레드가 다른 처리기에서 병렬로 수행될 수 있기 때문이다. 단일 스레드 프로세스는 처리기가 아무리 많더라도 오직 한 처리기에서만 실행된다.

스레드의 종류

  • 사용자 스레드(user thread): 사용자 스레드는 커널 위에서 지원되며 커널의 지원 없이 관리된다. 일반적으로 사용자 레벨의 라이브러리를 통해 구현된다.

  • 커널 스레드(kernel thread): 커널 스레드는 운영체제에 의해 직접 지원되고 관리된다.

다중 스레드 모델

  • 다대일 모델 (many-to-one model)

여러개의 사용자 스레드를 하나의 커널 스레드로 매핑한다. 한 스레드가 봉쇄형 시스템 콜을 할 경우, 전체 프로세스가 봉쇄된다. 한번에 하나의 스레드만이 커널에 접근이 가능하기 때문에 병렬로 실행될 수 없어, 다중 스레드의 장점을 살리기 힘들다.


  • 일대일 모델 (one-to-one model)

각 사용자 스레드를 각각 하나의 커널 스레드로 매핑한다. 이 모델은 하나의 스레드가 봉쇄형 시스템 콜을 호출하더라도 다른 스레드가 실행될 수 있기 때문에 다대일 모델보다 더 많은 병렬성을 제공한다. 이 모델의 유일한 단점은 사용자 스레드를 만드려면 해당 커널 스레드를 만들어야 하며 많은 수의 커널 스레드가 시스템 성능에 부담을 줄 수 있다는 것이다.

Linux, Windows가 이 모델을 구현하고 있다.


  • 다대다 모델 (many-to-many model)

여러개의 사용자 스레드를 그보다 작은 수, 혹은 같은수의 커널 스레드로 매핑한다. 다대일 모델과 일대일 모델의 단점을 보완한 방식이다.

다대다 모델을 변형한 두 수준 모델(two-level model)도 있는데, 이 모델은 중요한 스레드는 one-to-one 방식으로, 덜 중요한 스레드는 many-to-many 방식으로 구현한다.

참고 : https://m.blog.naver.com/PostView.nhn?blogId=ljjstudy&logNo=220574605033&proxyReferer=https:%2F%2Fwww.google.com%2F

profile
백엔드 개발자

0개의 댓글