CS기초 스터디

송현진·2023년 6월 12일
0

CS공부

목록 보기
1/5
post-thumbnail

캐시의 지역성

캐시 메모리는 속도가 빠른 장치와 느린 장치간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리이다. CPU가 메인메모리에 접근하기 전에 캐시 메모리에서 원하는 데이터 존재 여부를 확인하는데,
이때 필요한 데이터가 있는 경우 Hit(적중), 없는 경우 Miss(실패)라고 한다. 요청한 데이터를 캐시 메모리에서 찾을 확률은 Hit Ratio(적중률)이라고 한다. 캐시 메모리의 성능은 적중률에 의해 결정된다.

원리

캐시가 효율적으로 동작하려면, 캐시의 적중률을 극대화 시켜야 한다. 캐시의 적중률을 극대화 시키기 위해서는 캐시에 저장할 데이터가 지역성(Locality)을 가져야한다.

지역성이란, 데이터 접근이 시간적 혹은 공간적으로 가깝게 일어나는 것을 의미한다. 지역성의 전제조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access 하지 않는다는 특성을 기본으로 한다.

즉, Locality란 기억 장치 내의 정보를 균일하게 Access 하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성인 것이다. 이 데이터 지역성은 대표적으로 시간 지역성(Temporal Locality)과 공간 지역성(Spatial Locality)으로 나뉜다.

  • 시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성
    예를 들어 반복문(for, while)을 연상해볼 수 있다.
    반복문을 수행하면 특정 메모리값으로 선언된 부분을 반복하여서 접근하게 된다. 이렇게 방금 전에 접근했던 메모리를 다시 참고하게 될 확률이 높아지는 것이 시간적 지역성이다.
  • 공간 지역성 : 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
    예를 들어 배열(Array)을 연상해볼 수 있다.
    배열은 일정한 메모리 공간을 순차적으로 할당받아 사용하는 것인데, 공간할당을 연속적으로 받게 된다.

선점 스케줄링과 비선점 스케줄링의 차이

선점 스케줄링에서 CPU가 제한된 시간 동안 프로세스에 할당된다는 것입니다. 실행 프로세스는 실행 중간에 중단될 수 있다. 프로세스를 준비 상태에서 실행 상태, 바이스 (vise-verse)로 전환하고 준비 대기열을 유지 관리하는 오버 헤드 를 가지고 있다.
비선점 스케줄링에서 CPU는 프로세스가 종료 되거나 대기 상태로 전환 될 때까지 프로세스에 할당됩니다. 행 프로세스는 실행 도중에 중단되지 않는다. 프로세스를 실행 상태에서 준비 상태로 전환하는 오버 헤드 가 없다.

각각 사용할 때 장단점

선점

  • 장점 : 우선순위가 높은 프로세스를 빠르게 처리할 수 있으며 비선점 스케줄링에 비하여 대기시간이 적다. 적절한 알고리즘을 통해 공정성과 대기시간 최소화, CPU 사용률을 극대화시킬 수 있다.
  • 단점 : 복잡한 알고리즘이 필요하며 구조 설계가 어렵다. 스케줄링 동작에 의해 기본적으로 오버헤드가 있으며 context switch가 자주 발생하므로 응답 시간이 늘어 이 또한 성능에 영향을 미친다.

비선점

  • 장점 : 복잡한 알고리즘이 필요 없으며 context switch 발생이 매우 적으므로 응답 시간이 적다.
  • 단점 : 공정성이 없으며 대기시간이 높다. 또한 우선순위에 의해 무한정 대기가 발생할 수 있으며 시스템에 중요한 작업을 빠르게 해결하지 못할 수 있다. 알고리즘에 따라 인터럽트가 발생하더라도 CPU를 반환하지 않는 경우도 있으며 사용 효율이 줄어든다.

스케줄링 발생 시점

  • 실행상태에서 대기상태로 전환(비선점) : 입출력 요청이나 자식 프로세스의 종료 기다림
  • 실행상태에서 준비상태로 전환(선점) : 인터럽트가 발생할 때
  • 대기상태에서 준비상태로 전환(선점) : 입출력의 종료
  • 프로세스가 종료할 때(비선점)

가상 메모리와 물리(실제) 메모리 차이

가상 메모리란 물리 메모리의 위치를 가상화된 위치로 가리키는 것이다.

가상 메모리 시스템을 사용하기 위해선 가상 주소 / 물리 주소가 필요

가상 주소 : 프로세스가 참조하는 주소

물리 주소 : 실제 메모리 주소

대게 현대의 운영체제에서 사용하는 프로그램들은 고정된 메모리 위치를 가리키게 되면 의도하지 않게 메모리를 공유할 여지가 생기게 된다.
이런 점을 방지하기 위해 고안된 기법이다.

이를 통해 프로그램이 시작되는 시점에 운영체제가 프로그램마다 다른 가상 주소를 부여하여 각 프로그램이 같은 위치를 가리키더라도 실제로는 서로 다른 위치의 물리 주소를 가리키도록 한다,

이러한 특성 때문에 물리적인 메모리의 주소가 연속적일 필요가 없고, 따라서 가상 메모리가 꼭 주 메모리의 영역만을 가리키는 것이 아닌 보조 메모리(하드디스크나 SSD) 등의 위치를 가리키도록 지정할 수 있다.

통상적으로 대부분의 운영체제가 이 기능을 사용하다보니 소프트웨어 적으로 이 기능을 수행하지 않고 MMU라는 하드웨어가 상기 과정을 수행하도록 되어있다.

연속할당과 불연속할당의 차이

메모리의 낮은 주소 영역엔 커널이 상주해있고 메모리의 높은 주소 영역엔 사용자 프로그램이 올라가게 된다. 이때 사용자 프로그램을 할당하는 방식에 따라 연속할당불연속할당으로 나눌 수 있다.

연속할당은 다시 고정 분할 방식과 가변 분할 방식으로 나뉜다.

  • 고정 분할 방식은 물리적 메모리를 미리 몇 개의 분할로 나누어 그 곳에 프로그램을 적재하는 방식이다. 이 방법은 내부, 외부 조각이 모두 발생할 수 있다.
  • 가변 분할 방식은 외부 조각이 발생할 수 있으며 프로그램을 어느 홀에 적재시킬지 결정하는 문제가 추가로 발생

불연속할당은 하나의 프로세스를 여러 물리적 메모리에 나우어 적재하는 방법이며 페이징, 세그먼테이션, 페이지드 세그먼테이션 기법 등이 있다.

profile
개발자가 되고 싶은 취준생

0개의 댓글