CS/운영체제

[운영체제] CPU

삶_ 2022. 7. 5. 18:35

 

 

CPU 스케줄링


 

FCFS

  • 프로세스의 도착순서대로 CPU를 처리해주는 방식

SJF

  • cpu를 짧게 쓰는 순서대로 씀(최적의 방법임)
    많이 써야하는 프로세스는 너무 오래기다려야함
  • 일단 CPU를 잡으면 완료될때까지 선점 당하지않음

 

SRTF

  • 더 짧은 CPU를 가진 프로세스가 도착하면 CPU를 빼앗김 (속도는 더 빠름)
  • 문제점: 너무 수행속도가 짧다보니 영원히 완료를 못할수있음.
  • 다음 CPU가 얼마나 쓰고 나갈지 알수없음(과거를 통해 예측은 가능)

 

priority 스케줄링

  • 우선순위가 낮을수록 더 우선됨
    SJF는 일종의 priority 스케줄링
  • 우선순위의 Aging : 오래 기다린 프로세스면 더 우선됨

 

RR

  • 각 프로세스는 동일한 크기의 할당시간을 가짐
  • 동일한 우선순위.
    할당시간이 지나면 프로세스는 선점당하고, ready queue의 제일 뒤에가서 다시 줄을 섬
    일반적으로 SJF보다 평균 할당시간이 길지만 응답시간은 짧다






 

컴퓨터 시스템 구조



인터럽트, 캐싱

  • 인터럽트 : cpu가 컨트롤러에게 일을시키거나, 일이 있음/없음을 알려줌
    • 입출력장치는 인터럽트라는 메커니즘을 통해 관리됨
    • 입출력 연산이 CPU 명령 수행속도보다 느리기 때문
    • 종류
      • 하드웨어 인터럽트(일반적인 뜻) : 하드웨어가 발생시킨 인터럽트(디스크, I/O입출력 등이 일으키는)
      • 소프트웨어 인터럽트(Trap)
        • ex. 디스크에서 파일전달할때 CPU에게 인터럽트를 검
        • System call
          • 메모리 속 사용자프로그램이 자기가 직접 할 수 없는 일을
          • 운영체제의 서비스(도움)를 받기위해 자신의 코드를 통해 인터럽트를 거는 것
      • 인터럽트 벡터
        • 해당 인터럽트의 처리 루틴 주소를 가짐 (처리하는 커널함수 주소를 알고있음)
        • 인터럽트 처리루틴 : 해당 인터럽트를 처리하는 커널 함수 (어떻게 처리하는지에 대한)
  • 캐싱 : 메모리와 디스크 사이에 속도가 걸리다보니, 중복 메모리같은걸 저장해놓는 역할



DMA controller

  • 잦은 인터럽트 방지 (오버헤드 방지)
    • 인터럽트가 너무 빈번하면 CPU가 비효율적이게 되므로,
    • 빠른 입출력 장치를 메모리에 가까운 속도로 처리해주는 장치
  • CPU의 개입 없이 주변장치와의 데이터 전송을 해줌
    • 메모리에 직접 접근할 수 있는 장치 (원래 CPU만 접근 가능)





메모리

  • CPU의 작업공간 (디스크에서 요청받은 실행파일들을 프로세스로 채워줌)
  • 안에 운영체제가 실행중임
  • 디스크에서 파일이 여러개왔을 때 메모리가 꽉차있는 상태라면
    지금까지의 기록으로, 다시 사용가능이 적은 프로세스
    (가장 오래전에 참조했거나, 참조횟수가 가장 적은걸 삭제)를 다시 디스크로 내보낸다



mode bit

  • 사용자 프로그램의 잘못된 수행으로
  • 다른 프로그램/운영체제에게 피해가지 않도록 하는 보호장치
    • 두가지 모드 지원
    • 1 사용자모드 : 사용자 프로그램 수행할때
      • 안전한 프로그램이 실행되게 함 (운영체제보단 사용자프로그램이 수행되는)
    • 0 모니터모드 : OS(운영체제) 코드가 자유롭게 수행할때
      • 보안을 해칠수있는 명령어는 여기서만 수행 가능  (운영체제가 있기 때문에)
      • 인터럽트 발생시 하드웨어가 0으로 바꿈
      • 사용자 프로그램에게 CPU를 넘기기 전 1로 바꿈


registers

  • 프로그램 카운터 : 다음번에 실행할 기계어의 메모리의 주소를 가짐

