'Fundamental Notes/Operating Systems'에 해당되는 글 14건

  1. Virtual Memory #5, Working Set Model 2008/11/16
  2. Virtual Memory #4, Cache Replacement Polcies 2008/11/16
  3. Virtual Memory #3, Demand Paging and Page Tables 2008/11/16
  4. Virtual Memory #2, Paging (1) 2008/11/16
  5. Virtual Memory#1, Introduce Memory Managements 2008/11/16
  6. Deadlock 2008/11/16

Allocation of frames

  • Problem
    • 멀티프로그래밍 시스템에서 경쟁관계의 프로세스 별로 물리 메모리를 할당할 방법이 필요함
      • 만약 빅팀된 페이지가 다른 프로세스에 의해 소유되고 있으면?
      • 각 프로세스에게 얼마나 많은 메모리를 할당 할 것인가?
    • Fixed space algorithms
      • 각 프로세스는 프로세스들이 쓸 수 있는 페이지들이 제한 되어 있음
      • 만약 한계에 도달 했을 때 그 프로세스들이 가진 페이지를 교환함.
      • Local replacement 정책으로 어떤 프로세스는 효율적으로 잘 동작하는 반면 아닌 프로세스도 있음.
    • Variable space algorithms
      • 프로세스의 페이지 할당이 다이나믹하게 grow하거나 shrink함
      • Global replacement, 하나의 프로세스가 휴식 중인 다른 프로세스를 손상(ruin) 입힐 수 있음.

Thrashing

  • 페이지 replacement 알고리즘이 실패하면 OS에서 일어나는 현상
  • OS에 의해서 대부분의 시간을 페이징 데이터를 가져오거나 다시 되돌려 보내는데 보냄(페이징 인, 아웃)
    • 유용한 작업을 하는데 보내는 시간이 없어짐
    • 시스템이 overcommitted됨. (과도하게 개입함)
    • 메모리에 어떤 페이지가 폴트를 줄이게 되는가에 대한 대안이 없음
    • 모든 프로세스에게 충분한 메모리를 제공하지 못하게 됨.
  • Solution
    • 스와핑, 프로세스의 모든 페이지를 write out
    • 물리 메모리를 늘림.

Working Set Backgrounds

  • Working set
    • 프로세스의 워킹 셋은 메모리 사용의 다이나믹 로컬리티를 가진 모델에 쓰이곤 함.
      • 워킹 셋, 프로세스가 필요로 하는 페이지의 집합( set)
      • Peter Denning 196800
    • Definition
      • WS(t,w) = { pages P such that P was referenced in the time interval (t,t-w) }
        정해진 페이지 레퍼런스 수를 채우는 동안의 인터벌 동안에 참조된 페이지의 집합
        • t:time, w:working set window size (measured in page references)
        • 워킹 셋 윈도우(working-set window) 사이즈, w라는 것은 고정된 페이지 레퍼런스 수를 이야기 함.
      • 만약에 윈도우 사이즈(레퍼런스 수)를 너무 작게 잡으면 로컬리티를 모두 내포(Encompass) 할 수 없음
      • 윈도우 사이즈를 크게 잡으면 몇몇 로컬리티들을 커버 할 수 있고 만약 무한대로 잡는다면 프로그램 전체를 커버 할 수 있음.
    • 워킹 셋 안에 페이지는 최근에 w번 레퍼런스 된 것 안에 페이지들이다.
  • Working Set Size (WSS)
    • 워킹 셋 안에 페이지 수, 다시 말해 interval(t, t-w)안에 레퍼런스 된 페이지 수
    • 프로그램의 로컬리티에 따라 WSS는 변화 함
      • 로컬리티가 떨어지는 경우에는 더 많은 페이지들이 레퍼런스 될 것임
    • 직관적으로 봤을 때, 워킹 셋은 반드시 메모리의 heavy fault(Threshing)를 보호 할 수 있어야 한다.
    • 워킹 셋 기반의 멀티 프로그램의 degree 제어
      • 각각의 프로세스는 WSS 파라 미터를 가지고 있음
      • 만약에 WSS의 합계가 가용 가능한 프레임의 총 페이지 수를 넘어 갈 때 프로세스는 서스펜드 됨.
        • D = S WSSi , WSS는 total demand frames과 유사.
        • D > m Þ Thrashing (m is total number of available frames)
          이때 suspend를 thrashing을 막기 위해 서스펜드 해줌.
      • 다른 프로세스들이 추가 되었을 때 WSS가 여전히 메모리에 맞아야지만 프로세스를 시작 할 수 있음.
      • 각 프로세스 내에서 Local replacement를 사용함.

   

Working Set Model

  • 특정 페이지가 WS(t, w) 안에 속하였으면 메모리에 keep in, 아니면 out of memory.
    • 워킹 셋 모델은 이 원칙에 따라 replace, allocate를 결정함.
    • 시간의 흐름에 따라 allocation size가 달라 질 수 있음.
  • Working Set 페이지 replacement
    • Last k 번 레퍼런스 안에 터치된 페이지들의 집합을 유지하는 것은 매우 비용이 비쌈.
      • 매 레퍼런스 마다 각 페이지들의 최근 레퍼런스 수를 워킹 셋 윈도우 사이즈와 비교 해야 하므로
    • 과거 인터벌 내에 사용된 페이지의 집합으로서 대략적인 워킹 셋을 사용
      • 측정 하는데 있어서 현재 virtual time을 사용함.
        Current virtual time이라는 것은 프로세스가 실제로 사용한 CPU 시간의 총량.
    • 워킹 셋 안에 없는 페이지를 찾아서 그것을 이빅트 함.
      • 인터벌 시간은 각 PTE의 필드 중 Tlast라고 불리는 마지막 사용 시간(time of last use)값을 이용
      • 주기적 클럭 인터럽트에 의해 R 비트는 클리어함.
      • 모든 페이지 폴트 때 이빅트 하기 에 알맞은 페이지를 찾기 위해서 테이블을 스캔 함.
      • R비트가 1일때 현재 Virtual time를 타임스탬프 해둠, (Tlast := Tcurrent)
      • R비트가 0이고 Tcurrent - Tlast가 람다 보다 클 때(정해진 시간 동안 레퍼런스가 없음), 이때 페이지를 이빅트 함.
      • 이빅트가 대상이 아닐 때는 페이지의 greatest age를 기록 해두었다가 이빅트.

   

PFF (Page Fault Frequency) Scheme

  • 다양한 more ad-hoc 어프로치를 쓰는 스페이스 알고리즘 이 있음.
    • 각 프로세스의 fault rate를 모니터링 함.
    • Fault rate 가 threshold를 넘어가면 폴트를 줄이기 위해서 메모리를 더 할당해준다.
      물론 메모리를 늘리는 것이 매번 올바른 것은 아니다. Belady anomaly
    • 만약에 fault rate가 threshold값 아래로 내려가면 메모리를 뺏아감.
  • PFF가 계속 증가하는데 가용 가능한 free 프레임이 없으면 특정 프로세스를 선택해서 서스팬드 해야 함.


