(시스템 프로그래밍) 7-1 스레딩의 개념

업데이트:
1 분 소요

시스템 프로그래밍 - 스레딩의 개념

1. 프로세스, 스레드 개념

1) 프로세스

  • 실행중인 프로그램을 의미
  • 프로그램 : 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합

(1) 프로세스 상태 변화

  • 프로세스의 상태 변화는 운영체제가 프로세서 스케줄러 이용하여 관리
  • 프로세스 스케줄러는 선정한 작업의 상태를 변화시키며 프로세스의 생성에는 종료까지 과정 수행
  • 커널의 프로세스 관리 기능이 프로세스의 스케줄링 담당
  • 프로세스는 먼저 사용자 모드에서 실행
  • 사용자모드에서 시스템 호출을 하면 커널 모드로 전환
  • 수면 중이던 프로세스가 깨어나 실행 대기 상태로 전환되면 실행 준비
  • 커널 모드에서 실행 중 입출력을 기다릴 때처럼 실행을 계속할 수 없으면 수면상태로 전환

alt

(2) 문맥교환

  • 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하여 프로세스를
    교환하는 일련의 과정
  • 오버헤드 발생, 메모리 속도, 레지스터 수, 특수 명령어의 유무에 따라 다름
  • 오버헤드는 시간 비용이 소요되어 운영체제 설계 시 불필요한 문맥 교환 감소가 주요 목표
  • 레지스터 문맥 교환, 작업 문맥 교환, 스레드 문맥 교환, 프로세스 문맥 교환 가능

(3) 프로세스와 스레드

  • 처리할 프로세스의 수가 많아 질수록 프로세스간 문맥교환(context switching)을 하는 횟수 증가에 따른
    시스템 성능의 저하
  • 프로세스와 프로세스간의 잦은 문맥교환으로 성능저하를 막기 위해 정보들을 공유하는 스레드 사용(최소화)

2) 스레드

1) 스레드의 개념

  • 프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위
  • 프로세스 하나는 스레드 한개 이상으로 나눌 수 있음
  • 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보 공유
  • 다른 프로시저 호출, 다른 실행 기록 (별도 스택 필요)
  • 관련 자원과 함께 메모리 공유가 가능하므로 손상된 데이터나 스레드의 이상 동작 고려
  • 같은 프로세스의 스레드들은 동일한 주소 공간 공유

2. 스레딩 모델

1) 단일 프로세스에서의 단일 스레드와 다중 스레드

  • 스레드마다의 스레드만의 stack이 존재
  • code, data, files등의 스레드가 공유

alt

(1) 스택 영역

  • 함수 호출 시 되돌아갈 주소 값 및 지역변수(함수 안에서 선언한)를 저장하기 위한 메모리 공간
  • 함수 호출시 필요한 메모리 영역

(2) 코드 영역 (자원 영역)

  • 코드 영역의 main(),add(),subtract(),Devide()등을 다수의 스레드가 공유하면서 호출 가능

alt

(3) 스레드 주소 공간의 개념

alt

  • 스택 영역은 독립적
  • 자원 영역은 공유

2) 스레드와 프로세스와의 관계

(1) 스레드간 코드 영역 공유

  • 프로세스간의 통신(IPC)가 필요하지 않음
  • 데이터를 주고 받는데 복잡한 통신기법이 필요하지 않음 (공유)

3) 메모리 입장에서 본 스레드 구조

(1) 하나의 프로세스에서 2개의 스레드 생성

  • 각 쓰레드의 스택영역만을 생성
  • 나머지 영역은 부모 프로세스의 영역을 공유

alt

댓글남기기