timer

  • 디스크 등 파일이 CPU로 넘어가기 전에 타임 인터럽트를 걸어줌
  • 일정시간 간격으로 timer interrupt를 발생시킴 (CPU가 골고루 배분되게)





커널 주소 공간의 내용

  • code (커널코드)
    • 실행할 프로그램의 코드들 / 컴파일된 기계어
    • 프로그램이 끝날때까지 메모리에 계속 남아있음
  • data
    • 전역변수 / 정적변수
    • 프로그램의 시작과 함께 할당됨 / 프로그램 종료시 소멸
  • stack
    • 지역변수 / 매개변수 가 함수호출시 기록되고, 종료되면 제거한다
    • 각 프로세스들마다 별도로 두고있다




Multilevel queue


  • 줄이 여러줄일때, Ready queue를 여러개로 분할
    • foreground : 해당 프로세스 실행 후 종료될 때 까지 사용자가 다른 입력을 하지 못하는 프로세스
    • background : 사용자 입력과 상관없이 실행되는 프로세스 (오래 쓰는 프로세스)
  • 각 큐는 독립적인 스케줄링 알고리즘을 가짐
    • foreground - RR
    • background - FCFS
  • 큐에 대한 스케줄링이 필요
    • oreground 80%, background 20%
    • 각 큐에 CPU 시간을 적절한 비율로 할당
  • Fixed priority 스케줄링
    • 모든 foreground 큐가 끝나고 background 큐를 진행한다

 

Multilevel 피드백 큐

  • 우선순위가 높은 큐에 들어가면 다른 우선순위가 높은 큐로 이동하기 쉽지않음
    • 프로세서간의 이동에 초점을 맞춤
    • 프로세스가 다른 큐로 이동 가능




CPU 스케줄링 알고리즘


Multiple-Processor Scheduling

  • Homogeneous processor
    • 큐를 한줄로 세워서 각 프로세서가 알아서 꺼내가게 할수있음
    • 반드시 특정 프로세서에서 수행되어야하는 프로세스가 있는 경우에는 문제가 복잡해짐
  • Load sharing
    • 일부 프로세스의 일이 몰리지 않도록 부하를 적절히 공유하는 메커니즘 필요
  • Symmetric Multiprocessing (SMP)
    • 모든 CPU가 다 대등하게 일함.
    • 각 프로세스가 각자 알아서 스케줄링 결정
  • Asummetric multiprocessing
    • 하나의 프로세스가 시스템 데이터의 접근과 공유를 책임지고 나머지 프로세스는 거기에 따름

 

Real-time 스케줄링

  • 대부분의 스케줄링은 온라인으로 진행함
  • Hard real-time systems
    • 정해진 시간 안에 반드시 끝내도록 스케줄링 해야함
    • 오프라인으로 스케줄링을 하는경우가 많음
  • Soft real-time compiting
    • 정해진시간을 지켜야하긴 하지만 못지켜도 엄청 큰일나지는 않는것
    • 일반 프로세스에 비해 높은 우선순위를 갖도록 해야함

 

 

스레드 스케줄링

  • Local 스케줄링
    • 운영체제는 스레드의 존재, 어떤 스레드에게 CPU를 줄지 모름.
    • 내부적으로 프로세스가 어떤 스레드에게 CPU를 줄지 결정함
    • (사용자)User level 스레드는 스레드 라이브러리에 의해 어떤 스레드를 스케줄링할지 결정
  • Global 스케줄링
    • 운영체제가 스레드의 존재를 알아서 어떤 스레드에게 CPU를 줄지 직접 결정
    • Kernal level 스레드는 일반 프로세스와 마찬가지로 커널의 단기 스케줄러가
    • 어떤 스레드를 스케줄링 할지 결정




알고리즘 evaluation

  • 어떤 CPU 스케줄링 알고리즘이 좋은지 판별하는 방법
  • 그림에서 server 부분을 CPU로 대입해서 보면 됨
  • Queueing models
    • 확률 분포로 주어지는 arrival rate와 service rate 등을 통해 각종 performance index 값을 계산
      • arrival rate : 도착률
      • service rate : 처리율(단위시간동안 일하는양)
  • Implementation(구현) & Measurement (성능 측정)
    • 실제 시스템에 알고리즘을 구현하여 실제 작업에 대해서 성능을 측정 비교
  • Simulation (모의 실험)
    • 구현&성능측정 작업이 대단히 힘들기 때문에
      이런식으로 가상실험을 하는 대안이 필요
    • 알고리즘을 모의 프로그램으로 작성후 trace(작업)를 입력하여 결과 비교