Advanced VM Functionality

  • Virtual memory tricks.
    • 공유 메모리
    • Copy on write
    • Memory-mapped files
  • Shared memory
    • Private virtual 어드레스 공간으로 각 어플리케이션 서로 서로를 Protect하는데 이것이 데이터 공유를 어렵게 하는 문제를 가지고 있음.
      • 웹서버 또는 프록시를 fork한 부모와 자식은 카피 없는 메모리 캐시의 공유를 원함.
      • Share data를 액세스 하는 read, write
      • 공유 라이브러리를 실행하는 경우
    • 디렉트 메모리 레퍼런스를 사용하는 공유 데이터를 사용하는 프로세스들을 허용하기 위해서 shared memory를 쓸 수 있음
      • Shared memory를 사용하는 프로세스는 모두 shared memory segment의 업데이트를 볼 수 있음.
      • 공유 된 데이터를 액세스 하기 위해서 우리는 어떻게 서로 협동 할 수 있는가?
    • Implement
      • 페이지 테이블을 사용한 shared memory 구현
        • 공유 타겟에 페이지 테이블의 PTE가 같은 물리적 메모리 프레임을 가리키도록 맵핑 함.
        • 각각의 PTE는 Protection 값을 따로 가지고 있음
        • 페이지가 Invalid가 되었을 때는 반드시 공유 타겟에 PTE를 모두 업데이트 해주어야 함.
      • 각 프로세스의 주소 공간에 같은 위치의 VA 또는 다른 VA에 Shared memory 맵을 위치 시킬 수 있음.
        • Different, Flexible함, 다른 VAS에 맵이 존재 하므로 주소 Conflict가 없음, 그러나 shared memory에 대한 포인터는 다른 프로세스에서 invalid함
        • Same, less flexible, 그러나 shared 포인터는 valid함.
  • Copy on write
    • 프로세스 생성
      • 프로세스 생성시 부모 프로세스로부터 자식 프로세스로 모든 주소 공간의 복사가 필요함
      • 이러한 동작은 매우 느리고 비효율적임
    • Solution
      • 스레드를 사용
        • 메모리 공간을 공유
      • Vfork() 시스템 콜을 사용
        • Vfork는 부모와 같이 메모리 공간을 공유하는 프로세스를 생성함
        • 자식 프로세스가 부모 프로세스의 메모리 공간을 overwrite하는 것을 방지하기 위해서 자식이 exit되거나 새로운 프로그램이 실행 될 때 까지 부모 프로세스는 block됨.
        • 자식 프로세스에 의해서 어떤 변화가 있던지 간에 resume되는 동시에 부모 프로세스에 그 변화 내용이 보임.
        • Child가 즉시 exec()를 호출 하는 경우 매우 유용함.
      • Copy On Write (COW)
        • 모든 페이지를 복사하는 대신에 부모 페이지의 Shared 맵핑을 자식 프로세스의 주소공간에 생성함.
        • 공유 페이지들은 자식에게 read only로서 보호 됨
          • Read는 일반적으로 생김
          • Write가 있으면 protection fault가 발생, OS가 이때 발생한 트랩을 받아서 페이지를 복사하고 자식 프로세스에 존재하는 클라이언트 페이지 테이블을 변경한 다음 인스트럭션을 다시 수행함.
  • Memory-Mapped Files.
    • 메모리 맵드 파일
      • 맵드 파일은 프로세스가 메모리 레퍼런스를 사용하여 file I/O를 할 수 있도록 한다.
        • 다시 말해 open(), read, write, close대신에 메모리 레퍼런스를 한다는 것임
      • mmap(), 파일을 virtual memory 영역에 bind시킴
        • PTE는 VA를 파일 데이터를 가지고 있는 physical frame으로 매핑
        • Virtual address base + N 이 파일 안에서 N offset을 참조한다.
      • 초기화 시 맵드 영역 안에 모든 페이지는 invalid로 마크 해놓음
        • OS 가 어떤 Invalid page를 액세스 하면 파일로부터 페이지를 읽어 옴.
        • OS 가 Physical memory로 부터 이빅트를 할 때 페이지를 파일로 씀
        • 물론, 페이지가 더티가 아니면 쓸 필요는 없음.
    • Note
      • 파일은 VAS의 영역을 위한 필수적인 backing 스토어임. (Swap file을 대신함)
    • 이점
      • 파일과 메모리를 단지 포인터만 사용하여 접근 할 수 있기 때문에 uniform 액세스가 가능해짐
      • 복사가 적어짐
        • 이는 일반적인 IO 퍼포먼스보다 메모리 맵드 파일이 빠른 속도를 가지게 되는 이유임.
          다른 하나는 local memory를 변경 하는 것 보다 system call의 오버헤드가 크기 때문임.
        • 복사가 적어지는 이유는 대부분의 OS에서 메모리 맵 영역은 커널 파일 캐시에 존재 하기 때문에 유저 공간에서 커널 공간으로의 복사가 줄어 듦.
    • Drawbacks
      • Standard IO 어프로치가 시스템콜 오버헤드와 메모리 카피 오버헤드를 가진다면 메모리 맵드 파일의 어프로치는 페이지 폴트에 있다.
      • 이러한 페이지 폴트로 생기는 코스는 상황에 따라 다르나 메모리 맵드 파일은 standard IO보다 갑자기 성능이 악화 될 수 있다. 큰 파일을 읽을 경우 대부분의 데이터는 커널에 의해 캐시 되지 않기 때문에 많은 페이지가 폴트를 유발 할 수 있다.

           

Memory Reference

  • Situation
    • CPU에서 프로세스가 실행 중이고 프로세스가 virtual address를 읽으려고 시도 했을 때
  • Common case
    • MMU 안에 TLB를 읽음
    • TLB는 VPN을 사용하여 룩업을 시도함.
    • VPN이 매칭 되는 경우 해당 PTE를 찾음
    • TLB는 PTE의 Protection이 read를 허용하는지 검증함.
    • PTE에 명세 되어 있는 Physical frame과 offset을 이용하여 Physical address를 계산
    • MMU는 Physical address를 읽어서 값을 CPU에게 리턴 해준다.
  • TLB가 미스 났을 때
    • MMU는 메모리의 페이지 테이블로 부터 TLB를 로드하는 경우
      • 이 경우는 하드웨어가 TLB를 관리하고 OS는 이 단계에 간섭하지 않음.
      • OS는 이미 페이지 테이블을 셋업 해놓았기 때문에 하드웨어가 직접적으로 액세스 할 수 있음
    • Trap이 OS로 가능 경우
      • 소프트웨어 TLB를 관리함. 이 경우에는 OS가 이 시점에 관여함.
      • OS는 페이지 테이블을 룩업하고 PTE를 로드하여 TLB에 놓음
      • OS는 익셉션 상황에서 리턴하고 TLB는 계속 동작함.
  • TLB가 미스 났을 때 복잡해 보이는 경우.
    • 리커시브 페이지 폴트가 존재 하는 경우
      • 페이지 테이블 룩업은 페이지 테이블 자체가 페이지 아웃 되어 있을 때 리커시브하게 폴트가 생길 수 있음
      • 페이지 테이블이 OS에서는 VAS안에 존재 하기 때문에
      • 만약 Physical 메모리에 테이블을 두는 스킴의 경우는 문제가 없음
    • TLB가 PTE를 로드하고 번역을 재시작 하면 되는데 이때도 두 가지의 케이스가 존재.
      • 일반적인 케이스에 PTE는 메모리의 유효한 페이지를 참조함.
      • 특이한 케이스에서는 TLB가 PTE의 Protection 비트 때문에 PTE에서 폴트를 다시 냄.
  • 페이지 폴트
    • PTE가 프로텍션 폴트를 가리킬 수 있음.
      • 정책이 아니라 Invalid였다면 Virtual page 자체가 할당이 되지 않았거나 페이지가 물리 메모리에 없는 경우임
    • TLB가 OS에게 트랩하는 경우
      • Read / Write / Execute의 정책이 다른 경우 일반적으로 프로세스에게 다시 폴트를 보내거나 또는 트릭을 써서 진행 하기도 한다. (트릭이라고 함은 copy on write, mapped file등을 말함)
      • 할당 되지 않은 경우의 invalid일때는 OS는 프로세스에게 폴트를 보냄 (세그멘테이션 폴트)
        (할당이라는 단어를 사용 하고 있지만 주소 자체가 invalid인 경우로 abort인 상황이라고 판단)
      • 물리 메모리에 없는 경우의 Invalid일 때에는 OS는 프레임을 할당하고 디스크에서 리드를 하여 PTE를 Physical frame으로 맵핑 시킨다.
  • Physically addressed caches
    • 다수의 프로세스가 캐시에서 같은 시간에 블록 되는 것을 허용함
    • 다수의 프로세스가 페이지를 공유할 수 있음.
    • 캐시는 프로텍션 이슈를 고려 할 필요가 없음. (TLB 아래에 있으므로)
    • Address translation이 크리티컬 패스임.
  • Virtually addressed, Virtually tagged caches
    • 주소의 시너님(Synonyms)이나 엘리어스 문제가 있음
      (Virtual address가 각 프로세스마다 있으므로)
      • 소프트웨어 솔루션으로는 프로세스가 스위칭 될 때 마다 캐시를 플러시 한다.
      • 하드웨어 솔루션은 키핑 할 수 있는 위치를 모두 찾는 것.
  • Hybrid (Virtually addressed, physically tagged caches)
    • Virtual address를 가지고 TLB와 캐시를 병렬적으로 접근함.
    • Offset은 VA,PA모두 같다는 것을 사용함.

