운영체제_스레드_프로세스와 스레드

미뇽·2024년 4월 10일
0

운영체제(강의)

목록 보기
11/43
post-thumbnail

프로세스와 스레드

앞의 내용에서 프로세스는 다음과 같은 두 가지 특성을 포함한다.

  • 자원 소유권
    - 프로세스는 자신의 이미지를 위한 가상주소 공간 포함
    - 프로세스 이미지: 프로세스 제어 블록에 정의되어 있는 프로그램과 데이터, 스택, 속성들의 집합
    - 자원들에 대한 제어와 소유권을 할당 가능
    - 운영체제의 보호 기능: 프로세스들 간에 자원에 대한 불필요한 간섭 방지
  • 스케줄링/수행
    - 하나 이상의 프로그램을 통화하는 수행 경로(궤적)을 따름
    - 다른 프로세스들과 번갈아가면서(인터리빙) 수행될 수 있음
    - 수행 상태와 디스패칭 우선순위를 가지며, 운영체제에 의해 스케줄되고 디스패치

이러한 두 가지 특성은 서로 독립적이며 운영체제에 의해서 독립적으로 취급될 수 있다.
특성 구별을 위해 디스패칭 단위는 스레드(thread) 또는 경량 프로세스(lightweight process) 라고 하며, 자원 소유권의 단위는 프로세스 또는 태스크(task)라고 한다.

멀티스레딩(Multithreading)

하나의 프로세스 내에서 수행되는 여러 개의 스레드를 지원하는 기능
각 운영체제 따라서 프로세스와 스레드를 지원하는 범위가 다르다.

  • MS-DOS
    - 단일 프로세스
    - 단일 스레드
    -

  • UNIX 계열 일부
    - 다중 사용자 프로세스
    - 프로세스당 하나의 스레드
    -

  • Java 실행 환경(JRE)
    - 단일 프로세스
    - 다수의 스레드
    -

  • Windows, Solaris, 많은 UNIX
    - 다수 프로세스
    - 프로세스당 다수의 스레드
    -

멀티쓰레드 환경에서 프로세스는 보호의 단위와 자원할당의 단위로 정의된다.

프로세스

  • 프로세스의 이미지를 유지하는 가상 주소 공간(virtual address space)
  • CPU, 다른 프로세스, 파일, 입출력 자원에 대한 접근 제어(보호된 접근)

장점

  • 짧은 생성시간, 종료시간, 쓰레드 간 교환 시간
  • 효율적인 통신

스레드

프로세스는 하나 이상의 스레드를 가지며 다음 사항들을 포함한다

  • 스레드 수행 상태(수행, 준비 등)
  • 수행중이 아닐 때 저장되어 있는 쓰레드 문맥
  • 수행 스택
  • 지역변수 저장을 위해 각 스레드가 사용하는 어떤 정적 저장소
  • 프로세스의 메모리 및 자원에 대한 접근으로, 메모리 및 자원은 프로세스 내의 모든 스레드에 의해 공유

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

단일 스레드 프로세스

  • 프로세스 제어블록
  • 사용자 주소공간
  • 사용자 스택과 커널 스택(하나의 스택 형태에서 나뉘어져 있음)
    - 프로세스 수행 중 함수 호출/복귀 행위 관리
  • 프로세스 수행/비수행 상태에 따라 처리기 레지스터에 대한 동작
    - 수행 상태 -> 처리기 레지스터 내용 제어
    - 비수행 상태-> 처리기 레지스터 내용 저장

멀티스레드 프로세스

단일스레드와의 공통점

  • 하나의 프로세스 제어블록(공유)
  • 하나의 사용자 주소공간(공유)
    => 프로세스 내의 모든 스레드들은 그 프로세스 상태와 자원 공유(같은 주소 공간 + 동일한 데이터 접근)

멀티스레드만의 차이점

  • 스레드마다의 별도 스택(사용자 스택 + 커널 스택)
  • 스레드마다 레지스터값, 우선순위, 그 외의 스레드 관련 상태 정보를 포함하는 별도의 제어블록(사용중인 레지스터를 회피하기 위함)
  • 수행에 관련된 대부분의 상태 정보가 스레드 수준의 자료구조에 의해 유지됨

