31
Week4 : 운운운운 Chapter 3: 운운운운운 운운운 운운운운 : 운 운 운

Week4 : 운영체제 Chapter 3: 프로세스와 쓰레드

  • Upload
    shalom

  • View
    131

  • Download
    0

Embed Size (px)

DESCRIPTION

Week4 : 운영체제 Chapter 3: 프로세스와 쓰레드. 담당교수 : 최 윤 정. Contents. 학습목표 프로세스와 스레드의 개념 을 이해한다 . 프로세스의 상태 변화 과정 을 이해한다 . 프로세스의 생성과 종료 등 프로세스와 관련된 작업을 이해한다 . 프로세스와 스레드의 차이를 알고 스레드의 장점을 이해한다 . 내용 프로세스 개요 및 관리 스레드. 1. 프로세스 개요. 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태 . - PowerPoint PPT Presentation

Citation preview

Page 1: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

Week4 : 운영체제

Chapter 3: 프로세스와 쓰레드

담당교수 : 최 윤 정

Page 2: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

2

Contents

학습목표

프로세스와 스레드의 개념을 이해한다 . 프로세스의 상태 변화 과정을 이해한다 . 프로세스의 생성과 종료 등 프로세스와 관련된 작업을 이해한다 . 프로세스와 스레드의 차이를 알고 스레드의 장점을 이해한다 .

내용

프로세스 개요 및 관리

스레드

Page 3: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

1. 프로세스 개요

1960 년대 멀틱스시스템 (Multics System) 설계자들이 처음 사용 . 이후 , Task 라는 용어와 사용되면서 다양한 정의를 가짐 . 실행중인 프로그램 / 프로시저

비동기적 (Asynchromous) 행위

실행중인 프로시저

실행중인 프로시저의 제어 추적

디스패치가 가능한 대상

..

3

디스크에 저장되어 있던 실행 가능한 프로그램이

메모리에 적재되어 운영체제의 제어를 받는 상태 .

Page 4: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

4

디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의

제어를 받는 상태 ?? 해당 프로세스가 사용하고 있는 메모리 영역 ( 자신의 주소 공간 ) 이 존재한다 .! - 프로세서 할당 ( 점유 ) 시간과 메모리 , 파일 , 입출력장치 등의 자원이 필요하며 , 자원은 프로세스 생성 및 실행 시 할당됨 . - 현재의 활동 상태를 나타내는 프로그램 카운터와 프로세서의 현재 활동 ( 레지스터 내용 ) 포함 .

[ 그림 3-1] 메모리에 존재하는 프로세스 주소 공간 구조

실행 스택 (Stack) : 호출된 프로시저 ( 함수 ) 의 복귀 주소와 지역 변수

등의 일시적인 데이터를 저장하는 영역 .

실행 힙 (Heap) : 텍스트 ( 코드 ) 영역과는 별도로 유지되는 자유 영역 .

데이터 (static 정적 변수 ) : 프로세스 실행 중 동적으로 할당 받는 영역 ,

전역 또는 정적 변수 저장 .

텍스트 ( 코드 ) : 프로세서가 실행하는 코드 저장 .

Page 5: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

5

시스템 관점에 본 프로세스사용자 관점에서의 프로세스

프로세스는 사용자 관점에서 세그먼트 ( 코드 , 데이터 , 스택 등 ) 의 가상

주소 공간을 갖는 상태를 의미 , 시스템 관점에서 실행중인 프로그램을

의미 .• 처리 상태에 있는 데이터 구조로 표현 가능하다 .

• 스케줄러 ( 디스패칭 ) 에 의해 프로세서 할당 .• 파일에 관련된 자원에 대한 참조 ( 장치 관리 , 메모리 관리 )• 프로세스 지원과 협력에 관한 정보 ( 교착상태 , 보호 , 동기화 )

교환

• 프로세스 관련 연산은 생성 , 종료 , 보류 , 자원 할당 , 해제 등

Page 6: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스의 종류 : 실행유형에 따라 3 가지

운영체제 프로세스

커널 프로세스 또는 시스템 프로세스라 부름 . 프로세스 실행 순서 제어 , 사용하고 있는 프로세스가 다른 사용자나 운영체제 영역을 침범하지 못하게

감시하는 기능 담당 . 사용자 프로세스 생성 , 입출력 프로세스 등 시스템 운영에 필요한 작업 수행 .

사용자 프로세스 : 사용자 코드 수행 .

병행 프로세스

