CS 공부
가상 메모리 본문
효율적인 매커니즘!!무조건 쓴다. 물리적 메모리보다 큰 프로그램일지라도, 전부가 로드되어 있지 않더라도 프로세스를 실행시킬 수 있다. 또한 논리적 주소와 물리적 주소를 완전히 분리시킨다.
Demand paging = 필요할 때만 메모리에 올리는 방식
페이지는 메모리에 올라와있거나 하드디스크에 존재할것이다. 어디에 있는지 구분하기 위해 페이지 테이블의 valid/invalid 비트로 확인한다.
아직 하드디스크에서 swap in 되지 않은 페이지를 요청할 때, Page Fault가 일어남.
- 페이지 테이블의 valid-invalid bit로 메모리에 있는지 확인
- 없어서 page fault가 일어나면 page in
- free frame을 free frame list에서 찾음
- 메인메모리에 할당해주고, 페이지 테이블의 valid-invalid bit를 valid로 갱신해줌
- 다시 명령어를 계속 수행.
Pure Demand Paging vs Prepaging
요청하는 페이지만 로드시킴. 처음에 실행했을 때도 메모리에는 아무 페이지가 없다. 그래서 처음에 계속 page fault 발생 → Prepaging에 비해 효율이 안 좋지만 메모리 절약
Locality of Reference(참조 국부성)
얘땜시 demand paging이 유리함. 보통 특정 페이지만 반복적으로 실행되고,걔네는 page fault가 잘 안일어난다. 나머지는 한 두번 접근하기 때문에 효율에 큰 영향이 없다.
하드웨어의 support
- page table (valid/invalid bit)
- secondary memory(=swap space)
- SSD→플래시 메모리라서 겁나 빠름. swap이 빠르게 된다.
- HDD
- 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 |