CS 공부
운영체제 2020-1학기 중간고사 대비 3-2 본문
프로세스 스케줄러
프로세스 제어 블록의 우선순위 이용하여 준비 리스트의 프로세스 처리
준비 리스트의 프로세스는 프로세서 중심 프로세스와 입출력 중심 프로세스로 구분
입출력 중심 프로세스는 속도가 느리면서 빠른 응답 요구하는 단말기 입출력 프로세스에 높은 우선순위 부여, 속도가 빠른 디스크 입출력 프로세스에는 낮은 우선순위 부여
우선순위가 낮은 프로세스에는 시간을 많이, 우선순 위가 높은 프로세스에는 적게 할당
입출력 중심 프로세스는 프로세서를 짧게 자주 사용하도록 하고, 프로세서 중심 프로세스
프로세서를 길게 사용하되 사용 횟수를 줄여 균형 유지
프로세스의 문맥 교환 발생
실행 중인 프로세스에 인터럽트가 발생하면 운영체제가 다른 프로세스를 실행 상태로 바꾸고 제어를 넘겨주어 프로세스 문맥 교환 발생
인터럽트 발생 : 현재 실행하는 프로세스와 별도로 외부에서 이벤트(예 : 입출력 동작의 종료) 발생시
인터럽트 유형에 따른 루틴 분기
입출력 인터럽트 : 입출력 동작이 발생 확인, 이벤트 기다리는 프로세스를 준비 상태로 바꾼 후 실행할 프로세스 결정
클록 인터럽트 : 실행 중인 프로세스 할당 시간 조사, 준비 상태로 바꾸고, 다른 프로세스를 실행 상태로 전환
인터럽트는 인터럽트 처리 루틴을 실행한 후 현재 실행 중인 프로세스를 재실행할 수 있으므로 인터럽트가 곧 프로세스 문맥 교환으로 발전하지는 않음
문맥 교환(context switching)

이전 프로세스의 상태 레지스터 내용 보관하고 다른 프로세스의 레지스터 적재하여 프로세스를 교환하는 일련의 과정 CPU를 차지하던 프로세스가 나가고, 새로운 프로세스를 받아들이는 작업이다.
2개의 프로세스 제어 블록의 내용이 변경된다. 실행 상태에서 나가는 프로세스 제어 블록에는 지금까지의 작업내용을 저장한다. 반대로 실행 상태로 오는 프로세스 제어 블록의 내용으로 CPU는 다시 세팅된다.
오버헤드 발생, 이는 메모리 속도, 레지스터 수, 특수 명령어의 유무에 따라 다름
오버헤드는 시간 비용 소요되어 운영체제 설계 시 불필요한 문맥 교환 감소가 주요 목표
레지스터 문맥 교환, 작업 문맥 교환, 스레드 문맥 교환, 프로세스 문맥 교환 가능
스레드(thread)의 개념
프로세스의 특성인 자원과 제어에서 제어만 분리한 실행 단위
프로세스 하나는 스레드 한 개 이상으로 나눌 수 있음
프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보 공유
다른 프로시저 호출, 다른 실행 기록(별도 스택 필요)
관련 자원과 함께 메모리 공유 가능하므로 손상된 데이터나 스레드의 이상 동작 고려
경량 프로세스(LWP, Light Weight Process)
프로세스의 속성 중 일부가 들어 있는 것
중량 프로세스(HWP, Heavy Weight Process)
스레드 하나에 프로세스 하나인 전통적인 경우
같은 프로세스의 스레드들은 동일한 주소 공간 공유
스레드의 구조


(같은 프로세스의 스레드들은 동일한 주소 공간 공유)
스레드 병렬 수행
프로세스 하나에 포함된 스레드들은 공동의 목적 달성을 위해 병렬 수행
프로세스가 하나인 서로 다른 프로세서에서 프로그램의 다른 부분 동시 실행
스레드 병렬 수행의 이점
사용자 응답성 증가
프로세스의 자원과 메모리 공유 가능
경제성 좋음
다중 처리(멀티 프로세싱)로 성능과 효율 향상