Page Replacement

  • 정의
    • 페이지 폴트가 나면 OS는 폴트 된 페이지를 디스크로 부터 읽어서 메모리의 페이지 프레임에 로드 해야 함
    • 이 시간에 프로세스의 모든 페이지 프레임이 사용되고 있다면 OS는 페이지 인 된 페이지를 리플레이스 해 야함
    • 다시 말해 Free 페이지 프레임을 확보 하기 위해 페이지를 이빅트 해야 하고 이때 페이지 리플레이스먼트 알고리즘이 이를 결정함.
  • Evicting 베스트 페이지.
    • Replacement algorithms의 목표는 베스트 빅팀 페이지를 선택하여 폴트 Rate를 떨어 드리는 것임
    • 이빅트 할 베스트 페이지라는 것은 다시는(Never) 터치 되지 않을 페이지를 의미함.
      • 그렇다면 프로세서는 다시는 폴트가 나지 않을 것임
    • Never는 매우 긴 시간을 의미함. 그렇기 때문에 Page replacement는 이것에 가장 근접하도록 페이지를 선택 함.
      • Belady의 proof - 프로세스가 오랜 기간 동안 사용하지 않을 페이지를 이빅트 하는 것이 페이지 폴트 숫자를 최소화 하는 것임.
  • Belady's 알고리즘
    • 미래에 오랜 시간 동안 사용되지 않을 페이지를 리플레이스 하는 것임
    • 가장 낮은 폴트 rate를 가짐
    • 미래를 예측 할 수 없으므로 쓸모가 없으나 기준(Yardstick)이 될 수 있음
      • 다른 알고리즘과 비교할 때 척도가 됨
  • FIFO
    • 명백하고 구현이 쉬움
      • 들어온 순서대로 리스트만 유지하면 됨
      • 리플레이스 시에 가장 오래된 페이지를 이빅트 하면 됨
    • 가장 오래된 페이지에 대한 정책
      • 가장 오래된 것이 가장 안 쓰일 가능성이 높음
      • 정확한 케이스가 아님,
    • FIFO는 Belady's Anomaly를 가지고 있음
      • 메모리가 많이 주어지면 폴트 비율이 높아진다.
      •    

  • LRU
    • Least Recently Used
      • 페이지 교환을 위해 LRU는 레퍼런스 정보를 이용하여 결정함
      • 기본 아이디어는 과거의 경험을 통해서 미래의 비헤비어를 추측 할 수 있음
      • 과거에 가장 적게 사용된 페이지를 이빅트 함
      • Belady는 미래를 살피길 원했지만 LRU는 과거를 살핌
    • Implementation
      • 완벽을 기하기 위해서는 매 레퍼런스에 대한 타임 스탬프가 필요하고 스택에 그 정보를 저장하기나 PTE에 넣어주어야 함
      • 이러한 기법은 비용이 비싸기 때문에 대략적인 방법을 사용하기도 함(Approximate)
    • Stack 알고리즘
      • 스택에 최 상위에는 가장 최근에 레퍼런스 된 페이지 정보를 유지 시킴
    • ALRU
      • Approximating LRU
      • PTE의 Reference bit을 이용하여 LRU를 대략적으로 구현함
      • 카운터 베이스드 어프로치
        • 각 페이지 마다 카운터를 유지
        • 매 정기적인 인터벌 마다 R비트를 참조함
        • 만약 R비트가 0이라면 카운터를 증가 시키고 1이라면 감소 시킴.
        • 결국은 가장 큰 값을 가지는 페이지가 가장 적게 사용된 페이지가 됨
      • 특정 아키텍쳐는 reference 비트가 없음
        • 폴트를 야기 하기 위한 valid 비트를 사용하여 레퍼런스 비트를 시뮬레이션 함.
  • Second Chance
    • 최근에 레퍼런스 된 페이지에 대하여 세컨드 찬스를 부여하는 FIFO임.
    • 클럭이라고 부르는 큰 원에 물리 페이지 프레임을 배열 시킴
    • 클럭 핸드는 LRU 후보를 가리키고 있음
      • 클럭 핸드는 클럭의 오더와 같게 페이지들을 쓸고 지나감
      • 레퍼런스 비트가 꺼져 있으면 최근에 사용 되지 않은 것으로 빅팀 선정
      • 레퍼런스 비트가 켜져 있으면 꺼버리고 다음 페이지로 이동
    • 메모리가 풍부하면 오버헤드는 줄어듦, 메모리가 크면 정보의 정확성이 떨어짐.
  • NRU Not Recently Used
    • NRU 는 메모리에 최근에 사용된 페이지를 키핑하는 것을 목적으로 한다
    • 알고리즘의 정책
      • 페이지가 레퍼런스 되면 페이지에 대한 레퍼런스 비트를 세팅
      • 마찬가지로 페이지가 수정되면 Modified 비트가 세팅
        (이 두 가지는 하드웨어에 의해 이루어짐)
      • 고정된 인터벌 시간에 트리거 된 인터럽트 때 모든 레퍼런스 비트를 클리어 시킴
      • 결국은 현재 클락 인터벌 내에 참조된 페이지들만 레퍼런스 비트를 유지함.
      • 리플레이스는 아래 순서로 빅팀으로 선정
        • 클래스 0, 레퍼런스가 안되고 수정도 안됨
        • 클래스 1, 레퍼런스가 안되고 수정이 됨
        • 클래스 2, 레퍼런스 되고 수정이 안됨
        • 클래스 3, 레퍼런스 되고 수정됨.
    • 이점
      • 이해하기 쉬움
      • 구현이 효율적임
      • 옵티멀은 아니지만 적절한 퍼포먼스를 유지함.
  • LFU
    • Least Frequently Used
    • 카운팅 기반의 리플레이스먼트
      • 각 페이지 마다 소프트웨어 카운터가 있음
      • 각 클락 인터럽트마다 각 페이지의 R비트가 카운터에 첨가된다. (시프트)
      • 카운터는 얼마나 자주 참조 되었는지를 가르쳐 준다.
      • 리플레이스는 카운터가 가장 작은 페이지가 인빅트 되는 방식
        • 만약 MFU였다면 가장 큰 카운터를 가진 페이지가 인빅트 되었을 것임
        • MFU를 쓰는 이유는 가장 작은 카운터를 가진 페이지는 페이지 인 된 다음에 아직 사용되지 않은 것으로 참조 가능성이 높다고 생각함
    • Aging
      • 카운터는 각 페이지 별로 참조된 레퍼런스 비트를 leftmost에다가 삽입하고 왼쪽으로 한 비트 이동 시킴 (물론 매번 인터벌 클럭마다)
      •    

