본문 바로가기

CS(ComputerScience)/OSTEP

주소 공간의 개념, VM

728x90

주소 공간의 개념, VM

운영체제가 주소 공간을 추상화 하는 방법

 

❓왜 윈도우에서 가상 메모리 공간은 64KB 정렬이 된 걸까?

가상 메모리를 할당하는 경우 일반 페이지 하나의 크기는 4KB

그런데, 시스템은 64KB 선형 주소 공간을 한꺼번에 예약합니다.

1Byte가 필요하다고 해도 4KB가 commit되며, 64KB의 선형 주소 공간이 예약됩니다. 즉, 작은 데이터를 사용하더라도 더 큰 공간이 할당됩니다.

이에 대한 원인은 Alpha AXP RISC 프로세서의 동작 특성에서 기인했다고 합니다.

 

 RISC 프로세서의 경우 32bit 정숫값을 로드하는 명령어가 없었고, 대신 2개의 16비트 정수를 로드해 합치는 방식이었다고 합니다.

 

16bit의 정수는 2의 16승 또는 65,536 가지의 서로 다른 값을 나타낼 수 있습니다.

(16자리 비트마다 0,1이 올 수 있으므로 경우의 수는 2^16 가지)

이는 0~65,535까지의 범위의 다른 메모리 위치를 나타낼 수 있다.

 

이때 위치의 크기는 1Byte라고 가정하면, 65,536 Byte = 64*1024 = 64KB

 

따라서, CPU는 16bit 주소만 사용할 수 있어서 접근할 수 있는 메모리 양이 64KB로 제한됐습니다.

 


초기 시스템

출처 : OSTEP-KOR

물리 메모리에 하나의 실행중인 프로그램(프로세스) 존재

 

특별히 가상화는 조재하지 않았고 운영체제로부터 그리 많은 걸 기대하지 않았다.

 

멀티프로그래밍과 시분할

출처 : OSTEP-KOR

하나의 프로세스를 짧은 시간 동안 실행

프로세스 상태 전환을 통해 CPU 이용율과 효율성 개선

현재 실행 중인 작업으로 부터 즉시 응답을 원하기 때문에 대화식 이용(interactivity) 개념이 중요해짐

느린 동작, 레지스터 저장 & 복원은 빠르지만 메모리의 내용 전체를 디스크에 저장하는 것은 느림

 

보호

시분할 시스템으로 인해 운영체제에게 요구된 '보호' 문제

메모리에 동시에 존재하려면 한 프로세스가 다른 프로세스를 읽거나 혹은 더 안좋게 쓸 수 있는 상황을 방지해야 합니다.

 


❓이에 따라 운영체제는 주소공간은 어떻게 구성하는게 좋을까?

❓ 메모리를 어떻게 가상화하면 좋을까?

 

주소공간

실행 프로그램의 모든 메모리 상태를 갖고 있음

사용하기 쉬운 메모리 개념을 만들어야 합니다.

출처 : OSTEP-KOR

 🎈code

명령어

정적이기 때문에 메모리에 저장하기 쉽고 반드시 메모리에 존재해야 합니다.

주소 공간의 상단에 배치

프로그램이 실행되면서 추가 메모리를 필요로 하지 않습니다.

 

🎈stack

함수 호출 체인 상의 현재 위치, 지역변수, 함수 인자와 반환 값 등을 저장

주소 공간의 하단에 배치, 위쪽 방향으로 확장이 가능합니다.

 

🎈heap

동적으로 할당되는 메모리를 위해 사용

malloc(), 객체지향 언어(C++, Java)의 new

주소 공간 상단에 배치, 아래쪽 방향으로 확장이 가능합니다.

 

나중에 보겠지만 주소 공간에 여러 쓰레드가 공존할 때는 이런 식으로 주소 공간을 나누게 되면 동작하지 않습니다.

 

 

❓ 메모리를 어떻게 가상화(virtualizing memory) 하는가?

디스크 공간 활용

다수의 프로세스에게 프로세스 전용의 커다란 주소 공간 소유한 것처럼 느끼게 함.

즉, 프로세스 전용 공간이라는 환상을 프로그램에게 제공함. 이 공간에 프로그램 명령어 전부와 데이터 전부가 저장 됨.

추후 빈 공간을 관리하는 방법, 공간이 부족할 때 어떤 페이지를 내보낼 것인지에 대한 정책들도 학습할 예정!

 

❓ 32비트 시스템의 가상 메모리 크기는 ?

4GB

2의 32승은 4,294,967,296 bit이며 이는 정확하게 4GB입니다.

가상메모리를 이용하면 운영체제가 디스크 공간을 일종의 확장된 메모리로 사용할 수 있습니다.

이를 통해 프로그램들은 더 큰 메모리 공간을 사용하는 것처럼 느낄 수 있습니다.

 

가상 메모리 시스템의 목표

🎈투명성(transparency)

운영체제는 실행 중인 프로그램이 가상 메모리의 존재를 인지하지 못하도록 해야 함.

프로그램은 자신이 전용 물리 메모리를 소유한 것처럼 행동해야 함.

🎈효율성(efficiency)

가상화가 시간과 공간 측면에서 효율적이도록 해야 함.

너무 느리게 사용되어서는 안되고 너무 많은 메모리를 사용해서도 안됩니다.

관련 개념 :  TLB

🎈보호(protection)

프로세스가 탑재, 저장, 명령어 반입 등을 실행할 때 다른 프로세스나 운영체제의 메모리 내용에 접근하거나 영양을 주면 안됨.

관련 개념 : 고립(isolate)

메모리 고립을 사용하여 프로그램이 운영체제 동작에 영향을 줄 수  없다는 것을 보장 함.

 

❓ 우리가 보는 모든 주소는 가상 주소다?

물리 메모리 주소를 알 수 있는 것은 오직 운영체제 뿐입니다.

따라서 사용자 프로그램(user level program)이 볼 수 있는 주소는 모두 가상주소이다.

'CS(ComputerScience) > OSTEP' 카테고리의 다른 글

멀티프로세서 스케줄링  (0) 2023.09.05
스케줄링 : 비례 배분  (0) 2023.08.30
스케줄링: 멀티 레벨 피드백 큐  (0) 2023.08.22
스케줄링: 개요  (0) 2023.08.22
제한적 직접 실행 원리  (0) 2023.08.08