Program/C#

C# 디스크I/O

사막여유 2024. 12. 7. 23:33
728x90

 

오늘은 언어에 국한되는 특별한 기능은 아니지만 디스크 I/O에 대해서 구체적으로 알아보고자 합니다.

 

디스크 I/O란?

디스크 I/O (Input / Output)은 컴퓨터 시스템에서 가장 기본적이면서도 중요한 개념입니다.

간단히 설명하자면 컴퓨터의 메인 메모리(RAM)와 보조 저장장치 (하드디스크, SSD 등) 사이에서 데이터를 읽고(read)
쓰는 (write) 모든 작업 (물리적 동작)을 의미합니다.

주요 예시를 살펴보자면

1. 하드디스크의 경우
 - 실제로 원판(플래터)이 분당 7200번 정도 회전합니다
 - 디스크 헤드가 물리적으로 움직여서 데이터가 있는 위치로 이동합니다.
 - 헤드가 디스크 표면을 읽어서 전기 신호로 변환합니다.

2. SSD의 경우
 - 전기 신호를 통해 NAND 플래시 메모리 셀에 접근합니다.
 - 데이터를 전자의 형태로 저장하거나 읽어옵니다.

 

회전을 통해 값을 읽어오는 하드디스크와 전기신호를 통해 값을 받아오는 SSD

 

위와같은 물리적인 동작이 일어나는 시간이 I/O 시간입니다

 

코드 예시를 살펴보자면 

 

// 1. FileStream 객체 생성과 동시에 파일 열기
FileStream fs = new FileStream("file.txt", FileMode.Open);

// 또는 File.Open을 사용
FileStream fs = File.Open("file.txt", FileMode.Open);

// 2. 읽기
byte[] buffer = new byte[1024];
int bytesRead = fs.Read(buffer, 0, buffer.Length);

위와같은 코드를 실제로 많이 사용해보셨을 겁니다.

 

FileStream이라고 하는 .NET Framework에서 제공하는 클래스를 사용해서 디스크에 접근을 하게 되는데

FileStream는 Win32 API의 파일처리 함수들 ( CreatFile, ReadFile, WriteFile 등)을 사용하기 쉽게
.NET에서 래핑한 클래스 입니다.

예를들어서 
FileStream의 Read메서드를 호출하면 
1. 내부적으로 Win32의 ReadFile API를 호출
2. 필요한 경우 버퍼 관리
3. 에러처리
4. .NET의 예외 시스템과의 통합

이러한 작업들을 처리해줍니다.

하드디스크의 경우

FileStream에서 FileMode.Open을 통해 실제로 디스크에 접근하게 됩니다.
하드디스크보고 원하는 파일이 있는 위치로 헤드를 이동시키라는 명령인 것 이죠.

이후 Read() 에서 디스크의 특정위치에서 데이터를 읽어,
RAM의 특정 영역(버퍼)으로 데이터를 복사하고 복사된 데이터를 사용 가능한 상태로 만드는 것이죠.

 

SSD의 경우

FileStream에서 FileMode.Open을 통해 실제로 SSD에 접근하게 됩니다.
SSD 컨트롤러에게 원하는 파일이 저장된 메모리 셀의 주소를 찾으라는 명령인 것이죠.

이후 FileStream에서 Read() 메서드를 호출하면 해당 메모리 셀에 전기 신호를 보내 저장된 데이터를 읽어내고,
이를 RAM의 특정 영역(버퍼)로 복사한 뒤 프로그램에서 사용가능한 상태로 만드는 것입니다.

 

 

 

하드디스크는 헤드를 물리적으로 움직여서 데이터를 찾고,
SSD는 메모리 주소만 확인하고 전기 신호로 바로 데이터를 읽습니다.

이 때문에 디스크 I/O가 많이 발생한는 경우
예를들어 데이터베이스서버, 게임, 운영체제등의 경우에는 SSD를 사용하고있습니다.

사실 요즘에는 거의 모든 PC나 노트북에 SSD가 탑재되어있긴하죠.

 

현재 저장장치 사용 트렌드를 보면

1. 일반 사용자
 - 주저장장치 : SSD (운영체제, 프로그램 설치)
 - 보조 저장장치 : HDD (대용량 데이터 저장)
   > 영화, 사진등의 용량 큰 파일들

2. 기업용 서버
 - 고성능필요 : NVMe SSD
 - 대용량 필요 : 엔터프라이즈급 HDD

 

그럼 사실 SSD만을 사용하면 되지않나? 왜 굳이 고장잘나고 느린 HDD를 아직까지 고집하는거지? 라고 생각했다면
아래와 같은 이유 때문에 아직 사용하고 있는 곳들이 많습니다.

1. 가격대비 용량이 훨씬 큼
2. 대용량 저장이 필요한 경우 여전히 경제적
3. 데이터 백업용으로 적합함

사실 일반 개인 사용자들은 클라우드 서비스 사용이 늘어나고, SSD의 가격이 계속 내려가는 추세기 때문에
HDD는 점점 더 틈새시장으로 밀려나고 있기는 합니다.

 

디스크 I/O 성능 최적화

2024.12.08 계속

728x90

'Program > C#' 카테고리의 다른 글

C# 유닛(단위)테스트(2)  (1) 2024.12.09
C# 유닛(단위)테스트(1)  (0) 2024.12.09
C# _ Interface  (0) 2024.11.24
C# 병렬처리3 _ Mutex  (0) 2024.11.23
C# 병렬처리2 _ Monitor  (0) 2024.11.22