[OS] 메모리 관리

PSLeon ㅣ 2023. 11. 9. 12:51

반응형

메모리 관리

메모리 계층 구조

 위에서 아래로 갈수록 용량이 커지고 가격도 저렴해지지만 속도가 느려진다.

메모리의 응답 속도가 CPU 명령 처리 속도보다 현저히 느린데 이러한 경우 병목현상이 발생한다. 따라서 메모리 액세스 시간을 단축시키기 위해 메모리와 CPU 사이에 메모리보다 훨씬 빠른 캐시 메모리를 설치하여 사용함으로써 CPU 메모리 액세스 시간을 단축시켰다. , 메모리 계층화의 이유는 CPU 메모리 액세스 시간을 줄이기 위함이다.

 

참조의 지역성(Locality of References)

 병목현상을 완화하기 위해 캐시 메모리를 CPU 메인 메모리 사이에 설치했다고 하였는데 캐시메모리는 비싸며 용량도 작다. , 캐시 메모리의 효율을 높이려면 캐시메모리에 어떤 정보가 들어있는지도 중요하다. 어떤 프로그램을 실행할 필요한 정보를 캐시 메모리에서 찾는 것을 캐시 히트(cache hit)라고 하는데 히트율(hit rate) 높일수록 메모리 계층화로 인한 효율이 증가한다. 그렇다면 히트율을 높이는 방법 무엇일까? 바로 참조의 지역성이다. 참조의 지역성이란 프로그램이 일정 기간 동안 특정한 메모리 위치 집합에 접근하는 경향이 있는 현상을 뜻하는데 쉽게 말하면 CPU 최근 참조한 메모리를 다시 참조할 확률이 높아 '캐시 데이터' 담아둔다는 얘기다. 예를 들면, 누군가가 책을 140p까지 읽고 덮었다면 다음에 읽기 시작하는 페이지도 근처라고 짐작할 있다. 참조의 지역성의 종류로는 공간 지역성과 시간 지역성 등이 있다.

 

메모리 계층화 성공적인 이유 = 참조의 지역성

빠른 속도의 작은 캐시를 사용하는데서 얻는 실행 속도 이득이 크다.

 

메모리 관리

 메모리 관리가 필요한 이유는 첫째, 메모리는 공유 자원이고, 둘째, 프로세스가 할당받은 메모리 영역을 다른 프로세스로부터 보호해야 하고, 셋째, 메모리 용량 한계의 극복책이 필요하며, 넷째, 한정된 메모리에 가능한 많은 프로세스를 실행시켜 메모리 효율을 높이기 위해서이다.

 

메모리 할당

 여러 프로세스들이 컴퓨터 시스템의 메모리를 나누어 사용하도록 프로세스에게 적절하게 메모리를 할당하는 기능

 

메모리 보호

 프로세스가 다른 프로세스에게 할당된 메모리 영역이나 운영체제 영역에 침범 또는 훼손하지 못하도록 하는 기능이다.

 

논리 주소(가상 주소)

 프로그램 내에서 사용되는 주소(프로세스의 시작점은 논리주소 0번지)

 

물리 주소(실제 주소)

 실제 하드웨어 상의 메모리 주소, 0번지부터 시작

 프로세스의 시작점은 논리주소 0번지이며 코드나 변수의 주소는 주소에 대한 상대 주소이다. 논리 주소는 사용자나 프로세스 자신이 모든 메모리를 독점해 사용하고 있다는 착각과 프로세스의 코드와 변수들이 0번지부터 연속적으로 적재되어 있다는 착각을 준다.

 그러나 프로세스의 코드 안에 적힌 주소와 CPU 실행하려는 기계 명령 속에 담긴 변수의 주소도 모두 논리 주소이며, CPU 프로세스를 실행하는 동안 다루는 모든 주소도 논리주소이다. 커널 역시 논리 주소이다.

 

MMU(Memory Management Unit, 주소 변환 하드웨어)

메모리를 액세스하기 위해서는 논리 주소가 물리 주소로 바뀌어, 물리 주소가 물리 메모리에 전달되어야 한다.

 논리 주소를 물리 주소로 바꾸어 주는 주소 변환 하드웨어가 바로 MMU이고, MMU 논리 주소와 물리 주소의 매핑 정보를 담은 매핑 테이블을 참고하여 논리 주소를 매핑 주소로 변환한다.

 한가지 주의할 점은 CPU 발생시키는 주소는 논리주소가 아니라 물리주소이다. 이유는 MMU CPU 패키지 안에 들어있기 때문에, CPU 패키지 바깥으로 나오는 주소는 물리 주소이다.

 MMU 논리 주소와 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.

 

메모리 할당

연속 메모리 할당

 하나의 프로세스당 메모리 공간 하나의 덩어리씩 할당하는 기법

· 고정 크기 할당(정적 할당): 1개의 프로세스에 1개의 파티션 할당

· 가변 크기 할당(동적 할당): 프로세스마다 프로세스 크기의 메모리(파티션) 할당

 

분할 메모리 할당

 프로세스에게 필요한 메모리를 여러 덩어리로 나누어 분산 할당하는 기법

· 고정 크기 할당(페이지): 하나의 프로세스를 동일한 크기의 페이지 분할하여 할당, 이때 물리 메모리도 동일하게 분할하여 프레임이라고 부름(논리 주소 = 페이지, 물리 주소 = 프레임)

· 가변 크기 할당(세그먼테이션): 하나의 프로세스를 크기가 다른 여러 개의 덩어리(세그먼트)들로 분할하여 할당 ~ 구현이 어려움(하드웨어 운영체제 등이 모두 지원해야 )

 - 세그먼트 테이블: 세그먼트 크기(limit) 세그먼트 시작 물리 주소(base) 담긴 테이블로 하나의 테이블이 생김

 

단편화(fragmentation)

 프로세스에게 할당할 없을 만큼 작은 조각 메모리(hole)들이 생기는 현상

· 내부 단편화: 프로세스에게 할당된 메모리 영역 내에 활용할 없는 홀이 생기는 경우

  - 고정 크기 파티션과 고정 크기 페이지에서 있음

· 외부 단편화: 할당된 메모리들 사이에 활용할 없는 홀이 생기는 경우

  - 가변 크기의 파티션과 가변 크기의 세그먼테이션에서 있음(해결: 메모리 압축)

 

단편화 정리

고정 크기 연속 메모리 할당 파티션 내부 단편화 O 외부 단편화 X
가변 크기 연속 메모리 할당 파티션 내부 단편화 X 외부 단편화 O
고정 크기 분할 메모리 할당 페이지 / 프레임 내부 단편화 O 외부 단편화 X
가변 크기 분할 메모리 할당 세그먼트 / 세그먼트 내부 단편화 X 외부 단편화 O

, 고정 크기이면 내부 단편화 발생, 가변 크기이면 외부 단편화 발생

 

CPU 패키지

 명령을 읽고 처리하는 기능에만 초점을 맞추면 CPU라고 한다. 하지만 MMU 캐시를 모두 포함하여 아래 이미지와 같이 나타낼 때에는 CPU 패키지로 부른다.

 

선택 알고리즘 / 동적 메모리 할당 알고리즘

· 최초 적합(first fit): 가장 처음 만나는 홀을 선택(, 홀의 크기는 프로세스보다 크거나 같아야 )

  - 검색 최소화, 빠른 할당

· 최적 적합(best fit): 가장 작은 홀을 선택(, 홀의 크기는 프로세스보다 크거나 같아야 )

· 최악 적합(worst fit): 홀이 가장 곳에 할당(, 홀의 크기는 프로세스보다 크거나 같아야 )