Post

10 OS - 파일관리

10 OS - 파일관리

운영체제에서 파일 시스템이란, 디스크 같은 저장 장치에 파일과 디렉터리 구조를 구성하여 데이터를 효율적으로 저장하고 관리하는 체계이다. 사용자는 이러한 논리적 구조를 통해 파일에 접근하며, 내부적으로는 각 파일마다 고유하게 존재하는 i노드(inode)에 저장된 메타데이터(metadata)를 기반으로, 운영체제가 물리적인 저장 장치에서 실제 파일 데이터를 찾고, 다양한 파일 조작 작업을 수행할 수 있도록 함.

01. 파일

1. 파일시스템

  • 파일 시스템은 운영체제가 디스크 같은 보조 저장 장치에 데이터를 저장, 관리, 접근할 수 있도록 정의한 논리적 구조와 알고리즘의 집합이다.
  • 파일은 보조 저장 장치(디스크)에 저장된 이름과 정보의 묶음으로, 프로그램 실행파일 또는 사용자 데이터를 저장하는 단위이다.
  • 데이터는 사용자가 관심 있는 파일의 내용(payload)을 의미

2. 파일시스템의 기능

기능설명
파일 구성사용자가 업무에 적합한 구조로 파일을 구성할 수 있게 지원 (예: 디렉터리 트리)
파일 관리파일의 생성, 수정, 저장, 참조, 제거, 보호 등 기본적인 조작을 지원
보조 기억 장치 관리디스크 등의 저장장치에 파일을 저장할 공간을 할당하고 입출력을 제어
파일 무결성 보장시스템 오류나 전원 장애로부터 데이터를 보호하고, 손상 방지 (예: 저널링)
파일 접근 방법 제공순차 접근, 직접 접근 등 다양한 방식의 접근 제어를 제공
장치 독립성 유지파일명을 통해 장치의 물리 위치와 무관하게 접근 가능 (논리적 추상화)
파일 백업과 복구정보 손실을 대비한 백업/복구 기능 제공
파일 보호접근 권한, 암호화 등을 통해 불법 접근이나 정보 노출 방지
정보 전송사용자 요청에 따라 파일 간 정보 복사 및 이동 기능 제공

3. 파일 시스템 계층 구조 (File System Architecture)

계층명역할예시 및 키워드
응용 프로그램사용자가 직접 사용하는 소프트웨어텍스트 에디터, 브라우저, IDE
논리 파일 시스템사용자 관점의 파일 관리 (경로, 권한 등), 시스템콜 처리open(), read(), ls, 경로 파싱, 접근 제어
파일 구성 모듈파일의 논리 구조를 저장장치 블록으로 매핑파일 → inode → 블록 매핑, 디렉터리 관리
기본 파일 시스템블록 단위 읽기/쓰기 처리, 버퍼 캐시 운영read_block(), write_block()
입출력 제어기 (I/O Control)장치 드라이버 호출 및 제어 블록 준비인터럽트 처리, DMA 제어
장치 드라이버실제 하드웨어를 제어하는 코드SATA 드라이버, SSD 펌웨어 호출 등
저장장치 (Device)물리적인 디스크HDD, SSD, USB 등

4. 파일 시스템 관리 기준

  • 블록 (Block)
    • 디스크는 보통 고정 크기의 블록 단위로 나뉘며 (예: 512B, 4KB), 파일은 이 블록 단위로 저장함.
    • 파일이 저장될 때는 여러 개의 블록에 나뉘어 저장되며, 운영체제는 어떤 블록이 어떤 파일에 속하는지 추적함.
    • 블록 할당 방식 (연속, 연결, 인덱스 등), 버퍼 캐시, 프리 블록 리스트 등
  • 메타데이터 (Metadata)
    • 메타데이터는 파일 시스템의 논리적 구성을 이루는 핵심.
    • 파일 그 자체가 아니라, 파일에 대한 정보를 지칭함.
    • 이름, 생성일, 마지막 수정일, 파일 크기, 퍼미션, 소유자 ID, inode 번호 등
  • 마운팅 (Mounting)
    • 하나의 운영체제 안에 여러 파일 시스템(ext4, NTFS 등)을 사용할 수 있기 때문에, 이를 하나의 계층적 트리에 연결하는 과정이 필요함.
    • mount, umount 명령으로 제어
    • USB를 꽂았을 때 /mnt/usb에 자동 연결되는 것도 일종의 마운트

5. 파일의 개념과 구성

용어설명예시
파일(File)디스크에 저장된 데이터의 논리 단위students.csv, report.docx
블록(Block)디스크의 최소 입출력 단위 (보통 4KB)디스크 I/O는 블록 단위로 수행
레코드(Record)파일 안의 데이터 한 줄 또는 한 항목한 학생의 정보 한 줄
필드(Field)레코드 안의 세부 항목이름, 나이, 학번 등

6. 파일유형

유형설명예시리눅스 명령어로 확인 (ls -l)
일반 파일데이터가 저장된 일반적인 파일.txt, .jpg, .c-rw-r--r---로 시작
디렉터리 파일다른 파일들을 담는 폴더/etc, /home, /usrdrwxr-xr-xd로 시작
특수 파일장치와 입출력용으로 사용하는 파일/dev/sda, /dev/nullbrw-rw----, crw-rw----

7. 파일 디스크립터

계층설명
사용자 관점파일을 열면 정수형 ID(예: 3)를 반환받음. 이것이 바로 파일 디스크립터
프로세스 관점각 프로세스는 자신만의 파일 디스크립터 테이블을 가지고 있음
커널 관점디스크 파일에 대한 실제 정보(inode, 위치, 모드 등)는 커널이 관리함

8. 파일에 엑세스하는 방법

