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 : 처리율(단위시간동안 일하는양)
- 확률 분포로 주어지는 arrival rate와 service rate 등을 통해 각종 performance index 값을 계산
- Implementation(구현) & Measurement (성능 측정)
- 실제 시스템에 알고리즘을 구현하여 실제 작업에 대해서 성능을 측정 비교
- Simulation (모의 실험)
- 구현&성능측정 작업이 대단히 힘들기 때문에
이런식으로 가상실험을 하는 대안이 필요 - 알고리즘을 모의 프로그램으로 작성후 trace(작업)를 입력하여 결과 비교
- 구현&성능측정 작업이 대단히 힘들기 때문에