Notice
Recent Posts
«   2024/11   »
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
Archives
관리 메뉴

교대최소제곱법

[운영체제 part 2] CPU 스케쥴링 본문

CS 기초/운영체제

[운영체제 part 2] CPU 스케쥴링

옐라크레 2023. 9. 8. 16:53

CPU 스케쥴링

우선순위 : 입출력 작업이 많은 프로세스 > cpu 작업이 많은 프로세스

스케쥴링 큐 : 자원마다 큐를 생성 → 순서대로 나가는건 아님

대표적으로 준비 큐, 대기 큐 가 있다

 

선점형, 비선점형 스케쥴링

선점형 : 이미 사용하고 있어도 시간이 지나면 빼앗아서 사용 → 오버헤드가 많이 발생

*오버헤드 : 프로세스 처리를 위해 간접적으로 들어가는 시간

비선점형 : 앞 프로세스가 종료나 대기가 되어야 사용

 

스케쥴링 알고리즘

  • 선입선처리 : 비선점
  • 최단작업 : 선점 or 비선점
  • 라운드 로빈 : 선입 선처리 + 타임 슬라이스 → 선점형
    = 타임 슬라이스의 크기가 매우 중요하다
  • 최소 잔여 시간 우선 : 최단 작업 + 라운드 로빈
  • 우선 순위 : 기아 현상 → 우선 순위가 낮은 프로세스는 끝도 없이 밀림 
    = 그래서 에이징 현상을 통해 해결
  • 다단계 큐 : 우선 순위별로 큐를 생성 → 큐마다 다른 알고리즘을 적용시킬 수 있음
    = 여전히 기아현상이 있음

다단계 피드백 큐 : 큐간의 이동이 가능하게 만들어서 기아현상을 해결

cpu를 많이 써야할 수록 낮은 우선 순위 큐로 이동

→ cpu 집중 프로세스는 계속 우선 순위가 낮아지고 밑에 모이게 됨 + 에이징을 통해 기아 현상 해결

프로세스 동기화

→ 자원의 일관성을 위하여 → 자원의 일관성이 깨지면 레이스 컨디션

*레이스 컨디션(경쟁 조건) : 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황

  1. 실행 순서 제어 : 올바른 순서(선후 관계 같은 거)
  2. 상호 배제 : 동시에 접근 x → 공유 자원, 임계 구역 관리
    1. 상호 배제 : 임계구역 진입시 못 들어옴
    2. 진행 : 없으면 들어감
    3. 유한 대기 : 언젠가는 들어감

*고급언어는 짧더라도 저급언어로 변환시 길어질 수 있기 때문에 레이스 컨디션이 일어날 수 있다

 

 

동기화 도구

  1. 뮤텍스 락 : 상호 배제 = 자물쇠 역할
  2. 세마포 : 공유 자원이 여러개여도 사용 가능 → 카운팅 세마포 : 그냥 빈자리 개수 확인하는거네
    근데 둘 다 busy waiting이 걸릴 수 있음 → 대기 상태로 만들어서 해결 → 다른 함수가 signal을 보내서 알려줘야함
    세마포는 wait, signal을 반드시 사용해야하고 실수가 생길 수 있음
  3. 모니터 : 조건 변수 + 큐 사용 가능
    모니터 안에는 하나만 진입할 수 있다!!

 

데드락(교착 상태)

데드락 확인 방법

  1. 상황 파악
    → 자원 할당 그래프 : 원을 그리면 데드락
  2. 조건 파악
    1. 상호 배제 : 한 번에 한 놈만 사용
    2. 점유와 대기
    3. 비선점 : 강제로 못 뺐음
    4. 원형 대기 : 원의 형태로 대기

그래서 어떻게 해결함?

  1. 예방 : 조건에 안 걸리도록 하면 되지
    → 원형 대기에 효과적 : 자원에 번호를 붙이고 순서로 정렬하는거임
    근데 결국에 효율적이지 못함
  2. 회피 : 할당할 때 조심 조심 할당한다는 마인드
  3. 안전 순서열 : 프로세스 실행에 안전한 순서를 찾아서 사용 (안전 상태, 불안전 상태)
    근데 안전한 순서를 못 찾으면 못 써먹음
  4. 검출 후 회복 : 데드락 발생 시 해결하는 방법
  5. 선점 : 자원 몰빵
  6. 강제 종료 : 모두 종료 or 하나씩 종료

+ 교착 상태를 무시하는 방법도 존재함