메모리 계층
레지스터, 캐시, 메모리, 저장장치
위로 갈수록 속도가 빠르지만, 단위 공간 당 가격이 비싸고 용량이 적다.
아래로 갈수록 속도가 느리고, 단위 공간 당 가격이 싸고 용량이 많다.
휘발성 : 전원이 나가면 데이터가 사라진다.
비휘발성 : 전원이 나가도 데이터가 사라지지 않는다.
CPU는 바이트 단위로 접근 가능한 매체이어야 접근이 가능하다.
Primary : CPU가 직접 접근해서 실행 가능한 매체(Executable) - 바이트 단위
하드디스크의 단위는 섹터 단위로 접근할 수 있어 CPU가 접근하지 못한다.
Secondary : CPU가 직접 접근하지 못하는 매체 - 섹터 단위
레지스터 : 휘발성, 작은 메모리, 속도는 가장 빠름, 용량은 가장 적음
캐시메모리 : L1, L2, 캐시 / L3 캐시도 존재함
주기억장치(Main Memory) : RAM
보조기억장치(Magnetic Disk) : HDD, SDD, 비휘발성, 기억 용량이 가장 많음
👉 계층 간의 전달이 있는 이유는 경제성 때문이다.
게임 실행 시 '로딩 중'은 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않음을 의미한다.
캐시메모리 Cache Memory
CPU와 메인 메모리의 속도 차이를 완충하기 위한 존재
- 빈번히 사용되는 정보를 캐시에 선별적으로 저장(캐싱기법) → 시스템 성능 높임
- CPU가 필요한 데이터를 메인 메모리에서 찾기 전에 캐시에서 먼저 찾아서 시스템 성능을 좋게 할 수 있음
*CPU와 가장 가까울수록 자주 사용하는 정보를 저장
가상메모리 virtual memory
가상 메모리는 메모리 관리 기법 중 하나
메인 메모리나 디스크는 작은데 가상 메모리는 크게 설정된 것을 볼 수 있듯이,
실질적인 메모리보다 좀 더 크게 보이게 해서 물리적 메모리 구조를 보완하고 마치 큰 메모리를 기반으로 멀티태스킹을 할 수 있게 함
* 메모리는 주소를 기반으로 접근하는 매체이다.
- 가상(논리적) 주소 logical address : 가상적으로 주어진 주소
CPU가 실제로 보는 주소이며 프로세스마다 독자적으로 가지고 있는 주소공간
- 실제(물리적) 주소 physical address : 실제 메모리상에 있는 주소
프로그램이 실행되려면 물리적인 메모리 어딘가로 올라가야 됨
Q. 가상 메모리와 실제 메모리랑 매핑이 되어야 하는데 어떻게 가능하냐?
A. 변환해주는 아이는 MMU라는 메모리 관리 장치를 통해 가능하고, 그래서 사용자는 실제 주소를 의식할 필요없이 프로그램을 구축할 수 있다. MMU가 가상 주소를 기반으로 실제 주소를 찾아줌
Q. 어디에 매핑되어 있냐?
A. TLB! 또는 페이지 테이블!
페이지 테이블이라고 가상 주소와 실제 주소가 매핑된 곳이 있음
MMU가 가상 주소 기반으로 실제 주소로 변환하는데 그때, TLB라는 캐싱 계층의 작은 페이지 테이블을 거쳐서 확인 후에 없으면
페이지 테이블로 가서 변환한다.
스와핑 Swaping
실제 RAM에는 없는데 가상 메모리에 있는 현상
그래서 해당 데이터나 코드에 접근 시 페이지 폴트가 발생한다.
그 경우에 스와핑을 통해 마치 페이지 폴트가 발생하지 않은 것처럼! 해결해준다.
그렇다면, 스와핑이 무엇이냐!
메모리의 당장 사용하지 않는 영역을 하드디스크(보조기억장치)로 옮기고, 하드디스크의 일부분을 "마치 메모리처럼" 불러와 쓰는 것
페이지 page : 가상 메모리를 사용하는 최소 크기 단위
프레임 frame : 실제 메모리를 사용하는 최소 크기 단위
Page Fault
프로세스의 주소 공간에는 존재하지만 실제 메인 메모리(RAM)에는 존재하지 않는 현상
invalid page에 접근 시 발생한다!!
1. CPU가 물리 메모리를 확인해 해당 페이지가 없으면, trap을 발생해서 운영체제에게 알린다.
2. 운영체제는 CPU를 멈춘다.
3. 운영체제는 페이지 테이블을 확인해 가상 메모리에 페이지가 존재하는지 확인하고,
- 없으면 프로세스를 중단하고
- 물리 메모리에 비어 있는 프레임이 있는지 찾고, 물리 메모리에도 없으면 스와핑이 발동한다.
4. 비어있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화한다.
5. 중단되어 있던 CPU를 다시 동작시킨다.
Thrasing 스레싱
페이지 폴트가 너무 자주 일어나는 상황
메모리의 page fault가 너무 높을 때, 컴퓨터 성능 저하를 불러일으킨다.
발생하는 이유 : 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 페이지 폴트가 발생 → 스와핑이 너무 많이 일어나서 발생
해결 방법 :
- 쓰레싱을 막기 위해서는 동시에 실행되는 프로세스의 수를 조절해야 한다.
- 프로그램이 어느정도는 메모리확보를 할 수 있게 해줘야 한다.
- 이 때 사용되는 알고리즘이 Working-Set 알고리즘 , PFF 알고리즘
- HDD → SDD로 바꾸기
스레싱의 굴레
스와핑 발생 → CPU 자주 멈추고 → 이용률 낮아지고 → 운영체제는 CPU의 가용성을 높이기 위해 더 많은 프로세스를 메모리에 올리고 → 페이지 폴트 발생 → 스와핑 발생 → 악순환이 계속 발생
작업세트 working set
프로세스의 과거 사용 이력을 통해 페이지 집합을 만들어서 미리 메모리에 로드
PFF Page Fault Frequency
페이지 폴트 빈도를 조절하는 방법
상한선과 하한선을 만들어서, 상한선에 도달 시에 프레임을 늘리고, 하한선에 도달하면 프레임을 줄이는 것
'⭐️ Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 질문1. 프로세스와 스레드 (0) | 2022.08.27 |
---|---|
[운영체제] 3. 프로그램과 프로세스, 스레드, PCB, Context Switching (0) | 2022.08.21 |
[운영체제] 1. 운영체제와 컴퓨터, 인터럽트, 시스템콜과 modebit (0) | 2022.08.21 |
[운영체제] 28. Disk Management & Scheduling 2 (0) | 2022.08.14 |
[운영체제] 27. Disk Management & Scheduling 1 (0) | 2022.08.14 |