SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

파일시스템과 입출력 관리

파일·디렉터리, 할당 방식, inode, 입출력·디스크 스케줄링과 Linux 권한 기초를 학습한다.

예상 읽기 6

1. 파일과 디렉터리

파일은 이름을 가진 관련 데이터의 집합이다. 운영체제는 파일 이름, 유형, 크기, 위치, 소유자, 권한, 생성·수정 시각 같은 속성을 관리한다.

대표 연산은 생성, 열기, 읽기, 쓰기, 위치 이동, 닫기, 삭제이다. 디렉터리는 파일 이름과 파일의 관리 정보 또는 식별자를 연결한다.

  • 단일 단계: 모든 파일이 한 디렉터리에 존재
  • 2단계: 사용자별 디렉터리
  • 트리 구조: 하위 디렉터리를 계층적으로 구성
  • 비순환 그래프: 링크를 허용하되 사이클은 제한

2. 파일 할당 방식

연속 할당

연속된 블록에 저장한다. 순차·직접 접근이 빠르지만 파일 크기 증가가 어렵고 외부 단편화가 생길 수 있다.

연결 할당

각 블록이 다음 블록을 가리킨다. 외부 단편화가 적고 확장이 쉽지만 직접 접근이 느리고 링크 손상에 취약하다.

색인 할당

색인 블록이 파일의 데이터 블록 주소를 모아 저장한다. 직접 접근이 가능하지만 작은 파일에도 색인 공간이 필요하다. UNIX 계열 inode는 파일 메타데이터와 데이터 블록 위치를 관리한다.

3. 빈 공간 관리

  • 비트맵: 각 블록의 사용 여부를 비트로 표시
  • 연결 리스트: 빈 블록을 연결
  • 그룹화·카운팅: 연속 빈 블록 정보를 묶어 관리

4. 버퍼링·캐싱·스풀링

  • 버퍼링: 생산자와 소비자의 속도 차이를 완화하는 임시 저장
  • 캐싱: 다시 사용할 가능성이 높은 데이터를 빠른 저장장치에 보관
  • 스풀링: 프린터처럼 한 번에 하나의 작업만 처리하는 장치의 작업을 디스크 큐에 저장

5. 디스크 접근과 스케줄링

디스크 접근시간은 대체로 다음 요소로 구성된다.

  • 탐색시간: 헤드를 목표 트랙으로 이동
  • 회전지연: 목표 섹터가 헤드 아래로 회전해 올 때까지 대기
  • 전송시간: 실제 데이터 전송

주요 스케줄링은 FCFS, SSTF, SCAN, C-SCAN, LOOK, C-LOOK이다. SSTF는 평균 이동을 줄일 수 있지만 먼 요청이 기아 상태가 될 수 있다. LOOK은 실제 요청이 있는 마지막 위치에서 방향을 바꾼다.

6. UNIX·Linux 파일시스템 기초

  • boot block: 부팅 관련 정보
  • superblock: 파일시스템 전체 정보
  • inode: 파일 유형·권한·소유자·크기·블록 위치 등 메타데이터
  • data block: 실제 파일 데이터

Linux 권한은 읽기 r=4, 쓰기 w=2, 실행 x=1의 합으로 표현할 수 있다. 예를 들어 755는 소유자 rwx, 그룹·기타 사용자 r-x이다.

7. 파일 디스크립터와 열린 파일 구조

프로세스의 파일 디스크립터는 작은 정수이며 커널의 열린 파일 엔트리를 가리킨다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
프로세스 FD 테이블        시스템 열린 파일 테이블         inode
fd 3 ────────────────→ [현재 오프셋, 상태 플래그] ─────→ [권한, 크기, 블록 주소]
fd 4 ────────────────┘

dup()fork()로 같은 열린 파일 엔트리를 공유하면 파일 오프셋도 공유할 수 있다. 반대로 같은 경로를 별도로 open()하면 보통 별도 열린 파일 엔트리와 오프셋을 가진다.

8. inode 직접·간접 블록 계산