프로세스 여러 개가 동시에 실행되며 , 독립 프로세스와 협동 프로세스로 구분 . 1. 독립 프로세스 :

프로세스 여러 개가 병행하여 수행 시 주어진 초기값에 따라 항상 같은 결과를 보여줌 . 서로 독립적으로 실행되어 다른 프로세스에 영향을 받지 않고 , 데이터를 공유하지 않음 .

2. 협동 프로세스

다른 프로세스에 영향을 주거나 다른 프로세스에 의해 영향을 받음 . 컴퓨터 시스템의 제한된 자원을 공유하는 프로세스들이 통제되어 상호 작용해야 하는 경우 발생 . 서로 협동해야 하는 경우 , 통신을 위한 수단과 동기화 기능이 필요 . 6

Page 7: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 상태

운영체제는 프로세스 실행을 제어하는 역할을 한다 . 그런데 ! 프로세스가 실행되면서 상태가 변하므로 제어에 필요한 프로세스 상태를

점검해주어야 한다 .

간단 분류 : 실행과 비실행 프로세스

운영체제가 프로세스를 생성하면

비실행 상태로 초기화하여 실행을 기다린다 . 실행중인 프로세스가 종료되거나 인터럽트가 발생하면

비실행 프로서스 중 선택된 프로세스가 실행상태로 변하고 ( 디스패치 ) 인터럽트된 프로세스는 비실행 상태가 된다 .

7

Page 8: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

실행 프로세스의 상태

실행 : 명령어가 실행되는 상태 , 즉 프로세스가 프로세서를 점유한 상태

대기 또는 보류 : 프로세서가 이벤트 ( 입출력 종료와 같은 외부 신호 ) 가 일어나길 기다리는

상태

준비 : 프로세스가 프로세서를 할당 받기 위해 기다리는 상태

8

대부분의 프로세스는 준비나 대기 ( 보류 ) 상태이며 , 어느 한 순간에 한 프로세스만 실행상태가

됨 .

Page 9: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 상태 변화

시스템의 모든 프로세스는 , 종료되어 시스템을 떠날 때까지 준비 , 실행 , 대기 ( 보류 ) 상태로

변화되며 실행되는 과정을 반복하고 , 운영체제는 작업스케줄러 , 프로세서등의 스케줄러를 이용해 프로세스 상태 변화를 관리한다 .

작업 스케줄러 스풀러가 디스크에 저장한 작업들 중 실행할 작업을 선정 , 준비 리스트에 삽입 . 다중 프로그래밍의 정도를 결정하는 핵심적인 역할 수행 . 선정한 작업에 대한 프로세스의 생성에서 종료까지의 과정 수행을 위해 상태 변화를 일으킴 .

9

Page 10: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

10

• 준비 프로세스는 디스패처 (Dispatcher) 가 프로세서를 할당하면 다시 실행상태로 변경 .

• 실행 프로세스가 자발적으로 프로세서 반환 전 할당된 시간이 경과하면 준비상태로 변경 .

• 실행 프로세스가 실행하다 입출력 명령이 발생 시 대기 ( 보류 ) 상태로 변경 .

• 대기 프로세스는 보류 이유가 제거되면 준비 상태로 변경 .

Page 11: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 : 준비 실행

준비 리스트 맨 앞에 있는 프로세스 ( 작업 ) 가 프로세서에 할당디스패치 !

다중프로그램 운영체제에서는 실행프로세스가 프로세서를 일정시간만

사용하도록 제한

프로세스가 프로세서를 독점하는 것을 방지하도록 시간을 할당한다 .

11

dispatch( 프로세스명 ) : 준비 → 실행

Page 12: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 : 실행준비 , 실행 대기

프로세스가 프로세서를 점유한 상태 “프로세스가 실행 상태에 있다”

운영체제는 프로세스의 독점을 방지하기 위해 인터럽트 클록 (Interrupt Clock) 을 둠 . 특정 프로세스가 일정 시간이 지나도 ( 타임아웃 ) 프로세서를 반환하지 않으면 클록 (Clock) 이 인터럽트를

발생 , 운영체제가 프로세서 제어권을 가짐 . 운영체제가 제어권을 가지면 실행 중인 프로세스는 준비 상태로 변화 , 준비 리스트의 첫

프로세스가 실행 상태로 변경 .

실행 → 대기 ( 보류 ) 실행 프로세스가 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제 발생 시 스스로 프로세서를

양도하고 대기 상태로 변경 .

대기 ( 보류 ) 준비

깨움 (Wake up) : 대기상태의 원인이 해결되었을 때 (예 : 입력 ) 발생

