13.vm-intro
# 시작하며
지금까지는 CPU가 어떻게 다중 프로세스를 처리하는지에 대해서 공부했다. CPU를 가상화하여 시분할방법을 사용해서 프로세스끼리 자원을 나눠 사용했다. 지금까지 운영체제를 공부하면서 또 내가 지금까지 알고있던 컴퓨터 지식으로는 이러한 CPU가 가장 복잡하고 중요할 것이라고 생각했다. 물른 컴퓨터구조측면이나 하드웨어적으로 접근한다면 어쩌면 맞는 말일 수 도 있다. 그러나 내가 VM 단원을 공부하면서 CPU보다 이 메모리를 어떻게 사용하냐가 더 중요한 관점인 것 같다. 어디서 읽기로는 이미 CPU는 매우 빨라지고 있지만 그 빠른 CPU는 결국 메모리에 올라와 있던 작업을 실행한다. 그런데 메모리는 한정적이다. 이 흔히 말하는 메모리는 여러 특성을 가지고 있기도 하고, 간단히 우리가 사용하는 데스크탑이나 노트북의 메모리는 일반적인 보조기억장치(HDD,SDD)에 비하면 한없이 작은 용량이다. 이 메모리를 얼마나 효율적으로 사용하느냐에 따라서 속도가 결정 되는 것이다.
초기에는 컴퓨터 시스템을 구현하는 것이 쉬웠다고 한다. 사용자가 많은 것을 기대하지 않았기 때문인데 점점 많은 것을 우리는 컴퓨터에 요구함에 따라서 많은 작업을 처리하게 됐다.
# 초기 시스템
초기 시스템의 메모리는 위의 그림과 같이 매우 단순했다고 한다. 0~64KB의 공간에서는 운영체제의 커널등이 자리잡았고 특별한 가상공간이 존재 하지 않아도 됐다. 교재에서는 유머러스하게 위를 표현했는데, "초기의 운영체제개발자들의 삶은 매우 윤택 했을 것이다."라고 표현했다.
# 멀티프로그램이과 시분할
우린 컴퓨터에 더 많은 부분을 사용하기를 원했고, 멀티 프로그래밍(multi-programming)과 대화식 이용(ineractivity)의 개념이 등장하게 됐다. CPU에서 공부하면서 시분할 방식을 사용해 프로세스를 전환시켰다. 초기의 운영체제 방식에 이러한 개념을 적용한다면, 프로세스가 전환할때마다 메모리의 프로그램 영역이 다시 씌워질 것이다. 기본적은 디스크(보조기억장치)에서 메모리로 데이터를 옮겨오는데는 많은 시간이 필요했다. 뭐 일단 내가 바꾼 프로세스를 오랫동안 쓴다면 아직 까지는 괜찮다. 근데 전환된 프로세스를 0.1초만 쓴다면 어떨까? 쓰고 나서 다시 또 디스크에서 메모리로 프로세스를 옮긴다. 너무 비효율적이다.
그렇기 때문에 프로세스 전환이 일어나더라도 메모리에 프로세스에 정보를 남겨두고 싶은 욕구가 생긴다.
위의 이미지와 같이 물리적메모리를 프로세스끼리 공유하여 사용한다. 저렇게 독립적인 공간에 프로세스를 메모리에 유지시킴으로써 어느정도의 고민을 해결한 듯 보인다. 그러나 한가지 문제가 또 발생한다. CPU를 시분할할때 중요했던 개념 중 하나는, 프로세스가 다른 프로세스를 건들이는 일을 만들면 안된다. 보호(protection)의 문제가 발생하는 것이다.
# 주소 공간 : 가상화
이러한 위험에서 벗어나기 위해 운영체제는 사용하기 쉬운(easy to use) 메모리 개념을 만들어야 한다. 이 개념을 주소 공간(address space)라고 한다. 메모리의가 어떤식으로 구성되는지 알아야 가상화를 이해할 수 있다.
위 그림과 같이 코드,힙,스택의 영역으로 주소공간을 구성한다. 스택은 주소의 반대방향으로 증가하게 한다. 수업시간에 교수님께 이 내용과 관련된 질문을 누군가 했었는데, 우리끼리 정한거지 내가 다르게 구현하고 싶으면 구현을 해도 된다 했다. 그러나 저런식의 공간이 가장 편리하게 구성할 수 있어서 정형화 됐다고 하셨다.
코드(code)안에는 명령어가 담겨있다. 반드시 메모리에 존재해야한다. 스택(stack)은 함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값등을 저장한다. 시스템소프트웨어를 공부하면서 직접 구현도 해봤다. 힙(heap)은 동적으로 할당되는 메모리(malloc)를 위해 사용된다. 이거 외적으로 수업시간에 또 교수님께서 출제하신 퀴즈에서는 데이터(data)영역도 있었는데 이 영역에는 전역변수와 정적변수가 존재 할 수 있다. 초기화된 전역변수와 초기화되지 않은 전역변수(BSS)를 나누었다. 이 데이터영역은 프로그램이 프로세스가 되는 순간 결정되는 것이다.
## 메모리를 어떻게 가상화 하는가?
운영체제는 물리 메모리를 공유하는 다수의 프로세스에게, 내가 사용하는 이 공간이 해당 프로세스의 전용공간이라는 개념을 제공할 수 있는가?
## 메모리 가상화
이 질문에 대한 대답은 메모리를 가상화하여 전용공간의 개념을 제공한다. 물리 메모리상에 프로세스는 0에서 시작하는 것이 아닌 프로세스마다 128KB, 320KB와 같이 시작공간이 다르다. 그러나 우리가 코딩을 할때는 이런걸 고려하지 않는다. 즉 모든 메모리가 0( 굳이 0은 아니더라도 특정한 공간)에서 시작한다는 가정을 한다. 이런게 가능한 이유가 메모리를 가상화하기 때문이다. 즉 그림<16.3>에서와 같이 프로세스는 저러한 물리주소를 자기가 가지고 있다고 착각하게 만든다. 이게 가상화의 개념이고, 이러한 가상화를 지원하기 위하여 하드웨어의 도움을 받는다.
# 메모리 가상화가 가져야할 것
실행중인 프로세서는 가상메모리의 존재를 알아차리지 못해야한다. 지금 내가 사용하고 있는 것이 가상화된 공간이 아니라고 생각이 들게 해야한다. 이것은 투명성(transparency)이다.
시간적으로 프로그램이 너무 느리게 실행되게 해서는 안되고, 또 공간적으로 너무 많은 메모리를 사용하게 해서도 안된다. 이런 작업을 하기 위해 TLB나 MMU와 같은 하드웨어의 도움을 받는다. 효율성(efficiency)라고 한다.
운영체제는 자기 자신도 결국은 프로세스이다. 운영체제를 제외한 실행되는 프로세스들이 운영체제나 다른 프로세스에 간섭하게 해서는 안된다. 그러면 의도하지 않은 즉 코드의 변형이 일어나게 될 것이고 원하는 동작을 실행 할 수 없다. 이 것을 보호(protection)이라고 한다. 이러한 보호(protection)성즐을 잘 이용하면 우리는 프로세스를 고립(isolate)시키는 효과를 얻을 수 있다.
# 마치며
이단원을 공부하면서 투명성과 고립의 개념이 꽤 헷갈렸다. 그러나 그 본이 보호라는 개념이 나오는 것인가 아니면 은닉하려는 성질인가에서 구분해야한다고 생각했다.
주마다 퀴즈가 나오면서 푸는데 그 퀴즈를 올리고 풀이를 쓰고 싶지만, 퀴즈에 대한 저적권과 다음학기에 공부하는 학우들이 악용할 소지가 있다고 생각이 들어서 고민이다. 먼저 교수님한테 문의를 드리는 것도 좋은 방법인거 같다.
'•Compter Science > Operating System' 카테고리의 다른 글
[OS/OSTEP] 16.vm-segmentation : 메모리 세그멘테이션 #10 (0) | 2022.04.18 |
---|---|
[OS/OSTEP] 15.vm-mechanism : 주소 변환의 원리, 동적 재배치(dynamic relocation) , 내부단편화 #9 (0) | 2022.04.18 |
[OS/OSTEP] 09.CPU-sched-lottery-CFS : 비례, 배분을 이용한 스케줄링 #7 (0) | 2022.04.18 |
[OS/OSTEP] 09.CPU-sched-lottery : 비례, 배분을 이용한 스케줄링 #6 (0) | 2022.04.18 |
[OS/OSTEP] 08.CPU-sched-mlfq : 멀티 레벨 피드백 큐(MLFQ) #5 (0) | 2022.04.18 |