ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 운영체제 2주차 4
    CS/운영체제와 시스템 2021. 7. 29. 18:35

    가상 메모리

    실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기의 한계가 존재

    ex) 리눅스는 하나의 프로세스가 4GB인데, 실제 물리 메모리는 여러 프로세스에 할당해 주기 위한 메모리 용량이 부족함

    가상 메모리를 통해 여러 프로세스가 동시에 실행될 때, 메모리 용량 부족, 프로세스간 메모리 영역 침범 이슈등을 해결 가능함

     

    실제 사용하는 메모리는 각 프로세스당 차지하는 메모리 공간보다 적기 때문에, 이에 착안해서 나온 것이 가상 메모리임

    프로세스간 공간을 분리하여, 프로세스 이슈가 전제 시스템에 영향을 주지 않을 수 있음

     

    가상 메모리 기본 개념

    프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 read/write 할때만 물리주소로 바꿔주면 된다

    이러한 과정은 MMU(memory unit management)라는 하드웨어 장치에서 해준다(virtual address to physical address)

    CPU가 가상 메모리 주소를 MMU에 전달해주면, MMU는 이를 물리 메모리 주소로 변환함

     

    페이징 시스템

    페이징 : 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리

    하드웨어 지원이 필요(ex:인텔 x86에서는 4KB,2MB,1GB 지원. 리눅스에서는 4kb로 페이징)

    페이지 번호를 기반으로 가상 주소/물리 주소 매핑 정보를 기록, 사용

     

    페이징의 동작

    프로세스의 process control block에 page table 구조체를 가리키는 주소가 있다

    page table에는 가상 주소와 물리 주소간 매핑 정보가 있음

    페이징 시스템 구조

    page or page frame : 고정된 크기의 block(4KB)

    가상 주소 v = (p,d)

    p : 가상 메모리 페이지

    d : p안에서 참조하는 위치

    4KB 크기의 페이지가 있을때, 가상주소의 0비트에서 11비트가 변위(d)를 나타내고, 12비트 이상이 페이지 번호 p가 된다

     

    페이지 테이블에서 가상주소 v = (p,d) 라면

    p는 페이지 번호, d는 페이지 처음부터 얼만큼 떨어진 위치임을 알아냄

    즉 p+d = 실제 물리메모리의 해당 데이터 위치

     

    페이징 시스템 동작

     

    프로세스에서 특정 가상 주소 액세스를 하려면 해당 프로세스의 페이지 테이블에 해당 가상 주소가 포함된 페이지 번호가 있는지 확인하고, 있다면 페이지가 매핑된 첫 물리 주소 p를 알아내고, p+d를 실행

     

    리눅스 시스템의 프로세스가 4GB 사용 하는이유 : 2의 32승(32bit)가 4GB

     

    정리

     

    프로세스 생성시, 페이지 테이블 정보 생성

    PCB등에서 해당 페이지 테이블 접근 가능. 관련 정보는 물리 메모리에 적재

    프로세스 구동시 해당 페이지 테이블 base 주소가 CR3 레지스터에 저장

    CPU가 가상 주소 접근시, MMU가 페이지 테이블 base 주소를 접근해서 물리 주소를 가져옴

     

    다중 단계 페이징 시스템

    페이징 정보를 단계를 나누어 생성하여, 필요없는 페이지는 생성하지 않아 공간 절약이 가능하다

     

    페이지 번호를 나타내는 비트를 구분해서, 단계를 나눔(3 or 4단계)

    MMU와 TLB

    MMU->메모리를 통해 물리 주소를 얻어내는 과정은 시간이 많이 걸리므로, 자주 쓰이는 물리 주소등을 TLB에 요청하여 물리 주소를 더 빨리 가져올 수 있다

     

    페이징 시스템과 공유 메모리

    프로세스간(부모 자식 프로세스등) 동일한 물리 주소를 가리킬 수 있어서 공간, 메모리 할당 시간 절약이 가능하다

     

    자식 프로세스를 만들때, 메모리를 통째로 복사하는 것 이 아닌 자식 프로세스의 페이지 테이블에 부모 프로세스가 가지고 있는 메모리 정보만 올려서 속도를 높인다. 단 Write 할때는 메모리 복사를 한 후 그 주소로 Page pointer 변경을 한다  

     

    요구 페이징(Demand/Demanded paging)

    프로세스의 모든 데이터를 메모리로 적재 하지 않고, 실행 중 필요한 데이터만 적재

    선행 페이징(Anticipactory paging/prepaging) 은 모든 프로세스 데이터를 메모리에 적재 

     

    페이지 폴트(page fault)

    인터럽트의 일종으로, 어떤 페이지가 물리 메모리에 없을때 일어난다. 페이지 폴트가 발생하면 해당 페이지를 물리 메모리에 적재한다

    (3~5번 과정)

    페이지 폴트가 자주 발생하면, 페이지를 물리 메모리에 올리는 과정 때문에 프로세스 실행 시간이 느려진다

    따라서 앞으로 쓸 데이터를 미리 올리면 되지만, 매우 어려움

     

    페이지 교체 정책(page replacement policy)

    어떤 페이지를 물리 메모리에 적재해야 하는데, 물리 메모리에 빈 공간이 없을경우 사용하는 알고리즘

     

    1.FIFO

    가장 먼저 들어온 페이지를 뺀다

     

    2.최적 페이지 교체 알고리즘(OPTimal replacement algorithm)

    앞으로 가장 오랫동안 안쓸 페이지를 뺀다->General OS에서는 구현 불가 

     

    3.LRU(Least recently used) 

    가장 오래전에 사용된 페이지를 교체

    OPT와 비슷하게 구현하려고 시도, 과거 기록을 기반으로 함

     

    4.LFU(Least frequently used)

    가장 적게 사용된 페이지를 내림

     

    5.NUR(Not recently used)

    LRU와 비슷하게 최근에 사용되지 않은 페이지부터 교체함

    각 페이지 마다 참조 비트 R, 수정 비트 M을 둠(R,M)

    (0,0), (0,1), (1,0), (1,1) 순으로 교체함

    페이지를 read 했으면 R값이 1, write 했으면 M값을 1로 줌

     

    메모리 지역성

    서로 가까운 메모리들이 차례대로 사용될 가능성이 높음

     

    스레싱(Thrashing)

    페이지 폴트가 지속적으로 발생되면 CPU가 처리해야할 작업 대신 페이지 교체에만 집중하여 아무 일도 못하는 현상

     

    세그멘테이션(Segmentation)

    가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할

    vs 페이징 기법 : 페이징 기법은 가상 메모리를 같은 크기의 블록으로 분할

    ex) x86 real mode에서 code segment, data segment, stack segment, extra segment 로 세그멘트를 나누어 메모리 접근

     

    세그먼트 가상주소

    v = (s,d) : s는 세그먼트 번호, d는 블록 내 세그먼트의 변위

    페이징 기법과 세그멘테이션 기법에서 나타나는 애로사항

    내부 단편화(페이징)

    페이지 블록만큼 데이터가 딱 맞게 채워져있지 않을 때 공간 낭비

    외부 단편화(세그멘테이션)

    물리 메모리가 적절한 연속된 크기의 메모리를 제공해주지 못하는 경우

     

    이식성을 중시하는 OS(리눅스)의 경우 페이징 기법을 기반으로 한다

     

    'CS > 운영체제와 시스템' 카테고리의 다른 글

    시스템 프로그래밍 1주차 1  (0) 2021.08.05
    운영체제 2주차 5  (0) 2021.08.04
    운영체제 2주차 3  (0) 2021.07.29
    운영체제 2주차 2  (0) 2021.07.28
    운영체제 2주차 1  (0) 2021.07.27
Designed by Tistory.