본 글의 일부분은 서적 'Operating Systems: Three Easy Pieces by Remzi H.Arpaci-Dusseau, Andrea C.Arpaci-Dusseau' 내의 이미지와 내용을 포함하고 있습니다 :)
CPU 가상화
CPU는 프로세스가 어떤 작업을 수행하기 위한 연산을 위해서 필요한 자원입니다.
우선 Virtualization에 대해 다시 한 번 짚고 넘어 가봅시다.
가상화란, 물리적으로는 하나 밖에 없는 것을 마치 각자 하나씩 있는 것처럼 착각하게 만드는 것입니다.
이런 가상화가 가능한 이유는, 모든 사람이 자원을 항상 이용하려고 하는 것이 아니라 가끔씩은 다른 일도 하기 때문에 가능한 것이죠.
즉, 기존에 사용하던 사람이 사용하지 않을 때에 얼른 다른 사람이 와서 자원을 사용하는 것이죠.
이를 CPU로 비유하자면, CPU 가상화는 아래와 같이 설명할 수 있습니다.
하나의 CPU를 모든 프로세스가 항상 사용하지 않으므로, 어떤 프로세스가 I/O 등을 수행할 때에 다른 프로세스에게 CPU 권한을 주는 것
그러면 CPU가 아래와 같은 상황에서 어떻게 동작하는지 좀 더 자세히 알아봅시다.
위의 그림을 보면, CPU는 하나지만 실행해야 하는 프로세스는 더 많은 모습을 볼 수 있습니다.
우선, CPU의 동작을 이해하기 전에 프로세스가 어떻게 동작하는지 간단하게 알아봅시다.
프로세스는 크게 Fetch, Decode, Exetue, Update 의 4단계로 동작합니다.
즉, 명령어를 먼저 읽어 들여 해석한 뒤에 알맞은 일을 수행하고 다시 다음 명령어로 움직이게 되는 것이죠.
이 때 프로세스 개수만큼 CPU가 있으면 정말 좋겠지만, 항상 CPU를 사용하지도 않는 프로세스때문에 CPU를 프로세스마다 놓는 것은 낭비일 것입니다.
따라서 아래와 같은 모습으로 동작하게 됩니다.
그림을 보면 CPU가 Code A 에서 잠깐 일을 하고, B로 넘어가서 또 잠깐 일을 하고, C에서도 일을 한 다음에 A로 넘어가서 이어서 일을 수행하는 모습을 볼 수 있습니다.
이렇게 CPU의 시간을 쪼개면서 프로세스를 번갈아가면서 처리해 주는 방법이 바로 Time sharing (시분할) 방식입니다.
시분할에서의 time slice(타임 퀀텀)
시분할에서의 time slice란, CPU가 하나의 프로세스에서 얼만큼의 시간을 소비할지를 의미합니다.
따라서 time slice가 짧다면 반응성이 좋다고 느끼겠지만, 그만큼 OS가 짧은 주기로 끼어들어 CPU가 다른 프로세스를 처리하도록 해야하므로 성능이 낮아질 수 있습니다.
반대로 time slice가 길다면 반응성은 나쁘겠지만 그만큼 OS의 개입이 적기 때문에 성능이 높아질 수 있습니다.
하지만 저런 방식을 사용하기 위해서는 CPU에게 어떤 순서를 가지고 일을 처리할지 정해줄 것이 필요합니다.
즉 A에서 일정 시간 일을 한 다음에 B로 갈지, 아니면 C로 갈지 정해줄 무언가가 필요한 것이죠.
더불에 하나의 프로세스에서 얼만큼의 일을 할지도 정해주어야 할 것입니다.
그것이 바로 운영체제입니다.
이러한 가상화는 CPU 뿐만 아니라 메모리나 입출력 등에도 사용됩니다!
'운영체제' 카테고리의 다른 글
[운영체제] Direct Execution과 Limited Direct Execution (0) | 2021.01.14 |
---|---|
[운영체제] 프로세스 API (0) | 2021.01.11 |
[운영체제] 프로세스(Process)란 무엇일까? (0) | 2021.01.10 |
[운영체제] 운영체제 소개와 기본 개념 (2) (0) | 2021.01.06 |
[운영체제] 운영체제 소개와 기본 개념 (1) (0) | 2021.01.06 |