12

timeout( 프로세스명 ) : 실행 → 준비

block( 프로세스명 ) : 실행 → 대기 ( 보류 )

wakeup( 프로세스명 ) : 대기 ( 보류 ) → 준비

Page 13: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 상태 : 정리

Dispatch( 프로세스명 ) : 준비 실행

Timeout( 프로세스명 ) : 실행준비

block( 프로세스명 ) : 실행 대기

wakeup( 프로세스명 ) : 대기 준비

프로세스가 스스로 제어할 수 있는 변화는 실행 대기 상태 뿐 !! 나머지는 외부 조건에 의해 발생한다 . OS 는 프로세스 실행을 제어하기 위해 프로세스에 대한 정보를 가지고

있어야 하며 , 제어블록이라는 데이터 구조를 가진다 .

13

Page 14: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 제어블록 (PCB, Process Control Block) 프로세스는 운영체제 내에서 프로세스 제어 블록이라 표현하며 , 작업 제어 블록이라고도 함 .

프로세스를 관리하기 위해 유지되는 데이터 블록 도는 레코드의 데이터 구조 . 프로세스 식별자 , 프로세스 상태 , 프로그램 카운터 등의 정보로 구성 . 프로세스 생성 시 만들어지고 메인 메모리에 유지 , 운영체제에서 한 프로세스의 존재를 정의 . 프로세스 제어 블록의 정보는 운영체제의 모든 모듈이 읽고 수정 가능 .

14[ 그림 3-7] 프로세스 제어 블록 (PCB)

프로세스 식별자 : 각 프로세스에 대한 고유 식별자 지정 .• 프로세스 상태 : 생성 , 준비 , 실행 , 대기 , 중단 등의 상태 표시 .• 프로그램 카운터 : 프로그램 실행을 위한 다음 명령의 주소 표시 .• 레지스터 저장 영역 : 누산기 , 인덱스 레지스터 , 범용 레지스터 , 조건 코드 등에 관한

정보로 컴퓨터 구조에 따라 수나 형태가 달라짐 .• 프로세서 스케줄링 정보 : 프로세스의 우선순위 , 스케줄링 큐에 대한 포인터 , 그 외

다른 스케줄 매개변수를 가짐 .• 계정 정보 : 프로세서 사용시간 , 실제 사용시간 , 사용상한시간 , 계정 번호 , 작업

또는 프로세스 번호 등 .• 입출력 상태 정보 : 특별한 입출력 요구 프로세스에 할당된 입출력장치 , 개방된

(Opened) 파일의 목록 등 .• 메모리 관리 정보 : 메모리 영역을 정의하는 하한 및 상한 레지스터 ( 경계 레지스터 )

또는 페이지 테이블 정보 .

Page 15: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 교환

실행중인 프로세스가 인터럽트되면 OS 는 다른 프로세스를 실행상태로 바꾸고 제어권을

넘겨준다 . 제어권을 넘겨줄 때 , 프로세서의 레지스터 내용은 저장해두어야 한다 . 프로세스 교환은 인터럽트와 트랩 , 시스템호출로 나타낸다 . * 프로그램 : 디스크에 저당된 파일 내용으로 정적인 상태이며 , 프로세스 여러 개로 생성될 수도 있다 . * 프로세스 : 현재 사용되는 자원에 대한 정보를 가지며 , 실행되는 과정에서 여러 개의 프로세스로 파생될

수도 있는 능동적인 개체 .!

15

Page 16: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

2. 프로세스 관리 : 프로세스 구조 실행 중 프로세스 생성 시스템을 호출 , 새로운 프로세스를 생성 가능 . 이때 프로세스 생성 순서 저장 , 부모 / 자식 관계를 유지하며 계층적으로 생성됨 .

부모 프로세스 (Parent Process) : 생성하는 프로세스 . 자식 프로세스 (Child Process) or 서브 프로세스 (Sub Process) : 생성되는 프로세

스 . 유닉스 시스템의 일반적인 프로세스 계층 구조 ( 그림 3-9)

처음 부팅 시 식별자 (PID, Process ID) 가 0 인 첫 번째 프로세스 Swapper 생성 . 이어서 Init(PID=1), Pagedeamon(PID=2) 생성 . Swapper(PID=0), Pagedeamon(PID=2) 를 운영체제 ( 커널 ) 프로세스라 하며

운영체제 모드에서만 실행 . 모든 사용자 프로세스는 fork() 명령을 통해 계층적으로 Init 의 자식 프로세스로

