티스토리 뷰
PC에 속해 있는 장치들 중에서 가장 더디게 발전하고 있는 분야 중 하나가 바로 hdd이다. 구형 컴퓨터라면 하드디스크에서 데이터를 불러올 때 엄청난 기계음과 함께 오랜 시간이 걸려야 수행이 되는 경험이 있을 것이다. 지난 번에 소개했던 대로 데이터의 탐색과정은 Access Arm을 이용해서 일일이 Cylinder/Head/Sector를 찾아가는 것이기 때문에 소음과 느린 현상이 발생하는 것이다.
결론적으로 가장 문제가 되는 것은 속도인 것이다. 이를 해결하기 위한 가장 근본적인 방법이 모든 하드디스크를 플래시 메모리로 바꾸는 것이고, 이게 요즘에 등장하고 있는 SSD이다. 물론 점차적으로 가격이 내려가고 있어서 몇년안에는 대중화가 될 듯하다. 아니면 빠른 RAM의 Access Time을 활용한 RAM Disk를 설정하는 것이다. 아니면 취할 수 있는 방법이 시스템 내에 Cache 영역을 잡아서 자주쓰는 데이터를 그안에 넣고 불러오자는 것이다. 그냥 간단하게 말하면 일종의 buffer일텐데 우리가 쓰고 있는 윈도우 운영체제에도 이 File System Cache를 활용한 것이 있다. 그게 바로 ReadyBoost 이다. 일종의 Disk Cache로 usb같은 플래시 메모리를 꽂아두고 그 안에 자주쓰는 데이터를 미리 넣어두는 것이다. 그래서 부팅시 hdd로부터 불러오는 것이 아니라 이 플래시 메모리로부터 불러옴으로써 부팅 속도를 조금이라도 향상시킬 수 있게 하는 것이 주 목적이다. 차후에는 다른 네트워크의 가용 램을 이 ReadyBoost에 적용시킬 수 있도록 발전한다고 한다.
이런 cache 기능을 활용한 제품도 나와있다.
이른바 ReadyCache 인데 용량으로 쓰지는 못하고 ReadyBoost 영역을 이 SSD에 잡고 쓸 수 있게 하는 것이다. 효용성은 글쎄.. 잘 모르겠다.
Cache의 고려사항 중 하나는 Locality of Reference 이다. 이 말은 가까운 영역에 자주 쓰는 것들을 배치하고 자주 안 쓰는 것은 뒤에 놔두는 일종의 지역성 문제인 것이다. 그래서 보통 Cache가 제 성능을 나타내기 위해서는 자주 쓰는 프로그램을 자주 실행시켜줘야 한다. 원리야 자주 쓰게 된다면 같은 메모리 영역을 계속 참고하기 때문에 그걸 따로 Cache에 저장하는 것이다. 다른 하나는 Synchronization인데 hdd에 의존하던 데이터를 cache에서도 의존하기 때문에 서로가 가지고 있는 데이터에 대해서 동기화가 되어 있어야만 제대로 동작시킬 수 있다.
Cache가 가지는 장점은 바로 용량이 적기 때문에 빨리 접근할 수 있다는 것이다. 하지만 적은 만큼 cache에 넣어야 할 중요한 데이터가 있으면 기존에 들어있던 데이터는 밖으로 빼내주는 것이 중요하다. 이때 어떤 데이터를 먼저 빼내주느냐를 결정하는 알고리즘이 필요한데 보통 많이 쓰는 방식이 Least Recently Used(LRU) 방식이다. 말그대로 가장 최근에 쓰지 않은, 즉 Access한지 오래된 데이터를 cache에서 먼저 빼자는 내용이다. 물론 이와 반대 개념인 Most Recently Used(MRU), 빈도수에 따라서 cache 입출력을 결정하는 Least-Frequently-Used(LFU) 방식등 적용할 수 있는 방식이 많다. 참고할 사람은 링크에 자세하게 설명되어 있다.
이책에서도 LRU 방식으로 cache 입출력을 결정하였고,보통 이방식을 적용하면 Cache Hit Ratio(Cache Data와 HDD Data간의 동기성) 가 높게 나온다.
그래서 이책에 있는대로 따라 구현해봤다.
이게 cache를 적용한 결과이다.
앞과는 다르게 Cache를 해제한 결과이다.
RAM Disk도 만드는 부분이 있어서 똑같이 만들어봤다. 아쉬운 것은 이 bochs에서 실제 자원을 이용하는게 아니라 실질적인 체감을 느낄 수 없었다는 것이다.
'Study > OS' 카테고리의 다른 글
[OS] Mint64OS 31절 Symmetric I/O mode (0) | 2013.02.12 |
---|---|
[OS] Mint64OS 29,30절 Multi Processor 활성화 (0) | 2013.02.08 |
[OS] Mint64OS 28절 Serial Communication. (0) | 2013.02.06 |
[OS] Mint64OS 26절 Standard IO Function (0) | 2013.02.05 |
[OS] Mint64OS 25절 File System (0) | 2013.02.02 |
[OS] Mint64OS 24절 HardDiskDrive (0) | 2013.02.01 |
[OS] Mint64OS 23절 Dynamic Memory Allocation (0) | 2013.01.31 |
- Total
- Today
- Yesterday
- ColorStream
- reward
- bias
- Policy Gradient
- Pipeline
- 딥러닝
- End-To-End
- Offline RL
- Off-policy
- Variance
- ai
- Distribution
- 강화학습
- windows 8
- SketchFlow
- PowerPoint
- DepthStream
- dynamic programming
- TensorFlow Lite
- 한빛미디어
- arduino
- Kinect
- 파이썬
- Windows Phone 7
- Expression Blend 4
- Kinect SDK
- Kinect for windows
- RL
- Gan
- processing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |