1 / 36

프로세스와 스레드

3. 프로세스와 스레드. 학습목표 프로세스와 스레드의 개념을 이해한다 . 프로세스의 상태 변화 과정을 이해한다 . 프로세스의 생성과 종료 등 프로세스와 관련된 작업을 이해한다 . 프로세스와 스레드의 차이를 알고 스레드의 장점을 이해한다 . 사용자 수준 및 커널 수준 스레드의 장단점을 이해한다 . 내용 프로세스 개요 프로세스 관리 스레드. 1. 프로세스 개요. 프로세스 ( Process ) 개념 1960 년대 멀틱스 시스템 ( Multics System ) 설계자 처음 사용 .

Download Presentation

프로세스와 스레드

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3 프로세스와 스레드

  2. 학습목표 • 프로세스와 스레드의 개념을 이해한다. • 프로세스의 상태 변화 과정을 이해한다. • 프로세스의 생성과 종료 등 프로세스와 관련된 작업을 이해한다. • 프로세스와 스레드의 차이를 알고 스레드의 장점을 이해한다. • 사용자 수준 및 커널 수준 스레드의 장단점을 이해한다. • 내용 • 프로세스 개요 • 프로세스 관리 • 스레드

  3. 1. 프로세스 개요 • 프로세스(Process) 개념 • 1960년대 멀틱스 시스템(Multics System) 설계자 처음 사용. • 이후 작업(Task)이란 용어와 함께 사용되며, 다양한 정의를 가짐. • 가장 일반적인 정의는 “실행 중인 프로그램” - 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태. - 해당 프로세스가 사용하고 있는 메모리 영역(자신의 주소 공간)이 존재함을 의미. - 프로세서 할당(점유) 시간과 메모리, 파일, 입출력장치 등의 자원이 필요하며, 자원은 프로세스 생성 및 실행 시 할당됨. - 현재의 활동 상태를 나타내는 프로그램 카운터와프로세서의 현재 활동(레지스터 내용) 포함. • 프로그램과 달리 프로세서는 메모리에 주소 공간을 갖는 능동적인 개체. • 실행 스택(Stack) : 호출된 프로시저(함수)의 복귀 주소와 지역 변수 등의 일시적인 데이터를 저장하는 영역. • 실행 힙(Heap) : 텍스트(코드) 영역과는 별도로 유지되는 자유 영역. • 데이터(정적 변수) : 프로세스 실행 중 동적으로 할당 받는 영역, 전역 또는 정적 변수 저장. • 텍스트(코드) : 프로세서가 실행하는 코드 저장. [그림3-1] 메모리에 존재하는 프로세스 주소 공간 구조

  4. 1. 프로세스 개요 • 재진입 프로그램(재진입 코드) • 메모리 내에 동일한 사본을 여러 사용자가 공유할 수 있도록 작성된 프로그램 또는 루틴. - 실행 중 사용할 데이터를 보관하는 실행 스택과 공통적인 데이터를 보관하는 데이터 영역을 가짐. - 프로세서가 동일한 프로그램을 사용하여도 텍스트(코드) 영역은 같으나 별도의 스택에 서로 다른 데이터를 가지므로 별개의 프로세스로 인식됨. - 데이터베이스, 문서 편집기 등 • 프로세스는 사용자 관점에서 세그먼트(코드, 데이터, 스택 등)의 가상 주소 공간을 갖는 상태를 의미, 시스템 관점에서 실행중인 프로그램을 의미. • 처리 상태에 있는 데이터 구조로 표현 가능(그림 3-2) - 스케줄러(디스패칭)에 의해 프로세서 할당. - 파일에 관련된 자원에 대한 참조(장치 관리, 메모리 관리) - 프로세스 지원과 협력에 관한 정보(교착상태, 보호, 동기화) 교환 - 프로세스 관련 연산은 생성, 종료, 보류, 자원 할당, 해제 등 [그림3-2] 시스템 관점에 본 프로세스

  5. 1. 프로세스 개요 • 프로세스 종류 • 실행 유형에 따라 크게 3가지로 구분. • 운영체제 프로세스 - 커널 프로세스 또는 시스템 프로세스라 부름. - 프로세스 실행 순서 제어, 사용하고 있는 프로세스가 다른 사용자나 운영체제 영역을 침범하지 못하게 감시하는 기능 담당. - 사용자 프로세스 생성, 입출력 프로세스 등 시스템 운영에 필요한 작업 수행. • 사용자 프로세스 : 사용자 코드 수행. • 병행 프로세스 : 프로세스 여러 개가 동시에 실행되며, 독립 프로세스와 협동 프로세스로 구분. 1. 독립 프로세스 - 프로세스 여러 개가 병행하여 수행 시 주어진 초기값에 따라 항상 같은 결과를 보여줌. - 서로 독립적으로 실행되어 다른 프로세스에 영향을 받지 않고, 데이터를 공유하지 않음. 2. 협동 프로세스 - 다른 프로세스에 영향을 주거나 다른 프로세스에 의해 영향을 받음. - 컴퓨터 시스템의 제한된 자원을 공유하는 프로세스들이 통제되어 상호 작용해야 하는 경우 발생. - 서로 협동해야 하는 경우, 통신을 위한 수단과 동기화 기능이 필요.

  6. 1. 프로세스 개요 • 프로세스 상태 • 실행과 비실행 프로세스로 구분. • 프로세스는 실행되며 상태가 변하므로 운영체제는 프로세스 제어에 필요한 프로세스 상태를 점검해야 함. - 운영체제가 프로세스를 새로 생성하면 비실행 상태로 초기화되어 실행을 기다림. - 실행 중인 프로세스 종료 또는 인터럽트 발생 시 비실행 프로세스 중 선택된 프로세스가 실행 상태로 변하고(디스패치) 인터럽트 된 프로세스는 비실행 상태로 변경. • 실행 상태 프로세스 - 실행 : 명령어가 실행되는 상태, 즉 프로세스가 프로세서를 점유한 상태 - 대기또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나길 기다리는 상태 - 준비 : 프로세스가 프로세서를 할당 받기 위해 기다리는 상태 • 대부분의 프로세스는 준비나 대기(보류) 상태이며, 어느 한 순간에 한 프로세스만 실행상태가 됨. [그림3-4] 프로세스 상태 [그림3-3] 프로세스 상태 구분

  7. 1. 프로세스 개요 • 프로세스 상태 변화 • 시스템의 모든 프로세스는 종료되어 시스템을 떠날 때까지 준비,실행, 대기(보류) 상태로 변화되며 실행되는 과정을 반복. • 운영체제는 프로세서 스케줄러를 이용해 프로세스 상태 변화를 관리. • 작업 스케줄러 • 스풀러가 디스크에 저장한 작업들 중 실행할 작업을 선정, 준비 리스트에 삽입. • 이를 통해 다중 프로그래밍의 정도를 결정하는 핵심적인 역할 수행. • 선정한 작업에 대한 프로세스의 생성에서 종료까지의 과정 수행을 위해 아래 그림과 같은 상태 변화를 일으킴. • 프로세스 상태 변화(그림 3-5) - 실행 프로세스가 자발적으로 프로세서 반환 전 할당된 시간이 경과하면 준비상태로 변경. - 실행 프로세스가 실행하다 입출력 명령이 발생 시 대기 (보류) 상태로 변경. - 대기 프로세스는 보류 이유가 제거되면 준비 상태로 변경. - 준비 프로세스는 디스패처(Dispatcher)가 프로세서를 할당하면 다시 실행상태로 변경. [그림3-5] 프로세스 상태 변화

  8. 1. 프로세스 개요 • 준비 → 실행 • 디스패치(Dispatch) : 준비 리스트 맨 앞에 있던 프로세스가 프로세서를 선택(배당되어 실행)하는 것. • dispatch(프로세스명) : 준비 → 실행 • 시간 할당 - 실행 프로세스가 프로세서를 일정 시간만 사용할 수 있도록 시간을 제한. - 특정 프로세스가 프로세서를 계속 독점하는 것을 방지함. [그림3-6] 프로세스와 디스패처

  9. 1. 프로세스 개요 • 실행 → 준비 • 프로세스가 프로세서를 점유한 상태를 “프로세스가 실행 상태에 있다”라고 함. • 운영체제는 프로세스의 독점을 방지하기 위해 인터럽트 클록(Interrupt Clock)을 둠. - 특정 프로세스가 일정 시간이 지나도(타임아웃) 프로세서를 반환하지 않으면 클록(Clock)이 인터럽트를 발생, 운영체제가 프로세서 제어권을 가짐. • 운영체제가 제어권을 가지면 실행 중인 프로세스는 준비 상태로 변화, 준비 리스트의 첫 프로세스가 실행 상태로 변경. • 실행 → 대기(보류) • 실행 프로세스가 지정 시간 전에 입출력 연산 등이 필요하거나 새로운 자원 요청 등의 문제 발생 시 스스로 프로세서를 양도하고 대기 상태로 변경. • timeout(프로세스명) : 실행 → 준비 • block(프로세스명) : 실행 → 대기(보류) • 대기(보류) → 준비 • 깨움(Wake up) : 프로세스의 마지막 상태 변화로 입출력 작업이 끝났을 때 발생. • wakeup(프로세스명) : 대기(보류) → 준비 ※ 프로세스 상태 변화 중 프로세스 스스로 하는 것은 보류뿐, 나머지는 외부 조건에 의해 발생.

  10. 1. 프로세스 개요 • 프로세스 제어 블록 (PCB, Process Control Block) • 프로세스는 운영체제 내에서 프로세스 제어 블록이라 표현하며, 작업 제어 블록이라고도 함. - 프로세스를 관리하기 위해 유지되는 데이터 블록 도는 레코드의 데이터 구조. - 프로세스 식별자, 프로세스 상태, 프로그램 카운터 등의 정보로 구성. - 프로세스 생성 시 만들어지고메인 메모리에 유지, 운영체제에서 한 프로세스의 존재를 정의. - 프로세스 제어 블록의 정보는 운영체제의 모든 모듈이 읽고 수정 가능. • 프로세스 제어 블록(그림 3-7) - 프로세스 식별자 : 각 프로세스에 대한 고유 식별자 지정. - 프로세스 상태 : 생성, 준비, 실행, 대기, 중단 등의 상태 표시. - 프로그램 카운터 : 프로그램 실행을 위한 다음 명령의 주소 표시. - 레지스터 저장 영역 : 누산기, 인덱스 레지스터, 범용 레지스터, 조건 코드 등에 관한 정보로 컴퓨터 구조에 따라 수나 형태가 달라짐. - 프로세서 스케줄링 정보 : 프로세스의 우선순위, 스케줄링 큐에 대한 포인터, 그 외 다른 스케줄 매개변수를 가짐. - 계정 정보 : 프로세서 사용시간, 실제 사용시간, 사용상한시간, 계정 번호, 작업 또는 프로세스 번호 등. - 입출력 상태 정보 : 특별한 입출력 요구 프로세스에 할당된 입출력장치, 개방된(Opened) 파일의 목록 등. - 메모리 관리 정보 : 메모리 영역을 정의하는 하한 및 상한 레지스터(경계 레지스터) 또는 페이지 테이블 정보. [그림3-7] 프로세스 제어 블록(PCB)

  11. 1. 프로세스 개요 • 프로세스 교환 • 프로세스의 교환은 인터럽트와 트랩, 시스템 호출로 나타냄. • 실행 중인 프로세스가 인터럽트되어 운영체제가 다른 프로세스를 실행 상태로 변경, 제어를 넘겨줄 때, 프로세서의 레지스터 내용은 저장해야 함. • 프로세스는 현재 사용되는 자원에 대한 정보를 가지며, 실행되는 과정에서 여러 프로세스가 파생될 수 있는 능동적인 개체. - 프로그램은 프로세스 여러 개로 생성될 수 있는 디스크에 저장된 파일 내용으로 정적 단위. • 즉, 자원을 할당 받은 상태의 프로그램. [그림3-8] 프로세스 간 교환(프로세스 사용을 전환하는 P1, P2간의 교환)

  12. 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의 자식 프로세스로 생성됨. [그림3-9] 프로세스 계층 구조 예(유닉스 시스템)

  13. 2. 프로세스 관리 • 프로세스 생성 • 프로세스는 운영체제 또는 다른 사용자의 응용 프로그램 요청에 의해 생성. • 운영체제가 새로운 프로세스를 생성, 추가하려면 프로세스 관리를 위한 프로세스 제어 블록을 만든 후 프로세스에 주소 공간을 할당해야 함. - 일괄 처리 환경에서는 실행을 위해 작업이 준비 큐에 도착할 때 생성. - 대화형 환경에서는 새로운 사용자가 로그온(Log-on)할 때 생성. • 프로세스 생성을 위해 다음과 같은 작업이 필요함. - 프로세스 식별자 결정. - 시스템에 알려진 프로세스 리스트에 식별자 삽입. - 프로세스에 초기 우선 순위 부여. - 프로세스 제어 블록 생성. - 프로세스에 초기 자원 할당. • 프로세스 생성 과정. 1 단계 : 새로운 프로세스에 프로세스 식별자 할당. 2 단계 : 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간, 프로세스 제어 블록 공간 할당. 3 단계 : 프로세스 제어 블록 초기화. - 프로세스의 상태 정보/프로그램 카운터/스택 포인터 등의 초기화, 자원 요청, 프로세스 제어 정보 (우선 순위) 등 4 단계 : 링크(해당 큐에 삽입).

  14. 2. 프로세스 관리 • 프로세스가 작업을 수행하기 위해 자원 필요. • 자식 프로세스 생성 시 필요한 자원을 운영체제로부터 직접 또는 부모 프로세스의 자원 일부 사용 가능. • 부모 프로세스는 자식 프로세스에 자원을 나눠주거나 일부 자원 공유 가능. - 자원의 일부만 사용하도록 제한하면 시스템에 부담을 주는 것을 방지 가능함. - 프로세스 생성 시 획득하는 다양한 물리적, 논리적 자원 외에도 약간의 초기화 데이터가 부모 프로세스에서 자식 프로세스로 전달되는 경우도 있음. • 새로운 프로세스 생성 시 실행과 관련해 다음 두 가지 경우가 가능함. • 부모 프로세스와 자식 프로세스가 동시에 실행됨. • 부모 프로세스는 자식 프로세스들이 모두 종료될 때까지 기다림. • 새로운 프로세스의 주소 공간은 다음 두 가지 경우가 가능함. • 자식 프로세스가 부모 프로세스의 주소 공간을 복사. - 유닉스는 각 프로세스마다 정수로 된 고유한 프로세스 식별자를 가짐. - 새로운 프로세스는 fork()명령에 의해 생성, 주소 공간은 부모 프로세스의 주소 공간을 복사함. - 부모 프로세스와 자식 프로세스의 정보 교환이 쉬움. • 자식 프로세스가 별도의 프로그램을 적재. ※ 윈도우 NT계열은 새로운 프로세스의 주소 공간을 두 가지 방식을 모두 지원.

  15. 2. 프로세스 관리 • 프로세스 종료 • 프로세스가 명령 실행 후 종료되고 운영체제에 프로세스 삭제 요청 • 일괄 처리 환경 : 작업 종료를 의미하는 신호로 인터럽트 발생 또는 시스템 호출로 중지명령 전달, 프로세스 완료. • 대화형 환경 : 사용자가 로그오프(Log-off)하거나 터미널을 닫을 때 또는 오류에 의해 프로세스 종료. • abort시스템 호출을 이용한 프로세스 종료. - 종료되는 프로세스를 생성한 부모 프로세스만 호출 가능. - 부모 프로세스가 자식 프로세스의 생존권을 가져 다른 프로세스가 임의로 작업을 중단시킬 수 없음. - 자식 프로세스 종료 시자식 프로세서의 신원(Identity)이 부모 프로세스로 전달. • 부모 프로세스는 아래의 이유로 자식 프로세스 종료 가능 • 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때. • 자식 프로세스에 할당된 작업(Task)이 더 이상 없을 때.

  16. 2. 프로세스 관리 • 연속 종료 • 시스템이 부모 프로세스 종료 시 자식 프로세스의 존재를 허용하지 않아 종료시키는 현상으로 운영체제가 수행함. - 유닉스에서 exit명령으로 프로세스 종료, 부모 프로세스는 wait명령을 사용하여 자식 프로세스의 종료를 기다림. - wait명령 : 종료된 자식의 프로세스 식별자를 부모 프로세스에 전달함. • 프로세스를 종료하는 경우와 그 예 • 정상 종료 : 프로세스가 운영체제의 서비스를 호출한 경우. • 시간 초과 : 프로세스가 명시된 전체 시간을 초과하여 실행되거나 명시된 시간을 초과하면서 어떤 이벤트 발생을 기다리는 경우. • 실패 : 파일 검색 실패, 명시된 횟수를 초과하여 입출력이 실패한 경우. • 산술 오류, 보호 오류, 데이터 오류 등. • 메모리 부족, 접근 위반 등 • 프로세스 제거 • 프로세스를 파괴하는 것. • 제거 시 프로세스에 속한 자원을 시스템에 돌려주고 해당 프로세스는 시스템 리스트나 테이블에서 사라지며, 프로세스 제어 블록 회수. • 프로그램은 디스크에 저장됨.

  17. 2. 프로세스 관리 • 프로세스 중단과 재시작 • 프로세스 중단(일시 정지) • 프로세서의 동작 시간과 입출력 동작 시간의 차이로 시스템의 활동 시간이 유휴 상태로 되는 것을 해결 가능. • 장시간 중단되는 경우 해당 프로세스에 할당된 자원을 다시 풀어주어야 하며, 풀어줄 자원의 결정은 자원의 성질에 따라 결정. • 다중 프로그래밍에서 중단은 자원 부족(대기) 상태를 의미하기도 함. - 다중 프로그래밍 환경에서는 자원의 이용률과 시스템 효율 향상을 위해 자원을 동적으로 할당. - 교착상태 발생 시 문제 생김. - 중단 : 할당된 자원을 기다리는 상태. - 대기 : 자원을 할당 받기 위해 기다리는 상태. • 운영체제는 다음 두 가지 방법으로 프로세스를 실행 가능. • 새로운 프로세스를 생성하여 실행. • 이미 실행 중인 프로세스를 중단시켰다가 다시 실행. - 시스템 전체의 부하를 증가시키지 않으면서 프로세스에 서비스 제공 가능. - 특정 이벤트 발생을 기다리며 대기 상태가 되므로 해당 이벤트 발생 시 즉시 실행 상태로 변화 가능. • 프로세스 재시작 • 중단 원인이 제거되어 프로세스가 다시 실행되는 것. • 중단되었던 프로세스는 중단되었던 지점부터 다시 시작.

  18. 2. 프로세스 관리 • 프로세스 중단과 재시작은 다음과 같은 경우에 발생함. • 시스템에 장애가 발생하면 실행 중인 프로세스는 잠시 중단했다가, 시스템이 기능을 회복했을 때 다시 재시작할 수 있다. • 프로세스의 어느 부분이 의심스러울 때 사용자는 실행 중인 프로세스를 중단하여 확인한 후 재시작하거나 정지할 수 있다. • 처리할 일이 너무 많아 시스템 부담이 크면 프로세스 몇 개를 중단했다가 시스템이 다시 정상 상태로 돌아왔을 때 재시작할 수 있다. • 중단과 재시작을 추가한 프로세스 상태 변화(그림 3-10) - 중단 : 프로세스 자신 또는 다른 프로세스에 의해 가능. - 단일 처리 시스템 : 프로세스 자신이 중단시켜야 함. - 다중 처리 시스템 : 다른 프로세서에 의해서도 가능하지만, 다른 프로세서가 재시작 시켜주기 전엔 실행 불가능. [그림3-10] 중단과 재시작을 추가한 프로세스 상태 변화

  19. 2. 프로세스 관리 • 프로세스 우선 순위 변경 • 프로세스 제어 블록의 우선 순위 값 변경 가능. • 준비 리스트의 프로세스는 프로세서 중심 프로세스(낮은 우선 순위)와 입출력 중심 프로세스(높은 우선 순위)로 구분. - 우선 순위가 낮은 프로세스 : 시간 할당량을 크게 제공. - 우선 순위가 높은 프로세스 : 시간 할당량을 적게 제공. ※ 입출력 중심의 프로세스를 자주 짧게 사용, 프로세서 중심 프로세스는 사용 횟수는 적으나 한번에 오래 사용하게 하여 균형을 유지함. • 입출력 프로세스 - 높은 우선 순위 : 속도가 느리면서 빠른 응답을 요구하는 단말기 입출력 프로세스. - 낮은 우선 순위 : 속도가 빠른 디스크 입출력 프로세스. • 프로세스 스케줄러는 준비 리스트의 우선 순위를 이용해 프로세스를 처리. • 할당 시간을 초과할 경우 프로세스 실행 상태에서 준비 상태로 변경.

  20. 2. 프로세스 관리 • 문맥 교환(Context Switching) • 프로세스 교환 • 실행 중인 프로세스가 인터럽트되면 운영체제가 다른 프로세스를 실행 상태로 변경, 해당 프로세스에 제어를 넘겨주는 과정에서 실행 중인 프로세스로부터 제어를 인수한 운영체제가 또 다른 프로세스에 제어를 넘겨주기 위해 발생. - 인터럽트 처리 루틴을 실행한 후 현재 실행 중인 프로세스가 재실행될 수 있으므로 대부분의 운영체제는 프로세스 교환으로 인터럽트가 발생하지 않음. - 트랩은 시스템이 치명적인 오류인지를 판단, 치명적 오류일 경우 프로세스를 종료하면서 프로세스 교환 발생. • 문맥 교환 • 프로세스를 다른 프로세스로 교환하기 위해 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재하는 일련의 과정. - 프로세스가 “준비→실행”, “실행→준비”, “실행→대기”상태로 변할 때 발생. - 오버헤드가 발생하며 오버헤드는 메모리 속도, 레지스터 수, 특수 명령어의 존재에 따라 다르므로 시스템마다 다름. [그림3-11] 문맥 교환 과정

  21. 2. 프로세스 관리 • 인터럽트(Interrupt) • 현재실행되는프로세스와 별도로 외부에서 발생되는 여러 종류의 이벤트(입출력 동작의 종료 등)에 의해 발생. • 제어가 인터럽트 처리 루틴으로 넘어간 후에도 기본 시스템 관리 작업을 처리, 인터럽트 형태에 따라 관련된 운영체제 루틴으로 분기. • 대표적인 인터럽트 예 - 입출력 인터럽트 : 입출력 동작이 발생한 사실을 확인 후 이벤트를 기다리는 프로세스를 준비 상태로 변경, 실행할 프로세스를 결정. - 클록 인터럽트 : 현재 실행 주인 프로세스의 할당 시간을 조사하여 실행 중인 프로세스를 준비 상태로 변경, 다른 프로세스를 디스패치하여 실행 상태로 변경. • 트랩(Trap) • 부적절한 파일 접근 또는 현재 실행 중인 프로세스에 의해 발생되는 오류나 예외 상황으로 인해 발생.

  22. 3. 스레드 • 스레드 개요 • 프로세스에서 실행 제어만 분리한 실행 단위. • 경량 프로세스(LWP, Light Weight Process)라고도 부름. - 중량 프로세스(HWP, Heavy Weight Process)는 스레드를 하나 가진 작업. • 프로세서를 사용하는 기본 단위이며, 명령어를 독립적으로 실해할 수 있는 하나의 제어 흐름. • 작업 : 스레드의 그룹 환경 - 같은 그룹의 스레드와 코드, 주소 공간, 운영체제의 자원(파일, 신호) 등을 공유. ※ 작업에 스레드가 없으면 아무 일도 할 수 없으므로 반드시 스레드가 있어야 함. • 프로세스는 스레드를 하나 이상 가지며, 각 스레드는 아래 내용을 포함. • 스레드 실행 시의 상태(실행, 준비 등) • 실행 스택 • 지역 변수와 스레드의 특정 데이터를 저장하기 위한 스레드별 정적 저장소 • 프로세스의 다른 스레드가 공유하는 프로세스의 메모리와 자원에 대한 접근 등의 스레드 실행 환경 정보(문맥 정보) [그림3-12] 스레드 구조

  23. 3. 스레드 • 스레드의 장점 • 프로세스에 포함된 스레드들은 공통의 목적 달성을 위해 병렬로 수행. - 자원을 공유하여 한 프로세스에서 동시 작업 가능. • 시스템 성능과 효율 향상. - 하나의 프로세스가 서로 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행 가능. - 응용 프로그램 하나가 비슷한 작업들을 여러 개 수행. • 스레드를 이용하여 다음과 같은 이점을 얻을 수 있음. - 사용자에 대한 응답성 증가 : 응용 프로그램의 일부분이 봉쇄 또는 긴 작업 수행 시에도 프로그램 실행을 계속 허용하여 사용자에 대한 응답성이 증가. - 프로세스의 자원과 메모리 공유 가능 : 스레드는 그들이 속한 프로세스의 자원과 메모리를 공유하므로, 응용 프로그램 하나가 같은 주소 공간에서 여러 개의 스레드를 실행, 시스템 성능 향상과 편리함 제공. - 경제성 : 한 프로세스의 자원을 공유하므로 프로세스를 생성하는 것 보다 오버헤드를 줄일 수 있음. - 다중 프로세서 구조 활용 가능 : 다중 프로세서 구조에서 각 스레드는 다른 프로세서에서 병렬로 실행될 수 있음. [그림3-13] 프로세스와 다중 스레드

  24. 3. 스레드 • 단일 스레드와 다중 스레드 • 운영체제는 단일 프로세스에서 단일 스레드 실행과 다중 스레드 실행을 지원. • 단일 스레드 프로세스 - 프로세스 하나에 스레드 하나가 실행되는 전통적인 방식으로 스레드의 개념이 불확실함. - MS-DOS • 다중 스레드 프로세스 - 프로세스 하나에 여러 스레드를 실행하는 것을 지원. - 윈도우 NT/XP, 솔라리스 등 [그림3-14] 단일 스레드 프로세스와 다중 스레드 프로세스

  25. 3. 스레드 • 다중 스레드의 특징 • 각 스레드를 별도의 프로세서에서 실행하는 측면 다중 프로세싱(프로세서)와 같은 의미. • 동일 프로세스 내의 스레드는 메모리와 파일을 공유하므로, 프로세스 하나에 다수의 실행 단위로 구분된 자원을 공유. • 자원 생성과 관리의 중복성을 최소화하여 실행 능력 향상. • 각 스레드는 커널 개입 없이 서로 통신이 가능하여 독립적으로 실행. • 서버에서 많은 요청을 효과적으로 처리할 수 있는 환경. • 프로세스를 새로 생성하는 것보다 기존 프로세스에서 스레드를 생성하는 것이 빠르고, 같은 프로세스 내 스레드 간 교환이나 스레드 종료 역시 빠름. • 프로세스의 상대적인 무게를 줄여 효율을 극대화하는 것이 목표. • 프로그램 변경 없이 프로세서의 개수에 따라 스레드를 병렬로 처리 가능. • 같은 그룹의 스레드에 프로세서를 할당 또는 스레드 생성 시 중량 프로세서들 사이의 문맥 교환과 비교하여 더 경제적임.

  26. 3. 스레드 • 단일 스레드와 다중 스레드 모델 • 단일 스레드 프로세스 모델 - 프로세스를 하나의 스레드, 스레드가 가진 레지스터와 스택으로 표현. • 다중 스레드 프로세스 모델 - 프로세스를 각각의 스레드와 고유의 레지스터, 스택으로 표현, 프로세스 주소 영역을 모든 스레드가 공유. - 프로세스의 모든 스레드는 해당 프로세스의 자원과 상태를 공유, 같은 주소 공간에 존재하며 동일한 데이터에 접근. [그림3-15] 프로세스 관리 면에서 살펴본 단일 스레드와 다중 스레드 프로세스

  27. 3. 스레드 • 스레드 용법 • 단일 사용자 다중 처리 시스템 환경 • 시스템 호출이 아닌 사용자 라이브러리 수준에서 스레드 개념을 제공, 빠른 속도. • 프로그램에 비동기적 요소를 구현 가능. • 실행 중인 스레드를 대기 상태로 변경, 다른 스레드로 제어를 이동시키는 상태 변화는 하나의 서버가 많은 요청을 받아들여 처리하는 효과적인 방법. • 공유 메모리 형태의 다중 프로세서 시스템 환경 • 프로그램을 공유 메모리에 저장, 스레드를 각 프로세서에 할당, 병렬 처리하여 프로세서 성능을 매우 향상시킬 수 있음. • 스레드의 단점 • 사용자 수준 스레드는 커널 자체가 스레드 하나로 구성, 시스템 호출 실행 시 해당 스레드가 포함된 전체 작업이 시스템 호출 결과가 돌아올 때까지 대기. [그림3-16] 다중 스레드 환경의 워드 프로세서 실행 [그림3-17] 다중 스레드 환경의 웹 서버 프로세스

  28. 3. 스레드 • 스레드의 상태 변화 • 스레드의 특징 • 준비, 실행, 대기, 종료 상태로 구분, 프로세서를 함께 사용하며 항상 스레드 하나만 실행됨. • 한 프로세스에 있는 스레드는 순차적으로 실행, 자신의 정보를 위한 프로그램 카운터와 스택을 가짐. • 스레드 생성 시 운영체제는 부모 프로세스와 공유할 자원을 초기화하지 않음. • 프로세스 내 스레드는 해당 프로세스에서 다른 스레드를 생성, 새로 형성된 스레드를 위한 스택과 레지스터를 제공함으로 프로세스의 생성 및 종료 과정 보다 오버헤드가 적음. • 하나의 스레드가 대기 상태로 변할 때 전체 프로세스를 대기 상태로 변화시키지 않음. - 하나의 스레드가 대기 상태일 경우 다른 스레드 실행 가능. • 서로 독립적이지 않다. - 한 작업에 있는 모든 스레드는 작업의 모든 주소에 접근 가능. • 보호 문제 - 프로세서는 다수의 사용자에게서 발생, 경쟁적인 자원 요구와 서로 다른 관계 유지. - 스레드는 한 명의 사용자가 여러 스레드를 가진 작업 하나를 소유.

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

  30. 3. 스레드 • 스레드 구현 • 사용자 수준 스레드 • 커널 스레드를 지원하지 않는 운영체제에서 사용. • 사용자 수준 스레드 여러 개가 커널 스레드(프로세스) 하나로 매핑되는 방식. • 다중 스레드 프로세스에 대해 프로세서(실행 문맥) 하나를 할당하므로 다대일 스레드 매핑이라 칭함. • 사용자 수준(공간)에서 스레드 관리가 효율적으로 이루어지므로 스레드와 관련된 모든 과정을 응용 프로그램이 수행. • 응용 프로그램은 사용자 수준 스레드 관리를 위한 루틴으로 구성된 스레드 라이브러리(스레드 패키지)를 이용, 다중 스레드로 프로그래밍 가능. • 응용 프로그램은 기본적으로 스레드 하나에서 시작, 해당 스레드에서 실행을 시작함. [그림3-19] 다대일 스레드 매핑과 사용자 수준 스레드

  31. 3. 스레드 • 스레드 라이브러리 • 스레드 생성, 종료, 문맥 교환을 위한 코드, 동기화, 메모리 할당, 스레드 간 메시지 전달, 스레드 실행 스케줄링 등의 정보를 포함. • 생성 유틸리티를 통해 스레드가 생성, 제어는 프로시저 호출을 통해 해당 유틸리티로 이동하여 수행. • 사용자 수준 스레드의 장점 • 커널 도움 없이 사용자 주소 공간에 구현된 스레드 패키지로 스레드 연산 실행. • 커널은 연산 과정은 모르고 프로세스를 계속 하나의 단위로 스케줄하고 하나의 실행 상태를 할당. • 커널과 상관 없이 다양한 목적의 응용 프로그램이나 언어 인터페이스의 요구에 적용할 수 있는 융통성을 가짐. • 여러 수준에서 스레드 구현 가능 • 운영체제에 따라 다르며 일반적으로 사용자 수준과 커널 수준, 혹은 혼합한 방식 중 하나를 사용. • 윈도우 2000/XP, Mach, OS/2, 솔라리스 운영체제는 커널 수준 지원, 시스템 호출 제공. • 사용자 수준에서 라이브러리 호출을 통한 지원 가능

  32. 3. 스레드 • 사용자 수준 스레드 이용 시 시스템의 장점 • 높은 이식성 - 기본 커널 변경 없이 모든 운영체제에 적용 가능. • 오버헤드 감소 - 스레드 관리를 위한 모든 데이터 구조가 프로세스의 사용자 주소 공간에 있어 커널의 도움 없이 스레드 교환 가능. • 스케줄링의 유연성 - 스레드 라이브러리에서 스레드 스케줄링을 제어하므로 스케줄링이 응용 프로그램에 맞게 적절히 구성됨. • 사용자 수준 스레드 이용 시 시스템의 단점 • 시스템의 동시성 지원 불가 - 한 번에 하나의 스레드만 커널에 접근 가능하므로 여러 스레드가 시스템 호출을 동시에 사용할 수 없음. • 시스템 규모 확장 제약 - 커널이 프로세서 내부의 다중 스레드를 프로세스 하나로 관리, 다중 처리 환경에서 여러 프로세스를 이용한 분산 처리를 할 수 없음. • 스레드 간 보호가 어려움 - 스레드 간의 보호에 커널의 보호 기법을 사용할 수 없고, 스레드 라이브러리에서 스레드 간 보호를 제공해야 프로세스 수준에서 보호됨.

  33. 3. 스레드 • 커널 수준 스레드 • 사용자 수준 스레드의 한계를 해결하기 위해 사용자 스레드마다 프로세서(실행 문맥)를 매핑하는 일대일 스레드 매핑을 지원. • 커널에 의해 생성, 삭제되고커널의 텍스트와 전역 데이터를 공유, 자신만의 커널 스택을 가짐. • 사용자 영역에는 스레드 관리를 위한 코드가 없음. - 모든 응용 프로그램은 다중 스레드로 지원, 응용 프로그램의 스레드는 하나의 프로세스에서 지원. - 스레드 관련 모든 작업은 커널(운영체제)이 지원, 프로세스와 스레드에 대한 실행 문맥 정보 유지. • 일대일 모델 구현 운영체제 : 윈도우 NT/XP/2000, 리눅스, 솔라리스 9 이상 버전, OS/2 [그림3-20] 일대일 스레드 매핑과 커널 수준 스레드

  34. 3. 스레드 • 커널 지원 부족 문제 해결 • 커널에 의한 직접적인 스케줄링과 실행으로 사용자 수준 스레드의 문제를 해결하여 시스템 성능 향상. • 병렬 실행 가능 • 하나가 시스템 호출 시 다른 스레드가 중단되는 다대일 방식의 문제를 해결할 수 있어 다중 프로세서에서 다중 스레드를 병렬로 실행 가능. • 시스템 규모 확장이 쉬우며 처리량을 늘릴 수 있음. • 커널 모드 전환 오버헤드 • 커널 스레드 생성으로 인한 오버헤드 증가로 응용 프로그램의 성능 저하를 막기 위해 시스템이 지원 스레드 수를 제한해야 함. • 사용자 수준 스레드보다 스케줄링과 동기화를 위해 자원이 더 필요함. • 시스템이 모든 스레드를 관리하므로 오버헤드 증가. • 이식성이 떨어짐 • 시스템 변경 시 제공된 스레드 API(Application Program Interface)를 사용하여 프로그램을 수정. • 제한적인 자원으로 인해 사용자 수준 스레드 생성에 따라 커널 스레드를 무한정 생성할 수 없음.

  35. 3. 스레드 • 혼합형 스레드 지원 • 스레드 생성은 사용자 영역에서, 여러 개의 사용자 수준 스레드에 여러 개의 커널 스레드가 매핑되는 다대다 스레드 모델. • 사용자 수준 스레드 생성 시 커널 수준 스레드를 생성, 성능 감소. • 시스템 호출 시 다른 스레드가 중단되는 문제를 해결하기 위한 방법. • 다대다 모델 구현 운영체제 : 솔라리스(Solaris) • 솔라리스 2 스레드 (그림 3-20) ① 작업 - 일반적인 프로세스 ② 사용자 수준 스레드 - 응용 프로그램의 병렬 처리를 위한 인터페이스. - 프로세스의 주소 공간에 있는 스레드 라이브러리를 통해 실행. ③ 경량 프로세스 스레드 - 하나 이상의 사용자 수준 스레드 지원. - 커널 스레드 하나에 매핑. - 커널에 의해 독립적으로 스케줄링. - 다중 프로세서에서는 병렬로 실행. ④ 커널 스레드 - 프로세서에서 실행되기 위해 디스패치되며 스케줄링됨. [그림3-21] 솔라리스 2 스레드

  36. 3. 스레드 • 자원과 입출력 대기를 위한 대기가 경량 프로세스 단위로 이루어짐. • 스레드는 하나의 커널 스레드와 경량 프로세스(LWP)가연결됨. • 각 작업(프로세스)은 경량 프로세스를 한 개 이상 가지며, 경량 프로세스는 대응하는 커널 스레드를 가짐. • 어떤 작업의 경량 프로세스가 입출력 완료를 기다리더라도 프로세서는 그 작업의 다른 경량 프로세스로 이동하여 작업을 계속 수행할 수 있음. • 스레드 라이브러리가 최적의 성능을 지원 • 경량 프로세스의 수를 동적으로 조절, 사용자 수준 스레드와 커널 수준 스레드를 다대다 스레드 매핑함. • 다대다 스레드 매핑은 스레드 풀링 기법을 통해 일대일 스레드 매핑에서의 오버헤드를 줄여줌. • 스레드 활용 운영체제 예 • 매크(Mach) - 다중 스레드 시스템, 커널은 여러 개의 요청을 동시에 서비스할 수 있음. - 스레드 자신은 동기적. • 유닉스 커널 - 단일 작업(Single-Tasking). - 하나의 프로세스만 수정하는 것을 허용하여 데이터 제어의 동시성 문제 해결 가능. • 스레드가 비동기적 시스템 - 록킹(Locking) 기능 필요.

More Related