생성됨 .

16[ 그림 3-9] 프로세스 계층 구조 예 ( 유닉스 시스템 )

Page 17: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 관리 : 부모 프로세스 / 자식 프로세스

자식 프로세스 생성 시 필요한 자원을 운영체제로부터 직접 또는 부모 프로세스의 자원 일부

사용 가능 . 부모 프로세스는 자식 프로세스에 자원을 나눠주거나 일부 자원 공유 가능 .

자원의 일부만 사용하도록 제한하면 시스템에 부담을 주는 것을 방지 가능함 . 프로세스 생성 시 획득하는 다양한 물리적 , 논리적 자원 외에도 약간의 초기화 데이터가 부모

프로세스에서 자식 프로세스로 전달되는 경우도 있음 .

새로운 프로세스 생성 시 실행과 관련해 다음 두 가지 경우가 가능함 . 부모 프로세스와 자식 프로세스가 동시에 실행됨 . 부모 프로세스는 자식 프로세스들이 모두 종료될 때까지 기다림 .

새로운 프로세스의 주소 공간은 다음 두 가지 경우가 가능함 . 자식 프로세스가 부모 프로세스의 주소 공간을 복사 .

유닉스는 각 프로세스마다 정수로 된 고유한 프로세스 식별자를 가짐 . 새로운 프로세스는 fork() 명령에 의해 생성 , 주소 공간은 부모 프로세스의 주소 공간을 복사함 . 부모 프로세스와 자식 프로세스의 정보 교환이 쉬움 .

자식 프로세스가 별도의 프로그램을 적재 . 17

Page 18: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

부모 프로세스와 자식 프로스세스가 돌아가는 환경을 구현해보면서 실습해 봐도 좋겠습니다 .

시스템 프로그래밍 : ecf 자료를 보면서 코딩해봅니다 .

18

Page 19: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 관리 : 종료

프로세스가 명령 실행 후 종료되고 운영체제에 프로세스 삭제 요청

일괄 처리 환경 : 작업 종료를 의미하는 신호로 인터럽트 발생 또는 시스템 호출로

중지명령 전달 , 프로세스 완료 . 대화형 환경 : 사용자가 로그오프 (Log-off) 하거나 터미널을 닫을 때 또는 오류에 의해

프로세스 종료 . abort 시스템 호출을 이용한 프로세스 종료 .

종료되는 프로세스를 생성한 부모 프로세스만 호출 가능 . 부모 프로세스가 자식 프로세스의 생존권을 가져 다른 프로세스가 임의로 작업을

중단시킬 수 없음 . 자식 프로세스 종료 시 자식 프로세서의 신원 (Identity) 이 부모 프로세스로 전달 .

부모 프로세스는 아래의 이유로 자식 프로세스 종료 가능

자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때 . 자식 프로세스에 할당된 작업 (Task) 이 더 이상 없을 때 .

19

Page 20: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

프로세스 관리 : 제거 , 중단 - 재시작

제거 프로세스를 파괴하는 것 .

제거 시 프로세스에 속한 자원을 시스템에 돌려주고 해당 프로세스는 시스템 리스트나

테이블에서 사라지며 , 프로세스 제어 블록 회수 . 프로그램은 디스크에 저장됨 .

중단 및 재시작

중단되는 원인 : 다중 프로그래밍에서 중단은 자원 부족 ( 대기 ) 상태를 의미하기도 함 .

다중 프로그래밍 환경에서는 자원의 이용률과 시스템 효율 향상을 위해 자원을 동적으로 할당 . 교착상태 발생 시 문제 생김 . 중단 : 할당된 자원을 기다리는 상태 . 대기 : 자원을 할당 받기 위해 기다리는 상태 .

해결방법 : 1. 새로운 프로세스를 생성하여 실행하기

2. 이미 실행중인 프로세스를 중단시켰닥 다시 실행하기 .20

Page 21: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

21

[ 그림 3-10] 중단과 재시작을 추가한 프로세스 상태 변화

Page 22: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

컨텐스트 스위칭 (Context Switching) 프로세스 교환

실행 중인 프로세스가 인터럽트되면 운영체제가 다른 프로세스를 실행 상태로 변경 , 해당 프로세스에 제어를 넘겨주는 과정에서 실행 중인 프로세스로부터 제어를 인수한 운영체제가 또 다른 프로세스에 제어를 넘겨주기 위해 발생 . 인터럽트 처리 루틴을 실행한 후 현재 실행 중인 프로세스가 재실행될 수 있으므로 대부분의

