Context Switching
✅ 문맥?
CPU가 하나의 프로세스를 실행하기 위해 기억해야 할 프로세스 정보
문맥은 PCB에 저장된다.
✅ PCB(Process Control Block)?
: 프로세스와 관련된 정보를 저장하는 자료 구조
- 해당 프로세스를 식별하기 위해 꼭 필요한 정보를 저장
- 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기
→PCB에 담기는 정보
- 프로세스 ID(PID)
- 특정 프로세스를 식별하기 위해 부여하는 고유 번호
- 레지스터 값
- 프로세스는 이전 작업을 이어가기 위해 레지스터의 중간값을 복원한다. 따라서 카운터(다음 실행할 명령어의 주소)와 레지스터 값이 저장된다
- 프로세스 상태
- 생성, 준비, 수행, 대기, 중지
- CPU 스케줄링 정보
- 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보
- 메모리 관련 정보
- 베이스 레지스터, 한계 레지스터 등
- 페이지 테이블 또는 세그먼트 테이블
- 사용한 파일과 입출력장치 정보
- 프로세스에 할당된 입출력 장치들과 열린 파일 목록
☑️ Context Switching(문맥 교환)
: 기존의 프로세스 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
- 문맥 교환을 하는 주체 → OS 스케줄러
- 자주 발생 시 오버헤드 발생
- 문맥 교환할 때 CPU는 문맥 교환만 하고, 나머지 일을 하지 못하기 때문에
+Round Robin(CPU 스케줄링)의 단점 : 할당 시간이 작아지면 문맥교환이 잦아지므로 적당한 할당시간 설정이 중요
출처 :
OS - Context Switch(컨텍스트 스위치)가 무엇인가?
운영체제 5: 컨텍스트 스위칭 (Context Switching)
혼자 공부하는 컴퓨터구조 + 운영체제
CPU 스케줄링
CPU 스케줄링 전…
✅ 스케줄링 목표
- 오버헤드를 줄이자
- 사용률을 높이자
- 기아 현상을 줄이자
- 기아 현상이란 ? 우선도가 낮은 작업은 영원히 처리되지 않음
☑️ CPU 스케줄링
: 운영체제가 Ready Queue의 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것
✅ 선점과 비선점 스케줄링
- 선점 스케줄링: 프로세스가 CPU를 사용하고 있어도 빼앗고 선점할 수 있는 방법 → 강제!
- 선점 스케줄링이 더 효율적이다
- 비선점 스케줄링 : 프로세스가 CPU를 할당 받으면 반납 후에 다음 프로세스가 할당받을 수 있는 방법 → 자율!
- Terminate 나 Waiting 상태로 전환되는 경우
✅CPU 스케줄러 동작 상황
실행 → 대기 ex) I/O 요청에 의한 대기 비선점
실행 → 준비 완료 | ex)time interupt | 선점 |
대기 → 준비 완료 | ex) I/O 종료 | 선점 |
프로세스 종료 | 비선점 |
✅스케줄링 기준
- CPU 이용률 : CPU작업 처리 시간/ 전체 시스템 시간
- 처리량: 완료된 프로세스의 개수 /per time
- 총 처리 시간 : 프로세스 시작부터 끝날 때까지의 시간
- 대기 시간 : 준비 큐에서 대기하면서 보낸 시간
- 응답 시간 : request이후 첫번째 응답까지의 시간
✅ 스케줄링 알고리즘
🔹선입 선처리(FCFS)
말 그대로 CPU가 먼저 요청하는 순서대로 진행한다.
비선점
한계: 호위 효과 발생→CPU 이용률 저하 우려
👩🏫 호위효과(convey effect)
한 프로세스가 너~무 길어서 나머지 프로세스들이 CPU 양도만을 기다리는 것
🔹최단 작업 우선 스케줄링(SJF)
가장 CPU 사용 시간이 짧은 순서대로 실행
비선점
한계: 기아 현상 발생 가능
🔹HRN(Hightest Response-ratio Next)
응답률 이 가장 높은 프로세스에게 우선순위를 부여
→ 응답률 = (대기시간+ CPU요구량) / CPU 요구량
=> 작업 우선순위를 공식대로 계산하여 수가 큰 순서대로 우선순위를 부여한다!
비선점
🔹SRTF(Shortest Remaining Time First)
SJF를 선점 방식으로 운영하는 것
준비 큐에서 완료까지 남은 CPU 요구량이 짧은 순서대로 실행
한계: 문맥 교환의 부담이 있다.
🔹라운드 로빈(Round-Robin)
현대적인 CPU 스케줄링
프로세스들 사이에 우선순위를 두지 않고 동일한 시간단위로 CPU를 할당하는 방식
선점
- 시간 단위 :Time Quantum, Time Slice
- 너무 크면 FCFS와 다를 게 없고, 너무 작으면 문맥 교환이 잦아져 오버헤드 증가
🔹우선순위 기반 스케줄링(Priority Scheduling)
우선순위가 높은 순서대로 CPU 할당
선점
한계: 기아 현상, Indefinite blocking → 준비는 되어있으나 계속 대기하는 상태
🔹다단계 큐 스케줄링(Multilevel Queue Scheduling)
우선순위 별로 준비 큐를 여러 개 사용
유형별 우선순위를 구분하여 실행하는게 편리
큐마다 다른 스케줄링 알고리즘 채택 가능
선점
한계: 기아 문제 존재
🔹다단계 피드백 큐 스케줄링(MLFQ Scheduling)
MLQ 보완하여 프로세스들이 큐 사이를 이동할 수 있다.
선점
기아 문제를 해결할 수 있다.
구현이 가장 복잡하나, 가장 일반적인 CPU 스케줄링 알고리즘으로 알려져있다.
참고
https://junsday.tistory.com/28
Interview_Question_for_Beginner/OS at master · JaeYeopHan/Interview_Question_for_Beginner
CPU Scheduling | 👨🏻💻 Tech Interview
Deadlock(교착 상태)
👩🏫 둘 이상의 프로세스(스레드)가 가지고 있는 자원을 서로 기다릴 때 무한 대기에 빠져 다음 처리를 하지 못하는 상태
✅데드락 발생 조건
- 상호 배제
- 한 번에 한 개만 자원을 사용 할 수 있다. 사용중이면 다른 프로세스는 기다려야한다
- 점유 대기
- 자원을 보유한 채 다른 자원을 기다리는 상태
- 비선점
- 프로세스가 자원을 비선점(빼앗기 불가)하다
- 순환 대기
- 자원 할당 그래프가 원형(순환)
✅
데드락이 일어나는 경우
프로세스1과 2가 자원1,2를 모두 얻어야 한다고 가정해보자
t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음
t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림
현재 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠짐
→ 이것이 바로 DeadLock!!!!!!
✅데드락 처리
예방
교착 상태 발생 조건 중 하나를 제거하면서 해결한다.
시스템 처리량, 효율성을 떨어트릴 수 있다.
- 상호 배제 ⇒ 여러 프로세스가 공유 자원을 사용한다
- 점유 대기 ⇒ 프로세스 실행 전 모든 자원을 할당한다
- 비선점 ⇒ 선점
- 순환 대기 ⇒ 고유 번호를 부과하여 순서대로 자원 요구한다
회피
교착 상태가 발생하지 않을 정도로만 자원을 할당하는 방식
👩🏫 잠깐!
안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태 → 안전 순서열
불안정 상태
: 교착 상태가 발생할 수 도 있는 상황
항상 안전 상태를 유지하도록 자원을 할당(순서를 정한다)하는 방식
탐지, 회복
데드락 발생 시 회복할 수 있도록 탐지하고 회복하는 알고리즘을 사용한다.
- 탐지
- 자원 할당 그래프, Allocation,Request,Available을 통해 데드락 탐색
- 회복
- 순환 대기에서 벗어나기 위한 방법!
- 프로세스 중단
- 교착 상태의 프로세스 모두 중단 : 결과가 폐기될 수 있다.
- 탐지 알고리즘을 통해 중단 : 매번 알고리즘을 실행해야한다.
- 자원 선점하기
- 프로세스에 할당된 자원을 선점해 교착 상태를 해결할 때 까지 그 자원을 다른 프로세스에게 할당
출처
[운영체제] 데드락(Deadlock, 교착 상태)이란?
데드락 (DeadLock, 교착 상태) | 👨🏻💻 Tech Interview
예상 질문
1. 문맥 교환의 정의와 필요성에 대해 설명하시오.
문맥교환이란 진행하고 있는 프로세스나 스레드 상태를 저장하고 다음 진행할 프로세스나 스레드의 상태 값을 적용하는 과정이다. 보통 인터럽트를 발생하거나 실행중인 PCU 사용허가 시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우 발생한다.
컴퓨터가 매번 하나의 태스크만 처리할 수 있다면, 해당 태스크가 끝날 때까지 다음 태스크는 기다려야하고, 반응 속도가 느려지기 때문에 문맥 교환을 사용해 멀티 프로세싱, 멀티 스레딩을 가능하게 하기 때문에 필요하다.
+ 컴퓨터에서 여러개의 작업을 하기 때문에 필요, 여러개의 태스크를 바꿔가면서 실행하기 때문에 멀티 프로세싱, 스레딩을 할 수있다.
2. CPU 스케줄링 선점 방식중 가장 현대적인 방식은 무엇인가
Round Robin 기법으로 시분할 시스템의 성질을 가장 잘 활용한 방식이다.이 기법의 특징은 각 프로세스마다 동일한 크기의 time quantum을 할당한다는 건데, time quantum이 지나면 프로세스는 선점 당하고 ready queue의 제일 뒤에 가서 다시 cpu를 할당 받기를 기다린다. 이러한 방식을 활용하기 때문에 공정한 스케줄링 방식이라고 할 수 있다.
3. 교착 상태 회피 알고리즘 중 은행 알고리즘의 단점은 무엇인가
은행원 알고리즘의 허용 여부를 결정하기 전에 최대 가능한 할당량을 알아야 한다. 따라서 단점은 다음과 같다
- 할당할 수 있는 자원의 수가 일정해야 한다.
- 항상 불안전 상태를 방지해야 하기 때문에 자원 이용도가 낮다.
- 최대 자원 요구량(Max)를 미리 알아야 한다.
- 프로세스들은 유한한 시간 안에 자원을 반납해야 한다.
4. 선점형 스케줄링과 비선점형 스케줄링의 차이는 무엇인가?
어떤 프로세스가 CPU를 할당받으면 강제로 회수할 수 있는지 여부를 뜻한다.
5. 문맥 교환이랑 시스템 콜의 차이점
시스템 콜을 사용해야 하는 경우는 프로세스가 자체적으로 처리할 수 없는 명령어이기 때문에 운영체제가 개입한 것으로 다른 프로세스로 바뀐것이아니다. 따라서 문맥 교환은 없다.
+ 시스템콜 : 커널 시스템에 유저가 무언가 신호를 보내거나 작업을 하고 싶을 때 보내는 신호. [유저 응용 프로그램][커널][하드웨어] 레이어 사이를 움직일 수 있다.
+ 커널 : 하드웨어나 사용자가 사용하는 응용 어플리케이션, 하드웨어 사이에 있는 가운데 레이어
6. 교착상태를 벗어나는 방법과 효율적인 방법은 무엇인가?
- 탐지 & 회복 : 탐지 :
대기그래프(자원할당 그래프의 변형)을 사용해 그래프의 사이클 유무로 교착상태 탐지(그래프에서 사이클을 탐지하는 알고리즘은 O(n^2)의 연산) 회복 : 교착상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제(프로세스를 중간에 중지하는 방식은 해당 프로세스의 작업을 다 날리는 것이기에 오버헤드가 큼) - 회피 :
미리 최대 자원 요구량을 알아야 하고, 할당할 수 있는 자원의 수가 일정해야 하는등 사용에 있어 제약조건이 많음 + 그에 따른 자원 이용도가 하락하는 단점 → 회피는 자원의 요청이 있을때 마다 회피 알고리즘을 돌리는데 이 오버헤드가 매우 큼 - 예방 : 자원낭비가 가장 심한 기법
모든 스터디원의 정리 내용은 노션에 정리되어있습니다.
'Group Study (2022-2023) > Computer Science' 카테고리의 다른 글
[Computer Science] 5주차 스터디 - TCP/IP(흐름제어, 혼잡제어, 3way handshake, 4way handshake) , TCP VS UDP (0) | 2023.02.24 |
---|---|
[Computer Science] 4주차 스터디 - OSI 7계층, 서브넷 마스크, DNS (0) | 2023.02.20 |
[Computer Science] 3주차 스터디 - 동시성과 병렬성, 동기 비동기 (0) | 2023.02.13 |
[Computer Science] 1주차 스터디 - 프로세스와 스레드 + Paging과 Segmentation (0) | 2023.01.20 |
[Computer Science] 팀 구성과 그라운드 룰 (0) | 2023.01.16 |