메모리 관리 전략
하드웨어는 한정된 메모리를 가지고 있지만 현대 컴퓨터는 다수의 프로세스를 실행한다. 즉 한정된 메모리 자원을 효율적으로 프로세스에게 배분해야만 다수의 프로세스가 동시에 실행되는 것 처럼 보이는 멀티 태스킹을 수행할 수 있다. (시분할 시스템의 등장)
메모리 가상화의 목표
- 투명성
- 실행중인 프로그램이 물리 메모리의 존재를 알지 못하도록 가상 메모리를 구현해야함
- 효율성
- 가상화가 시간, 공간 측면에서 효율적이도록 해야함, 운영체제는 TLB 등의 하드웨어 기능을 포함하여 하드웨어의 지원을 받아야함.
- 보호
- 프로세스를 다른 프로세스로 부터 보호하고 프로세스가 메모리에 접근하는 것도 보호해야함
메모리 관리 API
- UNIX/C 프로그램에서 메모리를 할당하고 관리하는 방법을 이해하는 것은 강력하고 안정적인 소프트웨어를 구축하는데 중요하다. 일반적으로 어떤 인터페이스가 사용되는가.
malloc() 함수
- 힙에 요청할 크기를 인자로 전달함
- double *d = (double* ) malloc(sizeof(double));
- 실패: NULL
- 성공: 포인터 반환
- C언어에서 sizeof() 메서드는 컴파일 연산자, 컴파일 시에 사이즈가 결정됨
- 문자열을 저장할때는 malloc(strlen(s) +1) 처럼 문자의 끝을 표현할 수 있게 1의 공간을 추가해서 표현함
- malloc() 은 void 타입에 대한 포인터를 반환하고 해당 주소공간에 어떤 타입의 자료를 저장하는지는 프로그래머가 결정함
free() 함수
- 메모리 할당은 해제보다 상대적으로 쉬움, 더 이상 사용되지 않는 힙 메모리를 해제하기 위해 프로그래머는 free() 를 호출함
- 많은 루틴은 자신이 호출되기 전에 필요한 메모리가 미리 할당되었다고 가정함, 예를들어 strcpy(dst, src) 루틴은 소스 포인터에서 목적 포인터로 문자열을 복사하지만 주의하지 않으면, 다음과 같이 코드를 작성할 수 있음
논리 메모리와 물리 메모리
CPU 가 프로세스를 처리할때 참조하는 주소값과 실제 주소값은 다르다, 프로세스가 보는 메모리 영역을 가상 또는 논리 메모리 영역, 실제로 사용되는 메모리영역을 물리 메모리 영역 이라고 한다. 이때 참조하는 주소를 각각 논리 주소, 물리 주소라고 한다.
CPU 가 논리 주소를 통해서 프로세스를 참조할때 실제 물리 주소의 값을 가져와야한다. 이를 실현하기 위해서 만들어진것이 MMU(Memory Management Unit)이다.
MMU는 보호해야되는 메모리 영역에 대한 접근을 제한하여 메모리 접근을 보호한다.
Memory mangement Unit
MMU는 메모리 시스템에서 논리 주소를 물리 주소로 변환하는 책임을 가지고 있는 CPU 에 위치한 장치임.
- Table Walk: 메모리에 존재하는 translation table 을 읽어오는 역할을 하는 장치
- TLBs: 가장 최근에 변환된 정보를 저장한 캐시 메모리
탐색 과정
- CPU 의 프로세스 메모리 참조
- TLB 조회
- hit 반환
- hit 실패의 경우 PA Space 참조
- 반환
참고
https://developer.arm.com/documentation/101811/0103/The-Memory-Management-Unit--MMU-
'운영체제' 카테고리의 다른 글
[OSTEP-28] - 락s (1) | 2024.01.12 |
---|---|
[운영체제] - 연속 메모리 할당과 비연속 메모리 할당 (기본) (1) | 2024.01.05 |
[운영체제] - 스케줄러 (0) | 2024.01.04 |
[OSTEP-20] Advanced Page Tables (0) | 2023.12.27 |
[OSTEP-19] Translation Lookaside Buffers (1) | 2023.12.27 |