ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024 운영체제 정리 - 6. 메모리 관리와 Virtual Memory
    Operating System 2024. 4. 2. 19:19
    728x90

     

     

    2024 운영체제 정리 - 6. 메모리 관리와 Virtual Memory 

     

     

    • 1. 운영체제란
    • 2. Process & Thread
    • 3. IPC
    • 4. CPU Scheduling  
    • 5. Synchronization
    • 6. 메모리 관리와 Virtual Memory 

     

     

     

     


     

     

    • 지금까지 운영체제가 CPU에서 어떻게 프로세스를 스케줄링하는지에 대해서 살펴보았다 
    • 이제부터는 운영체제가 메모리에 프로세스를 어떻게 할당하고 관리하는지를 살펴보겠다

     

     

     

    • 스케줄러 복습 
      • 장기 스케줄러 (Job Scheduler) : 어떤 프로세스를 Ready Queue로 옮길지 결정
        • New -> Ready
        • 많은 프로세스 중에서 어떤 것을 메모리에 올릴지 (Ready Queue) 하드디스크에 올릴지 결정 
        • 메모리와 디스크 사이의 스케줄링 담당 
      • 중기 스케줄러 (Swapper) : 현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러
        • Ready -> Suspending 
        • 메모리에 적재된 프로세스의 수를 조절함
        • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄 (swapping)
      • 단기 스케줄러 (CPU Scheduler, Dispatcher) : 준비상태의 프로세스(Ready Queue에 있는 프로세스) 중에서 어떤 것을 실행 상태로 바꿀지를 결정하는 스케줄러
        • Ready -> running -> waiting -> Ready 
        • Ready Queue에 있는 프로세스를 CPU에 할당함 (=Dispatching)
        • CPU와 메모리 사이의 스케줄링 담당 

     

     

    Q. swapper가 실제로 요구 페이징이나 페이지 교체 알고리즘이나 프레임 할당 이런 걸 수행해?

    "Swapper"라는 용어는 종종 운영 체제의 컨텍스트에서 사용되며, 특히 프로세스와 관련된 메모리 관리에 초점을 맞춥니다. 현대 운영 체제에서는 "swapper"보다는 "paging"이나 "virtual memory management" 같은 용어가 더 자주 사용됩니다. Swapper는 초기 운영 체제에서 사용되던 용어로, 메모리에서 프로세스를 디스크로 이동시키거나 디스크에서 메모리로 다시 로드하는 역할을 했습니다. 이는 오늘날의 요구 페이징, 페이지 교체 알고리즘, 프레임 할당과 같은 메커니즘의 초기 형태로 볼 수 있습니다.

    즉, Swapper는 초기의 간단한 메모리 교환 기능에서 발전한 개념이며, 현대의 운영 체제에서는 이러한 고급 메모리 관리 기법이 훨씬 더 정교하게 발전하여 실행되고 있습니다.

     

     

     


     

     

    메모리 관리 기법 - 연속/불연속 할당 

     

     

     

     

     

    • 메모리 연속 할당 
      • 프로세스의 메모리 영역을 메모리에 연속적으로 할당하는 경우, 외부 단편화 문제 발생 
      • 외부 단편화란
        • 메모리에 충분한 빈 공간이 있음에도 불구하고, 잘게 나눠져 있어서 프로세스를 할당하지 못하는 현상 
      • 해결 방법 
        • 압축 : 존재하는 메모리 공간을 재배치해 빈 공간을 하나로 만든다 -> 하지만 오버헤드 발생 

     

    •  메모리 불연속 할당
      • 1) Paging, 2) Segmentation, 3) Paged Segmentation이라는 기법들이 존재한다
        • 위 기법들은 process가 할당받은 메모리 공간을 일정한 단위로 나눠, 물리 메모리에선 연속되지 않는 서로 다른 위치에 저장하는 메모리 관리 기법들이다 

     

     

    메모리의 주소 

    - 물리 주소 : 실제 메모리에 저장된 주소 (메모리가 사용한다)
    - 논리 주소 (또는 가상 주소): 각 실행 프로그램 별로 시작되는 주소 (CPU와 프로그램이 사용한다)

    -> MMU (Memory Management Unit):
    CPU가 가지고 있는 논리 주소를 실제 물리 주소로 변환해주는 역할 (이것을 주소 바인딩이라고 한다) / CPU 안에 있다 
         논리 주소 + 베이스 레지스터 = 물리 주소 


    (이것도 컴퓨터 구조와 연결해서 공부해야만 하는 부분)

     

     

    • 1) Paging 
      • 1) 한 프로세스의 메모리 공간을 페이지라는 일정한 크기로 나누어, 2) 프레임이라는 단위로 나눈 메모리에 불연속적으로 저장하는 기법 
        • 이때 page와 frame은 같은 크기로 나뉘어진다
      • Page Table: 물리적으로 메모리에 불연속적으로 저장되더라도, Page Table를 통해 CPU가 보았을 땐 논리적으로 연속적일 수 있도록 한다 
        • 각 프로세스마다 하나의 페이지 테이블을 가지고 있다 
        • Page Table은 1) 페이지 번호, 2) 프레임 번호, 3) 여러 비트 정보 (유효비트, 보호 비트, 접근 비트, 수정 비트 등 ... , 이따가 나옴)을 담고 있다 
      • 작동 과정 
        • 1) 페이지 테이블을 모아 메모리 상에 저장
        • 2) 그 중 많이 접근하는 페이지 테이블은 캐시 메모리를 둬서 CPU 내의 MMU 내의 TLB(Translation Lookaside Buffer)에 저장함 
        • 3) 그리고 페이지 테이블의 주소는 CPU의 레지스터에 저장함
      • 이점
        • 외부 단편화 문제 해결
      • 단점 
        • 내부 단편화 문제 발생 
          • 내부 단편화 : 실제로 저장할 양은 더 적음에도 불구하고, 더 많은 양의 메모리를 할당받는 것 

     

     

    • 2) Segmentation 
      • Paging은 물리적인 단위로 잘라서 저장했다면, Segmentation은 논리적인 단위로 프로세스의 메모리 영역을 세그먼트 단위로 나누어 저장한다 
        • Code, Data, Heap, Stack 영역을 단위로 나누게 된다 
      • 세그먼트 테이블을 이용하게 된다 
      • 단점 
        • 외부 단편화 문제 발생 : 프로세스의 메모리 영역 각각, 즉 세그먼트가 동일한 크기가 아니기 때문에 

     

     

    • 3) Paged Segmentation 
      • Paging과 Segmentation 기법을 합쳐서 사용하는 기법으로, 프로그램을 의미 단위의 segment로 나누고 개별 segment의 크기를 page의 배수가 되도록 하는 방법
      • 이를 통해 segmentation 기법에서 발생하는 외부 단편화 문제를 해결하고, 동시에 segment 단위로 process 간의 공유나 process 내의 접근 권한 보호가 이루어지도록 해서 paging 기법의 단점을 해결함 

     

     


     

     

    • Virtual Memory란
      • 한정된 메모리 공간을 효율적으로 사용하기 위해, 실제 메모리보다 많아 보이게 하는 기술
      • 프로그램의 일부만 메모리에 적재하는 기법 
        • 직접적으로 필요하지 않은 메모리 공간은 디스크(Swap 영역)에 저장하게 됨 => Swapping !!!
      • Page 단위로 필요한 공간만 메모리에 적재하는 방법을 요구 페이징(Demand Paging)이라고 한다 
        • 요구 페이징 시스템이 안정적으로 작동하려면 1) 페이지 교체 알고리즘, 2) 프레임 할당 문제가 해결되어야 한다 
          • 1) 메모리 공간이 부족해지면, 메모리 공간에 있는 page를 디스크로 옮기는 것을 페이지 교체 (Page Replacement)라고 한다
          • 2) 각 프로세스에게 할당되는 메모리 프레임 수를 효과적으로 할당하는 방법을 프레임 할당 (Frame Allocation) 이라고 한다

     

     

     

    • 요구 페이징 (Demand Paging이란) 
      • 특정 page에 대해 cpu의 요청이 들어온 후에 해당 page를 메모리에 적재
      • 유효/무효 비트(valid/invalid bit)를 두어 각 page가 메모리에 존재하는지 표시하게 됨 !
        • CPU가 무효 비트(invalid bit)로 표시된 page에 엑세스하는 상황을 page fault라고 함 
      • Page Fault 발생시 
        •  1. 주소 변환을 담당하는 하드웨어인 MMU가 page fault trap을 발생시킴 
        • 2. 디스크에서 페이지 N을 빈 프레임에 적재하고 page table을 업데이트합니다.(invalid→ valid)

     

     

    • 페이지 교체 알고리즘 
      • 그렇다면 어떤 Page를 메모리에서 디스크로 Swapping해줘야 할까? 이를 결정하는 알고리즘이 바로 Page Replacement 알고리즘이다 
        • 교체 알고리즘은 최대한 page fault가 적게 일어나도록 도와줘야 한다 
      • 종류 
        • FIFO : 메모리에 올라온지 가장 오래된 page를 교체한다.
        • 최적 페이지 교체 : 앞으로 가장 오랫동안 사용되지 않을 page를 찾아 교체한다.
        • LRU (Least Recently Used) : 가장 오랫동안 사용되지 않은 page를 교체한다.
        • LFU (Least Frequently Used) : 물리적 메모리 내에 존재하는 page 중에서 참조 횟수가 가장 적은 page를 교체한다. 비용대비 성능이 좋지 않아 잘 쓰이진 않는다.
      • 스래싱 (Trashing): 프로레스가 실제 실행보다 더 많은 시간을 페이지 교체에 사용하고 있으면 스래싱이 발생했다고 한다 

     

     

     

     

    • 프레임 할당 (Frame Allocation) 알고리즘 
      • 각 프로세스에게 할당되는 메모리 프레임 수를 효과적으로 할당하는 방법
      • 종류
        • 정적 할당 방식
          • 균등 할당 (Equal allocation) : n개의 프로세스에 m개의 프레임씩 분할한다.
          • 비례 할당 (Proportional allocation) : 프로세스의 크기 비율에 맞추어 프레임을 할당한다.
          • 우선순위 할당 (Priority allocation) : 비례 할당 방법을 사용하면서 프레임 비율을 프로세스의 크기가 아닌 우선순위를 사용하여 할당한다
        • 동적 할당 방식 : 프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식
          • 작업 집합 모델 (Working-Set Model) :
            • 참조지역성의 원리 : CPU가 메모리를 참조할 때는 주로 비슷한 지역을 위주로 참조한다 
            • CPU가 특정 시간동안 주로 참조한 페이지 개수만큼한 프레임을 할당하기
              • 예를 들어 CPU가 어떤 프로세스를 실행하는 동안 3초에 30개의 페이지를 참조했다면 다음에도 그 프로세스를 실행할 때 그만큼의 프레임 할당해줌 
            • 작업 집합의 정확도는 창의 크기에 좌우된다.
              • 너무 작은 창 : 전체 지역을 포함하지 못한다.
              • 너무 큰 창 : 여러 지역성을 과도하게 수용할 것이다.
          • 페이지 폴트 빈도 (Page-Fault Frequency, PFF) 방법 :
            • 페이지 폴트 빈도를 이용해서 프레임 할당 개수를 정한다.
            • 페이지 폴트율에 상한선과 하한선을 정하고, 그 내부 범위 안에서만 프레임을 할당하는 방식

     

     

     

     

     

     

    728x90
Designed by Tistory.