'하드디스크'에 해당되는 글 3건

  1. 2010.03.24 메모리 계층(Memory Hierarchy)
  2. 2010.02.05 윈도우 파일시스템(File System) (2)
  3. 2010.02.05 파티션(Partition)의 개념 (2)

메모리 종류 :

1. 메인(Main) 메모리 : 램(RAM) (D램)

2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공

3. 캐쉬(Cache) : S램.  CPU와 램사이에서 중간 저장소 역할

4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등



메모리 계층 구조(Memory Hierarchy) :


메모리들은 프로그램이 실행하는 동안 데이터의 입력 및 출력을 담당한다.

메모리들의 차이는 CPU 와의 거리에서 온다.

CPU와의 거리가 가까울수록 빠르고 용량이 작으며 멀수록 느리고 용량이 크다.(기술과 돈의 문제)

하드디스크에 있는 내용은 프로그램의 실행을 위해 메인 메모리로 이동한다.

메인 메모리에 있는 일부 데이터도 실행을 위해 L2 캐시로 이동한다.

L2 캐시에 있는 데이터 일부는 L1 캐시로 이동한다.

L1 캐시에 있는 데이터중 연산에 필요한 데이터는 레지스터로 이동한다.


반대로 연산에 필요한 데이터가 레지스터에 없으면 L1 캐시를 살펴본다. 없으면 L2캐시 없으면 메인 메모리,

그래도 없으면 하드디스크를 참조한다. 하드디스크에서 데이터를 찾은 후 다시 메인 메모리 L2 캐쉬 L1 캐시를 거쳐

레지스터로 데이터가 들어오게 되는데 이경우 극심한 속도저하가 발생한다.

(참고 :

캐시를 없애 중간단계를 줄이는 것이 속도가 빠르지 않냐 생각할수 있는데
L1 캐시와 L2 캐시에, 연산에 필요한 데이터가 존재할 확률이 90% 이상이다.따라서 캐시는 속도향상에 도움을 준다)



L1 캐시와 L2 캐시 :

시스템의 성능을 좌우하는 클럭속도는 느린쪽에 맞춰진다.

CPU는 고속화되었지만 메인 메모리의 처리속도는 이를 따라가지 못한다.

CPU가 연산을 하기 위해선 데이터를 가지고 와서 연산을 한 후 연산결과를 메모리에 저장한 후에

다음작업을 수행할 수 있다.

따라서 아무리 CPU가 빠르게 연산을 수행한다 하더라도 데이터를 가지오고 저장하는 작업이 느리다면

전체적인 처리속도는 결코 빠를수 없다.

L1캐시는 이러한 레지스터와 메인 메모리간의 속도차이에 의한 성능저하를 막기 위해

메인 메모리의 저장된 데이터 중 자주 접근하는 데이터를 저장한다.

L1 캐시는 CPU 내부에 존재하므로 L1 캐시에서 데이터를 참조할 경우 속도저하는 발생하지 않는다.

하지만 여전히 L1 캐시는 메인 메모리의 모든 데이터를 저장할 수 없기에 L1 캐시에 없는 데이터를

CPU가 요구할 경우 속도의 저하로 이어진다.

따라서 캐시를 하나 더둔다.(L1 캐시에 용량을 증가시키는데ㄷ에도 한계가 있다(돈과 기술))

L2 캐시까지 존재함으로써 메인 메모리에 대한 접근은 더욱 줄어든다.

따라서 병목현상은 L1캐시와 메인 메모리에서 L2 캐시와 메인 메모리로 발생지역이 옮겨지게 된다.



캐쉬(Cache)와 캐쉬 알고리즘 :

템퍼럴 로컬리티(Temporal Locality) : 한번 접근이 이뤄진 주소의 메모리 영역은 자주 접근한다.

스페이셜 로컬리티(Spatial Locality) : 접근하는 메모리 영역은 이미 접근이 이루어진 영역의 근처일 확률이 높다.

