파일 처리론에 앞서 파일 구조에 대해서 서술하겠습니다.
파일 구조란, 파일에 저장할 데이터 표현 방법으로 데이터 접근 연산의 정의를 뜻합니다. 여기서 말하는 연산은 데이터의 판독, 기록, 수정, 검색 등을 의미합니다.
파일은 크게 물리적 파일과 논리적 파일로 나눌 수 있습니다. 물리적 파일은 파일 탐색기로 찾아지는 모든 데이터를 의미하고, 논리적 파일은 물리적 파일 하나를 프로그램 상에 연결할 때, 그 연결점을 의미합니다.
EX)
File in_f = new File("../DATA/test.txt"); 여기서 파일 변수 in_f가 논리적 파일, File 함수의 인자로 들어간 경로의 test.txt가 물리적 파일이라고 할 수 있습니다.
파일들은 직접 접근 저장장치인 DASD나 순차접근 저장장치인 SASD 혹은 CD-ROM,USB 등의 저장장치에 저장됩니다.
이중 디스크에 대해서 먼저 알아보겠습니다.
디스크는 하나 이상의 플래터의 각 면에 존재하는 일련의 트랙들에 데이터가 저장됩니다. 여기서 트랙은 디스크에서 주소로 접근 가능한 가장 작은 단위인 섹터로 구성됩니다. 지름이 같은 트랙들을 통틀어 실린더라고 부릅니다.
디스크의 용량은 다음과 같이 구할 수 있습니다.
먼저 실린더 용량을 구하기 위해 트랙용량을 구합니다.
(sector / track) * (bytes / sector) [트랙당 섹터수 * 섹터 당 byte]
구해진 트랙 용량을 바탕으로 실린더 용량을 구합니다.
(tracks / cylinder) * 트랙 용량 [실린더 당 트랙수 * 트랙 용량]
실린더 용량을 토대로 디스크의 용량을 구합니다.
cylinder * 실린더 용량 [실린더 수 * 실린더 용량]
파일은 논리적 관점에서는 바이트 스트림으로 연속되어 있지만, 물리적 관점에서는 섹터, 트랙, 실린더 상에 저장되어 연속되지 않을 수 있습니다.
따라서 읽은 섹터의 데이터 값을 RAM에 적재하는 속도가 디스크의 회전 속도보다 느리기 때문에 논리적으로 연속된 섹터들을 위한 물리적인 섹터들의 거리를 인터리빙 계수로 정의해둡니다. 따라서 하나의 섹터를 읽고 헤드가 다음 섹터를 읽을 때 다시 한번 더 회전하는 일이 적어지도록 인터리빙 계수로 조절합니다.
파일 관리자는 파일의 논리적 공간을 물리적 위치로 연결(Mapping)합니다.
이때 저장되는 파일은 일련의 클러스터로 이루어집니다. 클러스터는 물리적으로 연속된 고정 개수의 섹터들로 구성되는데 이러한 이유로 클러스터 내에서는 탐색이 불필요합니다. (물리적 연속이기 때문에) 클러스터 말고도 물리적으로 연속된 가변 개수의 섹터들로 구성되는 익스텐트도 있지만, 둘다 내부 단편화 혹은 외부 단편화의 장단점을 가지고 있습니다. (단편화는 OS에서 다룬 MFT, MVT 에서 개념 확인가능)
'Computer Science > 파일처리' 카테고리의 다른 글
레코드와 필드 (1) | 2024.03.08 |
---|---|
UNIX Kernel (0) | 2024.03.08 |
Write (0) | 2024.03.07 |
테이프와 CD-ROM (0) | 2024.03.07 |
파일의 저장 및 읽기 (0) | 2024.03.06 |