[OS] 장치 간 속도 차 개선1 - 버퍼 , 스풀 ,캐시 cache
[ 문제점 ]
* cpu는 cpu 내부 버스의 속도를 따르고 (더 빠름) ,
메모리&주변장치는 시스템 버스의 속도를 따르기 때문에
둘 사이의 작업속도의 차이가 문제가 된다
이러한 장치 간 속도의 차를 개선하기위한 여러가지 기능이있다.
[1] 버퍼 buffer
= 바구니
ex. 귤 5개를 하나씩 도마로 옮기기 <<< 바구니에 담아서 한번에 옮기기
- 일정량의 data를 모아서 옮김으로써 속도 차이를 완화하는 장치이다.
*하드디스크 버퍼, 동영상 스트리밍
[2] 스풀 SPOOL
- cpu와 입출력장치가 독립적으로 동작하도록 고안된 sw적인 버퍼
* 프린터기의 스풀러 (문서작업,출력 작업이 독립적으로 동작하도록)
[3] 캐시 cache
1) 정의
- 메모리 & cpu의 속도 차이의 완화를 위해서,
메모리의 데이터를 미리 가져와, 저장해두는 임시 장소
- cpu가 앞으로 사용할 것으로 예상되는 data를 미리 가져다놓음
원하는 데이터 적중 ! -> cache hit !
<-> cache miss
* 컴퓨터의 성능을 향샹시키려면 캐시 적중률이 높아야한다.
2 ) 만약 cache에 있는 데이터가 변경된다면 ?
메모리에 있는 원본 데이터도 변경되어야한다!
방법 #1. 즉시 쓰기
Write through
= 캐시에 있는 data가 변경되면 이를 즉시! 메모리에 반영
*단점*
계속 왔다갔다 해야해서 성능이 느려짐
*장점*
갑작스런 정전에도 데이터를 잃어버리지않음
방법 #2. 지연 쓰기
write back
=변경된 내용을 모아서 주기적으로 반영
+) 캐시 상에서 컴퓨터의 성능을 향상시키는 방법 1
[ 방법 1 ]
캐시의 크기 늘리기
= but 이 방법은 비쌈
[ 방법 2 ]
locality 이론
앞으로 많이 사용될 데이터 가져오기
= 가까운 데이터가 사용될 확률이 높겠지..?
+) 컴퓨터의 성능을 향상시키는 다른 방법 2
[ 방법 1 ] 저장장치로 느린 하드디스크 대신 SSD 사용
[ 방법 2 ] 메모리를 하드디스크만큼 확장
[ 방법 3 ] 캐시를 늘려서 캐시 적중률을 높임
.
.
하지만 이것은 비싸다
빠른 속도와 큰 용량을 적당한 가격으로 어떻게 성능을 향상시킬 수 있을까?
.
.
"저장장치의 계층구조"
1) 정의
- 속도가 빠르고, 비싼 저장장치
= cpu와 가까운 쪽에 두자 (ex. 레지스터와 캐시)
- 싸고, 용량이 큰 저장장치는 반대쪽에 두자 (ex. 하드디스크)
2) 문제점
계층구조는 중복되는 데이터의 일관성을 유지하는 것이 문제이다.
CPU가 캐시에 저장된 데이터를 변경하면 메모리의 해당 주소에 있는 데이터도 갱신되어야하는데,
이때 지연쓰기의 경우 문제가 된다.