본문 바로가기
면접을 위한 CS 전공지식 노트/3장 운영체제

운영체제 : 메모리

by keward 2024. 9. 19.

 

1. 메모리 계층

 

- 레지스터 : CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 기억장치

 

- 캐시 : 데이터나 값을 미리 복사해 놓는 임시 장소, 시스템의 효율성을 위해 사용, 속도가 빠른 장치와 느린 장치 사이에서 속도차에 따른 병목 현상을 완화

 

- 메인 메모리 : 주기억장치로 컴퓨터에서 수치-명령-자료 등을 기억하는 하드웨어 장치

     - RAM : 휘발성 기억장치, 전원이 유지되는 동안 저장되며 어느 위치에서든 똑같은 속도로 접근하고 읽고 쓸 수 있음

     - ROM : 고정 기억 장치, 전원이 종료되도 내용 유지, 초기 부팅 관련 부분이나 프린터 작동에 관여하는 펌웨어 명령 저장

 

- 하드 디스크 : 비휘발성으로 순차접근이 가능한 보조 기억 장치, 용량 대비 가격이 가장 저렴 

 

메모리 계층 구조의 필요성

1. 더 빠른 접근과 처리속도 증가

캐시 메모리에 해당 데이터가 있으면 더 빠르게 접근 가능

2. 비용의 효율성

캐시는 비싸고 램은 저렴함 계층이 존재하고 캐싱 때문에 비용을 좀 더 효율적으로 사용 가능

3. 자원의 효율적 사용

자주 접근하는 데이터는 빠른 메모리, 덜 접근하는 데이터는 느린 메모리에 저장하여 자원을 효율적으로 사용

 

캐시의 지역성

캐시의 적중율을 극대화 하기 위해 지역성을 사용하며 프로그램은 모든 코드나 데이터를 균등하게 접근하지 않는다는 특성을 가진다.

 

- 시간적 지역성 : 최근에 참조한 주소의 내용을 다음에 다시 참조되는 특성이다.

메모리 상의 같은 주소에 여러 차례 읽기/쓰기를 수행할 경우 상대적으로 작은 캐시를 사용하여 효율성을 극대화시킬 수 있다.

 

- 공간적 지역성 : 기억장치 내에 서로 인접하여 저장되어 있는 데이터들이 연속적으로 액세스될 가능성이 높아지는 특성이다.

CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져온다.

이 때 메모리 주소를 오름차순이나 내림차순으로 접근하면 캐시에 이미 저장된 같은 블록의 데이터를 접근하게되어 효율성이 향상된다.

 

캐시히트와 캐시미스

 

캐시히트 : CPU가 액세스하려는 데이터가 이미 캐시에 적재되어있는 상태

캐시미스 : CPU가 액세스하려는 데이터가 캐시에 없어 주기억장치(메모리)로부터 가져와야하는 상태

캐시적중률이 높을수록 CPU의 메모리 접근 횟수를 줄일 수 있어서 CPU의 처리속도가 향상된다.

 

웹 브라우저의 캐시

사용자의 커스텀 정보나 인증 모듈 관련 사항들을 저장한다.

- 쿠키 : 만료기한이 있는 Key-Value 저장소이다. 보통 서버에서 만료기한을 설정한다.

 

- 로컬 스토리지 : 만료기한이 없는 Key-Value 저장소이다. 클라이언트에서만 수정 가능하고 웹 브라우저를 닫아도 유지된다.

 

- 세션 스토리지 : 만료기한이 없는 Key-Value 저장소이다. 클라이언트에서만 수정 가능하고 탭 단위로 생성되고 탭을 닫으면 삭제된다.

 

 

2. 메모리 관리

가상 메모리

메모리가 실제 메모리보다 많아 보이게 하는 기술로 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다.

가상주소로 메모리에 접근 시도시 MMU(Memory Management Unit)이 가상주소를 물리주소로 변환하여 실제 RAM으로 매핑해준다.

 

- 페이지 폴트 : 프로세스가 참조하려는 가상 메모리 페이지가 현재 물리적 메모리에 로드되어 있지 않은 상태(인터럽트)

 

- 스와핑 : 페이지 폴트 발생 시 메모리에서 당장 사용하지 않는 영역을 하드로 옮기고 하드의 일부분을 메모리처럼 사용하는 방식

 

