캐시 메모리 => CPU와 메모리의 속도 차이로 인한 병목 현상을 완화하기 위해 사용
= 주기억장치와 CPU 사이에 위치. 메모리 계층 구조에서 가장 빠름. 캐시 메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리 속도가 향상된다.
지역성(Locality)
: 데이터의 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것
짧은 시간 동안 제한된 주소 공간의 일부만 참조되는 현상
=> 기억장치 내의 정보를 균일하게 접근하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성
CPU가 기억 장치의 특정 부분에 위치한 데이터나 프로그램 코드를 직접적으로 액세스하는 것
-> 빠른 접근 시간
시간적 지역성(Temporal Locality)
: 한 번 접근된 데이터는 가까운 미래에 다시 접근될 가능성이 높다.
예) 루프 내에서 반복적으로 사용되는 변수
공간적 지역성(Spatial Locality)
: 메모리의 특정 주소에 접근한 후 그 주변 주소에 있는 데이터에 접근될 가능성이 높다. -> 배열, 연속적인 메모리 블록에 접근할 때 종종 발생
순차적 지역성(Sequential Locality)
: 분기가 발생하지 않는 한 명령어는 메모리에 저장된 순서대로 인출/실행된다.
*** 부정확할 수도 있음. 틀렸으면 댓글로 알려주세요)
no locality
: 프로그램이 메모리에 접근할 때 데이터가 무작위로 분포되어 있음 -> cache에 저장된 데이터를 활용하기 어려움 -> cache hit ratio가 낮을 것
moderate locality
: 프로그램이 메모리에 접근할 때 특정한 데이터 집합에 반복적으로 접근하는 경향.
strong locality
: 프로그램이 메모리에 접근할 때 특정한 데이터 집합에 대해 강하게 반복적으로 접근 -> 대부분의 데이터가 cache에 저장되어 있을 가능성 -> hit ratio가 매우 높음
직접 매핑 (Direct mapping)
메모리 주소와 캐시의 순서를 일치시킨다. 지정된 캐싱 라인으로만 매핑. 메모리의 특정 블럭은 특정 캐싱 라인에만 저장. 구현이 빠르지만, 충돌로 인한 잦은 스와핑 발생할 가능성이 높아 성능이 제한될 가능성
연관 매핑 (Associative mapping)
순서를 일치시키지 않는다.
필요한 메모리 값을 캐시의 어디든지 저장
찾는 과정이 복잡하고 느리지만 충돌이 적고 필요한 캐시 위주로 저장하기에 적중률은 높음
집합 연관 매핑(Set-Associative Mapping)
직접 매핑과 연관 매핑의 장점만 취함
순서를 일치시키고 편하게 저장하되 일정 그룹을 두어 그 그룹 내에서 편하게 저장시킴
프로세스(Process)
:쓰레드(Thread)
- 프로세스: 독립적으로 실행되는 프로그램의 인스턴스, 자체적인 주소 공간, 메모리, 데이터 스택 및 다른 시스템 자원을 갖는다.
- 쓰레드: 프로세스 내부의 실행 흐름 단위, 프로세스의 자원과 주소 공간을 공유하면서 실행된다
- 각 쓰레드는 독자적인 스택 메모리를 갖고, 쓰레드는 프로세스 내에서 각각 스택만 할당받고 Code, data, heap 영역은 공유한다.
-> 프로세스 내의 주소 공간이나 자원들은 같은 프로세스 내의 쓰레드끼리 공유하며 실행된다.
자원 공유)
- 프로세스: 각 프로세스는 독립적인 메모리 공간과 시스템 자원을 가지므로, 프로세스 간 자원 공유는
IPC(Inter-Process Communication)
매커니즘을 통해 이뤄진다.- 쓰레드: 같은 프로세스 내의 쓰레드들은 코드, 데이터 및 시스템 자원을 공유한다.
프로세스들 간의 의사소통. 서로 데이터를 주고 받는 행위/ 방법/ 경로 -> shared memory / message passing / semaphore
Single Thread
프로세스 내에서 하나의 메인 스레드 작업만 처리 -> 작업을 차례대로 진행할 수 밖에 없음
Multi Thread
둘 이상 쓰레드를 동시에 실행시키는 기술
문맥 교환(context switching)
을 통해서 각 스레드의 작업을 조금씩 처리하는 방식
single thread
장점)
-> context switching 작업 x, 공용 자원에 대한 접근 제어/자원 접근에 대한 동기화 신경 안써도 됨.
단점)
연산량이 많으면 그 작업이 끝나야 다른 작업을 수행할 수 있음
Multi thread
장점)
사용자에 대한 응답성이 증가 -> 프로그램의 일부분이 중단되거나 긴 작업을 수행해도 프로그램이 계속 수행되어 사용자에 대한 응답성 증가!
프로세스 내 자원/메모리 공유 -> 메모리와 시스템 자원 소모 감소
프로세스의 context switching과 달리 Thread의 context switching은 캐시 메모리 비울 필요가 없어 빠르다.
다중 cpu -> 병렬성 증가
단점)
오버헤드가 클 수 있다.
동기화가 필수적 -> 쓰레드는 데이터와 힙 영역 공유함
참고)
https://blog.skby.net/%EC%A7%80%EC%97%AD%EC%84%B1-locality/
https://zu-techlog.tistory.com/135
https://dar0m.tistory.com/233
https://velog.io/@gparkkii/ProgramProcessThread