단일 스레드: 스레드 용어가 탄생하기 전이라 개념 불확
다중 스레드: 프로그램 하나를 여러 실행 단위로 쪼개어 실행한다는 측면에서 다중 처리(다중 프로세싱)와 의미 비슷

프로세스 관리 측면에서 단일 스레드와 다중 스레드
스레드별로 실행 환경 정보가 따로 있지만 서로 많이 공유하므로 프로세스보다 동일한 프로세스의 스레드에 프로세서를 할당하거나 스레드 간의 문맥 교환이 훨씬 경제적
스레드의 상태 변화
프로세서 함께 사용, 항상 하나만 실행
한 프로세스에 있는 스레드는 순차적 실행, 해당 스레드의 정보 저장레지스터, 스택)
프로세스 생성하면 해당 프로세스의 스레드도 함께 생성. 단, 스레드 생성에서는 운영체제가 부모 프로세스와 공유할 자원 초기화 필요 없음
프로세스의 생성과 종료보다는 오버헤드 훨씬 적음
스레드 한 개가 대기 상태로 변환 시 전체 프로세스 대기 상태로 변환되지 않음
실행 상태의 스레드가 대기 상태가 되면 다른 스레드 실행 가능(서로 독립적이지는 않음)
프로세스 하나에 있는 전체 스레드는 프로세스의 모든 주소에 접근 가능하여 스레드 한개가 다른 스레드의 스택 읽기나 덮어 쓰기 가능
프로세서는 여러 사용자가 생성하여 서로 경쟁적으로 자원 요구하고 서로 다른 관계를 유지해야 하지만, 스레드는 사용자 한 명이 여러 스레드로 개인 프로세스 하나 소유
스레드 제어 블록(TCB, Thread Control Block)
정보 저장
프로세스 제어 블록은 스레드 제어 블록의 리스트
스레드 간에 보호 하지 않음
TCB의 내용
실행 상태: 프로세서 레지스터, 프로그램 카운터, 스택 포인터
스케줄링 정보: 상태(실행, 준비, 대기), 우선순위, 프로세서 시간
계정 정보
스케줄링 큐용 다양한 포인터
프로세스 제어 블록PCB을 포함하는 포인터

스레드의 운영체제에 따른 구현
사용자 수준 스레드user-level thread: 다대일(n:1) 매핑
스레드 라이브러리를 이용하여 작동
커널 수준 스레드kernel-level thread: 일대일(1:1) 매핑
커널(운영체제)에서 지원
혼합형 스레드multiplexed thread: 다대다(n:m) 매핑
사용자 수준 스레드와 커널 수준 스레드를 혼합한 형태
사용자 수준 스레드의 개념
사용자 영역의 스레드 라이브러리로 구현
스레드 라이브러리: 스레드의 생성과 종료, 스레드 간의 메시지 전달, 스레드의 스케줄링과 문맥 등 정보 보관(POSIX 표준안의 스레드 확장판인 Pthread, Win32 스레드, 자바 스레드 API 등 주로 사용)
스레드와 관련된 모든 행위를 사용자 영역에서 함
스레드 교환에 커널이 개입하지 않아 커널에서 사용자 영역으로 전환 불필요
커널은 스레드가 아닌 프로세스를 한 단위로 인식, 프로세서 할당(프로세스 테이블 유지)

