CS/운영체제

[CS/운영체제] 가상 메모리, 캐시메모리

Chae-ri🍒 2024. 10. 7. 19:22

사용자가 프로그램을 실행하면 OS는 디스크에 저장된 데이터를 메모리로 로드한다. 또한 동시에 여러 프로그램을 사용자들을 실행하고 싶어한다.

 

하지만? 메모리 공간은 한정적이기에 이를 극복하기 위해 가상 메모리라는 개념이 등장했다.

 

가상 메모리

프로세스의 일부만 메모리에 로드, 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식

사용자에게는 프로세스 전체가 로드된 것처럼 보이지만 실제로는 일부만 로드된 것이어서 가상 메모리라고 한다.

가상 메모리 예(출처: 기술면접대비 CS전공 핵심요약집)

 

가상 메모리를 사용할 때 장점

- 프로그램이 메모리 크기에 대한 제약⬇️

- 동시에 많은 프로그램을 실행할 수 있으므로 CPU 이용률과 처리율⬆️

- 필요한 영역만 메모리에 로드해 스와핑 횟수⬇️ => 프로그램 실행 속도⬆️

 

요구 페이징

프로세스에서 필요한 페이지만 메모리에 로드하는 방식

초기에 필요한 영역만 로드한 후 다른 영역은 요청이 올 때 메모리에 로드

필요하지 않은 페이지는 디스크에 저장

요구 페이지 예(출처: 기술면접대비 CS전공 핵심요약집)

프로그램을 실행하다가 물리 메모리에 필요한 페이지가 없을 때 이를 페이지 폴트라고 함.

페이지 폴트가 발생 시, 디스크에서 필요한 페이지를 스왑 인해줌(페이지 테이블에서 파악해준다!)

 

페이지 테이블은 페이지에 해당하는 프레임이 존재하면 'v(valid)' 값을, 프레임이 존재하지 않거나 유효하지 않은 주소값이면 'i(invalid)' 값을 반환한다.

페이지 폴트 발생 시 처리 과정(출처: 기술면접대비 CS전공 핵심요약집)

 

① 필요한 페이지가 물리 메모리에 있는지 없는지를 페이지 테이블에서 확인. 페이지 폴트 발생 시, i 반환

② i를 반환하면 OS는 참조하려는 페이지의 주소 값이 유효하지 않은지 아니면 메모리에 로드되지 않은 영역인지 판단한다.

③ 필요한 페이지가 메모리에 로드되지 않은 영역이라면 디스크에서 해당 영역을 찾는다.

④ 디스크에서 해당 페이지 영역을 스왑 인 => 만약 비어 있는 프레임이 없으면 페이지 교체 알고리즘을 호출해 기존에 로드된 페이지를 디스크로 스왑 아웃한 후 새로운 페이지를 로드

⑤ 페이지 테이블에서 새로 로드한 페이지의 값을 v로 변경

⑥ 프로세스를 다시 실행

 

스레싱

동시에 일정 수 이상의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황

일정 수 이상 다중 프로그래밍을 하면 페이지 폴트 수⬆️ => 디스크에서 필요한 페이지를 스왑 인, 불필요한 페이지 스왑 아웃

다중 프로그래밍 정도가 일정 수준 이상 높아지면 페이징이 빈번히 일어나고 CPU 이용률이 떨어지는 스레싱 발생!

 

스레싱 발생 시점(출처: 기술면접대비 CS전공 핵심요약집)

 

+ 스레싱을 예방하려면?

워킹 세트

지역성을 기반으로 자주 사용하는 페이지를 저장해두는 것

이를 기반으로 자주 사용하는 페이지를 물리 메모리의 프레임에 고정 => 페이지 폴트가 빈번하게 발생하는 현상 방지

 

캐시 메모리

CPU와 메인 메모리 간에 데이터 접근 시 속도 차이를 줄이기 위해 사용

CPU에서 메인 메모리에 있는 데이터를 가져올 때 자주 사용하는 데이터를 캐시 메모리에 저장

메인 메모리에 접근하는 것보다 캐시 메모리에 접근하는 것이 더 빠름! 속도 향상!

 

지역성

CPU가 자주 참조하는 데이터가 고르게 분포되지 않고 특정 부분에 몰려 있는 것

캐시 적중률을 높이기 위해 지역성을 바탕으로 데이터 저장

  • 시간 지역성(time locality): 최근 참조한 내용을 다시 참조할 가능성이 높다
  • 공간 지역성(space locality): 실제 참조한 주소 근처의 내용을 참조할 가능성이 높다

 

캐시 메모리의 매핑 방식

캐시 메모리와 메인 메모리를 매핑하는 방식

  • 직접 매핑(direct mapping): 메인 메모리를 일정한 크기로 나누고 각 영역을 캐시 메모리에 매핑. 더 큰 메인 메모리가 나뉘어지고 나뉘어진 n개의 영역이 1개의 캐시 메모리로 매핑(n:1 매핑)
  • 연관 매핑(associative mapping): 메모리 영역을 캐시 메모리에 규칙 없이 매핑. 메모리 영역 -> 캐시 메모리일 때 간단, But 캐시 메모리에서 필요한 메모리 영역을 찾을 때 비효율적.
  • 집합 연관 매핑(set associative mapping): 직접 매핑과 연관 패밍을 결합해 단점 보완, 범용적으로 사용.
728x90

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

리눅스 서버 중간고사 정리  (0) 2024.10.24
[CS/운영체제] 스케줄링, 메모리 관리 정리  (2) 2024.10.02