Demanding Paging

  • 정의
    • 페이지 레벨의 스와핑
    • 필요 할 때만 메모리에서 가져옴
      • 스와핑은 프로세스 단위로 움직이지만 디멘드 페이징은 페이지 레벨이라는 것의 차이가 있음
    • OS는 시스템내에 프로세스에 의해서 할당된 모든 데이터의 페이지 캐시로서 메인 메모리를 사용함
      • 페이지를 할당 받을 때는 물리적 메모리 프레임에서 할당을 받음
      • 물리 메모리가 모두 찾는데도 불구하고 새로운 페이지를 할당 해야 하면 이빅트(Evict)를 하여 메모리를 확보함.
    • 이빅트된 페이지는 디스크로 감
      • 물론 더티인 상태에서만 쓰일 필요가 있음
      • 스왑 파일로 감
      • 메모리와 디스크 사이의 페이지 이동은 OS에 의해서 이루어짐
      • 어플리케이션에게는 Transparent 함.
  • Page faults
    • 이빅트 된 페이지의 Virtual Address를 참조하는 프로세스에게 일어나는 현상
      • 페이지가 이빅트 되었을 때는 OS는 PTE를 Invalid로 처리하고 해당 페이지의 스왑 파일의 위치를 저장함.
      • 프로세스가 이 해당 이빅트 된 페이지를 참조하면 PTE에서는 Invalid이므로 익셉션을 던진다.
    • OS는 익셉션에 응답으로서 페이지 폴트 핸들러를 실행 시킨다.
      • 핸들러는 Invalid PTE의 스왑 파일의 페이지 위치를 사용
      • 핸들러는 Physical frame으로 페이지를 읽어서 PTE를 그것을 가리키게 하고 Valid로 변경하여 업데이트 한다.
      • 핸들러는 fault된 프로세스를 다시 시작 시킨다.
    • 어디다 읽어 올 것인가?
      • 페이지가 꽉 찬 상태라면 다른 것을 page replacement algorithm으로 이빅트 시킨 뒤 읽어옴
      • OS는 전형적으로 이빅트를 야기시키지 않고 바로 할당을 하기 위해서 Free 페이지 들에 대한 풀을 유지하고 있음
  • 왜 디멘드 페이징을 쓰는가?
    • 로컬리티
      • Temporal locality : 최근에 레퍼런스 한 위치를 다시 레퍼런스 할 가능성이 높음
      • Spatial locality : 레퍼런스 된 장소의 근처 위치들은 빠른 시일 내에 레퍼런스 될 가능성이 높음
    • 로컬리티가 있다는 이야기는 페이징이 자주 일어 나지 않는 다는 것을 의미함
      • 한번 페이지를 로드 하고 나면 그것은 여러 번 사용 될 수 있음
      • 디멘드 페이징은 많은 것을 고려 해야 하는 단점이 있음
        • 어플리케이션의 로컬리티 degree를 고려해야 함
        • Page replacement policy를 정해야 함
        • Physical memory의 양을 고려 해야 함
        • 어플리케이션의 패턴이나 메모리의 풋 프린터를 잘 고려해야 함
  • 왜 "demand" 인가?
    • 프로세스가 처음 시작 되면 모든 PTE가 invalid인 페이지 테이블을 할당함
      • 물리 메모리로 어떠한 매핑도 없음.
    • 프로세스가 시작 하면 이때 할당됨
      • 인스트럭션은 코드와 데이터 페이지에서 즉각적으로 폴트 유발
      • 폴트는 필요한 코드와 데이터를 페이지를 페이지 인 할 때 까지 정지됨
      • 오직 프로세스의 필요에 의해 코드와 데이터가 demanded일 때 메모리로 로드 됨