사용자 수준 스레드의 장점
이식성 높음 : 커널에 독립적 스케줄링을 할 수 있어 모든 운영체제에 적용
오버헤드 적음 : 스케줄링, 동기화 위해 커널 호출 않으므로 커널 영역 전환 오버헤드 감소
유연한 스케줄링 가능 : 커널이 아닌 스레드 라이브러리에서 스레드 스케줄링 제어하므로 응용 프로그램에 맞게 스케줄링 가능
사용자 수준 스레드의 단점
시스템의 동시성 지원하지 않음 : 스레드가 아닌 프로세스 단위로 프로세서 할당하여 다중처리 환경을 갖춰도 스레드 단위로 다중 처리 불가능 동일한 프로세스의 스레드 한 개가 대기 상태가 되면 이 중 어떤 스레드도 실행 불가
확장 제약이 따름 : 커널이 한 프로세스에 속한 여러 스레드에 프로세서를 동시에 할당 할 수 없어 다중 처리 시스템에서 규모 확장 곤란
스레드 간 보호 불가능 : 스레드 간 보호에 커널의 보호 방법 사용 불가 스레드 라이브러리에서 스레드 간 보호를 제공해야 프로세스 수준에서 보호 가능
커널 수준 스레드의 개념
사용자 수준 스레드의 한계 극복 방법으로, 커널이 스레드와 관련된 모든 작업 관리
한 프로세스에서 다수의 스레드가 프로세서 할당받아 병행 수행, 스레드 한 개가 대기
상태가 되면 동일한 프로세스에 속한 다 른 스레드로 교환 가능. 이때도 커널 개입하므로
사용자 영역에서 커널 영역으로 전환 필요
커널이 직접 스케줄링하고 실행하기에 사용자 수준 스레드의 커널 지원 부족 문제 해결
커널이 전체 프로세스와 스레드 정보를 유지하여 오버헤드가 커짐
커널이 각 스레드 개별적으로 관리하여 동일한 프로세스의 스레드 병행 수행
동일한 프로세스에 있는 스레드 중 한 개가 대기 상태가 되도 다른 스레드 실행 가능
스케줄링과 동기화를 하려면 더 많은 자원 필요

혼합형 스레드의 개념
사용자 수준 스레드와 커널 수준 스레드 혼합한 구조
시스템 호출을 할 때 다른 스레드를 중단하는 다대일(n:1) 매핑의 사용자 수준 스레드와 스레드 수를 제한하는 일대일(1:1) 매핑의 커널 수준 스레드 문제 극복 방법
스레드 라이브러리가 최적의 성능 지원하도록 커널이 경량 프로세스 수 동적으로 조절, 사용자 수준 스레드와 커널 수준 스레드가 다대다(n:m)로 매핑
커널 영역에서 병렬 처리 정도를 매핑이 결정할 수 있어 병행 실행이 의미가 없을 때 다대일(n:1) 매핑도 사용 가능
스레드 풀링 이용 일대일(1:1) 매핑으로 오버헤드 감소 가능
스레드 풀링thread pooling : 시스템이 관리하는 스레드의 풀pool을 응용 프로그램에 제공, 스레드를 효율적으로 사용할 수 있게 하는 방법
미리 생성한 스레드의 재사용으로 스레드 생성하는 시간 줄여 시스템의 부담 경감.
동시 생성 가능한 스레드 수 제한하여 시스템의 자원 소비 감소, 응용 프로그램의 전체 성능 일정 수준 유지
스레드의 특징
중량 프로세스와 특징이 동일하면서도 매우 효율적
다중 스레드 시스템인 매크는 커널이 여러 개의 요청에 동시에 서비스하도록 할 수 있음
다중 프로세스에서는 각 프로세스를 다른 프로세스와 독립적 실행, 각각 프로그램 카운터, 스택, 레지스터, 주소 공간 보유.
그러므로 프로세서가 하나인 시스템에서는 파일 서버가 디스크 입출력을 기다리는 동안 대기 상태가 될 수 있음. 동일한 주소 공간에서 서버 하나가 대기 상태에 있는 동안 독립적인 다른 서버를 만들 수 없기 때문. 그러나 스레드가 여러 개인 프로세스 하나는 서버 스레드 한 개가 대기 상태일 동안 동일 프로세스의 다른 스레드 실행 가능(작업량 증가하고 시스템 전체의 성능 향상)
'CS공부 > 운영체제' 카테고리의 다른 글
프로세스 (0) | 2021.07.05 |
---|---|
운영체제란? (0) | 2021.07.03 |
운영체제 2020-1학기 중간고사 대비 3-1 (0) | 2021.07.01 |
운영체제 2020-1학기 중간고사 대비 2-3(운영체제의 서비스 제공) (0) | 2021.07.01 |
운영체제 2020-1학기 중간고사 대비 2-2(다중 프로그래밍 ,시분할, 다중처리,실시간 처리, 분산처리 시스템) (0) | 2021.07.01 |