블록 크기 4KiB, 블록 주소 4바이트, inode에 직접 포인터 12개와 단일·이중·삼중 간접 포인터가 하나씩 있다고 하자. 간접 블록 하나에는 4096/4=1024개 주소가 들어간다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
직접 영역      : 12 × 4KiB
단일 간접 영역 : 1024 × 4KiB
이중 간접 영역 : 1024² × 4KiB
삼중 간접 영역 : 1024³ × 4KiB

작은 파일은 직접 포인터로 빠르게 접근하고, 큰 파일도 다단계 간접 포인터로 확장한다. “inode에 파일 데이터 전체가 저장된다”는 설명은 잘못이다.

9. 하드 링크와 심볼릭 링크

항목하드 링크심볼릭 링크
가리키는 대상같은 inode경로 문자열
원본 이름 삭제다른 하드 링크가 있으면 데이터 유지끊어진 링크가 될 수 있음
파일시스템 경계보통 넘지 못함넘을 수 있음
디렉터리 대상일반 사용자에게 제한되는 경우가 많음가능

파일 데이터는 링크 수가 0이 되고 열린 참조도 없을 때 실제로 회수된다. 열린 파일을 삭제해도 해당 프로세스가 계속 접근할 수 있는 이유다.

10. 디스크 스케줄링 계산 예제

현재 헤드가 50, 요청 큐가 82, 43, 140, 24라 하자.

  • FCFS 이동량: |50-82|+|82-43|+|43-140|+|140-24| = 284
  • SSTF: 50→43→24→82→140, 이동량 7+19+58+58=142

SSTF가 이 예에서는 이동량을 줄이지만 새 근거리 요청이 계속 들어오면 먼 요청이 기아에 빠질 수 있다. SCAN 계열은 이동 방향과 디스크 끝까지 가는지, 마지막 요청에서 반전하는지 조건을 명확히 확인한다.

11. 파일시스템 일관성과 저널링

메타데이터 갱신 도중 전원이 꺼지면 디렉터리·inode·빈 공간 정보가 서로 모순될 수 있다. 저널링은 변경 의도를 로그에 먼저 기록하고 커밋된 작업을 재생해 복구 시간을 줄인다. 데이터까지 모두 저널링하는지, 메타데이터만 저널링하는지는 모드에 따라 다르다.

fsync()는 응용프로그램의 쓰기가 안정 저장장치에 반영되도록 요청하는 인터페이스이지만 하드웨어 캐시·파일시스템 구현에 따른 세부 보장은 문서 확인이 필요하다.

12. RAID 기초 구분

파일시스템과 RAID는 같은 계층이 아니다. RAID는 여러 디스크에 데이터를 배치해 성능·가용성을 조절한다.

  • RAID 0: 스트라이핑, 빠르지만 중복 없음
  • RAID 1: 미러링, 높은 중복 비용
  • RAID 5: 분산 패리티, 한 디스크 고장 허용
  • RAID 6: 이중 패리티, 두 디스크 고장 허용

RAID는 백업을 대체하지 않는다. 잘못된 삭제·논리 손상도 그대로 복제될 수 있다.

13. 순차·직접 접근과 캐시

연속 할당은 블록 위치 계산이 쉬워 순차·직접 접근 모두 유리하다. 연결 할당은 다음 포인터를 따라가므로 임의의 k번째 블록 접근이 느리다. 색인 할당은 색인 구조를 통해 직접 접근할 수 있지만 색인 블록 자체의 접근 비용과 공간을 고려해야 한다.

최종 확인 문제

  1. 4KiB 블록, 주소 4바이트인 단일 간접 블록 하나가 가리킬 수 있는 데이터 용량을 구하시오.
  2. 원본 파일 이름을 삭제해도 동일 inode를 가리키는 다른 이름으로 데이터가 남는 링크는 무엇인가?
  3. 헤드 40에서 요청 10, 50, 90을 FCFS 순서대로 처리할 때 총 이동 트랙 수를 구하시오.
  4. 파일 이름이 일반적으로 inode가 아니라 디렉터리 엔트리에 저장되는 이유를 링크 관점에서 설명하시오.
  5. RAID 1과 백업을 같은 것으로 볼 수 없는 이유를 한 가지 쓰시오.