##본 포스팅은 운영체제 강의 '이화여자대학교 운영체제 강의 - 반효경 교수님'를 보고 정리한 내용입니다.
CPU 스케줄링
여러 프로그램들이 CPU을 사용하겠다고 줄을 서 있는 상황이다.
일반적 실생활에서 생각해보면 먼저 온 사람에게 먼저 처리해주는 것이 당연하지만, 그렇게 처리를 하면 P1의 시간을 계속 기다려야하니 너무 오래걸린다.
SJF(Shortest-Job-First)이 그 대안이다.
단순히 말해 CPU 사용시간이 가장 짧은 프로세스를 제일 먼저 스케줄해주는 것이다.
하지만 이 또한 "Starvation(기아현상)"이라는 단점이 있다. 형평성에 문제가 있다는 것이다.
즉, CPU를 길게 쓰려는 프로세스가 계속해서 기다려야만 하는 상황이 올 수가 있다. 프로그램이 계속 io를 마치고 바로 와서 줄을 계속 서기때문에 길게 쓰는 프로세스는 계속해서 밀리는 것이다.
그렇게해서 나온 것이 바로 RR(Round Robin)이다.
각 프로세스는 동일 크기의 CPU 할당시간을 가지기 떄문에, 할당시간이 끝나면 인터럽트가 발생하여 프로세스는 CPU를 빼앗기고 큐의 제일 뒤에 줄을 서게 된다.
어떤 프로세스도 일정 이상의 시간을 기다리지 않게 되고, 프로세스는 결국 CPU를 얻었다가 뺏겼다가를 반복하며, 이 부분은 인터럽트가 일하게 된다.
메모리 관리
실행파일은 바로 메모리로 올라가는 것이 아니라, 본인만의 가상 메모리 공간이 만들어져 물리적인 메모리에는 당장 필요한 부분만 올려놓게 된다.
이 물리적인 메모리 공간이 다 차게 되면, 필요없는 메모리 부분들을 디스크의 스왑영역으로 쫓겨나게 된다.
이때, 파일시스템 디스크는 실행파일 등이 저장되며 전원이 나가도 내용이 유지되는 것이며,
스왑영역 디스크는 메모리의 연장공간의 역할을 수행한다.
컴퓨터가 꺼진다면, 파일 시스템은 유지되지만 메모리는 사라지며, 스왑영역은 살아있지만 의미 없는 데이터들만 보관하고 있게 되는 것이다.
디스크에 올라가있는 프로세스는 다음과 같은 과정으로 메모리에 올라간다.
1) CPU가 요청한 페이즈를 디스크에서 디스크 컨트롤러가 가져옴
2) 컨트롤러는 페이즈를 메모리에 올려둠
3) CPU는 메모리에 접근하여 페이즈를 가져와 명령을 수행
4) CPU가 요청한 페이즈가 메모리에 있으면 3번 수행
5) 만약 메모리에 모든 영역이 다 찼다면, LRU(가장 오래된 참조 페이지 삭제)와 LFU(참조횟수가 가장 적은 페이지 삭제) 중 하나를 채택하여 쓸데없는 페이즈를 스왑영역으로 쫓아냄
디스크 스케줄링
파일을 읽어달라거나, 저장을 해달라는 요청은 디스크 큐에게 들어오게 된다.
번호에 따라 헤드는 이동하며, 번호에 맞는 내용을 읽게되지만 헤드의 이동 시간이 디스크 처리 시간에서의 상당부분을 차지하기 때문에 이것을 스케줄링하는 것이 필요하다.
* 디스크 접근 시간 = 탐색시간(헤드 이동) + 회전지연 + 전송
현재 디크스 스케줄링은 SCAN 방법을 제일 많이 사용한다.
SCAN은 큐와 상관없이, 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리하고 지나간다.
지그재그 모양처럼!
캐싱
위 계층구조에서는 위로 올라갈 수록 "비싸고 빠르며 적응 용량을 가진다".
초록색 부분은 휘발성이며, primary 부분은 CPU가 직접 실행할 수 있는 부분이다.
아래 핑크색 부분은 외부 장치이며, CPU에게 요청이 들어오면 초록색 부분으로 데이터를 올리며 재사용되는 데이터들은 "캐싱"에 두고 CPU에게 접근하도록 한다.
* 플래시메모리
모바일 장치 뿐만 아니라 대용량 시스템에서 SSD라는 이름으로 하드디스크 대체 시도
'System > OS' 카테고리의 다른 글
운영체제 2-3 ~ 2-4] 시스템 구조 (0) | 2021.09.19 |
---|---|
운영체제 2-1 ~ 2-2] 운영체제의 개요 (0) | 2021.09.19 |
운영체제 1-1] 운영체제의 개요 (0) | 2021.09.12 |
메모리 매핑(mapping) - mmap()함수 (0) | 2020.05.19 |
Thread 정의와 Thread vs Proces (0) | 2020.04.29 |