-
실습과 그림으로 배우는 리눅스 구조 6장 정리운영체제 2022. 11. 6. 21:15
메모리 계층
- 메모리 장치의 종류
- 레지스터
- 캐시 메모리
- 메모리
- 저장 장치
- 위로 올라갈수록 용량이 작고, 비싸며, 빠르다.
캐시 메모리
- CPU에서 메모리에 접근하는 시간이 길기 때문에, CPU 입장에서는 레이턴시가 발생한다.
- 캐시 메모리 처리는 커널을 통하지 않고, 하드웨어 단에서 처리된다.
- 캐시 메모리를 이용해서 메모리 접근 시간을 고속화 한다.
- 캐시 메모리는 일반적으로 CPU에 내장되어 있지만, 외부에 있는 경우도 있다.
- 캐시 메모리의 값이 변경되는 경우
- 캐시 메모리의 엔트리가 변경되면 더티 플래그가 표시된다.
- 더티 플래그가 기록된 데이터는 나중에 백그라운드 처리로 메모리에 다시 기록된다.
- 캐시 메모리가 가득 찬 경우
- 캐시 메모리에 존재하지 않는 데이터를 추가로 읽으면, 기존의 캐시 메모리 중 하나를 파기한다.
- 비어 있는 자리에 해당하는 주소의 데이터를 채운다.
- 파기하는 데이터가 더티 플래그가 있다면, 메모리 내부의 해당 데이터를 동기화하는 작업이 함께 일어난다.
- 위 작업이 반복되면 스래싱이 발생하여 성능이 크게 감소할 수 있다.
계층형 캐시 메모리
- 계층형 구조를 구성하는 캐시 메모리
- L1, L2, L3 캐시 메모리가 있으며, 번호가 작을수록 빠르다.
- 캐시는 참조의 국소성(Locality of Reference)을 따른다.
- 시간 국소성
- 특정 시점에 접근하는 데이터는 가까운 미래에 접근할 가능성이 높다.
- ex) 반복문
- 공간 국소성
- 특정 시점에 접근하는 데이터는 근처의 데이터 주소에 접근할 가능성이 높다.
- ex) 배열
- 시간 국소성
Translation Lookaside Buffer
- 프로세스가 가상 주소의 데이터에 접근하는 과정
- 커널 메모리 내 페이지 테이블을 참고하여 가상 주소를 물리 주소로 변환
- 이 과정을 Translation Lookaside Buffer를 통해서 고속화할 수 있다.
- 해당 물리 주소로 접근
- 이 과정은 캐시 메모리를 통해서 고속화 된다.
- 커널 메모리 내 페이지 테이블을 참고하여 가상 주소를 물리 주소로 변환
페이지 캐시
- 저장 장치 내의 파일 데이터를 메모리에 캐싱하는 방식
- 메모리에 페이지 단위로 데이터를 저장한다.
- 동작 흐름
- 프로세스가 파일의 데이터를 읽어들임
- 파일의 데이터를 커널의 메모리 내에 있는 페이지 캐시 영역에 복사
- 이후 파일의 데이터를 프로세스 메모리 영역에 복사
- 커널은 자신의 메모리 안에 페이지 캐시에 캐싱한 파일과 범위 등의 정보를 보관하는 관리 영역을 가지고 있다.
- 같은 데이터를 읽을 때, 페이지 캐시에 있는 데이터를 읽는 방식은 저장 장치에 접근하여 읽는 경우보다 빠르다.
- 프로세스에서 데이터 쓰기를 하는 경우
- 커널은 페이지 캐시에 새로운 데이터가 기록되었다는 더티 페이지 플래그를 붙인다.
- 더티 페이지의 내용은 커널의 백그라운드로 처리하여 저장장치 내 파일에 반영된다.
- 메모리가 부족할 때
- 커널이 페이지 캐시를 해제하여 빈 공간을 만든다.
- 더티 페이지가 아닌 페이지를 삭제한다.
- 그래도 부족하다면 더티 페이지를 wrtite back한 후, 페이지 캐시를 파기한다.
- 메모리 부족이 더티 페이지의 write back을 자주 발생시키면, 시스템 성능이 저하된다.
동기화된 쓰기
- 페이지 캐시에 더티 페이지가 있을 때 시스템 전원이 강제로 꺼진다면, 페이지 캐시에 있는 내용들은 모두 사라진다.
- 그래서 중요한 파일의 경우 write() 시스템 콜이 발생할 때마다 페이지 캐시 외에 저장장치에도 동기화 되어 쓰기가 발생하도록 설정할 수 있다.
하이퍼스레드
- 하이퍼 스레딩은 CPU 코어 안의 레지스터 등 일부 자원을 여러 개 두고, 시스템 입장에서 각각 논리 CPU로써 인식되게 하는 하드웨어 기능
- 낭비되는 CPU 자원을 최대한 활용한 기술
- 실제로 CPU의 계산 처리 속도에 비해 메모리 접근 속도는 매우 느리므로 CPU 입장에서는 데이터 전송을 기다리는 시간이 길다.
- 2배의 성능을 내는 것은 아니며, 약 20~30%의 성능 향상을 낼 수 있다.
- 하드웨어 단에서 하이퍼스레드를 끄고 켤 수 있다.
- 하이퍼스레딩을 켰을 때
실제 물리 CPU는 6개이며, 12개의 논리 CPU를 확인할 수 있다.
- CPU 짝 확인하기
논리 CPU2, 3이 CPU 코어 안의 하이퍼스레드 짝임을 알 수 있다.
Reference
실습과 그림으로 배우는 리눅스 구조
반응형'운영체제' 카테고리의 다른 글
실습과 그림으로 배우는 리눅스 구조 8장 정리 (1) 2022.11.13 실습과 그림으로 배우는 리눅스 구조 7장 정리 (2) 2022.11.10 실습과 그림으로 배우는 리눅스 구조 5장 정리 (0) 2022.11.06 실습과 그림으로 배우는 리눅스 구조 4장 정리 (2) 2022.10.30 실습과 그림으로 배우는 리눅스 구조 3장 정리 (0) 2022.10.30 - 메모리 장치의 종류