Page Tables

  • Managing page table
    • 페이지 테이블 공간에 대한 오버헤드
      • 페이지 4KB를 가지는 32비트 어드레스 공간의 페이지 테이블 사이즈는 4MB
      • 프로세스당 이므로 용량이 큼
    • 오버헤드를 줄이는 방법
      • 실제 사용되는 주소 공간에 대해서만 맵을 할당함.
      • 전체 공간의 일부로 (Fraction) 유지.
    • 어떻게 사용되는 영역에 대한 맵만 유지 할 수 있는가
      • 페이지 테이블을 다이나믹하게 확장 가능하도록 만듦
      • Indirection 레벨을 통해서
        • 2레벨, 하이라키컬, 해시등..
  • Two-level page table
    • Virtual address는 3파트로 구성
    • 마스터 페이지 테이블은 마스터 페이지 넘버를 세컨더리 페이지 테이블로 매핑
    • 세컨더리 페이지 테이블은 세컨더리 페이지 넘버를 페이지 프레임 넘버로 매핑
  • Multi level Page Tables
    • AXP 아키텍쳐의 예
      • 3레벨의 페이지 테이블을 가지고 있음
      • 64비트 어드레스가 3개의 세그먼트로 분리
        • Seg0 - 유저 코드
        • Seg1 - 유저 스텍
        • Kseg - 커널
  • Hashed Page Tables
    • 정의
      • 어드레스 공간이 32비트 보다 클 때
        • 32비트 보다 클 때 왜 필요한가?
          • 한 페이지 안에 페이지 테이블을 넣을 수 있으면 메모리 접근 면에서 속도 gain이 있음
          • 4byte를 한 엔트리로 할때 1024의 엔트리를 구성 할 수 있고 이는 주소 공간에서 10비트를 차지 하게 됨.
          • 64비트 주소 공간 중 52비트를 주소를 가리키는데 사용 한다고 가정하면 10으로 나누어 총 6레벨의 페이지 테이블이 필요하게 됨
          • 이는 6번의 메모리 액세스를 참고로 하므로 이를 피하기 위해 해시 테이블을 사용.
      • VPN 은 해시테이블에 해시 되어 넣어짐
      • 각각의 해시 테이블 엔트리는 엘리먼트 리스트를 가지고 있음
      • 각 엘리먼트는 다음과 같은 항목을 가짐
        • VPN
        • 매핑 된 페이지 프레임 값
        • 다음 엘리먼트의 포인터.
    • 클러스터된 페이지 테이블들
      • 다양한 해시 페이지 테이블은 각각의 연속적인 페이지 테이블의 매핑 정보를 저장하고 있음.
      • VPBN로 해시를 하여 클러스터된 페이지 테이블을 가지고 오면 그 내에 블락 오프셋을 이용하여 실제 페이지 번호를 구할 수 있음.
  • Inverted Page Tables
    • 실제 메모리의 페이지가 하나의 엔트리가 됨.
    • 실제 메모리 페이지인 하나의 엔트리는 VPN과 프로세스 정보가 저장 되어 있음
    • 일반적으로 VPN이 인덱스가 되고 그 내에 매핑된 PPN이 기술 되는데 이는 VPN이 제공하는 공간 만큼의 엔트리가 필요 하게 되므로 페이지 테이블이 커짐 이에 반해 IPT는 VPN을 저장하고 인덱스가 PPN이 되므로 실제 물리 메모리 사이즈 만큼의 엔트리만 존재 하면 되므로 페이지 테이블 사이즈가 매우 작음
    • 대신에 페이지를 찾기 위해 검색 시간이 들어가고 메모리 접근이 많아짐.
    • 이것을 해결 하기 위해서 Hashed Inverted Page Tables을 쓰거나 TLB와 같은 하드웨어 도움을 받음.
  • Paging Page Tables
    • 페이지 테이블 자체에 대한 어드레스 고민
      • 페이지 테이블을 어디다 저장 할 것인가?
      • Physical Memory
        • 물리 메모리에 바로 저장하는 경우 주소 변환이 필요 없기 때문에 빠르고 쉬움
        • 하지만 물리 메모리를 바로 쓴다는 것은 그 만큼 VAS의 엔트리들이 물리 메모리 공간을 확보 못하기 때문에 빨리 이빅트 되고 이는 VAS의 라이프 타임을 줄이게 됨
      • Virtual Memory
        • 콜드 페이지 테이블의 페이지는 디스크로 페이지 아웃 시킴
        • 페이지 테이블을 참조 하기 위한 주소 번역 오버헤드가 존재.
        • 와어링을 위한 Outer 페이지 테이블이 필요 없음(다시 말해서 MSB 몇 비트를 통한 상위 레벨의 페이지 테이블이 필요 없는 것인데 이는 선형 메모리 주소를 보장 하기 때문에 한번에 엑세스가 가능해서라고 생각 됨, 만약 물리 메모리 공간에서도 마찬가지로 선형 메모리 주소를 보장한다면 충분히 가능)
    • 결국 페이지 테이블이 OS가 관리하는 VAS안에 저장되는 것임.
  • TLB
    • 주소 변환의 효율성을 제공
      • 원래 페이지 테이블 스킴은 메모리 룩업의 코스트가 더블로 들어감
        • 한번은 페이지 테이블을 룩업 하는 것이고 다른 하나는 데이터를 패치 하는 것이다.
      • 2 레벨 페이지는 3배 코스트가 든다.
        • 페이지 테이블이 메모리 있다고 가정 했을 때 두 번은 페이지 테이블 룩업이고 세 번째는 데이터 패치이다.
      • 어떻게 하면 효율적으로 만들 수 있나?
        • Goal - Virtual address에서 패칭 하는 것도 Physical address를 패칭 하는 것 만큼이나 빠르게 해야 한다.
        • Solutions
          • V2P 번역을 하드웨어 캐시를 통해서 한다.
          • Translation Lookaside Buffer
          • TLB는 MMU에 의해서 관리 됨.
    • Translation Lookaside Buffers
      • VPN을 PTE에서 번역함.
      • 싱글 머신 사이클에 끝날 수 있음
    • TLB는 하드웨어에 구현됨
      • 모든 엔트리는 병렬 룩업이 가능한 Fully associative cache.
      • Cache tag는 VPN임.
      • 캐시의 값은 PTEs
      • PTE + offset를 통하여 MMU는 바로 물리 메모리의 주소로 변환 할 수 있다.
    • TLB는 로컬리티를 이용함(Exploit)
      • 프로세스는 정해진 시간에 몇 개의 페이지들만 사용함
        • TLB의 16-48엔트리가 일반적임(64-192KB)
        • 프로세스의 핫 셋이나 워킹 셋을 유지 할 수 있음
      • 히트 Rate는 매우 중요함.
    • TLB 미스에 대한 핸들링
      • 주소 번역은 TLB에 의해서 핸들링 됨.
        • 번역의 99% 번역이 가능 하지만 때때로 TLB도 미스 나는 경우가 있음
        • 미스가 나는 경우에 누가 TLB로 Translation을 대체 해줄 것인가?
      • 하드웨어
        • MMU
        • 메모리에 페이지 테이블이 어디에 있는 지 알고 있음
        • OS가 테이블을 관리하고 하드웨어는 직접 접근 함.
        • 페이지 테이블은 하드웨어로 정의되어 있어야 함.
      • 소프트웨어가 TLB 로드 함.
        • TLB가 미스 fault가 나는 경우에 OS가 적절한 PTE를 찾아서 TLB로 로드함.
        • 반드시 빨라야 한다(그러나 일반적으로 20 ~ 200 사이클을 먹음)
        • CPU, ISA는 TLB 조작을 위한 인스트럭션 셋을 따로 가진다.
        • 페이지 테이블은 OS의 편의를 위하여 어떤 포맷으로도 가능해야 한다.
    • TLB들 관리
      • OS는 페이지 테이블과 TLB의 의 컨시스턴시를 유지 해야 한다.
        • OS가 PTE의 Protection bit를 변화 시키면 그 PTE가 TLB에 있을 경우 반드시 Invalidation 시킬 필요가 있다.
      • 프로세스의 컨텍스트 스위칭이 발생할 때 TLB는 리로드 되어야 함
        • 프로세스는 일반적으로 하나 마다 자신의 페이지 테이블을 가지고 있으므로 컨텍스트 스위칭 시 TLB를 모두 플러시 해야 할 필요가 있다.
        • IA32에서는 CR3(페이지 디렉터리 베이스 레지스터)의 컨텐츠가 변화할 경우 TLB가 자동으로 플러시 됨.
        • 플러시 대신에 TLB 엔트리에 PID를 저장 해놓고 플러시 하지 않을 수 있음.
      • TLB가 미스 되면 새로운 PTE는 로드 되고 캐시된 PTE가 이빅트 될 수 있다.
        • PTE 빅팀을 선택 하는 것을 TLB Replacement policy라고 부름
        • 정책은 하드웨어로 구현 되어 있으며 일반적으로 LRU와 같이 간단하게 구현 되어 있음.

             

             

