메인 메모리 관리

지섭·2023년 7월 28일

메모리 관리

요구사항(Requirements)

  • 실행가능한 메모리 접근 시간 최소화
  • 실행가능한 메모리 용량 최대화
  • 실행가능한 메모리 효율적으로 사용

오늘날의 메모리 관리자

  • 프로세스 주소 공간을 주기억장치에 할당
  • 효율적인 메모리 구성으로 접근 시간(access time) 줄임

메모리 계층(hierarchy)

  • CPU 레지스터 -> 주기억장치(Primary memory) -> 보조기억장치(Secondary memory)
  • 용량: 레지스터 < 주기억장치 < 보조기억장치(HDD, SSD)
  • 속도: 레지스터 > 주기억장치 > 보조기억장치
  • 자주 사용하는 정보(또는 명령)이라면 레지스터에 저장하고, 거의 사용하지 않는 정보는 보조기억장치에 저장하는 것이 유리
  • 상향 이동(보조기억장치 -> 레지스터 쪽) - 주로 복사
  • 하향 이동(레지스터 -> 보조기억장치) - 주로 업데이트, 또는 삭제

주소 할당(binding)

주소 할당(binding)은 세 단계에서 가능:
1. 컴파일 시간: 메모리 주소를 미리 알 수 있을 때 할당, 시작 주소가 바뀌면 다시 컴파일해야

2. 로드 시간: 컴파일 시간에 메모리 주소를 알지 못하므로, 이동가능하게(relocatable)하게 코드 짜야

3. 실행 시간: 실행 중에 메모리 주소를 이동해야 한다면 실행 시간에 주소 할당. 하드웨어 지원 필요.

주소 번역

  • OS가 물리적 메모리를 가상화함(가상 주소를 물리적 주소로 번역)

정적 변수 할당 vs. 동적 변수 할당

  • 정적: Binding이 런타임 이전에 발생하고 프로그램 실행한 후에도 변하지 않으면 static
    - ex) int, static
  • 동적: Binding이 런타임 중에 발생하고 프로그램 실행 후에 바뀔 수 있으면 dynamic
    - ex)malloc()

메모리 할당

  • 프로세스가 주소 공간의 크기를 조절하고자 함
  • 작아지면: external fragment(이후 설명) 생성
  • 커지면: 프로그램을 이동해야 할 수도

메모리 할당 방식:

  1. 고정 파티션(Fixed Partition): 메모리를 N개의 고정된 크기의 영역으로 나눔
    • 안 쓰는 부분은 internal fragmentation 발생
  2. 가변 파티션(Variable Partition)
    • internal fragmentation 방지 위함
    • external fragmentation 발생
  • internal fragmentation: 프로세스를 할당하고 파티션 공간이 남는 것
  • external fragmentation: 메모리 공간은 요청을 만족시킬 수 있는데, 그 공간들이 연속적이지 않은 것
  • 불연속적인 메모리 공간은 linked list로 구현해서 활용 가능. 너무 많이 쪼개져 있으면 느려짐.
    가변 파티션 방법에서는 compaction 사용

고정 파티션 & 메모리 할당 알고리즘

  1. Best-Fit
  • Internal fragmentation 문제 발생
  1. Worst-fit

  2. First-fit

  1. Next-fit(두 번째로 worst인 공간에 할당)

가변 파티션 메커니즘

  • external fragmentation 발생
  • compaction으로 연속적인 메모리 할당 늘림

버디 시스템

  • heap 관리
  • 고정 파티션(각 파티션의 크기 고정)과 가변 파티션(free 시 옆의 메모리와 합쳐짐) 기법 둘 다 활용

페이징(Paging)

  • 물리적 메모리를 프레임이라는 고정된 크기의 블록으로 나눔
  • 논리적 메모리를 같은 크기의 페이지로 나눔
  • n개 페이지를 사용하는 프로그램을 돌리려면, n개의 free frame을 찾고 프로그램을 로드하면 됨

주소 번역 방법

  • 주소는 페이지 번호와 페이지 오프셋으로 구성
    - 페이지 번호: 물리적 메모리의 각 페이지 base 주소를 저장하고 있음
    - 페이지 오프셋: 페이지 번호를 이용한 base 주소와 결합해 물리적 주소를 정의하는 데 사용

메모리 스왑(Swap)

  • 프로세스를 실행할 때, 프로세스의 모든 부분을 메모리에 올려 사용하지 않음
  • 높은 우선순위의 프로세스가 로드되어 실행되고, 낮은 우선순위의 프로세스는 쫓겨남(swapped out)

References

  1. 강순주 교수님 PPT10
  2. Operating System Concepts 10ed. Abraham Silberschatz
  3. https://seonggyu.tistory.com/25
profile
시작보다 중요한 건 지속이다

0개의 댓글