방식명설명사용 예시
순차 액세스(Sequential Access)처음부터 차례로 읽기/쓰기텍스트 파일, 로그파일
직접 액세스(Direct / Random Access)임의의 위치로 점프해서 읽기/쓰기DB파일, 바이너리 파일
인덱스 순차 액세스 (Indexed Sequential Access)인덱스로 위치를 찾아서, 이후 순차 접근대용량 레코드 파일, B+트리 기반 시스템

02. 디렉토리

1. 디렉터리

  • 디렉터리는 파일 시스템에서 파일(또는 다른 디렉터리)의 이름과 그에 해당하는 메타정보(i-node 번호 등)를 저장한 특수한 파일
  • 역할
역할설명
파일 이름과 inode 번호 매핑사용자 친화적 이름을 시스템 내부 번호와 연결
파일 조직관련 파일들을 묶어 관리 (예: 이미지, 문서 따로)
경로 관리트리 구조를 통해 파일 경로 표현
디렉터리 안에 디렉터리디렉터리는 다른 디렉터리를 포함할 수 있어 → 계층적 구조 (트리) 생성

02 디렉터리 구현

  • 선형 리스트 (Linear List)
    • 특징
      • 디렉터리 내의 파일 엔트리를 순서대로 나열한 리스트 구조
      • 각 엔트리는 파일 이름과 inode 번호 등 메타데이터를 담고 있음.
    • 동작 방식
      • 파일 이름을 찾을 때 리스트를 처음부터 끝까지 순차 탐색(선형 탐색)함.
      • 삽입, 삭제는 리스트 내 위치에 따라 다르지만 보통 간단함.
  • 해시 테이블 (Hash Table)
    • 특징
      • 파일 이름을 해시 함수에 입력해 해시 값에 대응하는 버킷(bucket)에 파일 엔트리를 저장하는 구조.
      • 빠른 검색을 위해 설계됨.
    • 동작 방식
      • 파일 이름으로 해시 함수를 계산해 저장 위치 결정.
      • 해시 충돌이 나면 체이닝이나 오픈 어드레싱 기법으로 해결.

03 디렉터리구조

| 구조 종류 | 특징 | 장점 | 단점 | | ——– | —————– | ————- | —————- | | 1단계 디렉터리 | 단일 디렉터리에 모든 파일 존재 | 단순함 | 확장성 낮음, 이름 충돌 가능 | | 2단계 디렉터리 | 사용자별 디렉터리 존재 | 사용자별 이름 충돌 해결 | 사용자간 협업 어려움 | | 트리 구조(주로사용)| 다중 수준 계층적 조직 | 조직적, 확장성 좋음 | 경로 탐색 복잡 | | 비순환 그래프 | 하드 링크 허용, 순환 없음 | 중복 없이 공유 가능 | 관리 복잡 | | 일반 그래프 | 심볼릭 링크 포함, 순환 가능 | 유연성 극대화 | 무한 루프 위험 |

  • 하드 링크는 한 파일을 여러 디렉터리에서 가리킬 수 있게 하는 기능으로, 이런 연결 때문에 트리가 살짝 변형되어 순환은 없지만 하나의 파일이 여러 부모를 가질 수 있는 비순환 그래프 형태가 됨
  • 심볼릭 링크(Symbolic Link, Soft Link) 같은 기능이 포함된 경우인데, 심볼릭 링크는 실제 파일이 아닌 파일 위치를 가리키는 별도의 파일

03. 파일할당

1. 파일의 디스크 할당

  • 연속 할당 (Contiguous Allocation)
    • 파일의 모든 데이터를 디스크에 연속된 블록에 저장
    • 장점: 읽고 쓰기 빠름 (연속이니까 디스크 헤드 이동 적음)
    • 단점: 큰 파일을 위해 연속된 공간을 찾기 어렵고, 파일 크기 변경 어려움
  • 연결 할당 (Linked Allocation)
    • 파일의 각 블록이 포인터로 다음 블록을 가리키는 방식
    • 장점: 조각난 빈 공간에도 저장 가능
    • 단점: 임의 접근(random access) 느림 (하나씩 따라가야 하니까)
  • 인덱스 할당 (Indexed Allocation)
    • 별도의 인덱스 블록 하나가 여러 데이터 블록의 주소를 저장
    • 장점: 임의 접근이 빠름 (인덱스를 통해 바로 위치 파악 가능)
    • 단점: 인덱스 블록의 크기에 따라 관리 오버헤드 존재

2. 디스크 할당 방법

방법설명장점단점
비트맵 (Bitmap)디스크 각 블록 상태를 1비트로 표시
1=사용 중, 0=빈 공간
빈 공간 찾기 쉽고 빠름디스크가 커질수록 비트맵 크기 증가, 관리 비용 증가
연결리스트 (Linked List)빈 블록들을 포인터로 연결해 관리
각 블록에 다음 빈 블록 주소 포함
메모리 절약, 동적 관리 가능빈 공간 탐색 시 연결 따라가야 해서 느릴 수 있음
인덱스 블록 (Indexed Block, 그룹핑)빈 공간 블록 주소를 별도 인덱스 블록에 모아 관리체계적이고 빠른 접근 가능인덱스 블록 관리에 추가 공간과 복잡성 필요

3. 파일보호

보호 방법설명
파일 명명이름 규칙으로 접근 제한 및 혼동 방지
암호파일 내용을 암호화해 무단 접근 방지
액세스 제어사용자별 읽기/쓰기/실행 권한 설정
액세스 그룹사용자 그룹 단위로 권한 관리
사용자 권한개별 사용자별로 세밀한 접근 권한 부여
This post is licensed under CC BY 4.0 by the author.