운영체제는 프로세스 교환으로 인터럽트가 발생하지 않음 . 트랩은 시스템이 치명적인 오류인지를 판단 , 치명적 오류일 경우 프로세스를 종료하면서

프로세스 교환 발생 .

컨텐스트 스위칭 ( 문맥 교환 ) 프로세스를 다른 프로세스로 교환하기 위해 이전 프로세스의 상태 레지스터 내용을

보관하고 다른 프로세스의 레지스터를 적재하는 일련의 과정 . 프로세스가 “준비→실행” , “ 실행→준비” , “ 실행→대기”상태로 변할 때 발생 . 오버헤드가 발생하며 오버헤드는 메모리 속도 , 레지스터 수 , 특수 명령어의 존재에 따라

다르므로 시스템마다 다름 .

Page 23: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

23

인터럽트와 트랩

인터럽트 (Interrupt) 현재 실행되는 프로세스와 별도로 외부에서 발생되는 여러 종류의 이벤트 ( 입출력

동작의 종료 등 ) 에 의해 발생 . 제어가 인터럽트 처리 루틴으로 넘어간 후에도 기본 시스템 관리 작업을 처리 ,

인터럽트 형태에 따라 관련된 운영체제 루틴으로 분기 . 대표적인 인터럽트 예

입출력 인터럽트 : 입출력 동작이 발생한 사실을 확인 후 이벤트를 기다리는 프로세스를 준비

상태로 변경 , 실행할 프로세스를 결정 . 클록 인터럽트 : : 현재 실행 주인 프로세스의 할당 시간을 조사하여 실행 중인 프로세스를

준비 상태로 변경 , 다른 프로세스를 디스패치하여 실행 상태로 변경 . 트랩 (Trap)

부적절한 파일 접근 또는 현재 실행 중인 프로세스에 의해 발생되는 오류나 예외

상황으로 인해 발생 .

Page 24: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

3. 스레드

프로세스에서 실행 제어만 분리한 실행 단위 . 경량 프로세스 (LWP, Light Weight Process) 라고도 부름 .

중량 프로세스 (HWP, Heavy Weight Process) 는 스레드를 하나 가진 작업 . 프로세서를 사용하는 기본 단위이며 , 명령어를 독립적으로 실해할 수 있는 하나의 제어 흐름 . 작업 == 스레드의 그룹 환경

같은 그룹의 스레드와 코드 , 주소 공간 , 운영체제의 자원 ( 파일 , 신호 ) 등을 공유한다 .

24[ 그림 3-12] 스레드 구조

Page 25: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

[ 그림 3-13] 프로세스와 다중 스레드

스레드의 장점

프로세스에 포함된 스레드들은 공통의 목적 달성을 위해 병렬로 수행 . 자원을 공유하여 한 프로세스에서 동시 작업 가능 .

시스템 성능과 효율 향상 . 하나의 프로세스가 서로 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행 가능 . 응용 프로그램 하나가 비슷한 작업들을 여러 개 수행 .

25[ 그림 3-14] 단일 스레드 프로세스와 다중 스레드 프로세스

• 사용자에 대한 응답성 증가

• 프로세스의 자원과 메모리 공유 가능

• 경제성 : 한 프로세스의 자원을 공유하므로 프로세스를

생성하는 것으로 오버헤드를 줄일 수 있음

• 다중 프로세서 구조 활용 가능

Page 26: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

단일 스레드와 다중 스레드 모델

단일 스레드 프로세스 모델

프로세스를 하나의 스레드 , 스레드가 가진 레지스터와 스택으로 표현 . 다중 스레드 프로세스 모델

프로세스를 각각의 스레드와 고유의 레지스터 , 스택으로 표현 , 프로세스 주소 영역을 모든 스레드가 공유 . 프로세스의 모든 스레드는 해당 프로세스의 자원과 상태를 공유 , 같은 주소 공간에 존재하며 동일한

데이터에 접근 .

26[ 그림 3-15] 프로세스 관리 면에서 살펴본 단일 스레드와 다중 스레드 프로세스

Page 27: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

스레드의 상태• 대기 - 스레드가 이벤트를 기다릴 때 , 즉 입출력 작업 등이 완료될 때까지 대기 ( 보류 ) 상태 . - 자신의 정보 ( 프로그램 카운터 , 스택 포인터 등 ) 를 실행 스택에 저장 .• 준비 - 스레드가 프로세서에 의해 실행될 수 있는 상태 . - 스레드를 대기시킨 이벤트 발생 시 해당 스레드는 준비 리스트에 삽입됨 .• 실행 - 스레드가 프로세서를 점유하여 실행 중인 활성화 상태 .• 종료 - 스레드가 작업을 종료하면 자원을 해제 , 레지스터 문맥과 스택 할당 제거 .