스레드의 주된 장점

  • 새로운 프로세스 생성 시간보다 새로운 스레드 생성 시간이 더 짧음
  • 프로세스 종료시간보다 스레드 종료시간이 더 짧음
  • 프로세스들 간 교환보다 같은 프로세스에 있는 두 스레드 간 교환이 효율적임(커널의 개입 없이 문맥 교환만 이루어지기 때문)
  • 서로 다른 수행 프로그램 간 통신에서 효율적임

단일 사용자 멀티프로세싱 시스템에서 스레드 사용 예시

  • 전면(foreground)과 후면(background) 작업
    - 프로그램에서 이전 명령이 완료되기 전에 다음 명령을 신속하게 수행함으로써 응용의 속도 향상
  • 비동기(asynchronous) 처리
    - 운영체제를 통한 주기적인 백업 및 직접 자신을 스케줄 하는 작업 -> 복잡한 코드 작성 필요가 줄어듦
  • 빠른 수행
    - 어떤 데이터 묶음(batch)를 계산하면서 동시에 어떤 장치로부터 데이터 묶음을 읽어들일 수 있음
    => 한 스레드가 특정 데이터 묶음을 읽기 위해 입출력 작업 완료를 기다리면서 블록(block)될지라도 또 다른 스레드 수행
  • 모듈 프로그램 구조
    - 다양한 활동 or 입출력 연산에 대한 다양한 출발 및 목적지를 포함하고 있는 프로그램의 경우 스레드를 통한 구현이 편리
  • 보류(suspension)
    - 모든 스레드는 같은 주소 공간을 공유하기 때문에 swap out될 경우 모든 스레드가 동시에 보류 상태가 되므로 주의

스레드 기능

스레드 상태

  • 생성(spawn)
    - 프로세스가 생성되면 프로세스를 위한 스레드도 함께 생성
    - 프로세스 내에서 다른 스레드 생성 가능
    - 새로 생성된 스레드를 위한 명령 포인터와 인자 제공
    - 새로운 스레드는 자신의 레지스터 문맥과 스택 공간을 가지며 준비 큐에 위치
  • 블록(Block)
    - 스레드가 어떤 사건을 기다려야 할 때 스레드는 블록
    - 블록 될 때 자신의 사용자 레지스터, 프로그램 카운터, 스택 포인터 저장
    - 동일 프로세스 내 or 다른 프로세스 내에 있는 준비 상태의 다른 스레드 수행 가능
  • 비블록(Unblock)
    - 스레드가 블록되어 기다리던 사건이 발생되었을 때 그 스레드는 준비 큐로 이동
  • 종료(Finish)
    - 스레드가 작업을 완료하면 레지스터 문맥과 스택이 해제

스레드의 블록과 프로세스의 블록 연관성

한 스레드의 블록이 전체 프로세스를 블록시키는지의 여부
=> 사용자 수준 스레드(user-level thread)커널 수준 스레드(kernel-level thread) 따라 다름

전체 프로세스를 블록시키지 않는 스레드의 성능상 장점 - 두 개의 원격 프로시저 호출(RPC: Remote Procedure Call)

단일 스레드를 이용한 RPC의 경우

  • 순차적으로 얻는 결과
    => 각 서버로부터 응답이 오기를 순서대로 기다려야 함

단일 처리기 상에서 서버마다 한 스레드를 사용한 RPC의 경우

  • 각각의 RPC에 대하여 독립된 스레드의 사용
    => 처리 속도의 향상
  • 단일 처리기일 경우 요청이 순차적으로 생성되고 결과 또한 순차적으로 처리되지만 프로그램은 두 응답을 동시에 기다림

단일 처리기 상에서의 멀티스레드

  • 멀티프로그래밍으로 인해 여러 프로세스 내의 여러 스레드들이 번갈아가며 수행
  • 수행 중인 스레드가 블록되거나 정해진 시간 할당량을 모두 소비하면 수행 흐름은 한 스레드에서 다른 스레드로 넘어감

스레드 동기화

프로세스 내의 모든 스레드는 주소 공간과 열린 파일과 같은 자원 공유
=> 하나의 스레드에 의한 자원의 변경은 같은 프로세스 내에 존재하는 모든 스레드의 환경에 영향
=> 스레드들이 서로 간섭하지 않도록/자료 구조를 손상시키지 않도록 스레드의 행위를 동기화

profile
문이과 통합형 인재(人災)

0개의 댓글