1. 파일과 디렉터리

운영체제는 보조기억장치(하드디스크, SSD 등)에 저장된 데이터를 효율적으로 관리하기 위해 파일과 디렉터리라는 개념을 사용합니다.
파일은 데이터를 저장하는 단위이며, 디렉터리는 이러한 파일들을 논리적으로 분류·관리하는 구조입니다.


파일

**파일(File)**은 의미 있는 데이터를 하나로 묶어 보조기억장치에 저장한 단위입니다.
모든 파일은 이름을 가지고 있으며, 파일 형식을 나타내는 확장자를 가질 수 있습니다.

  • 예: report.pdf, hello.java, music.mp3

운영체제는 각 파일에 대해 메타데이터(속성)를 함께 관리합니다.

파일의 속성과 유형

속성 이름설명
유형운영체제가 인식하는 파일의 종류
크기파일이 차지하는 용량
보호접근 권한 (읽기, 쓰기, 실행 등)
생성 날짜파일이 처음 생성된 시각
마지막 접근 날짜최근에 파일에 접근한 시각
마지막 수정 날짜파일 내용이 마지막으로 변경된 시각
사용자 / 소유자파일을 생성하거나 소유한 사용자 정보
저장 위치저장장치 상에서의 물리적 위치 (논리적 주소와 다름)

주요 파일 유형 및 확장자

파일 유형대표 확장자
실행 파일.exe, .bin, .com
텍스트 파일.txt, .md, .log
문서 파일.pdf, .docx, .hwp
멀티미디어 파일.mp3, .mp4, .jpg, .png
압축 파일.zip, .tar, .rar
소스 코드 파일.c, .cpp, .java, .py, .html, .js

파일 연산을 위한 시스템 호출

운영체제는 프로그램이 파일을 다룰 수 있도록 여러 가지 **시스템 호출(system call)**을 제공합니다.

  1. 파일 생성(Create) – 새로운 파일 생성
  2. 파일 삭제(Delete) – 기존 파일 삭제
  3. 파일 열기(Open) – 파일을 열고 핸들을 반환
  4. 파일 닫기(Close) – 열린 파일을 닫고 자원 해제
  5. 파일 읽기(Read) – 파일에서 데이터를 읽음
  6. 파일 쓰기(Write) – 파일에 데이터를 기록함

디렉터리

**디렉터리(Directory)**는 여러 개의 파일을 그룹으로 묶고, 파일의 위치와 이름을 체계적으로 관리하는 구조입니다.
일반적으로 “폴더”라고 부르며, 파일뿐 아니라 하위 디렉터리도 포함할 수 있습니다.

디렉터리 구조는 트리(Tree) 구조를 따르며, 최상위에는 **루트 디렉터리(Root Directory)**가 있습니다.

  • UNIX/Linux: /
  • Windows: C:\, D:\

절대 경로와 상대 경로

  • 절대 경로: 루트 디렉터리부터 전체 경로를 지정
    • 예: /home/user/data.txt, C:\Users\Admin\test.docx
  • 상대 경로: 현재 작업 디렉터리를 기준으로 경로를 지정
    • 예: ../images/logo.png, ./file.txt
기호의미
.현재 디렉터리
..상위(부모) 디렉터리

디렉터리 연산 시스템 호출

디렉터리도 파일처럼 여러 가지 연산을 수행할 수 있습니다.

  1. 디렉터리 생성(Mkdir)
  2. 디렉터리 삭제(Rmdir)
  3. 디렉터리 열기(Open Directory)
  4. 디렉터리 닫기(Close Directory)
  5. 디렉터리 내용 읽기(Read Directory)
  6. 디렉터리 항목 쓰기(Create/Move Entry)

디렉터리 엔트리 (Directory Entry)

디렉터리 내부에는 파일 또는 하위 디렉터리의 정보가 엔트리 단위로 저장됩니다.
각 엔트리에는 다음과 같은 정보가 포함됩니다:

파일 이름위치 정보생성 시간수정 시간크기기타 메타데이터

파일 시스템 종류에 따라 엔트리의 구조나 저장 방식은 달라질 수 있습니다.


2. 파일 시스템

**파일 시스템(File System)**은 운영체제가 파일과 디렉터리를 저장하고, 관리하며, 접근할 수 있도록 정의된 구조입니다.


파티셔닝(Partitioning)과 포매팅(Formatting)

보조기억장치를 파일 단위로 사용하려면 다음 두 단계를 거쳐야 합니다.

  1. 파티셔닝

    • 저장장치를 논리적으로 여러 개의 파티션으로 나누는 과정
    • 예: C:\, D:\, /dev/sda1
    • 비유: 큰 책장을 여러 칸으로 나누는 작업
  2. 포매팅

    • 각 파티션에 특정 **파일 시스템(NTFS, FAT32 등)**을 설치해 파일 저장 가능하게 만듦
    • 포맷 후, 디렉터리 구조, 파일 테이블 등 생성됨

Windows에서는 “디스크 관리” 도구로 확인 가능


파일 할당 방식

파일이 저장될 때 실제 **디스크 블록(Block)**에 어떻게 배치되는지를 정의합니다.

1. 연속 할당 (Contiguous Allocation)

  • 파일을 연속된 블록에 저장
  • 장점: 빠른 순차 접근 (시작 위치 + 길이로 바로 탐색 가능)
  • 단점: 외부 단편화 발생

2. 연결 할당 (Linked Allocation)

  • 파일을 불연속적인 블록에 저장하고, 각 블록에 다음 블록의 주소를 기록
  • 장점: 외부 단편화 없음
  • 단점: 랜덤 접근이 비효율적

3. 색인 할당 (Indexed Allocation)

  • 별도의 **색인 블록(index block)**을 통해 모든 블록 위치를 기록
  • 장점: 랜덤 접근, 순차 접근 모두 효율적
  • 사용 예: UNIX 계열 파일 시스템

파일 시스템 예시

FAT (File Allocation Table) 시스템

  • 각 파일은 FAT 테이블에서 연결된 블록 목록으로 저장
  • 연결 할당 기반 구조
  • 사용 예: USB, SD카드, Windows 초기 버전 등

📌 디렉터리 항목은 파일 이름 + 시작 블록 번호
📌 FAT 테이블에서 -1은 파일의 끝을 의미

유닉스 파일 시스템 (i-node 기반)

  • 파일마다 고유한 i-node 존재
  • i-node에는 파일 메타데이터와 데이터 블록 주소 포함
블록 유형설명
직접 블록i-node가 직접 주소 저장
단일 간접 블록블록 안에 블록 주소들을 저장
이중 간접 블록블록 → 블록 주소 → 데이터 블록
삼중 간접 블록더 큰 파일까지 지원 가능

📌 디렉터리는 파일 이름 + i-node 번호를 쌍으로 저장함