운영체제 관련 글 순서
- 프로세스란
- 쓰레드
- CPU 스케줄링
- 동기화 툴
- 동시성 제어 예제
- 데드락
- 주 메모리
- 페이징과 스와핑
- 가상 메모리와 디맨드 페이징
- 페이지 교체 알고리즘(FIFO, OPT, LRU), 쓰레싱, working set
가상 메모리란
물리적 메모리의 한계를 극복하기 위한 기법.
가상메모리의 장점
- 실제 메모리 크기에 제약받지 않음.
- 파일,라이브러리 공유 및 프로세스 생성 시에도 유용하게 사용됨.
- 응답 시간 유지, CPU 이용률, 처리율 상승
- 동시에 많은 프로그램을 실행 시킬 수 있게 되고, 이에따라 위와 같은 장점이 나타남.
- SWAP에 필요한 입출력이 줄어들어 실행이 빨라짐(context switch, kernel 개입 최소화)
가상 메모리 구조
- 무한대의 virtual Memory 에서 각각의 프로세스를 동일한 크기로 할당
- 리눅스의 경우 프로세스 당 4GB의 가상 메모리(0~3 사용자 영역, 3~4 커널 영역)
- 각각 프로세스의 map(페이징기법에선 page table)을 통해 실제 메모리 사용
- 사용하지않는 것은 backing store(HDD 등)로 swap out해두었다가 사용할때 swap in
가상 메모리 주소 공간
- 프로세스가 메모리에 저장되는 가상 공간
- 논리 주소(Logical address)를 사용하여 표현
가상 메모리의 공유
- 2022.01.07 - [CS/OS(운영체제)] - 페이징과 스와핑 에서 얘기했던 Shared Pages
- 가상공간을 통해 각각의 논리 주소로 실제 주소를 참조하여 같은 메모리(라이브러리 등)를 공유 가능
- (같은 페이지를 공유한다고 설명하는데, 같은 프레임이라고 생각하면 이해하기 편할 듯 싶다)
Demand Paging
요청이 들어왔을때, 메모리에 데이터를 적재하는 것.(실제 메모리 적재)
페이징 관련 참조:
- Pasing된 가상 메모리에서 page table을 참조하여 물리 주소 사용
- (리눅스 환경에선 4kb로 페이징되어 있음.)
- page table엔 유효-무효비트(valid-invalid bit)를 통해 접근 가능 여부를 판단 가능
Demand paging은 요청이 들어왔을때 pasing하여 물리 주소를 참조하는데,
이때 fage fault가 일어나면 운영체제가 해당 페이지를 물리주소에 적재한다. 3
Page Fault 시 처리
- Page 접근 시 valid-invalid부터 확인
- valid 시 접근. invalid시 page fault 발생.(interrupt)
- page fault 발생 시 실제 메모리에 적재하는 작업 시행(page in이라고 부름)
- free frame list(링크드리스트구조)에서 free frame을 찾음.
- 운영체제가 backing store에 있는 page를 읽어서 free frame에 할당
- 그에 맞게 페이지 테이블을 수정(프레임번호 할당 및 i -> v)
- 다시 명령어 수행
Pure Demand Paging
- 처음엔 하나의 페이지도 메모리에 적재하지 않는 것. 말 그대로 요청이 들어올때만 적재.
- 메모리를 최대한 효율적으로 사용 가능하지만, 처음에는 요청할때마다 page fault가 일어나서 시간적으로 느리다.
Prepaging
- 프로그램 시행 시 필요할 것으로 판단되는 페이지를 미리 올리는 것.
- Locality of Reference(참조 국부성== 참조 지역성)
- 동일한 값 또는 해당 값과 관련된 저장소에 자주 접근된다는 특성
- 공간,시간,순차 지역성이 있음.
- 공간 지역성: 특정 기억 장소에 대한 접근이 집중적으로 이루어지는 경향이 있다.
- 배열 순회, 함께 선언된 관련된 변수
- 시간 지역성: 최근에 사용했던 기억 장소에 대한 접근이 집중적으로 이루어지는 경향이 있다.
- 순환,서브루틴,스택, 계산과 집계에 사용되는 변수
- 순차 지역성: 데이터가 순차적으로 엑세스되는 경향이 있다.(프로그램 내의 명령어가 순차적으로 구성되어 있음)
- 공간 지역성: 특정 기억 장소에 대한 접근이 집중적으로 이루어지는 경향이 있다.
Demand Pasing의 성능 계산식
- p: page fault 확률
- ma: memory-access time
- page fault time
- 아래 3가지를 더한 시간
- page fault 인터럽트
- page read
- process 재시작
- 아래 3가지를 더한 시간
- 예시
Copy-on-Write
- 공유 페이지가 있을때, write시에 copy하여 나누는 것.
- 2개이상의 process가 읽고 있는건 상관 없음.
- write시엔 문제가 되니 그때 copy로 나누어서 사용하는 메모리를 나눔(page table을 수정)
참조
https://devlibrary00108.tistory.com/642
https://velog.io/@gndan4/OS-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC
https://www.fun-coding.org/virtualmemory.html
https://choijiuen.tistory.com/30
'CS > OS(운영체제)' 카테고리의 다른 글
[운영체제] 페이지 교체 알고리즘(FIFO, OPT, LRU), 쓰레싱, working set (0) | 2022.01.11 |
---|---|
페이징과 스와핑 (0) | 2022.01.07 |
주 메모리(Main Memory) (0) | 2022.01.07 |
데드락(Deadlock) (0) | 2022.01.05 |
동시성 제어 예제(Bounded-Buffer, Readers-Writers (0) | 2022.01.05 |
댓글