Paging

  • Paging
    • 프로세스의 물리 주소 공간이 불연속적일 수 있음을 허용함
    • 물리 메모리는 프레임이라고 불리는 고정 된 사이즈의 블럭으로 나누어짐
    • 로지컬 메모리는 페이지라고 불리는 고정 된 사이즈의 블럭으로 나누어짐.
      • 페이지나 프레임의 사이즈는 2의 승수로 제공됨, 일반적으로 512B ~ 8KB
      • 프레임과 페이지가 용어상의 차이만 존재하지 같은 사이즈의 블락을 가짐
    • OS는 모든 프리 프레임의 정보를 유지하고 있음.
    • 페이지 매핑 테이블을 구성함.
  • 사용자의 관점
    • 사용자에게는 VAS(가상 주소 공간)를 통해서 0에서 N까지 연속적인 메모리 공간을 보여줌
    • 현실적으로 페이지는 물리 메모리상에 스케터 되어 있음
      • V2P의 페이지 매핑
      • 매핑은 프로그램에게 보여지지 않음.
    • Protection제공
      • VAS 바깥의 주소에 대해서는 접근 할 수 없기 때문에
  • Translation address
    • Virtual address는 VPN과 Offset 두 개로 구분
    • VPN은 페이지 테이블의 인덱스
    • 페이지 테이블은 페이지 프레임 넘버를 결정(PFN)
  • Pages table
    • OS에 의해서 관리됨
    • VPN to PFN
    • 하나의 페이지 테이블 엔트리(PTE)는 Virtual address 공간에서 페이지당 하나임.

     

  • Paging Example
    • Virtual Address 32bit, Physical address 20 bit, Page size 4KB 라면 Offset은 12 bit이고 VPN은 20 bit이며 Page table entry는 2^20이 된다.
    • Protection
      • 메모리 Protection은 각각의 프레임 마다 protection 비트를 두어서 구현
      • Valid / Invalid
        • Valid라는 말은 VAS안에 있는 연관 페이지라는 말로 정상 접근이 가능하다는 것임
        • Invalid라는 말은 프로세스의 VAS안에 없는 페이지라는 말임.
      • Valid page에 대한 좀 더 풍부한(Finer) Protection이 가능 함.
        • 다시 말해 Read only, read-write, execute-only 등
  • Page Table Entries(PTEs)
    • V, Valid bit는 PTE가 사용이 가능한지 아닌지를 나타내는 것임.
      • 매 시간 마다 Virtual address가 사용 중인지 아닌지를 나타내기 위해 사용.
    • R, Reference bit는 페이지가 액세스 되었는지 아닌지를 나타냄
      • 페이지를 읽거나 쓸 때 이 비트는 세팅됨
    • M, Modify bit는 페이지가 더티 인지 아닌지를 나타냄
      • 페이지 쓰기일 때 비트가 세팅 됨
    • P, Protection bit는 페이지 별로 어떠한 컨트롤 오퍼레이션이 가능 한지를 나타냄.
      • Read, Write, Execute등
    • 페이지 프레임 넘버(PFN) 는 Physical 페이지를 나타냄.
  • 이점
    • 물리적 메모리 할당이 쉬움
      • 물리적 메모리는 프레임의 free리스트로 부터 할당 받으면 됨
      • 할당 받는 다는 것은 단지 free 리스트에서 제거 하는 것
    • External fragmentation이 없음
      • 페이지 단위로 할당 하기 때문에 External fragmentation이 생길 수 없음
    • 프로그램의 청크를 페이지 아웃 시키기 쉬움
      • 페이지가 고정된 사이즈를 가지고 있기 때문에 모든 청크는 같은 사이즈를 가짐.
      • 페이지 아웃된 페이지를 참조 하기 위해서는 Valid비트만 확인 하면 됨.
      • 페이지 사이즈는 디스크 블록 사이트의 멀티플로 선택함.
    • 불법적인 액세스로부터 페이지를 보호하기 쉬움
    • 페이지를 공유 하기 쉬움
  • 단점
    • Internal fragmentation은 여전이 가능함.
      • 프로세스는 페이지의 배수 단위로 메모리를 사용 하지 않음.
      • Internal과 External의 차이는 사용 하지 않는 스토리지가 Allocated Region안에 있느냐 바깥에 있느냐의 차이임.
    • 메모리 레퍼런스 오버헤드
      • 어드레스 룩업당 2번의 메모리 레퍼런스가 생김. (페이지 테이블을 참조 하고 나서 메모리를 참조)
      • 하드웨어 TLB의 서포트를 받으면 이를 해결 할 수 있음
    • 페이지 테이블을 유지 하기 위한 메모리가 매우 클 수 있음.
      • PTE는 VAS만큼 필요 함
      • 4KB 사이즈의 페이지를 가지는 32비트 어드레스 공간이라면 2^20개의 PTE가 필요함
      • 하나의 PTE마다 4 바이트가 필요 하므로 페이지 테이블당 4MB가 필요함
      • OS가 일반적으로 프로세스 마다 페이지 테이블을 따로 가지고 있으므로 페이지 테이블을 유지 하기 위한 사이즈는 매우 큼
      • 이를 해결 하기 위해서는 멀티레벨 페이지 테이블, 인버티드(Inverted) 페이지 테이블등이 있을 수 있음.

Segmentation

  • Segmentation은 로지컬리 관련된 데이터 유닛끼리 파티션 메모리를 구성하는 기술.
    • 예를 들면 코드 세그먼트, 스택, 힙과 같은 것들이 있다.
  • 사용자의 메모리 뷰는 가변적 세그먼트의 컬렉션으로 제공된다. 그들 사이에 오더링에 대해서는 관심이 없다.
  • 다른 세그먼트들은 서로 영향을 주지 않으면서 독립적으로 grow하거나 shrink한다.
  • 가변 사이즈 파티션의 자연스러운 확장이다.
    • 가변 사이즈 파티션은 프로세스당 하나의 세그먼트를 할당 하는 것과 같음
    • 세그멘테이션은 프로세스당 많은 세그먼트를 할당하는 차이가 있음
  • 하드웨어 서포트
    • 세그먼트 테이블이 존재
    • 세그먼트 테이블은 세그먼트 번호를 인덱스로 하여 세그먼트의 리밋과 베이스로 구성한 테이블
  • 이점
    • Growing 또는 shrink하는 데이터 구조체를 핸들링 하는 것이 쉬움
    • 세그먼트를 Protect하는 것이 쉬움
      • 세그먼트 테이블의 각 엔트리 마다 valid 비트를 두고 있음
      • Protection bit들 역시 각 세그먼테 테이블 엔트리마다 존재 하기 때문에 관리가 쉬움
    • 세그먼트 공유가 쉬움
      • 같은 베이스와 리밋으로 번역하면 공유가 됨.
      • 코드와 데이터는 같은 세그먼트 레벨을 공유함.
      • 공유 라이브러러리가 좋은 예임.
  • 단점
    • Cross-Segment address
      • 세그먼트는 프로세스간 공유를 위해 같은 세그먼트 넘버를 가리키는 포인터를 가질 필요가 있다.
      • 다른 경우는 간접 어드레싱만 사용한다.
    • Large segment tables
      • 메인 메모리에 유지하고 스피드를 위해서 하드웨어 캐시를 사용한다.
    • External fragmentation
      • 세그먼트가 다양한 길이를 가지기 때문에 메모리 할당은 다이나믹 스토리지 할당 문제를 가지게 된다.

Paging versus Segmentation

Kind

Paging

Segmentation

Block size

Fixed(4KB ~ 64KB)

Variable

Linear address space

1

Many

Memory addressing

One-word (PN + offset)

Two-ward (SN + offset)

Replacement

Easy

Difficult

Fragmentation

Internal

External

Disk traffic

Efficient

Inefficient

Transparent to the programmers

Yes

No

Exceed the size of physical memory

Yes

Yes

Code, data 의 구분, 각각 보호 가능

No

Yes

Fluctuate size를 가진 테이블 수용

No

Yes(Shrink, Grow)

사용자 편의에 의한 코드 공유

No

Yes

발명된 이유

Physical memory 공간보다 더 큰 공간 제공

VAS에 관계 없이 코드 데이터 분리, 공유, 보호를 위해서 제작.

  • 하이브리드 어프로치
    • 페이지된 세그먼트
      • 페이징이 가능한 세그먼트
      • 세그먼트는 다수의 페이지로 구성.
    • 페이지 사이즈의 배수
      • IA32에서는 4KB, 2MB그리고 4MB 페이지 사이즈가 지원됨
      • AXP 아키텍쳐에서는 8,16,32,64KB 지원
  • 세그먼테이션과 페이징의 결합
    • 로지컬리 관련 있는 유닛들을 관리 할때는 세그먼트를 사용
      • 코드, 데이터, 힙, 스텍등.
      • 세그먼트는 다양한 사이즈 이지만 페이지 사이즈의 배수로 구성되는 큰 크기
    • 고정된 사이즈 청크로 세그먼트로 파티션하기 위해 페이지들을 사용
      • 세그먼트는 물리 메모리의 좀 더 쉽게 만듦
      • 세그먼트가 페이지어블 가능 하기 때문에 메모리에서 나갈 때 세그먼트가 아니라 페이지 단위로 이동 시킬 수 있음
      • External fragmentation이 없어짐
      • 세그먼트가 할당 된 경우에면 페이지 테이블 엔트리의 할당이 필요함.
        • MULTICS
        • IA32

           

