3장 프로세스와 스레드 프로세스의 상태와 변환 과정을 이해 한다 프로세스의 생성과 종료 등 프로세스에 대한 작업을 이해한다. 스레드와 프로세스의 차이점을 이해하고 스레드의 장점을 알아본다. 사용자 수준 및 커널 수준 스레드의 장.단점을 이해한다.
프로세스 개념 프로세스의 정의 다중프로그래밍 환경 : 컴퓨터 효율성 향상과 제어 필요 프로세스 개념 출현 - 60년대 Multics 시스템에서 "프로세스" 처음 사용 "작업(Task)“이라는 용어와 함께 사용 레지스터, 스택, 포인터, 실행중인 프로그램, 데이터 등의 집합체로 정의 프로세스의 다른 정의들 실행중인 프로그램(가장 보편적으로 사용) 비동기적 행위(Asynchronous Activity) : - 어떤 명령어 동작이 끝났음을 가리키는 신호가 오는 것으로 다음 명령어의 수행을 시작한다는 의미 프로시저가 활동중인 것 실행중인 프로시저의 제어 추적 운영체제 내에 PCB(Process Control Block)가 존재 프로세서가 할당하는 개체 디스패치가 가능한 대상 등
프로세스 개념 프로세스의 정의-계속 프로세스의 역할 수행 프로세서 점유, 프로세서 할당 시간과 메모리, 파일, 입출력 장치 경우 ⇒자원 필요 프로세스 생성이나 실행의 경우 ⇒ 자원 할당 프로그램 코드, 프로그램 카운터, 프로세서 레지스터 내용 포함 데이터베이스, 문서편집기 ⇒ 재진입 프로그램이라고 함. - 따라서 스택과 공통 자료를 보관하는 자료부분을 가지고 있다. 두 개의 프로세스가 같은 프로그램(문서편집기) 사용시 ⇒ 별개의 프로세스로 인식 [이유] - 코드 부분은 같지만 각기 별도의 스택에 다른 자료를 가짐 .
프로세스 개념 프로세스의 정의-계속
프로세스 개념 프로세스의 종류 운영체제 프로세스 : 커널 프로세스, 시스템 프로세스 프로세스들의 실행순서 제어, 중요한 시스템 감시 기능 담당 시스템 운영에 필요한 코드 수행 사용자 프로세스(User Process) - 사용자 코드를 수행하는 프로세스 병행 프로세스(Concurrent Process) - 여러 개의 프로세스가 동시에 수행되는 상태 병행성(동시성) - 동시에 시스템에 존재하나 어느 순간에는 단지 한 프로세스만 프로세서에서 실행 협동 프로세스 : 서로 관련이 없는 독립적인 프로세스와 다른 프로세스와 서로 협력하면서 수행하는 프로세스
프로세스 개념 프로세스의 종류-계속 독립 프로세스 주어진 초기값에 따라 같은 결과를 보여주는 프로세스. 주어진 초기값에 따라 같은 결과를 보여주는 프로세스. 한 프로세스가 시스템 안에서 다른 프로세스에게 영향을 주지 않거나 또는 다른 프로세스에 의해서 영향을 받지 않은 프로세스. - 다른 프로세스와 자료는 미 공유함. 협동 프로세스 다른 프로세스에게 영향을 주거나 영향을 받는 경우 제한된 자원 서로 공유하는 프로세스 사이 통제된 상호 작용하는 경우에 발생 협동 필요한 경우 : 서로 통신을 위한 수단과 동기화 기능 필요함.
프로세스 개념 프로세스 상태 운영체제 : 프로세스 실행 제어, 프로세스에 대한 정보를 갖고 있다(유지). [예] 운영체제 : 프로세스 실행 제어, 프로세스에 대한 정보를 갖고 있다(유지). [예] - 프로세스의 실행을 결정하기 위한 선택 과정 - 프로세스에게 필요한 시스템 자원 할당 ⇒ 프로세스 제어에 필요한 프로세스의 상태 점검 필요 ▶ 프로세스 상태 : 실행 중, 또는 비 실행 상태
프로세스 개념 프로세스 상태-계속 프로세스 실행 - 자신의 상태 변화함. - 프로세스 상태는 현재의 활동요소에 따라 부분적으로 정의 - 프로세스는 운영체제가 추적할 수 있도록 프로세스 상태와 메모리 위치등 포함 해야 함. 순차 프로세스의 상태 세분 실행 - 명령어들이 실행되는 상태 즉 프로세서를 점유하고 있는 상태 대기 또는 보류 - 프로세서가 어떤 이벤트(입출력 종료와 같은 외부 신호) 발생을 기다림 준비 - 프로세서에게 할당되기를 기다리는 상태
프로세스 개념 프로세스 상태의 변환 상태 변환 : 프로세서 스케줄러 이용 작업 스케줄러(Job scheduler) - 다중 프로그래밍의 정도 결정 스풀러에 의해 디스크에 저장된 작업 선정 후 ⇒ 준비 리스트에 삽입시켜주는 역할 수행 프로세스 스케줄러(Process Scheduler) 프로세스의 생성에서 종료까지의 단계별 과정을 실행하기 위하여 상태 변환을 일으킴
프로세스 상태 전이도
활동 상태 생성상태 : 프로세서 처음 만들어진 상태 ① 충분한 기억 공간이 있으면 준비 상태로 전이(Dispatch;급송) ② 그렇지 않으면 프로세서 지연 준비 상태로 전이 2) 준비상태 : 프로세서를 할당 받기 위해 기다리고 있는 상태 ① 프로세서를 할당 받게 되면 실행 상태로 전이(Dispatch/Schedule) ② 준비상태에서 기억장치와 프로세서를 빼앗긴 경우 지연 준비상태로 전이된 상태를 중지 상태(Swap-out/Suspend);중지)라 한다. 3) 실행상태 : 프로세서에 의해 실행되고 있는 상태 ① 프로세서가 모든 것을 종료하고 종료상태로 전이(Exit) ② 프로세서가 시간 종료(Timer-run-out)나 자신보다 우선 순위의 프로세서가 들어오는 경우 프로세서를 반납하고 준비 상태나 지연준비 상태로 전이된 상태를 선점(Preemption)이라 한다. ③ 입출력 요구로 프로세서가 대기상태로 전이되는 상태를 블록(Block)이라 한다.
4) 대기 상태 : 임의의 자원을 요청한 후 할당 받을 때 까지 기다리고 있는 상태 ① 프로세서가 필요한 자원을 할당 받으면 다시 준비 상태로 전이되는 상태를 조건 만족(Wakeup)이라 한다. ② 프로세서가 커널에 의해 기억장치를 빼앗긴 상태에서 지연 대기 상태로 전이 되는 상태를 중지(Swap-out/Suspend)라고 한다. (2) 지연상태 1) 지연준비 상태 : 프로세서가 생성된 후 기억장치의 양이 부족한 경우, 프로세서가 기억장치를 빼앗긴 경우, 프로세서가 선점 당한 경우, 프로세서와 기억장치를 모두 빼앗긴 경우의 생태를 의미 한다. ① 지연 상태에서 자원을 할당 받게 되면 준비 상태로 전이된다. 이때 전이 상태를 다시 시작(Swap-in/Resume)이라고 한다. 2) 지연대기 상태 : 어떤 자원을 얻고자 대기 상태에 있던 프로세서가 커널에 의해 기억장치를 빼앗긴 상태이다. ① 다시 기억장치를 할당 받으면 원래의 대기 상태로 전이되는데 이 상태를 다시 시작(Swap-in/Resume)이라고 한다 ② 요청한 자원을 할당 받으면 지연 준비 상태로 전이되는 것을 조건만족(Wakeup)이라고 한다.
프로세스 개념 프로세스 상태의 변환-계속 준비(Ready) 상태 실행 프로세스 : 프로세스의 시간 할당량 초과시, 보류(Blocked) 프로세스 : 보류된 이유가 제거될 때 보류(Blocked)/대기 상태 실행 프로세스가 프로세서에서 수행을 하다가 입출력 명령 또는 유사한 요청을 낼 때 실행(Running) 상태 준비 상태의 프로세스가 디스패처(Dispatcher)에 의해 프로세스가 부여될 때
프로세스 개념 프로세스 상태의 변환 프로세스 상태의 변환
프로세스 개념 프로세스 상태의 변환 -계속 [그림3-5] 프로세스와 디스패처
프로세스 개념 프로세스 상태의 변환 -계속 준비 → 실행 : “디스패칭(Dispatching)” - 준비 리스트의 맨 앞에 있던 프로세스가 프로세서를 선택하는 것. 상태 변환 표시 dispatch(프로세서 명) : 준비 → 실행 시간 할당량(time guantam) - 실행 프로세스에게 일정시간 프로세서 사용할 수 있는 시간 제한하는 것. ▶ 제한 이유 : 특정프로세스가 프로세서 계속 독점 사용 예방 실행 → 준비 프로세스가 프로세서 점유 상태 “프로세스 실행 상태” 프로세서 독점 방지 - 인터럽트 클럭 이용 - 프로세스 ⇒ 프로세서 점유(지정 시간 동안) - 일정한 시간 경과 후 프로세서 점유 ⇒ 클럭이 인터럽트를 발생시켜 운영체제가 프로세서 제어권 갖게 됨 운영체제가 제어권 보유 : 실행 상태 준비 상태(프로세스) 준비 리스트 내의 첫 프로세스가 실행 상태로 됨 상태 변환 표시 : timerunout(프로세스 명) : 실행 → 준비
프로세스 개념 실행 → 보류 프로세서 양도 ⇒ 스스로 보류 상태로 가게 됨 실행 상태의 프로세스가 지정된 시간 이전에 입출력 연산 필요로 할 경우 새로운 자원 요청 등 기타문제 발생 상태 변환 표시 : block(프로세스 명) : 실행 → 보류 보류 → 준비 입출력 작업이 끝났을 때에 발생하는 깨움(wake up;조건만족)상태 보류 상태로부터 준비 상태로의 변환 상태 변환 표시 : wakeup(프로세스 명) : 보류 → 준비 프로세스 자신이 프로세스 변환 – 보류 나머지 상태 변환 - 외적 조건에 의해 발생
프로세스 개념 프로세스 제어 블록 프로세스 ⇒ 각 프로세스는 PCB(Process Control Block)에 의해 운영체제 내에 표현 PCB : 작업 제어 블록 프로세스에 대한 자료 블럭 또는 레코드 - 프로세스의 현 상태, 식별자, 우선순위, 스케쥴링 정보, 메모리, 시스템 자원, 계정 정보, 레지스터의 값 등에 관한 정보 보유 운영체제의 모듈에 의해 판독되고 수정 프로세스 생성시에 만들어지며 메인메모리에 유지 되어 있음. 운영체제 내에서 한 프로세스 존재를 정의 함. 실행이 종료된 프로세스 : 해당 PCB 삭제
프로세스 개념 프로세스 제어 블록-계속 P-111 참조 • Process state information – e.g. CPU registers (general purpose and special purpose) Program counter • Process control information scheduling priority resources held access privileges memory allocated accounting [그림3-6] 프로세스 제어 블록
프로세스 관리 블록(PCB) 정보 ① 포인터 : 프로세서가 적재된 기억장소의 주소에 대한 포인터 값. ② 프로세서 현재 상태 : 준비, 실행, 대기, 종료 등의 상태를 나타낸다. ③ 프로세서 식별자 : 프로세서 생성시 부여한 고유한 정수 번호의 값. ④ 프로그램 카운터 : 다음에 실행할 명령어의 주소를 나타낸다. ⑤ 프로세서 우선순위 : 프로세서 스케줄링을 하기 위해 실행될 우선 순위를 나타낸다. ⑥ 각종 레지스터 : 누산기, 인덱스, 스택 레지스터 등의 상태 코드 정보 를 가지고 있다. ⑦ 기억장치 관리 정보 : 경계 레지스터나 페이지 테이블들을 가지고 있다. ⑧ 입출력 정보 : 입출력 요구사항, 입출력장치에서 오픈 된 파일 리스트를 가지고 있다. ⑨ 문맥 저장 정보 : 프로세서가 실행 중에 어떤 이유로 인하여 실행을 중지해야 할 때 프로세서가 갖고 있던 값들을 보존하기 위해 사용된다.
프로세스 개념 프로세스 제어 블록-계속 프로세스 상태 신규, 생성(new), 준비(ready), 실행(running), 보류(Blocked), 중단(halted)등 상태 표시 프로그램 계수기(program counter) 프로세스를 수행하기 위한 다음 명령의 주소 표시 레지스터 누산기(accumulator), 색인 레지스터(index register), 범용 레지스터, 조건 코드(condition code) 등 계정정보(account information) 프로세서 사용시간, 실제 사용시간, 사용상한 시간, 계정 번호, 작업이나 프로세스 번호 등 포함. 입출력 상태정보(I/O status information) 특별한 입출력 요구 프로세스에 할당된 입출력 장치, 개방된(opened) 파일의 목록 등 유지
프로세스 개념 프로세스 제어 블록-계속 프로세서 스케줄링 정보 프로세스의 우선 순위, 스케줄링 큐에 대한 포인터, 그 외 다른 스케줄 매개 변수를 가지고 있음 메모리 관리 정보 메모리 영역 정의 : 하한 및 상한 레지스터(경계레지스터) 페이지 테이블 정보를 갖고 있음 PCB : 모니터 메모리 영역에 저장 되고 여러 방법으로 관리되고 관리 방법은 아래와 같음 최대 프로세스의 수 선언, PCB에 공간을 미리 할당 시간에 따라 변화하므로 동적 기억 장소 관리가 바람직함
프로세스 개념 프로세스 제어 블록-계속 프로세스 ⇒ 프로그램 실행을 위한 메모리영역, PCB등의 자원을 할당 받은 상태가 됨 프로세스와 프로그램 프로그램 자체 : 프로세스가 아님 프로그램 : 여러 개의 프로세스들로 생성될 수 있음 - 디스크 상에 저장되어 있는 파일의 내용으로 수동적인 정적 단위 프로세스 : 능동적인 객체 - 사용 자원(프로그램 카운터, 레지스터 등) 정보를 갖고 있음 - 프로세스 실행 과정에서 다른 프로세스를 파생할 수 있음. 프로세스 ⇒ 프로그램 실행을 위한 메모리영역, PCB등의 자원을 할당 받은 상태가 됨
프로세스 개념 프로세스 제어 블록 P-112 참조 [그림3-7] 프로세스간 교환
프로세스 작업 02 프로세스 계층 구조 프로세스 - 실행 중에 프로세스 생성 시스템 호출을 통해서 새로운 프로세스 생성 프로세스 - 실행 중에 프로세스 생성 시스템 호출을 통해서 새로운 프로세스 생성 생성되는 프로세스 : 부모/자식 관계 유지 프로세스 생성 : 계층적으로 생성하는 프로세스 : 부모 프로세서(Parents process) 생성되는 프로세스 : 자식 프로세스(Children process)
프로세스 작업 02 프로세스 계층 구조 - 계속 운영체제에서 프로세스에 대한 작업 프로세스의 생성과 종료 프로세스의 제거 프로세스의 생성과 종료 프로세스의 제거 프로세스의 서스펜드(중단) 프로세스의 재시작 프로세스의 우선 순위 변경 프로세스의 보류 프로세스를 깨움 프로세스의 디스패치 (Dispatch)
프로세스 작업 02 프로세스 생성 수행 시작(프로세스 생성 추가) - PCB를 만들어 프로세스 생성, 프로세스에게 주소 공간 할당 일괄처리 환경 - 작업이 제출될 때 대화형 환경 - 새로운 사용자의 로그온(log on)이 될 때 프로세스의 생성 운영체제의 도움 사용자의 애플리케이션 요청 [예] 사용자의 요청 : 프린터를 구동시키는 프로세스 생성 출력 작업 완료 위와 2가지 경우와 같이 프로세스가 생성되면 하나의 프로세스가 다른 프로세스의 생성 허용 생성된 프로세스 : 자식 프로세스 생성시키는 프로세스 : 부모 프로세스
프로세스 작업 02 프로세스 생성-계속 노드 : 하나의 프로세스 의미 프로세스B의 자식 프로세스는 E, F등이고, 부모 프로세스는 A 프로세스 생성 프로세스 이름, 우선순위, 할당된 자원 등 - 프로세스 제어 블록 기록 프로세스 : 준비 상태가 되어 준비 목록의 맨 뒤에 위치 A C E D B F G [그림3-9] 프로세스 생성의 계층구조
프로세스 작업 02 프로세스 생성-계속 프로세스 생성 작업 프로세스의 이름 결정 시스템에 알려진 프로세스들의 리스트에 삽입 프로세스에 초기 우선 순위를 부여 프로세스 제어 블록의 생성 프로세스에 초기 자원을 할당 생성 과정 1 단계 : 새로운 프로세스에게 프로세스 식별자 할당 2 단계 : 프로세스의 구성 요소 포함 주소 공간 할당 - PCB 공간 할당 3 단계 : PCB 초기화(프로그램 카운터, 스택 포인터 등) 자원 요청, 프로세스 제어 정보(우선순위) 등 포함 4 단계 : 링크(해당 리스트에 삽입)
프로세스 작업 02 프로세스 생성-계속 작업(task) 수행 프로세서 점유시간, 메모리, 파일 및 입출력 장치 등 자원 필요 부프로세스(subprocess) 생성 필요한 자원을 운영체제로부터 직접 얻거나 부모 프로세스의 자원 일부 사용 제한 받음 부모 자식들에게 자원 분배 메모리, 파일 같은 자원 공유 가능하게 함 부모 프로세스 자원의 일부 사용 하도록 자식프로세스 제한 많은 부프로세스를 생성하여 시스템에 과중한 부담 방지 한다.
프로세스 작업 02 프로세스 생성-계속 프로세스 생성 : 부모 프로세스 자식프로세스로 전달 물리적, 논리적 자원 초기화 데이터(입력) [예] <F1>이라는 파일의 상태를 단말기에 표시하는 프로세스 경우 ⇒ 프로세스가 생성되면 - 파일의 이름을 부모프로세스로부터 입력 받고 - 그 자료를 이용하여 필요한 정보를 얻고 - 출력장치의 기능도 받음
프로세스 작업 02 프로세스 생성-계속 ※ fork() : 프로세스를 복제하는 함수이다. 프로세스가 새로운 프로세스 생성할 때 2가지 가능성이 있다. 부모와 자식이 동시에 실행 부모는 자식의 일부라도 전부 종료될 때까지 기다림 주소 공간 가능성 자식 : 부모 프로세스의 복사판 자식 프로세스 : 별도의 프로그램 적재 UNIX 수행과정 프로세스 - 프로세스 식별자(identifier) 유지(정수) 새로운 프로세스 생성 - fork()시스템 호출 - 원래 프로세스의 주소공간 복사 구성 : 부모와 자식간 정보교환 용이 부모와 자식프로세스 - fork() 문 동시 수행(성공적인 호출) 복귀코드 – 자식프로세스 : ‘0’ 부모프로세스 : 자식프로세스의 식별자(‘0’이 아님) ※ fork() : 프로세스를 복제하는 함수이다.
프로세스 작업 02 프로세스 생성-계속 UNIX 예Process creation fork 명령 다음에 -> execue 시스템 호출 사용 주소공간에 새로운 프로그램 적재 이진 파일을 메모리로 적재 하고 그 시스템 호출 실행 두 프로세스는 통신, 각기 자신의 일을 별도로 하게 됨 UNIX 예Process creation
프로세스 작업 02 프로세스 생성-계속 수행과정 – UNIX(fork() 사용 )
프로세스 작업 02 프로세스 생성-계속 ※ DES : 데이터 암호화 표준(data encryption standard) DES의 VMS 경우 새로운 프로세스가 생성되면 특정한 프로그램을 적재하여 실행 windows/NT 부모의 주소 공간을 새로운 프로세스에게 복사 새로운 프로세스의 주소 공간에 적재되는 프로그램 이름 운영체제에서 지정 ※ DES : 데이터 암호화 표준(data encryption standard) VMS 가상메모리 체제(virtual memory system).
프로세스 작업 02 프로세스 종료 프로세스는 마지막 명령 실행되면 -프로세스 종료됨 ⇒ 운영체제에게 프로세스 삭제 요청 프로세스는 마지막 명령 실행되면 -프로세스 종료됨 ⇒ 운영체제에게 프로세스 삭제 요청 일괄처리 환경 운영체제에서 종료 작업의 종료 신호 : 인터럽트 발생시켜 통보 중지 명령(시스템 호출) 프로세스 완료 대화형 환경 운영체제 종료 사용자가 로그 오프(log off) 터미널 끌 때 발생 여러 오류에 의해 발생 가능 [예] ■ abort(중단) 시스템 호출 이용 - 종료 프로세스 생성시킨 부모 프로세스만 가능 - 부모가 자식의 생사 권 보유하기 때문 ⇒ 다른 사용자들이 서로 상대방의 작업 중단 방지하기 위해서 ■ 새로운 프로세스 생성 ⇒ 새로운 프로세스의 신원(identity)을 부모에게 전달
프로세스 작업 02 프로세스 종료-계속 부모는 다음과 같은 이유로 자식 프로세스를 종료시킴 자식이 할당된 자원을 초과하여 사용할 때 자식에게 할당된 디스크가 더 이상 필요 없을 때 연속종료 - 부모가 종료되면 자식 프로세스의 존재를 허용하지 않음 - 운영체제에 의해서 실행됨 UNIX 시스템 - ‘exit'명령에 의해서 프로세스 종료 - 부모 프로세스는 ’wait' 시스템 호출 사용 : 자식의 종료 기다림. - ‘ wait‘ : 종료된 자식의 프로세스 식별자를 부모에게 반환 : 부모 프로세는 자식 프로세스가 누가 종료 되었는지 알 수 있음
프로세스 작업 02 프로세스 종료-계속 프로세스의 종료 과정 예 정상적인 완료 : 프로세스가 운영체제의 서비스 호출 시간 초과 정상적인 완료 : 프로세스가 운영체제의 서비스 호출 시간 초과 프로세스가 명시된 전체시간을 초과하면서 실행하거나 명시된 시간을 초과하면서 어떤 이벤트 발생을 기다리는 경우 입출력 실패 파일 검색 실패, 명시된 횟수를 초과하여도 입출력 실패 산술 오류, 보호 오류, 데이터 오류 등 메모리 부족, 접근 위반
프로세스 작업 02 프로세스 제거 - 시스템으로부터 프로세스를 제거하는 것 프로세스에 속해있던 자원은 다시 시스템으로 돌아가고 프로세스는 시스템 리스트 또는 테이블에서 사라지고 PCB가 회수되며 프로세스는 제거됨 프로세스의 프로그램 부분은 디스크에 저장 자신을 생성한 부모 프로세스 소멸 ⇒ 자식 프로세스들도 자동적으로 소멸
프로세스 작업 02 서스펜드와 재시작 프로세스의 준비, 실행, 대기(보류) 상태 이용 시 ⇒ 시스템의 유휴 상태가 됨 [이유] 프로세스의 준비, 실행, 대기(보류) 상태 이용 시 ⇒ 시스템의 유휴 상태가 됨 [이유] 입출력 동작 시간이 연산 시간 보다 느리기 때문 프로세서의 동작 시간이 입출력 동작보다는 짧기 때문 [예] Windows상에서 수행 중인 윈도우 이외 대기 상태 됨 ⇒ Windows 색은 옅은 색으로 바뀜 해결 방법 - 프로세스의 일시 중지 상태(서스펜드 상태) 이용 실행할 프로세스 선택 방법 새로운 프로세스를 생성하여 실행 이미 실행 중에 있던 프로세스를 중지시켰다가 다시 실행
프로세스 작업 02 서스펜드와 재시작 일시 정지 후 다시 실행시키는 프로세스 과정 - 시스템 전체의 부하를 증가시키지 않고 프로세스에게 서비스 제공 실행 상태에서 일시 중지 상태(서스펜드 상태)를 추가 - 특정 이벤트의 발생을 기다리며 대기 상태로 변함 - 해당 이벤트 발생으로 즉시 실행 상태로 변환할 수 있음 서스펜드 프로세스가 입출력 요구 이외의 다른 원인으로 수행이 중단되어 있는 상태 (자원 부족(대기) 상태) 중단된 프로세스는 기다리는 이벤트가 발생되면 중단 이전의 상태로 되돌아 감
프로세스 작업 02 서스펜드와 재시작 - 계속 재시작 중단 원인이 제거되어 다시 수행되는 것 프로세스 서스펜드하고 재시작 -시스템의 부하 조정하는 매우 중요함 프로세스의 서스펜드와 재시작 경우 시스템 장애 발생 - 실행 프로세스 : 잠시 서스펜드 - 시스템 기능 회복 : 다시 재 시작 프로세스 부분이 의심스러움 - 실행 프로세스 서스펜드 시킴 : 확인 후 재 시작, 정지 여부 결정 시스템 부담 발생 - 몇 개의 프로세스 서스펜드 시킴 - 시스템 다시 정상 상태 복귀 : 재 시작
프로세스 작업 02 서스펜드와 재시작 - 계속 프로세스가 실행되기 전에 자원을 배당받고 실행 시작 다중프로그래밍 환경 – 동적 자원 배당 이유 - 자원의 이용율과 시스템 효율 향상 배당된 자원을 기다리는 경우 -서스펜드 상태가 됨 자원을 할당 받으려고 기다리는 상태 - 대기(보류) 상태가 됨 [예] 사용가능 장치가 부족할 경우 -대기(보류) 상태 대기(보류) 상태 - 시간이 경과되면 요청한 자원을 사용 대기(보류) 상태 준비 상태 문제점 - 하드웨어 고장 - 다른 프로세스가 해당자원을 반환할 수 없는 상태 – 교착상태가 됨
프로세스 작업 02 서스펜드와 재시작 - 계속 - 프로세스 상태 변환 : 아래의 그림은 서스펜드와 재 시작 추가를 나타낸 것 추가 시 ⇒ 서스펜드된 준비 상태와 서스펜드된 보류 상태가 됨 [그림 3-10] 서스펜드와 재시작의 상태 변환
프로세스 작업 02 서스펜드와 재시작 - 계속 서스펜드 발생 단일 프로세스 시스템 : 프로세스 자신이 중지 다중 처리시스템 : 다른 프로세스에 의해 중지 될 수 잇음 서스펜드된 프로세스 ⇒ 다른 프로세스가 재 시작 해야 만 진행 가능 - 서스펜드 짧은 시간 동안 계속되고 프로세스가 너무 많은 경우 몇 개의 프로세스를 서스펜드 시킴 - 장시간 서스펜드 발생 경우 - 프로세스에 할당된 자원 다시 해제 자원 해제 결정 - 각 자원의 성질에 따라 결정 [예] - 메인메모리 : 프로세서가 서스펜드되는 대로 시스템에 반환 - 테이프 장치 : 잠시 동안 경우 계속 장악 가능 - 시간 예측 불가, 긴 시간동안 서스펜드 ⇒ 반환해야 함
프로세스 작업 02 서스펜드와 재시작 - 계속 - 프로세스 상태 변환과정 준비 상태 프로세스 : 다른 프로세스에 의해 서스펜드 준비 상태 프로세스 : 다른 프로세스에 의해 서스펜드 - suspend(프로세스 명) : 준비 → 서스펜드 된 준비 서스펜드 된 준비 상태 프로세스 : 다른 프로세스에 의해 준비 상태로 - resume(프로세스 명; 다시 시작) : 서스펜드 된 준비 → 준비 보류 상태 프로세스: 다른 프로세스에 의해 서스펜드 됨 - suspend(프로세스 명) : 보류 → 서스펜드 된 보류 서스펜드된 보류 상태 프로세스 : 다른 프로세스에 의해 재시작 - resume(프로세스 명) : 서스펜드 된 보류 → 보류 입출력이 끝났을 때의 상태 변환 completion(프로세스 명; 만료) : 서스펜드 된 보류 → 서스펜드 된 준비
프로세스 작업 02 프로세스 우선순위 변경 PCB 내의 우선순위 값 : 변경될 수 있음 프로세스 스케줄러 준비리스트(Ready list)의 우선순위 를 이용하여 처리함. - 프로세스 : 실행상태 준비 상태가 되는 경우 - 할당 시간을 초과할 경우(선점) - 이때 준비리스트는 프로세서 중심 프로세스(낮은 순위)와 입출력 중심의 프로세스(높은 순위)로 구분 입출력 프로세스 속도가 느리면서 빠른 응답 요구하는 단말기 입출력 프로세스에게 높은 우선순위 부여함. 속도가 빠른 디스크 입출력 프로세스에게 낮은 순위 제공 함.
프로세스 작업 02 프로세스 우선순위 변경 - 계속 낮은 순위 프로세스 - 시간 할당량 많이 제공 하고 높은 프로세스 - 할당량 적게 제공 함 입출력 중심 프로세스는 - 프로세서를 자주 할당 받으면서 짧게 사용하도록 함 프로세서 중심 프로세스는 - 프로세서의 할당 횟수가 적으나 한번 할당 시간을 길게 하여 균형 유지한다.
프로세스 작업 02 문맥교환 실행 중인 프로세스에 인터럽트가 발생시 OS는 다른 프로세스를 실행 상태 바꾸고 : 프로세스에게 제어 넘겨줌 다른 프로세스에게 제어 이동(프로세스 교환 일으킴) 인터럽트 발생 실행 프로세스와는 별도로 외부에서 발생되는 여러 종류의 이벤트 (예 입출력 동작의 종료)에 의해 발생 트랩(trap) 발생 부적절한 파일 접근 실행 프로세스에 의해 발생되는 오류나 예외 상황 때문에 발생 인터럽트 처리 - 인터럽트 처리 루틴으로 제어가 이동된 후 기본적인 시스템 관리 작업이 되고 ⇒ 인터럽트 형태에 따라 관련된 운영체제 루틴으로 분기
프로세스 작업 02 문맥교환 - 계속 인터럽트의 예 입출력 인터럽트 : 프로세스 준비 상태로 바꿈 -실행 프로세스 결정 함 입출력 인터럽트 : 프로세스 준비 상태로 바꿈 -실행 프로세스 결정 함 클럭 인터럽트 : 현재 실행중인 프로세스의 할당 시간 조사 - 프로세스를 준비 상태로 변환하고 다른 프로세스를 디스패치 운영체제에서는 프로세스 교환으로 인터럽트가 발생하지 않음 프로세스의 교환으로 이루어지지 않고 인터럽트 처리 루틴 실행된 후 실행중인 프로세스가 재실행 가능 트랩의 경우 치명적 오류인 경우 프로세스는 종료되고 프로세스 교환 발생 문맥교환(context switching) - 프로세스 교환 이전의 프로세스 상태 레지스터 내용 보관 또 다른 프로세스의 레지스터들을 적재하는 과정
프로세스 작업 02 문맥교환 - 계속 [예] - 프로세스가 준비 → 실행 상태로 변환 하거나 프로세스가 실행 → 준비, [예] - 프로세스가 준비 → 실행 상태로 변환 하거나 프로세스가 실행 → 준비, 또는 실행 → 대기 상태로 변환 시 : 문맥교환 과정 발생 ■ 문맥교환은 모두 과부하 가 발생 한다. - 메모리 속도, 레지스터 수, 특수명령어(모든 레지스터 하나의 명령어 보관)에 따라 다름. - 문맥교환은 현행 레지스터 포인터 변경, 모든 레지스터 포인터 변경 포함 한다.
프로세스 작업 02 문맥교환 - 계속 프로세스 교환 과정의 예 실행중인 프로세스(Pj)의 문맥교환 요청 Pj 제어 : 사용자 모드 운영체제 모드 전환 되고, 종료된 후 다시 시작 할 수 있도록 Pj의 현재 하드웨어 상태 PCBj에 저장. 다은에 실행할 Pk 레지스터 내용를 ← PCBk 부터 얻어 : CPU에 재 저장하고 Pk 실행
스레드 03 스레드 개요 스레드(Therad) 경량프로세스(LWP;Light Weight Process) 프로세서 이용 기본단위 프로그램 명령을 실행하는 프로세스내의 개체 명령어를 실행할 수 있는 하나의 제어 흐름 스레드 사용 한 프로세스 내에서 동시 작업 가능 프로세스가 다른 프로세서에서 프로그램의 다른 부분 동시에 실행 가능 작업 스레드의 그룹 환경 - 같은 그룹의 스레드들과 코드, 주소 공간, 파일, 신호 공유 하는 것 프로세스 : 중량 프로세스(HWP;Heavy Weight Process) - 하나의 스레드를 가진 작업 작업 안에 스레드가 없으면 작업은 아무 일도 할 수 없음
스레드 03 스레드 개요 하나의 스레드를 갖는 3 개의 단일 프로세스와 3 개의 스레드를 갖는 하나의 프로세스 즉 다중 스레드 3 개의 스레드를 갖는 하나의 프로세스 즉 다중 스레드 [그림3-12] 단일 스레드 프로세스(a)와 다중 스레드 프로세스(b)
스레드 03 스레드 개요-계속 단일 스레드 지원 운영체제 하나의 프로세스에서 하나의 스레드 실행 스레드의 개념 불확실 MS-DOS 다중 스레드 지원 운영체제 하나의 프로세서에서 여러 스레드 실행을 지원하는 형태 프로그램을 다수의 실행 단위로 나누어 실행(다중 프로세싱) 하나의 프로세스에 다수의 실행 단위로 구분된 자원 공유 - 자원의 생성과 관리의 중복성 최소화 : 효율적 수행 능력 스레드는 독립적 수행 가능 - 서버(server)가 많은 요청을 처리할 수 있는 환경 제공 예) Windows NT, Solaris 등
스레드 03 스레드 개요-계속 ■ 스레드에 포함된 내용 스레드 실행시의 상태(실행, 준비 등) 실행 스택 스레드 실행시의 상태(실행, 준비 등) 실행 스택 지역 변수 저장을 위한 스레드별 정적 저장소 다른 스레드가 공유하는 프로세스의 메모리 및 자원에 대한 접근 [그림3-13] 프로세스와 스레드
스레드 03 단일 스레드와 다중스레드 프로세스의 표현 단일 스레드 - 하나의 스레드 즉 레지스터와 스택으로 표현 다중 스레드 - 각각의 스레드와 고유의 레지스터, 스택으로 표현 [그림3-14] 단일 스레드 프로세스와 다중 스레드 프로세스 모델
스레드 03 단일 스레드와 다중스레드-계속 다중 스레드 프로세스 모델 프로세스의 자원과 상태를 공유 같은 주소 공간에 존재 다중 스레드 프로세스 모델 프로세스의 자원과 상태를 공유 같은 주소 공간에 존재 동일한 데이터에 접근 하나의 스레드가 메모리에 있는 데이터 항목 변경 하면 ⇒ 다른 스레드는 이 항목에 접근하여 결과 확인 가능 [예] - 한 스레드가 읽기 권한을 갖고 파일을 열면 같은 프로세스 내 다른 스레드들도 이 파일을 읽을 수 있는 특성을 가짐 . ⇒ 프로세스의 생성과 종료 과정에서 유익한 결과 줌 새로운 프로세스 생성보다 기존 프로세스에서 스레드 생성 : 빠름 같은 프로세스 내에서 스레드간 교환 또는 스레드 종료 : 빠름
스레드 03 단일 스레드와 다중스레드-계속 스레드 목표 프로세스의 상대적인 무게를 경감시켜 효율 극대화 프로그램의 변경 없이 프로세서의 개수에 따라 병렬 처리가능 같은 그룹의 스레드들에게 프로세서 할당, 스레드 생성할 때 중량 프로세스들 사이의 문맥 교환과 비교하면 경제적 스레드의 문맥교환은 사용하는 레지스터에만 해당
스레드 03 스레드 용법 사용자 수준 제공 – 시스템 호출이 아닌 사용자 라이브러리 수준에서 제공 – Os와 무관하기 때문에 매우 빨리 일어남. [예] 단일 사용자 다중 프로세싱 시스템 : 전면 작업과 후면 작업 실행 시 - 하나의 스레드는 : 자료 입력, 메뉴 표시 다른 스레드는 - 사용자 명령 실행 ⇒ 명령이 완료되기 전 다음 명령 준비로 어플리케이션 속도 향상 기대 프로그램 내 비동기적 요소 구현 [예] 지정시간에 메모리의 내용을 디스크에 백업 : 정기적인 백업 스레드 생성 [그림3-15] 다중 스레드 환경의 워드프로세서
스레드 03 스레드 용법 - 계속 예) 현재 실행 스레드를 대기 상태에 놓고 다른 스레드로 제어 이동 변환은 예) 현재 실행 스레드를 대기 상태에 놓고 다른 스레드로 제어 이동 변환은 - 하나의 서버가 많은 요청을 받아 효과적으로 다루는 합리적인 방법 공유 메모리형태의 다중 프로세서 시스템 환경 프로그램을 공유 메모리에 저장, 스레드를 각 프로세서에 할당 병렬 처리 하므로 : 프로세서의 성능 향상(데이터베이스 시스템 적용) 불리한 점 - 사용자 수준의 스레드는 커널 자체가 하나의 스레드로 구성 한 스레드가 시스템 호출 실행 시 ⇒ 전체의 작업(스레드 포함)은 시스템 호출의 결과가 돌아올 때까지 기다림 웹 서버 프로세스 디스패처 스레드 작업 스레드 사용자영역 웹 페이지 캐시 커널 영역 커널 네트워크 연결 [그림3-16] 다중 스레드 환경의 웹서버 프로세스
스레드 03 스레드 용법 – 계속 [예] application example(threads 사용) file server on a local area network (LAN).
스레드 03 스레드 상태 변환 스레드 상태도 준비, 실행, 대기, 종료로 구분 함. 프로세서를 같이 사용하고 항상 한 스레드만이 실행 한 프로세스 안에 있는 스레드는 순차적으로 실행 스레드에 자신의 정보를 위한 각각의 프로그램 카운터와 스택를 가지고 있다. - 대기 스레드가 이벤트를 기다릴 때 스레드는 대기 즉 보류 상태가 되며 이때 자신의 정보(프로그램 카운터, 스택 포인터 등)를 저장 - 준비 스레드가 프로세서에 의해 실행될 수 있는 상태로 스레드를 대기시킨 이벤트가 발생되면 그 스레드는 준비 리스트에 이동되어 삽입 준비 실행 대기 종료 - 종료 : 스레드가 작업을 수행하면 레지스터 문맥과 스택 할당이 제거 - 실행 : 스레드가 현재 프로세서를 점유하여 실행 중인 활성화된 상태 [그림3-17] 스레드 상태 변환
스레드 03 스레드 상태 변환 - 계속 새로운 프로세스 생성 : 스레드도 함께 생성 프로세스내의 스레드는 이 프로세스내에서 다른 스레드 생성 새로 형성된 스레드를 위한 스택과 레지스터 제공 스레드의 유연성 스레드 대기 상태로 변환 : 전체 프로세스를 대기 상태로 전환시키지 않음 한 스레드가 대기 상태 - 다른 스레드 실행 가능 스레드들은 프로세스와는 다르게 서로 독립적이 아님 한 작업 안에 있는 스레드 - 작업 안의 모든 주소에 접근 가능 다른 스레드의 스택을 읽거나 그곳에 덮어 쓸 수 있음 보호문제 – 보호문제는 근본적으로 필요 없음(이유 : 아래와 같다.) 프로세스 : 다수 사용자의 경쟁적인 자원 요구와 서로 다른 관계 유지 스레드 : 하나의 사용자만이 여러 스레드를 가진 한 작업 소유 서로 도움 줌
스레드 03 스레드 구현 커널 수준 지원 - Windows NT, Mach, os/2 - 프로세스들을 위한 시스템 호출과 유사한 시스템 호출 제공 사용자 수준 지원 - 라이브러리 호출 통하여 상위 수준에서도 지원 됨 사용자 수준 지원은 스레드 간의 이전에 커널이 개입되지 않아 커널 수준보다 속도가 빠름 프로세스 스레드 사용자 스레드 사용자 영역 커널 영역 커널 스레드 커널 실행(RUN TIME) 시스템 스레드 테이블 프로세스 테이블 [그림3-18] 사용자 수준 스레드와 패키지
스레드 03 스레드 구현 - 계속 1) 사용자 수준 스레드 스레드 라이브러리 스레드와 관련된 모든 과정을 애플리케이션이 수행하며, 커널은 스레드의 존재와 무관 애플리케이션 사용자 수준 스레드 관리를 위한 루틴들로 구성된 스레드 라이브러리 (스레드 패키지) 이용하여 다중스레드로 프로그램 될 수 있다. 스레드 라이브러리 ⇒ 스레드의 생성과 종료, 문맥 교환을 위한 코드, 동기화, 메모리 할당, 스레드 간의 메시지 전달, 스레드 실행 스케줄링 등의 정보 포함 스레드 생성 - 스레드 라이브러리내의 생성 유틸리티 이용하여 생성됨. 제어 - 프로시저 호출을 통해 그 유틸리티로 이동 된다. 스레드 실행 – 사용자 수준의 스레드는 커널 도움 없이 상요자 주소 공간에에서 구현된 스레드 패키지에 의해 커널 - 프로세스를 하나의 단위로 스케줄하고 하나의 실행 상태 할당한다.
스레드 03 스레드 구현 - 계속 장점 사용자와 커널과의 전환에 따른 과부하 줄여 줌 사용자와 커널과의 전환에 따른 과부하 줄여 줌 스레드 관리 데이터 구조 – 프로세스의 사용자 주소 공간에 있음 스레드 교환 시 커널 도움 불필요 스케줄링이 애플리케이션에 맞게 구성 [예] 라운드로빈 기법이나 우선순위 기법을 선택하여 이용 어떤 운영체제에도 적용 가능 – 즉 기본 커널 변경 불필요 제약 운영체제에서 대부분의 시스템 호출은 보류(대기)됨 [예] 스레드가 시스템 호출을 실행하면 그 스레드 뿐 아니라 같은 프로세스내에 있는 스레드들이 모두 보류 됨. - 스레드간의 보호에 커널의 보호기법 사용 못함 : 프로세스 레벨에서 보호되며 스레드 라이브러리에서 제공 되어야 한다.
스레드 03 스레드 구현 - 계속 2) 커널 수준 스레드 - 스레드와 관련된 모든 작업이 커널에서 지원됨 2) 커널 수준 스레드 - 스레드와 관련된 모든 작업이 커널에서 지원됨 애플리케이션 영역 - 스레드 관리를 위한 코드 없음 모든 애플리케이션 - 다중스레드로 지원 애플리케이션에 있는 스레드 - 하나의 프로세스 내에서 지원 커널에 의한 직접적인 스케줄링과 실행 시 사용자 수준 스레드가 겪는 커널 지원 부족 문제 해결 전체 프로세스와 프로세스내 스레드를 위한 문맥 정보 유지를 위한 부하 가중 동시에 같은 프로세스내 스레드 스케줄 시 한 프로세스의 스레드가 보류 되면 - 같은 프로세스내에서 다른 스레드를 스케줄 할 수 있는 장점이 있으므로 커널 루틴 자체를 다중스레드로 구성할 수 있음 같은 프로세스내에서 다른 스레드로 전환 시 - 커널 모드 전환의 오버헤드 단일 스레드 프로세스 형태보다 속도 향상 가능 사용자 수준 스레드 이용 - 추가 속도 향상 가능, 애플리케이션의 속성에 따라 다름 [예] 애플리케이션에서 스레드 교환 - 커널 모드 접근을 요구하는 경우 추가 속도 향상 어려움
스레드 03 스레드 구현 - 계속 [예] - Windows 98/NT/2000 - Solaris - Tru64 UNIX 사용자 수준 스레드와 커널 수준 스레드 사이에 1:1 매핑 허용 경우 - 사용자 수준 스레드가 요구하는 트랩과 정지 상태의 시스템 호출 등 비동기적인 실행은 ⇒ 다른 실행 가능한 스레드의 실행 방해하므로 -속도 향상 어려움 프로세스 스레드 사용자 스레드 [예] - Windows 98/NT/2000 - Solaris - Tru64 UNIX - Linux 커널 스레드 커널 프로세스 테이블 스레드 테이블 [그림3-19] 커널 수준 스레드와 패키지
스레드 03 스레드 구현 - 계속 3) 혼합형 스레드 지원 사용자 수준 스레드와 커널 수준 스레드가 혼합된 형태 - Solaris 스레드 생성 - 사용자 영역에서 이루어지며 커널 수준 스레드에 매핑 사용자 스레드 커널 스레드 [그림 3-20] Solaris 2 스레드
스레드 03 스레드 구현 - 계속 스레드는 중량프로세스와 같은 특징을 가지면서도 매우 효율적이기 때문에 관심을 얻고 있다. 스레드는 중량프로세스와 같은 특징을 가지면서도 매우 효율적이기 때문에 관심을 얻고 있다. [예] ▶ Mach : 다중스레드 시스템으로 커널에서 여러 개의 요구를 동시 서비스 함. - 스레드 자신 : 동기적이다. - 실행되고 있는 스레드가 제어 중지되면 다른 스레드 실행 가능 ▶ 유닉스 커널 : 단일 작업(single-tasking) - 한 순간에는 하나의 작업이 커널에서 코드를 실행 - 한 프로세스만이 수정 허용하므로 - 데이터 제어의 동시성과 같은 문제를 해결할 있음 ▶ 스레드 비동기적인 시스템 - 복수의 프로세스들이 데이터 공유하는 시스템과 같으므로 ⇒ 잠그는(록킹)기능 요구
스레드 03 스레드 구현 - 계속 - 작업량이 증가되고 시스템 전체의 성능 향상 스레드 기능에 대한 이해는 다중 스레드와 다중 프로세스의 제어를 비교 하면 된다. 다중 프로세스 - 각 프로세스가 다른 프로세스와는 독립적으로 실행 - 각 프로세스는 각각 프로그램 카운터, 스택, 레지스터, 주소공간 을 갖고 있다. ▶ 단일 프로세서 - 파일 서버가 디스크 입출력 기다리는 동안 대기 상태 [이유] 주소 공간에 한 서버가 대기 상태 - 다른 독립적인 서버 생성 못함 다중 스레드 작업 - 서버 스레드가 대기 상태 -> 작업 안에 있는 다른 스레드가 실행 수 있다. - 작업량이 증가되고 시스템 전체의 성능 향상 스레드 이용 - 순차적 프로세스들이 시스템 호출, 동시에 병렬 처리를 할 수 있음