- 스레싱 : 페이지 폴트가 증가하여 CPU 이용률이 급격히 떨어지는 현상

    해결 방법

    - Working Set : 지역성을 이용하여 페이지 집합을 만들어 미리 메모리에 올리는 방법

    - Page Fault Frequency : 상한선과 하한선을 만들어 메모리에 올라가 있는 프로세스 수를 조절

 

메모리 할당

데이터를 저장할 공간을 적정하게 나누는 작업으로 연속 할당과 불연속 할당이 있다.

 

연속 할당 : 프로세스가 메모리에 올라갈 때 물리적 메모리의 한 곳에 연속적으로 적재하는 방식

    - 고정 분할 방식 : 고정된 크기로 분할하여 할당, 내부 단편화 발생

    - 가변 분할 방식 : 프로그램의 크기에 맞게 메모리를 분할하여 할당, 외부 단편화 발생(최초적합, 최적적합, 최악적합)

 

불연속 할당 : 하나의 프로세스가 메모리의 여러 위치에 분산되어 올라갈 수 있는 메모리 할당 기법

    - 페이징 기법 : 고정된 크기의 페이지 단위로 나누고 메모리의 서로 다른 위치에 프로세스 할당(내부단편화 발생)

    - 세그멘테이션 기법 : code, data, heap, stack 등의 기능 단위로 물리 메모리에 할당하는 기법(외부단편화 발생)

    - 페이지드 세그멘테이션 : 세그멘테이션을 기본으로 하되 다시 동일한 크기의 페이지로 나누어 물리 메모리에 할당하는 기법

 

 

페이지 교체 알고리즘

- FIFO

가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법

 

- LRU

가장 오랫동안 사용하지 않은 페이지를 교체

각 페이지에 접근한 시각을 기록하고 접근 시간이 적은 페이지를 교체한다.

 

- LFU

가장 참조 횟수가 적은 페이지를 교체

사용된 횟수를 세어 횟수가 가장 적은 페이지를 교체한다.(사용 빈도가 같은 경우 FIFO나 무작위 방식으로 선정)

 

- NUR

참조 비트와 변경 비트를 이용하여 대상 페이지를 선정하여 교체

같은 비트의 페이지가 여러 개라면 무작위나 FIFO 방식으로 선정, 모든 페이지가 (1, 1)이라면 모든 페이지 비트를 (0, 0)으로 초기화한다.

NUR 알고리즘은 각 페이지의 참조를 유지 및 업데이트하고 비트를 수정하기 위한 오버헤드가 필요하기 때문에 실제로는 LFU, NUR보다 구현이 비교적 쉽고 오버헤드가 적은 LRU 알고리즘을 많이 사용한다.

(위의 작업은 읽기 작업이므로 변경 비트가 1이 되는 경우는 없다.)

 

 

Q. MVC 패턴을 설명하고 MVVM 패턴과의 차이는 무엇인지 설명해보세요.

 

모델-뷰-컨트롤러로 이루어진 패턴으로 모델은 데이터 관리와 데이터베이스와의 상호작용 처리, 뷰는 사용자 UI를 구성하며 모델에서 가져온 데이터를 표시, 컨트롤러는 모델과 뷰간의 상호작용을 관리하며 사용자입력을 처리하여 모델의 데이터를 업데이트하고 뷰에 반영합니다.
MVC 패턴은 유지보수성과 확장성을 높일 수 있다는 장점이 있으나 View와 Model 사이의 의존성이 높다는 단점이 있습니다.
MVVM 패턴은 MVC 패턴에서 뷰와 컨트롤 사이에 뷰모델이 추가된 형태로 뷰와 모델간의 데이터 바인딩을 쉽게 구현할 수 있어 MVC 패턴의 뷰와 모델 간의 의존성 문제를 해결할 때 MVVM 패턴을 사용합니다. 

 

Q. 싱글톤 패턴에 대해 설명하고 싱글톤을 사용했을 때의 문제점에 대해 설명해보세요.


싱글톤 패턴은 애플리케이션이 시작될 때 어떤 클래스가 최초로 한 번만 메모리를 할당하고 그 해당 메모리에 인스턴스를 만들어 사용하는 디자인패턴입니다.
만약 싱글톤 인스턴스가 혼자 너무 많은 일을 하거나 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지게 되고 개방-패쇄 원칙에 위배되어 유지보수와 테스트가 힘들어지게 됩니다. 또한 멀티 스레드 환경에서 동기화 처리를 하지 않으면 인스턴스가 2개가 생기는 문제가 발생할 수도 있기 때문에 반드시 싱글톤이 필요한 상황에 사용하는 것이 좋습니다.