일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬
- 컴포넌트스캔
- C++
- thymeleaf
- Spring
- C언어
- nestjs typeorm
- git
- 카카오 코테
- AWS
- 시스템호출
- @Autowired
- 알고리즘
- 코딩테스트
- Nodejs
- 스프링
- 카카오 알고리즘
- 해시
- spring boot
- nestjs auth
- nestJS
- OpenCV
- 카카오
- 구조체배열
- python
- TypeORM
- 프로그래머스
- @Component
- 코테
- 가상면접사례로배우는대규모시스템설계기초
Archives
- Today
- Total
공부 기록장 💻
[운영체제/OS] 04장 CPU 스케줄링 본문
1. 스케줄링의 개요
- CPU 스케줄러 : 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원의 배정을 결정
스케줄링의 단계
- 고수준 스케줄링(high-level, long-term, job scheduling)
- 전체 시스템 부하를 고려하여 전체 작업 수를 조절하는 것
- 작업(1개 또는 여러 개의 프로세스)을 수용할지 거부할지를 결정 → 승인 스케줄링(admission scheduling) → 멀티 프로그래밍 정도(degree of multiprogramming)
- 메인 프레임과 같은 큰 시스템에서 규모가 큰 일괄 작업을 처리할 때 사용
- 전체 시스템 부하를 고려하여 전체 작업 수를 조절하는 것
- 저수준 스케줄링(low-level, short-term scheduling)
- 어떤 프로레스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정 → 단기 스케줄링
- 실행 상태, 대기 상태, 준비 상태,로 보내는 것을 결정
- 실제 작업이 이루어짐
- 어떤 프로레스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정 → 단기 스케줄링
- 중간 수준 스케줄링 (middle level scheduling)
- 프로세스가 활성화된 후에도 여러 이유로 시스템에 과부하가 걸릴 수 있는 경우 시스템 부하를 조절
- 중지(suspend)와 활성화(active)로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 방지
- 보류 상태 결정 → 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할 수행
스케줄링의 목적
- 공평성: 모든 프로세스가 자원을 공평하게 배정받아야 하며, 자원 배정 과정에서 특정 프로세스가 배제되어서는 안 됨
- 효율성: 시스템 자원이 유휴 시간 없이 사용되도록 스케줄링을 하고, 유휴 자원을 사용하려는 프로세스에는 우선권을 주어야 함
- 안전성: 우선순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정함으로써 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호해야 함
- 확장성: 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야 하며 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되게 해야 함
- 반응 시간 보장: 응답이 없는 경우 사용자는 시스템이 멈춘 것으로 가정하기 때문에 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야 함
- 무한 연기 방지: 특정 프로세스의 작업이 무한히 연기되어서는 안 됨
2. 스케줄링 시 고려 사항
선점형 스케줄링과 비선점형 스케줄링
선점형 스케줄링(preemptive scheduling) ** → 빼앗기 가능
- 어떤 프로세스가 CPU를 할당받아 실행 중이더라도 OS가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식
- ex) 인터럽트 처리 → CPU가 인터럽트를 받으면 현재 실행 중인 작업을 중단하고 커널을 깨워 인터럽트를 처리
- OS가 필요하다고 판단하면 실행 상태에 있는 프로세스 작업을 중단시키고 새로운 작업을 시작할 수 있는 방식
- 하나의 프로세스가 CPU를 독점할 수 없기 때문에 빠른 응답 시간을 요구하는 대화형 시스템이나 시분할 시스템에 적합
- 문맥 교환 같은 부가적인 작업으로 낭비 생김
- 대부분의 저수준 스케줄러는 선점형 스케줄링 방식을 사용
- 선점형 스케줄링 방식의 스케줄러에 존재하는 비선점형 프로세스 → 시스템 백업 프로세스 (중요도 매우 낮음)
비선점형 스케줄링(non-preemptive scheduling)
- 어떤 프로세스가 실행 상태에 들어가 CPU를 사용하면 그 프로세스가 종료되거나 자발적으로 대기 상태에 들어가기 전까지는 계속 실행되는 방식
- 선점형 스케줄링보다 스케줄러의 작업량이 적고 문맥 교환에 의한 낭비도 적음
- CPU 사용 시간이 긴 프로세스 때문에 CPU 사용 시간이 짧은 여러 프로세스가 오랫동안 기다리게 되어 시스템의 처리율이 떨어짐
- 과거의 일괄 작업 시스템에서 사용하던 방식
프로세스 우선순위(process priority)
- 커널 프로세스의 우선 순위가 일반 프로세스보다 높음(일반 프로세스: 유저가 생성시킨 프로세스)
- 시스템에는 다양한 우선순위의 프로세스가 공존 → 우선순위가 높은 프로세스가 CPU를 먼저, 더 오래 차지
CPU 집중 프로세스와 입출력 집중 프로세스
CPU 집중 프로세스 (CPU burst process)
- 수학 연산과 같이 CPU를 많이 사용하는 프로세스로 CPU 버스트가 많은 프로세스
입출력 집중 프로세스 (I/O burst process)
- 저장장치에서 데이터를 복사하는 일과 같이 입출력을 많이 사용하는 프로세스로 입출력 버스트가 많은 프로세스
우선순위 배정
- 스케줄링 할 때 입출력 집중 프로세스의 우선순위를 CPU 집중 프로세스보다 높이면 시스템의 효율이 향상
- 사이클 훔치기
전면/후면 프로세스
- 전면 프로세스(foreground process)
- GUI를 사용하는 운영체제에서 화면의 맨 앞에 높인 프로세스
- 현재 입력, 출력을 사용하는 프로세스 → 사용자의 요구에 즉각 반응해야 함
- 사용자와 상호작용이 가능한 상호작용 프로세스
- 후면 프로세스(background process)
- 시스템의 경우 background로 실행 (웹서버 → 클라이언트의 요청이 있는 경우, 압축 프로그램 - 사용자 입력 없이 작동하는 일괄 작업 프로세스)
- 커널: 시스템의 안전성과 관련 있음
- 대화형, 입출력 집중: 사용자와의 상호작용이 있는 프로세스
3. 다중 큐
준비 상태의 다중 큐(multi-queue)
- 준비 상태에서 우선순위에 따라 여러 개의 큐를 만들면, 프로세스에 CPU를 할당하는데 효율적
- CPU스케줄러는 우선순위가 가장 높은 큐(0번 큐)의 맨 앞에 있는 프로세스 6에 CPU 할당
- 스케줄링 알고리즘 → 준비 큐를 몇 개로 나눌지, 여러 개의 준비 큐에 있는 프로세스 중 어떤 프로세스에 CPU를 할당할지 결정
프로세스의 우선순위를 고정하는 방식
- 고정 우선순위 방식
- OS가 프로세스의 우선순위를 부여하면 프로세스가 끝날때까지 바뀌지 않음
- 구현이 쉽지만, 시스템의 상황이 시시각각 변하므로 시스템 변화에 대응하기 어려워 작업 효율 떨어짐
- 변동 우선순위 방식
- 프로세스 생성 시 부여받은 우선순위가 프로세스 작업 중간에 변하는 방식
- 구현이 어렵지만 시스템 효율을 높임
대기 상태의 다중 큐
- 시스템의 효율을 높이기 위해 대기 상태에서는 같은 입출력을 요구한 프로세스끼리 모아 놓음
- 0번인 HDD부터 시작해서 LAN에 대한 준비 상태가 끝나 ready queue로 옮겨 가는 상황
준비 상태의 다중큐 VS 대기 상태의 다중 큐
- 준비 큐 → 한 번에 하나의 프로세스를 꺼내 CPU를 할당
- 대기 큐 → 여러 PCB을 동시에 꺼내 준비 상태로 옮김
- 많은 입출력장치가 있어 입출력이 동시에 끝날 경우 여러 개의 인터럽트가 한꺼번에 처리됨
- 인터럽트 벡터 자료구조 사용
4. 스케줄링 알고리즘 **
- (프로세스 다음으로 중요!!)
스케줄링 알고리즘 종류
구분 종류
비선점형 알고리즘 | FCFS 스케줄링, SJF 스케줄링, HRN 스케줄링 |
선점형 알고리즘 | 라운드 로빈(RR) 스케줄링, SRT, 스케줄링, 다단계 큐 스제쿨링, 다단계 피드백 큐 스케줄링 |
둘다 가능 | 우선순위 스케줄링 |
스케줄링 알고리즘의 선택 기준
- CPU 사용률(CPU utilization)
- 전체 시스템의 동작 시간 중 CPU가 사용된 시간을 측정하는 방법
- 가장 이상적인 수치는 100% 미만이지만, 실제로 여러가지 이유로 90%에도 못 미침
- 처리량(throughput)
- 단위 시간당 작업을 마친 프로세스의 수
- 이 수치가 클수록 좋은 알고리즘임
- 대기 시간
- 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기하는 시간
- 응답 시간
- 프로세스 시작 후 첫번째 출력, 반응이 나올 때까지 걸리는 시간
- 반환 시간
- 프로세스가 생성된 후 종료되어 사용하던 자원을 모두 반환하는 데까지 걸리는 시간
- 대기 시간 + 실행 시간
스케줄링 알고리즘의 평가 기준
- 대기시간: 프로세스 생성 후 실행되기 전까지 대기하는 시간
- 응답시간(response time): 첫 작업을 시작한 후 첫번째 출력(반응)이 나오기까지의 시간
- 실행시간(execution time): 프로세스 작업이 시작된 후 종료되기까지의 시간
- 반환 시간(turn-around time): 대기 시간을 포함해 실행이 종료될 때까지의 시간
- 평균 대기 시간 (AWT, Average Wait Time) : 모든 프로세스의 대기 시간을 합한 뒤 프로세스의 수로 나눈 값
- 평균 반환 시간 (ATT, Average Turn-around time)
FCFS(First Come First Served) 스케줄링
FCFS의 스케줄링 동작 방식 (FIFO 자료구조 방식)
- 준비 큐에 도착한 순서대로 CPU를 할당하는 비선점형 방식
- 한 번 실행되면 그 프로세스가 끝아냐만 다음 프로세스를 실행 가능
- 큐가 한 개라 모든 프로세스는 우선순위가 동일
FCFS의 성능
FCFS 스케줄링의 평가
- 처리 시간이 긴 프로세스가 CPU를 차지하면 다른 프로세스들은 하염없이 기다려 시스템의 효율성이 떨어짐
- 현재 작업중인 프로세스가 입출력 작업을 요청하는 경우 CPU가 작업하지 않고 쉬는 시간이 많아져 작업 효율이 떨어짐(콘보이 효과)
- 실제 시스템에서는 많이 활용하지 않음
SJF(Shortest Job First) 스케줄링
- 준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU를 할당하는 비선점형 방식
- 최단 작업 우선 스케줄링
- 콘보이 효과(무조건 대기해야 하는 상황)를 완화하여 시스템의 효율성을 높임
- 시작지점: P1은 대기하지 않고 바로 실행됨, 이후 P3가 P2보다 더 짤은 실행시간 을 가지고 있으므로 먼저 시작됨 (대기 시간 단축 가능)
- FCFS보다 3초 좋은 성능을 보임
SJF 스케줄링의 평가
- 작은 작업을 먼저 실행하여 시스템의 효율성이 좋아짐
- 먼저 도한 큰 작업으로 인해 작은 작업이 지연되는 FCFS 스케줄링보다 평균 대기시간이 줄어듬
단점들
- 운영체제가 프로세스의 종료 시간을 정확하게 예측하기 어려움
- 사용자와의 상호작용이 빈번이 발생하기 떄문 (사용자의 입력을 위해 대기)
- 공평성 위배
- 작업 시간이 길다는 이유만으로 계속 뒤로 밀려 공평성이 현저히 떨어짐 (starvation, 아사, 굶주림 현상, 무한 봉쇄 infinite blocking)
- 프로세스가 양보할 수 있는 상한선을 결정하는 방식
- 프로세스가 자신의 순서를 양보할 때마다 나이를 한 살씩 먹어 최대 몇 살까지 양보하도록 규정하는 것
우선순위(priority) 스케줄링 - 비선점
- 프로세스의 중요도에 다른 우선순위를 반영한 스케줄링 알고리즘
우선순위 스케줄링의 평가
- 준비 큐에 있는 프로세스의 순서를 무시하고 우선순위가 높은 프로세스를 먼저 CPU를 할당하므로 공평성을 위배하고 아사 현상을 발생
- 프로세스의 우선순위를 매번 바꿈으로써 오버헤드가 발생하여 시스템의 효율성 저하
우선순위 스케줄링 - 선점
- 프로세스의 중요도에 따른 우선순위를 반영한 스케줄링 알고리즘
- 중간에 우선순위가 더 높은 프로세스가 큐에 들어오면, 언제든지 CPU를 선점하여 처리
- 문제점
- 이 경우에도 아사 현상 발생 → P1 : 우선순위가 높은 프로세스가 들어올 때 뒤로 밀리게 됨
- 오버헤드 →큐 내에서의 sorting에 대한 오버헤드는 줄일 수 있지만, 원래 점유하고 있던 프로세스를 레디큐로 다시 보내야 하면서 context-switching 오버헤드는 무시할 수 없다
- 대기시간
- P1: 3초~30 : 27
- P2: 6~15: 9
- 평균 대기시간 AWT = (27+9+0)/3 = 12 ms
고정 우선순위 알고리즘
- 한 번 우선순위를 부여 받으면 종료될 때까지 우선순위가 고정
- 단순하게 구현 가능, 시시각각 변하는 시스템의 상황을 반영하지 못해 효율성 저하
변동 우선순위 알고리즘
- 일정 시간마다 우선순위가 변하여 일정 시간마다 우선순위를 새로 계산하고 이를 반영
- 복잡하지만 시스템 상황을 반영하여 효율적인 운영 가능
HRN(Highest Response Ratio Next) 스케줄링
- SJF 스케줄링에서 발생할 수 있는 아사 현상을 해결하기 위해 만들어진 비선점형 알고리즘
- 최고 응답률 우선 스케줄링
- 서비스를 받기 위해 기다린 시간, CPU 사용 시간을 고려하여 스케줄링을 하는 방식
- 프로세스의 우선순위를 결정하는 기준
HRN 스케줄링의 평가
- 실행 시간이 짧은 프로세스의 우선순위를 높게 설정하면서도 대기 시간을 고려해 아사 현상을 완화
- 대기 시간이 긴 프로세스의 우선 순위를 높임으로써 CPU
- 할당받을 확률을 높임
- 여전히 공평성에 위배되어 많이 사용하지 X
라운드 로빈(RR: Round-Robin) 스케줄링
- 한 프로세스가 할당받은 시간(타임 슬라이스) 동안 작업을 하다가 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 자기 차례를 기다리는 방식
- 선점형 알고리즘 중 우선순위가 적용도지 않은 가장 단순하고 대표적인 스케줄링 방
- 프로세스들이 작업을 완료할 때까지 계속 순환하면서 실행
- 프로세스가 CPU를 일정 시간동안 사용한 후 다른 프로세스에 주어야 하기 때문에 앞의 긴 작업을 무작정 기다리는 콘베이 효과가 줄어듦
라운드 로빈 스케줄링의 평가
- 타임슬라이스 크기와 문맥 교환
- 라운드 로빈 스케줄링이 효과적으로 작동하려면 문맥 교환에 따른 추가 시간을 고려하여 타임 슬라이를 적절히 설정해야 함
- 타임 슬라이스가 큰 경우
- 하나의 작업이 끝난 뒤 다음 작업이 시작되는 것처럼 보여져 FCFS 스케줄링과 다를 것이 없음
- ex) 비디오 플레이어, 워드 프로세서가 동시에 실행된다고 가정할 때 비디오가 끊겨 보이고 워드 프로세서의 반응 속도 매우 느릴 것
- 하나의 작업이 끝난 뒤 다음 작업이 시작되는 것처럼 보여져 FCFS 스케줄링과 다를 것이 없음
- 타임 슬라이스가 작은 경우
- 매우 작은 값으로 설정 시 여러 프로그램이 동시에 실행되는 것처럼 느껴지겠지만, 시스템의 전바적인 성능 저하
- 문맥 교환이 너무 자주 일어나 문맥 교환에 걸리는 시간이 실제 작업 시간보다 상대적으로 커지며, 문맥 교환에 많은 시간을 낭비하여 실제 작업을 못하는 문제가 발생
- 유닉스 OS에서는 타임 슬라이스가 대략 100밀리초
SRT(Shortest Remaining Time) 우선 스케줄링
- SJF 스케줄링 & 라운드 로빈 혼합
- 기본적으로 라운드 로빈 을 사용하지만, CPU를 할당받을 프로세스를 선택할 때 남아있는 작업 시간이 가장 적은 프로세스를 선택
SRT 스케줄링의 평가
- 현재 실행중인 프로세스와 큐에 있는 프로세스의 남은 시간을 주기적으로 계산하고, 남은 시간이 더 적은 프로세스와 문맥 교환을 해야 하므로 SJF스케줄링에는 없는 작업이 추가됨
- 가장 대기 시간이 짧은 알고리즘이지만, OS가 프로세스의 종료 시간을 예측하기 어렵고 아사 현상이 일어나기 때문에 잘 사용하지 x
다단계 큐 스케줄링
- 우선순위에 따라 준비 큐를 여러 개 사용
- 프로세스는 OS로부터 부여 받은 우선순위에 따라 해당 우선순위 큐에 삽입
- 고정형 우선순위 사용
- 상단의 큐에 있는 모든 프로세스의 작업이 끝나야 다음 우선순위의 큐의 작업이 시작됨
다단계 피드백 큐 스케줄링
- 오늘 날의 운영체제가 cpu 스케줄링을 위해 일반적으로 사용하는 방식 (변동 우선순위 알고리즘의 전형적인 예)
- 프로세스가 CPU를 한 번씩 할당받아 실행될 때마다 프로세스의 우선순위를 낮춤으로써, 다단계 큐에서 우선순위가 낮은 프로세스의 실행이 연기되는 문제를 완화
- 우선순위가 낮아진다고 할지라도 커널 프로세스가 일반 프로세스의 큐에 삽입되진 않음
- 우선순위에 따라 타임 슬라이스의 크기가 다름 (우선순위가 낮을수록 타임 슬라이스의 크기가 다름)
- 우선순위가 낮아질수록 해당 큐의 타임 슬라이스가 커짐 (보상 정책)
- 마지막 큐에 있는(우선순위가 가장 낮은) 프로세스는 무한대의 타임슬라이스를 얻음
- 마지막 큐는 들어온 순서대로 작업을 마치는 FCFS 스케줄링 방식으로 동작
인터럽트 처리
1. 인터럽트의 개념
- 순차적 프로그래밍(sequential programming)
- 폴링 작업: 운영체제가 주기적으로 입출력장치를 확인하여 입출력 요청 여부를 확인하여 처리
- 이벤트 드리븐(event-driven)
- 입출력 요청, 완료 시 이벤트 발생 시켜 이 사실을 알리는 인터럽트
2. 동기적, 비동기적 인터럽트
- 동기적 인터럽트(synchronous interrupt)
- 실행 중인 명령어로 인해 발생
- 프로그램 상 문제 때문에 발생하는 인터럽트(다른 사용자의 메모리 영역에 저근, 오버 플로나 언더플로 발생)
- 작업자가 의도적으로 프로세스 중단을 위해 발생시킨 인터럽트(Ctrl+C)
- 입출력 장치 등 주변 장치의 조작에 의한 인터럽트
- 산술 연산 중 발생하는 인터럽트(0으로 나눔)
- 비동기적 인터럽트(asynchronous interrupt)
- 하드디스크 읽기 오류
- 메모리 불량 등 하드웨어적인 오류
- 키보드 인터럽트, 마우스 인터럽트
3. 인터럽트 처리 과정
- 인터럽트 번호와 번호에 붙어있는 함수의 쌍으로 구성
- ex) 윈도우 화면의 최소화 버튼 - 창을 작게 만드는 함수ㅇ 정의
- IRQ(인터럽트 번호) : 인터럽트 식별
- 인터럽트 벡터
- 각 인터럽트를 처리하는 함수가 연결되어 있음
- 인터럽트 핸들러**: 인터럽트 발생 시 어떤 일을 처리할 것인지 함수에 정의되어 있음**
- 인터럽트 발생 시, 현재 실행 중인 프로세스는 일시 정지 상태로 변환
- 재시작을 위해 현재 프로세스 관련 정보를 임시로 저장
- 인터럽트 컨트롤러가 실행되어 인터럽트의 처리 순서 결정
- 여러 인터럽트 동시에 발생시 인터럽트의 우선순위를 고려하여 중요한 인터럽트부터 처리하도록 순서 결정
- 먼저 처리할 인터럽트가 결정되면, 인터럽트 벡터에 등록된 인터럽트 핸들러가 실행됨
- 인터럽트 핸들러: 인터럽트 처리를 위해 미리 정의된 함수
- 인터럽트 백터: 인터럽트와 인터럽트 핸들러를 일대일로 연결한 자료구조
- 인터럽트 벡터에 연결된 핸들러가 인터럽트 처리를 마치면, 일시 정지된 프로세스가 다시 실행되거나 종료
- 입출력 완료의 경우 → 일시 정지된 프로세스가 다시 실행됨
- 다른 프로세스의 메모리 영역 침범, 오류 의 경우 종료
- 입출력 완료의 경우 → 일시 정지된 프로세스가 다시 실행됨
4. 인터럽트와 이중 모드
- 커널 모드(커널 프로세스 실행 상태)
- 사용자 모드(사용자 프로세스 실행 상태)
- 이중모드(dual mode): 사용자 모드에서 커널 모드로 전환되어, 운영체제가 두 모드를 전환하며 일처리를 하는 것
- 사용자 모드가 하드디스크 입출력, 프로세스 생성과 같이 커널 기능을 사용하려면 시스템 호출을 이용해 커널 프로세스에 작업 요청 필요
- 시스템 호출을 요청 후, 대기 상태로 전환되고 커널 프로세스는 요청받은 작업을 처리함
→ OS가 자원을 보호하기 위해 사용하는 기법 (커널이 시스템 호출으를 통해서만 자원에 접근하도록 제한)
→ 다양한 방법으로 시스템 호출 사용을 위해 OS는 **API(Application Programming Interface)**를 제공
사용자가 커널 모드로 진입하는 경우
- 시스템 호출 사용
- 시스템 호출에 의한 커널 모드 진입 (자발적)
- 인터럽트 발생
- 비자발적.
- 잘못된 명령을 수행하여 동기적 인터럽트 발생하여 프로세스가 강제 종료됨
728x90
반응형
'# CS Study > Opearing System' 카테고리의 다른 글
[운영체제/OS] 05장 프로세스 동기화 (0) | 2022.08.21 |
---|---|
[운영체제/OS] 쉽게 배우는 운영체제 04장 문제풀이 (CPU 스케줄링) (0) | 2022.08.21 |
[운영체제/OS] 쉽게 배우는 운영체제 03장 문제 풀이 (프로세스) (0) | 2022.08.21 |
[운영체제/OS] 03장 프로세스 (0) | 2022.08.21 |
[운영체제/OS] 쉽게 배우는 운영체제 2장 문제풀이 (컴퓨터의 구조와 성능 향상) (0) | 2022.08.20 |
Comments