교대최소제곱법
[운영체제 part 2] CPU 스케쥴링 본문
CPU 스케쥴링
우선순위 : 입출력 작업이 많은 프로세스 > cpu 작업이 많은 프로세스
스케쥴링 큐 : 자원마다 큐를 생성 → 순서대로 나가는건 아님
대표적으로 준비 큐, 대기 큐 가 있다
선점형, 비선점형 스케쥴링
선점형 : 이미 사용하고 있어도 시간이 지나면 빼앗아서 사용 → 오버헤드가 많이 발생
*오버헤드 : 프로세스 처리를 위해 간접적으로 들어가는 시간
비선점형 : 앞 프로세스가 종료나 대기가 되어야 사용
스케쥴링 알고리즘
- 선입선처리 : 비선점
- 최단작업 : 선점 or 비선점
- 라운드 로빈 : 선입 선처리 + 타임 슬라이스 → 선점형
= 타임 슬라이스의 크기가 매우 중요하다 - 최소 잔여 시간 우선 : 최단 작업 + 라운드 로빈
- 우선 순위 : 기아 현상 → 우선 순위가 낮은 프로세스는 끝도 없이 밀림
= 그래서 에이징 현상을 통해 해결 - 다단계 큐 : 우선 순위별로 큐를 생성 → 큐마다 다른 알고리즘을 적용시킬 수 있음
= 여전히 기아현상이 있음
다단계 피드백 큐 : 큐간의 이동이 가능하게 만들어서 기아현상을 해결
cpu를 많이 써야할 수록 낮은 우선 순위 큐로 이동
→ cpu 집중 프로세스는 계속 우선 순위가 낮아지고 밑에 모이게 됨 + 에이징을 통해 기아 현상 해결
프로세스 동기화
→ 자원의 일관성을 위하여 → 자원의 일관성이 깨지면 레이스 컨디션
*레이스 컨디션(경쟁 조건) : 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황
- 실행 순서 제어 : 올바른 순서(선후 관계 같은 거)
- 상호 배제 : 동시에 접근 x → 공유 자원, 임계 구역 관리
- 상호 배제 : 임계구역 진입시 못 들어옴
- 진행 : 없으면 들어감
- 유한 대기 : 언젠가는 들어감
*고급언어는 짧더라도 저급언어로 변환시 길어질 수 있기 때문에 레이스 컨디션이 일어날 수 있다
동기화 도구
- 뮤텍스 락 : 상호 배제 = 자물쇠 역할
- 세마포 : 공유 자원이 여러개여도 사용 가능 → 카운팅 세마포 : 그냥 빈자리 개수 확인하는거네
근데 둘 다 busy waiting이 걸릴 수 있음 → 대기 상태로 만들어서 해결 → 다른 함수가 signal을 보내서 알려줘야함
세마포는 wait, signal을 반드시 사용해야하고 실수가 생길 수 있음 - 모니터 : 조건 변수 + 큐 사용 가능
모니터 안에는 하나만 진입할 수 있다!!
데드락(교착 상태)
데드락 확인 방법
- 상황 파악
→ 자원 할당 그래프 : 원을 그리면 데드락 - 조건 파악
- 상호 배제 : 한 번에 한 놈만 사용
- 점유와 대기
- 비선점 : 강제로 못 뺐음
- 원형 대기 : 원의 형태로 대기
그래서 어떻게 해결함?
- 예방 : 조건에 안 걸리도록 하면 되지
→ 원형 대기에 효과적 : 자원에 번호를 붙이고 순서로 정렬하는거임
근데 결국에 효율적이지 못함 - 회피 : 할당할 때 조심 조심 할당한다는 마인드
- 안전 순서열 : 프로세스 실행에 안전한 순서를 찾아서 사용 (안전 상태, 불안전 상태)
근데 안전한 순서를 못 찾으면 못 써먹음 - 검출 후 회복 : 데드락 발생 시 해결하는 방법
- 선점 : 자원 몰빵
- 강제 종료 : 모두 종료 or 하나씩 종료
+ 교착 상태를 무시하는 방법도 존재함
'CS 기초 > 운영체제' 카테고리의 다른 글
[운영체제] 운영체제와 cpu 아키텍쳐의 관계 그리고 펭귄 (2) | 2023.12.04 |
---|---|
[메모리 할당] 디스크 조각모음과 단편화 (1) | 2023.11.15 |
[운영체제 part 4] 파일과 디렉토리 (0) | 2023.09.08 |
[운영체제 part 3] 메모리 할당 (0) | 2023.09.08 |
[운영체제 part 1] 프로세스 (0) | 2023.09.08 |