27[ 그림 3-18] 스레드 상태 변화

Page 28: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

스레드의 구현방법 : 사용자 수준

사용자 수준 스레드 커널 스레드를 지원하지 않는 운영체제에서 사용 . 사용자 수준 스레드 여러 개가 커널 스레드 ( 프로세스 ) 하나로 매핑되는 방식 . 다중 스레드 프로세스에 대해 프로세서 ( 실행 문맥 ) 하나를 할당하므로 다대일 스레드 매핑이라 칭

함 . 사용자 수준 ( 공간 ) 에서 스레드 관리가 효율적으로 이루어지므로 스레드와 관련된 모든 과정을 응용

프로그램이 수행 . 응용 프로그램은 사용자 수준 스레드 관리를 위한 루틴으로 구성된 스레드 라이브러리 를 이용 , 다중

스레드로 프로그래밍 가능 . 응용 프로그램은 기본적으로 스레드 하나에서 시작 , 해당 스레드에서 실행을 시작함 .

28[ 그림 3-19] 다대일 스레드 매핑과 사용자 수준 스레드

Page 29: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

혼합형 스레드

사용자 수준 + 커널 수준의 스레드를 혼합한 형태 스레드 생성은 사용자 영역에서 , 여러 개의 사용자 수준 스레드에 여러 개의 커널 스레드가 매핑되는

다대다 스레드 모델 . 사용자 수준 스레드 생성 시 커널 수준 스레드를 생성 , 성능 감소 . 시스템 호출 시 다른 스레드가 중단되는 문제를 해결하기 위한 방법 . 다대다 모델 구현 운영체제 : 솔라리스 (Solaris)

29[ 그림 3-21] 솔라리스 2 스레드

Page 30: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

SUMMARY 프로세스 개념

운영체제의 주 기능은 프로세스의 생성과 종료 . 프로세스는 실행 중인 프로그램으로 , 실행되는 프로세스는 독립적 혹은

협조적일 수 있음 . 협조적 프로세스는 논리적 주소 공간을 직접 공유 또는 파일을 통해서만

데이터 공유 가능 .

프로세스 상태 프로세스 상태는 프로세스의 현재 활동에 의해 정의되며 , 각 프로세스는

생성 , 준비 , 실행 , 대기 , 종료 상태로 구분 , 실행하면서 상태 변경 . 프로세스 제어 블록 (PCB) 에 의해 운영체제에서 표현되며 , 프로세스의

일시 정지 ( 서스펜드 ) 상태를 이용하여 다중 프로그래밍 환경에서 프로세스 유휴 시간 발생을 해결 가능함 .

문맥 교환 프로세스 전환 시 이전 프로세스 상태 레지스터 내용을 보관 , 또 다른

프로세스의 레지스터를 적재하는 문맥교환 과정을 거침 .

Page 31: Week4 :  운영체제 Chapter 3:  프로세스와 쓰레드

SUMMARY 프로세스와 스레드

운영체제는 프로세스를 자원의 소유 , 스레드를 실행 단위로 개념을 분리 . 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유 , 자원의 생성과 관리의

중복성을 최소화하여 수행 능력 향상 . 스레드 상태

준비 , 실행 대기 , 종료 상태로 구분 . 한 프로세스에 있는 스레드는 순차적으로 실행 , 자신의 정보를 위한 프로그램

카운터와 스택을 각각 가짐 . 사용자 수준 스레드와 커널 수준 스레드

사용자 수준 스레드 : 스레드 사이에 이전의 커널이 개입하지 않아 빠름 . 커널 수준 스레드 : 같은 프로세스의 스레드를 동시에 스케줄링 가능 , 한 프로세스의

스레드가 대기 상태가 되면 커널이 같은 프로세스에서 다른 스레드를 스케줄할 수 있음 .

혼합형 스레드 사용자 수준 스레드 생성 시 커널 수준 스레드를 생성 . 성능 감소 , 스레드 수가 제한되는 일대일 방식 ( 커널 수준 ) 과 어떤 스레드가 시스템

호출 시 다른 스레드가 중단되는 다대일 방식 ( 사용자 수준 ) 의 문제를 해결하기 위한 방법 .