캐시 프렌드리 코드(Cache Friendly Code) : 템퍼럴 로컬리티와 스페이셜 로컬리티를 최대한 활용하여
                                                             캐시의 도움을 받을수 있도록 구현한 코드



캐시 알고리즘 :


캐시 힛(Cache Hit) : 연산에 필요한 데이터가 L1 캐시에 존재할 경우


캐시 미스(Cache Miss) : 연산에 필요한 데이터가 L1 캐시에 존재 하지 않을 경우
(참고 : 이경우 L2 캐시를 검사하며 L2 캐시 미스가 발생하면 메인 메모리에서 데이터를 가져온다)


데이터의 이동은 블록 단위로 진행하여 스페이셜 로컬리티의 특성을 성능향상에 활용한다.
(예 : 0x10000 번지의 데이터를 요청하면 0x10000을 포함한 블록 전체가 전송된다)

(참고 : 현재 L2 캐시는 CPU 내부에 존재한다)

메모리 계층 아래로 갈수록 전송되는 블록 크기가 커진다.

아래에 존재하는 메모리에 대한 접근 횟수를 줄여준다.


캐시 교체 정책(Cache's Replacement Policy) :

프로그램이 실행된느 동안 모든 메모리는 항상 채워져 있다.

메모리가 꽉 채워져 있어요 요구하는 데이터를 가지고 있을 확률이 높아지기 때문이다.

이때문에 가지고 있지 않은 데이터를 요구할 경우 메모리가 꽉 찾기 때문에 메모리 블록을 교체해야 한다.

블록 교체 알고리즘은 캐시 교체 정책에 의해 달라진다.
(참고 :

대표적 블록 교체 알고리즘 :
LRU(Least-Recently Used) : 가장 오래 전에 참조된 블록을 밀어내는 알고리즘)

'Windows > _System Programming' 카테고리의 다른 글

StackBasedOverflows-Windows-Part1 (기본 개념)  (2) 2011.06.07
메모리 컨트롤  (0) 2010.03.24
메모리 계층(Memory Hierarchy)  (0) 2010.03.24
MMF(Memory Mapped File)  (0) 2010.03.12
라이브러리(Library)  (0) 2010.03.11
비동기 I/O 와 APC  (0) 2010.03.08
Posted by Dakuo

파일시스템(File System) : 운영체제(OS)가 하드디스크에 데이터를 읽고, 쓰고 찾는, 파일을 관리하기 위한 규칙



FAT32 : File Allocation Table 32 (파일 할당 테이블)

Sector(섹터)를 몇개의 최소 단위로 묶어서 각각의 묶음(클러스터 : Cluster)을 기본단위로 파일을 저장한다.


예를 들어

1MB의 디스크가 있다고 하면

1 Sector = 4096 byte (4kb)

1MB = 1024KB = 4KB*256

즉 섹터수는 256개이다.

FAT32 시스템은 이 256섹터를(2섹터 = 1클러스터로 가정) 클러스터로 묶어서 128 클러스터로 나타낸다.

이 클러스터들에 번호를 붙여서 파일을 저장하고 검색하는 기준으로 삼는다.
(색인이라고 보시면 됩니다)


클러스터 수의 효율 :

클러스터 수 ↑(섹터를 더 많은 클러스터로 나눔)

: HDD의 공간 낭비는 줄어들지만 검사해야할 클러스터(색인)의 수가 많아지므로 그만큼 파일을 읽고 쓰는데 오래걸린다.

클러스터 수 ↓(섹터를 더 적은 클러스터로 나눔)

: HDD의 공간 낭비가 늘어나지만 검사해야할 클러스터(색인)의 수가 적어지므로 파일을 읽고 쓰는데 속도가 향상된다.


(참고 : 클러스터로 대용량을 표현하는데 한계가 있기 때문에 대용량 하드에서는 FAT32 시스템을 사용할 수 없다.
(FAT32 시스템은 1TB(2000GB)까지 지원합니다. (XP는 32GB까지만 지원) 최대 단일 파일의 크기는 4GB)
클러스터는 원래 플로피 디스크를 위해서 만들어진 것이었다

또 클러스터 수가 줄어들면 HDD의 공간 낭비가 심해지는 이유는 

클러수터 수 ↓ -> 클러스터 용량 ↑ 이므로

클러스터 용량이 4KB라고 할때 2KB 파일을 저장하면 이 파일 하나가 4KB의 클러스터를 독점하게 된다.

따라서 저장하고 남은 2KB는 낭비가 되는 것이다)



NTFS : NT File System

윈도우 NT에 기반을 둔 파일 시스템으로 FAT32 시스템에 보안기능, 압축기능, 원격 저장소 기능 등
성능을 업그레이드 시켰다.

FAT32 와 다르게 클러스터를 쓰고 남은자리에 이어서 파일을 저장할 수 있다.

클러스터 크기도 FAT32보다 작을수 있어(HDD공간 낭비↓  , 속도↓) 보다 HDD를 효율적으로 사용할수 있다.
(클러스터 수와 속도의 관계는 여전합니다)

160억GB의 용량을 지원한다(이론상). 파일크기는 제한이 없다.
(클러스터의 용량이 부족하면 다음 클러스터에 이어서 저장할 수 있으므로)

Window XP 부터 사용 가능하다.

Posted by Dakuo
파티션(Partition)이란 쉽게 말하면 방입니다.

하나의 집에(물리적인 하드디스크) 여러개의 방(partition 파티션)을 만드는 것이죠.

방에는 2 종류가 있습니다.

1. 살림을 차릴수 있는 원룸(Primary 주파티션)

2. 잠만 잘수 있는 방(Logical 논리드라이브)



하드디스크(Hard Disk)의 구조를 대략적으로 표현한 그림입니다.


1. MBR : Master Boot Recoder

하드에서 가장 먼저 읽히는 부분이다. 하드디스크의 전체적인 관리를 한다고 볼수 있다.
4개의 파티션을 관리할수 있다.
(참고 : 최대 나눌수 있는 파티션은 주파티션 3 + 확장파티션(논리 4개) = 7개입니다)
 
또 주파티션마다 각각의 부트섹터(BootSector)가 할당되는데 이럴 경우 컴퓨터가 어느곳의 부트섹터를 읽어서 부팅을 해야하는지 모른다. 따라서 운영체제를 설치하게 되면 하드에서 가장 먼저 읽히는 MBR에 자신의 부트레코더(BootRecoder)를 기록하여 자기가 실행되게 된다.


2. 주파티션 : Primary

파티션 앞에 부트섹터가 할당되어서 운영체제를 설치 할 수 있다. 주파티션에 운영체제(OS)를 설치하게 되면 부트 섹터에 부트레코더를 기록하게 되고 MBR에도 기록한다.

2-1 활성 주파티션 : Activate Primary

활성주파티션이란 MBR에 부트 레코더가 기록된 파티션을 말한다.

예를 들어 하나의 하드디스크에 주파티션을 2개 설정한 후 첫 파티션에 XP를 2번째에 Vista를 설치하였다. 이때 각각의 주파티션 부트섹터에는 이 운영체제들의 부트레코더가 기록된다.
이중에 하나는 MBR에 적재되는데 만약 XP 부트레코더가 적재됬으면 이 첫번째 파티션이 활성 주파티션이 된다.(MBR에는 하나의 부트레코더만 기록되므로 활성주파티션은 하나다)


3. 확장파티션 : Extended

논리드라이브(Logical)들을 감싸는 벽이라고 생각하면 된다.
확장파티션은 하나의 물리디스크에 하나만 설정할 수 있으며 4개의 논리드라이브를 가질수 있다.


4. 논리드라이브 : Logical

데이터를 저장할수 있는 드라이브다. 부트섹터가 없으므로 운영체제는 설치할 수 없다.
Posted by Dakuo