'Fundamental Notes > Operating Systems' 카테고리의 다른 글

Virtual Memory #4, Cache Replacement Polcies  (0) 2008/11/16
Virtual Memory #3, Demand Paging and Page Tables  (0) 2008/11/16
Virtual Memory #2, Paging  (1) 2008/11/16
Virtual Memory#1, Introduce Memory Managements  (0) 2008/11/16
Deadlock  (0) 2008/11/16
Synchronization #2  (2) 2008/11/16

Memory Management

  • Goals
    • 프로그래밍을 위한 편리한 추상화 제공을 위해서
    • 프로세스간 경쟁에 의해 부족한(Scarce) 메모리 리소스를 높은 퍼포먼스와 최소한의 오버헤드를 통해서 할당 해주기 위해.
    • 프로세스간 분리를 위해.
  • Batch Programming
    • 프로그래머는 물리적 주소 공간을 직접 사용함
    • OS가 Job을 로드하고 실행하며 언로드 함.
  • Multiple Programming
    • 한번에 한 메모리에 접근 할 수 있는 다수의 프로세스들이 있음
      • 멀티플 job들을 CPU와 IO등을 Overlap시키기 위해서.
      • 각각의 프로세스는 가변적인 메모리 공간이 필요하며 인접한(Contiguous) 메모리 공간이 제공되어야 한다.
    • 고정 또는 가변의 파티셔닝, 페이징, 세그먼테이션 등을 통해서 제공 가능
    • Requirements
      • Protection
        각 프로세스가 사용할 수 있는 공간을 제한한다.
      • Fast Translation
        Protection 스킴을 위해서 메모리를 빠르게 룩업해야 한다.
      • Fast Context Switching
        • Protection과 Fast Translation을 위한 메모리 하드웨어 업데이트가 빨라야 한다.

Single Programming

  • 유저 프로세스는 단 한 개        

Partitions

  • Fixed Partitions
    • 물리적 메모리는 고정된 Partition으로 쪼개어짐.
      • 각각의 파티션 사이즈는 고정되거나 같음
      • 파티션의 개수가 멀티 프로그래밍을 위한 degree와 같음
      • 하드웨어적으로는 base 레지스터가 필요함.
        • Physical Address = Virtual Address + base register
        • Base 레지스터는 프로세스가 컨텍스트 스위칭을 가질 때 OS에 의해서 로드 됨
    • 이점
      • 구현이 쉽고 컨텍스트 스위칭이 빠르다.
    • 문제점
      • Internal Fragmentation, 프로세스에 의해 사용 되지 않는 파티션 내에 메모리임에도 불 구 하고 다른 프로세스가 사용 할 수 없음.
      • Partition size
        정해진 하나의 사이즈가 모든 프로세스에게 알맞을 수 없음.
  • Improving Fixed Partitioning
    • 파티션 사이즈가 다 같을 필요는 없음
    • Allocation Strategies
      • 각각의 파티션 사이즈에 따라서 분리된 큐들을 유지함.
      • 빈 파티션 내에서 가장 적절한 사이즈를 가지는 Job에게 파티션 할당
      • 모든 입력 큐를 검색하여 빈 공간의 파티션에 맞는 가장 큰 Job을 선택.
  • Variable Partition
    • 물리적 메모리는 가변적인 사이즈의 파티션으로 쪼개어 짐.
      • 하드웨어는 base 레지스터 이외에 limit 레지스터를 지원 해야 함.
      • Physical address = virtual address + base register
      • 고정 파티션과 마찬가지로 컨텍스트 스위칭 시에 base 레지스터를 로드 함.
      • Limit 레지스터의 역할은 Protection임.
        만약에 physical address > base register + limit 이면 그 때는 protection fault가 뜸.
    • Allocation strategies
      • First fit, Big enough를 가진 첫 번째 hole을 할당함.
      • Best fit, Big enough 중에 가장 작은 hole을 찾아서 할당
      • Worst fit, 가장 큰 hole을 할당.
    • 이점
      • Internal fragment가 없음.
        • 프로세스에게 Big enough 의 파티션을 할당 하기 때문에
        • 북키핑을 줄이기 위해서 물리 메모리를 고정된 사이즈의 블록으로 쪼개고 메모리를 그 블록 사이즈로 할당하면 당연히 Internal Fragment가 생김.
      • 문제
        • External fragmentation
          • Job을 로드, 언로드 하는 과정 중에 물리 메모리 전역에 남은 Hole들이 스케터 됨
        • Solution
          • Compaction
          • Paging and Segmentation

Overlay

  • 정의
    • 주어진 시간에 필요한 인스트럭션과 데이터만 메모리에 상주 시킴.
    • 일반적으로 사용자에 의해 구현 됨.
  • 이점
    • 메모리 할당량보다 더 큰 사이즈의 프로세스를 할당 할 수 있음
    • OS로 부터 특별한 서포트가 필요 없음
  • 문제
    • 오버레이 스트럭쳐 설계 및 프로그래밍은 복잡함.

         

Swapping

  • 프로세스가 임시적으로 메모리에서 백킹 스토어에 스왑 아웃 되고 나중에 실행이 필요할 때 메모리로 다시 가져옴.
    (다이나믹하게 메모리 내용이 바뀐 다는 것은 오버레이랑 비슷하지만 프로세스단위로 이루어지며 OS의 도움이 필요한 것이 차이라고 생각 됨)
  • 백킹 스토어(Backing Store)
    • 모든 사용자를 위한 메모리의 이미지들을 수용 하여 카피 할 수 있을 만큼의 빠른 Disk
    • 메모리 이미지에 대해여 디렉트 접근을 제공 해 야함.
  • 스왑 시간의 중요한 부분은 트랜스퍼 타임임, 메모리에서 스왑 아웃된 메모리 양이 직접적인 비율을 차지함.
  • Pending I/O를 통해서는 프로세스를 스왑 하지 못함.
  • 오직 OS 버퍼를 이용하여 IO 오퍼레이션을 실행.

   

