파일과 디렉토리의 개념
운영체제는 보조기억장치(예: HDD, SSD) 위에 저장된 데이터를 효율적이고 안전하게 관리하기 위해 파일 시스템을 사용한다. 파일(File)은 연속된 바이트(byte) 집합으로, 프로그램이나 사용자 데이터를 논리적으로 묶은 단위이다. 디렉토리(Directory)는 파일을 계층적으로 정리하는 구조물로, 파일을 식별하고 조직화하는데 도움을 준다.
디렉토리 구조 (Directory Structure)
- 단일 디렉토리 구조(Single-Level Directory): 모든 파일이 하나의 디렉토리에 모여있는 단순 구조이다. 파일명이 충돌하기 쉽고, 대규모 시스템에서는 관리가 어렵다.
- 2단계 디렉토리 구조(Two-Level Directory): 사용자별로 고유한 디렉토리를 제공한다. 다른 사용자의 파일명과 충돌을 방지할 수 있지만, 계층화된 조직이 어렵다.
- 트리 구조 디렉토리(Tree-Structured Directory): 가장 일반적이며, 디렉토리 안에 다른 디렉토리를 포함할 수 있어 계층적 구조를 형성한다. 검색, 관리, 분류가 용이하다.
- 비순환 그래프(ACYCLIC Graph) 및 일반 그래프 디렉토리 구조: 파일이나 디렉토리를 여러 디렉토리에서 참조할 수 있지만, 사이클이 형성되지 않도록 관리해야 한다.
Inode (아이노드) 구조
유닉스 계열 파일 시스템은 Inode라는 자료구조를 사용한다. Inode는 파일에 대한 메타데이터(파일 크기, 소유자, 그룹, 접근 권한, 파일 생성 및 수정 시간, 실제 데이터 블록의 위치)를 담고 있다. 파일명은 디렉토리에 저장되며, 디렉토리는 파일명과 Inode 번호를 매핑한다.
Inode를 통해 파일의 물리적 위치(블록 정보)를 알아낼 수 있으므로, 디렉토리 검색 시 파일명을 Inode 번호로 변환한 뒤, Inode를 참조해 실제 데이터에 접근한다. 이를 통해 파일명과 데이터 배치를 분리하여 효율적인 파일 관리와 빠른 검색을 가능하게 한다.
파일 접근 방식
파일 접근 방식은 파일 내 데이터에 접근하는 방법으로 나뉜다.
-
순차 접근(Sequential Access)
파일을 순서대로 읽거나 쓰는 방식이다. 초기 테이프 기반 시스템이나 단순 텍스트 파일 처리에 많이 사용된다. 순차 접근은 연속적인 처리에는 단순하고 효율적이지만, 특정 위치로 곧바로 이동할 수 없어 임의 접근에 비효율적이다. -
직접 접근(Direct Access)
파일을 레코드 단위로 나누고, 원하는 레코드 번호를 직접 지정하여 접근한다. 디스크와 같이 블록 단위 접근이 가능한 매체에서 주로 사용되며, 특정 위치로 바로 점프할 수 있어 검색에 유리하다. -
인덱스 접근(Indexed Access)
별도의 인덱스 블록을 두어, 인덱스가 레코드나 블록의 위치 정보를 제공한다. 특정 데이터로 빠르게 점프할 수 있으며, 순차 접근과 직접 접근의 장점을 결합한 구조다. 다만 인덱스를 관리하기 위한 추가적 공간과 관리 오버헤드가 발생한다.
디스크 스케줄링(Disk Scheduling)
디스크 스케줄링은 디스크 헤드가 어떤 순서로 블록을 읽고 쓸지 결정하는 알고리즘이다. 디스크는 물리적으로 회전하는 플래터와 이동하는 헤드로 구성되어 있어, 접근 순서에 따라 디스크 입출력 성능이 크게 달라진다.
-
FCFS (First-Come, First-Served)
요청이 들어온 순서대로 디스크 요청을 처리하는 가장 단순한 방식이다. 구현이 쉽지만, 디스크 헤드가 디스크 전체를 무작위로 왕복할 수 있어 대기 시간이 비효율적으로 길어질 수 있다. -
SSTF (Shortest Seek Time First)
현재 헤드 위치에서 가장 가까운 요청을 우선 처리한다. 헤드 이동 거리를 최소화하여 대기 시간을 개선할 수 있지만, 특정 영역에 집중된 요청이 있을 경우 다른 요청이 기아 상태(Starvation)에 빠질 수 있다. -
SCAN (전방향 스캔) 알고리즘
전형적으로 ‘전동기 엘리베이터’ 알고리즘이라고도 불리며, 헤드가 디스크 한쪽 끝에서 다른 쪽 끝까지 이동하며 만나는 요청을 처리한다. 끝에 도달하면 반대 방향으로 이동하며 요청을 처리한다. 이렇게 하면 SSTF보다 기아 현상을 줄일 수 있다. 변형 알고리즘으로 C-SCAN, LOOK, C-LOOK 등이 있다.
- LOOK 알고리즘: SCAN과 유사하지만, 양 끝까지 가지 않고 더 이상 처리할 요청이 없는 지점에서 방향을 바꾼다.
- C-SCAN(Circular-SCAN): 한 방향으로만 이동하며, 끝에 도달하면 가장 처음 트랙으로 순간이동(혹은 빠른 이동)한다. 이렇게 하면 접근 시간 편차를 균등화할 수 있다.