CS 공부

가상 메모리 본문

CS공부/운영체제

가상 메모리

kluiop1 2021. 8. 8. 18:47

효율적인 매커니즘!!무조건 쓴다. 물리적 메모리보다 큰 프로그램일지라도, 전부가 로드되어 있지 않더라도 프로세스를 실행시킬 수 있다. 또한 논리적 주소와 물리적 주소를 완전히 분리시킨다.

 

Demand paging = 필요할 때만 메모리에 올리는 방식

페이지는 메모리에 올라와있거나 하드디스크에 존재할것이다. 어디에 있는지 구분하기 위해 페이지 테이블의 valid/invalid 비트로 확인한다.

아직 하드디스크에서 swap in 되지 않은 페이지를 요청할 때, Page Fault가 일어남.

  1. 페이지 테이블의 valid-invalid bit로 메모리에 있는지 확인
  2. 없어서 page fault가 일어나면 page in
  3. free frame을 free frame list에서 찾음
  4. 메인메모리에 할당해주고, 페이지 테이블의 valid-invalid bit를 valid로 갱신해줌
  5. 다시 명령어를 계속 수행.

Pure Demand Paging vs Prepaging

요청하는 페이지만 로드시킴. 처음에 실행했을 때도 메모리에는 아무 페이지가 없다. 그래서 처음에 계속 page fault 발생 → Prepaging에 비해 효율이 안 좋지만 메모리 절약

Locality of Reference(참조 국부성)

얘땜시 demand paging이 유리함. 보통 특정 페이지만 반복적으로 실행되고,걔네는 page fault가 잘 안일어난다. 나머지는 한 두번 접근하기 때문에 효율에 큰 영향이 없다.

하드웨어의 support

  1. page table (valid/invalid bit)
  2. secondary memory(=swap space)
    1. SSD→플래시 메모리라서 겁나 빠름. swap이 빠르게 된다.
    2. HDD
  3. instruction start.... → 연산하는 순간 trap돼서 page out/in 되면 문맥 고려함(??)

Copy-on-Write

데이터를 바꿀 때만 복사한다는 것인데, 부모 프로세스와 자식프로세스가 동일한 페이지를 공유하고 있을 때, 그 안의 변수 값이 바뀐다면??!?

→ 쓸 때 copy시켜서 각각 다른 페이지를 가리키게 한다. fork(), exec() 사용 시에 사용하기도 함

Demanding page? 필요할 때만 페이지를 로드시킨다.

ex) 파일이나 라이브러리를 공유하거나 프로세스를 생성할 때 가상메모리를 사용

 

'CS공부 > 운영체제' 카테고리의 다른 글

파일 시스템  (0) 2021.07.16
주기억 장치 관리 전략(페이지 반입, 배치, 교체 전략)  (0) 2021.07.16
세그먼테이션  (0) 2021.07.16
메모리  (0) 2021.07.15
페이징(외부 단편화, 내부 단편화, TLB)  (0) 2021.07.15