Virtual Memory

  • Requirements
    • 멀티플 프로세스를 서포트 해 야함.
      • 각 프로세스는 로지컬리 인접한 메모리 공간을 가지고 있어야 함
      • 각 공간의 사이즈는 가변적임.
    • 할당된 메모리 총량보다 큰 프로세스를 활성화 할 수 있음
      • 모든 메모리 공간이 동시에 사용 되지는 않음
      • 메모리 레퍼런스는 공간적( Spatial) , 임시적 로컬리티를 가짐
    • Protection, Sharing 제공
    • 프로세스 마다 멀티플 Region(세그먼트)를 가짐.
    • 퍼포먼스
      • 메모리 레퍼런스 오버헤드
      • 컨텍스트 스위칭 오버헤드 고려.
  • Virtual Memory Solution
    • VM은 프로그램이 실행 되기 위해서 전체 주소 공간을 요구 하지 않음,
      • 프로그램은 실제 필요한 요구량 보다 적은 RAM에서 동작 할 수 있음.
    • 많은 프로그램들이 한번에 그들의 모든 코드와 데이터를 요구 하지 않음.
      • 브랜치에 의해 한번도 안 불리는 코드나 데이터.
      • 그런 것을 위해 모든 메모리가 할당될 필요가 없음. 런타임 비헤비어에 의해서 OS가 조정 할 수 있음.
    • VM은 서로로부터 프로세스를 분리함.
      • 각 프로세스는 서로 독립된 주소 공간을 소유함.
  • Example
    • 전혀 다른 주소 공간을 쓰고 있기 때문에 두 프로세스 0x8049508 주소의 실제 물리적 위치가 다름.
  • Virtual address
    • 멀티플 프로세스의 메모리를 쉽게 관리 하기 위해 만들어짐.
    • 프로세스는 Virtual Address를 사용 하게 됨, 로지컬 어드레스라고도 부름.
      • Virtual Address는 데이터 참조가 일어나는 실제 물리적 주소와 독립적임
      • OS가 물리적 메모리의 데이터 위치를 결정함.
      • CPU에 의해서 실행되는 인스트럭션들은 Virtual Address를 이슈 함.
      • Virtual Address는 하드웨어와 OS의 도움을 받아서 번역함.
      • 프로세스가 사용하는 Virtual address의 집합이 가상 주소 공간(Virtual address space)을 구성한다.(Comprise)
    • L2P의 방법에는 여러 가지가 있음.
  • 이점
    • 물리 메모리와 사용자의 로지컬 메모리 분리
      • 메인 메모리를 아주 크게 추상화 할 수 있으며 스토리지의 배열을 유니폼(정형화) 할 수 있다.
      • 프로그래머를 메모리, 스토리지의 한계로 부터 자유롭게 한다.
    • 메모리에 완벽하게 있지 않은 프로세스 실행도 허락한다.
      • 프로그램은 물리 메모리 보다 더 클 수 있다.
      • 같은 시간에 더 많은 프로그램이 실행 될 수 있다.
      • 각 사용자 프로그램을 메모리로 Load나 Swap하는 것보다 적은 IO가 발생한다.
      • Protection과 프로세스 생성에 좀 더 효율적인 메커니즘을 제공한다.
  • 단점
    • 퍼포먼스가 떨어 질 수 있다.
  • 구현
    • Demand paging
    • Demand segmentation.
  • 메커니즘
    • Physical 과 Virtual Addressing
    • 파티셔닝, 페이징, 세그멘테이션
    • Page table management, TLB
  • 정책
    • Page replacement algorithms
  • VM은 하드웨어와 OS의 서포트가 있어야 함.
    • MMU
    • TLB
    • Page tables
  •    

'Fundamental Notes > Operating Systems' 카테고리의 다른 글

Virtual Memory #3, Demand Paging and Page Tables  (0) 2008/11/16
Virtual Memory #2, Paging  (1) 2008/11/16
Virtual Memory#1, Introduce Memory Managements  (0) 2008/11/16
Deadlock  (0) 2008/11/16
Synchronization #2  (2) 2008/11/16
Synchronization #1  (0) 2008/11/16

Deadlock Characterization

  • 데드락은 다음 4가지 조건을 simultaneously 만족 해야 함.
  1. Mutual Exclusion
  2. No preemption
  3. Hold an wait
  4. Circular wait

   

Resource Allocation Graph

  • Example deadlock
  • 사이클이 존재 하지만 데드락이 아닌 경우
    리소스 인스턴스가 여러 개일 때, 다시 말해 Mutual Exclusion 을 만족 안 하는 경우임.
  •    

Basic fact

  • 그래프가 사이클을 가지고 있지 않은 경우는 무조건 데드락이 아님
  • 그래프가 사이클을 가지고 있는 경우
    • 리소스 타입당 하나의 인스턴스만 있으면 데드락임.
    • 리소스 타입당 여러 개의 인스턴스를 가지고 있는 경우는 데드락의 가능성만 가지고 있음.

   

Methods for handling deadlocks

  • Deadlock state에 절대 들어가지 않도록 보장하는 방법
    • Prevent
    • Avoidance
  • 시스템이 데드락에 들어갈 수 있지만 이를 리커버하도록 하는 방법
    • After detection
  • 무시하는 방법.
    • 대부분의 OS가 데드락이 일어나지 않을 것이라 생각하고 구현.

   

Deadlock Prevention

  • 리퀘스트가 데드락을 만드는 조건을 만족 하지 못하도록 규제 하는 방법
    • Mutual exclusion
      • 쉐어드 리소스에 대한 요청을 불가능 하도록 규제 하거나
      • 공유가 불가능한 리소스만 hold 할 수 있도록 함.
    • Hold and wait
      • 리소스를 요청하는 프로세스가 다른 어떤 리소스를 hold하지 않도록 하는 것을 보장함
      • 다시 말해 필요한 리소스를 모두 요청하여 가지거나 아니면 아무 것도 가지지 않는 정책을 적용
      • 리소스 utilization이 떨어지고 starvation이 가능하다는 단점을 가지고 있음.
    • No preemption
      • 다른 리소스를 쥐고서 새로운 리소스를 할당 하는 경우에 즉시 할당이 되어지지 않으면 현재 쥐고 있는 모든 리소스를 릴리즈함.
      • Preempted 리소스는 기다리고 있는 프로세스를 위한 리소스 리스트에 할당
      • 프로세스는 요청한 새로운 리소스 이외에 오래된 리소스를 다시 얻을 수 있으면 그때 리스타트 함.
    • Circular wait
      • 정해진 순서대로만 요청, 반납하는 형태
      • 모든 리소스 타입에 대하여 오더링을 두고 각각의 프로세스가 리소스를 요청하면 increasing order에 따라 리소스를 할당.

   

Deadlock Avoidance

  • Basic facts
    • 시스템이 safe state면 no deadlock이다.
    • 시스템이 unsafe state이면 데드락이 일어날 가능성이 있다.
  • Avoidance라는 것은 시스템이 절대 unsafe state로 들어가지 않는 것을 보장한다는 것임.
  • 시스템이 선천적인(Priori) 추가적인 정보를 가지고 있어야 함.
    • 가장 쉽고 유용한 모델은 각 프로세스가 필요로 하는 각 각의 리소스 타입의 maximum number 를 정의 해주는 것을 요구한다.
    • Deadlock avoidance 알고리즘은 동적으로 circular wait 조건을 기다리지 않게 함을 보장하기 위하여 리소스 allocation state를 시험한다.
    • Resource Allocation state는 가용 가능하고 할당된 리소스의 수나 프로세스의 maximum 요구사항에 에 의해 정의됨.
  • Safe Sate
    • 프로세스가 available resource를 요청 했을 때 시스템은 safe state에서 즉각적인 할당이 가능한지 아닌지를 결정해야 함
    • 시스템이 safe하다는 것은 시스템에 모든 프로세스의 safe 시퀀스가 존재한다는 것이다.
    • 각각의 Pi에 대하여 Pi가 여전히 현재 가용 가능한 리소스와 Pj에 (j < i)의해 잡혀져 있는 리소스에 의해서 request가 만족 될 경 우 시퀀스 <P1, P2, …, Pn> 가 safe함 ( 다시 말해, previous 프로세스가 잡고 있는 리소스를 요청 하는 경우는 circular wait이 될 수 없음)
      • 프로세스 Pi가 즉시 필요로 하는 것이 아니라면 PiPj가 끝이 날때까지 기다릴 수 있음
      • Pj가 끝이 났을때, Pi는 리소스를 얻어서 실행하고 할당된 리소스를 반환하고 종료 될 수 있음.
      • Pi가 종료 되면 Pi+1 프로세스는 필요로 하는 리소스를 얻을 수 있게 됨.
      •    

      •    

'Fundamental Notes > Operating Systems' 카테고리의 다른 글

Virtual Memory #2, Paging  (1) 2008/11/16
Virtual Memory#1, Introduce Memory Managements  (0) 2008/11/16
Deadlock  (0) 2008/11/16
Synchronization #2  (2) 2008/11/16
Synchronization #1  (0) 2008/11/16
CPU Scheduling  (2) 2008/11/16