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)**을 제공합니다.
- 파일 생성(Create) – 새로운 파일 생성
- 파일 삭제(Delete) – 기존 파일 삭제
- 파일 열기(Open) – 파일을 열고 핸들을 반환
- 파일 닫기(Close) – 열린 파일을 닫고 자원 해제
- 파일 읽기(Read) – 파일에서 데이터를 읽음
- 파일 쓰기(Write) – 파일에 데이터를 기록함
디렉터리
**디렉터리(Directory)**는 여러 개의 파일을 그룹으로 묶고, 파일의 위치와 이름을 체계적으로 관리하는 구조입니다.
일반적으로 “폴더”라고 부르며, 파일뿐 아니라 하위 디렉터리도 포함할 수 있습니다.
디렉터리 구조는 트리(Tree) 구조를 따르며, 최상위에는 **루트 디렉터리(Root Directory)**가 있습니다.
- UNIX/Linux:
/ - Windows:
C:\,D:\등
절대 경로와 상대 경로
- 절대 경로: 루트 디렉터리부터 전체 경로를 지정
- 예:
/home/user/data.txt,C:\Users\Admin\test.docx
- 예:
- 상대 경로: 현재 작업 디렉터리를 기준으로 경로를 지정
- 예:
../images/logo.png,./file.txt
- 예:
| 기호 | 의미 |
|---|---|
. | 현재 디렉터리 |
.. | 상위(부모) 디렉터리 |
디렉터리 연산 시스템 호출
디렉터리도 파일처럼 여러 가지 연산을 수행할 수 있습니다.
- 디렉터리 생성(Mkdir)
- 디렉터리 삭제(Rmdir)
- 디렉터리 열기(Open Directory)
- 디렉터리 닫기(Close Directory)
- 디렉터리 내용 읽기(Read Directory)
- 디렉터리 항목 쓰기(Create/Move Entry)
디렉터리 엔트리 (Directory Entry)
디렉터리 내부에는 파일 또는 하위 디렉터리의 정보가 엔트리 단위로 저장됩니다.
각 엔트리에는 다음과 같은 정보가 포함됩니다:
| 파일 이름 | 위치 정보 | 생성 시간 | 수정 시간 | 크기 | 기타 메타데이터 |
|---|
파일 시스템 종류에 따라 엔트리의 구조나 저장 방식은 달라질 수 있습니다.
2. 파일 시스템
**파일 시스템(File System)**은 운영체제가 파일과 디렉터리를 저장하고, 관리하며, 접근할 수 있도록 정의된 구조입니다.
파티셔닝(Partitioning)과 포매팅(Formatting)
보조기억장치를 파일 단위로 사용하려면 다음 두 단계를 거쳐야 합니다.
-
파티셔닝
- 저장장치를 논리적으로 여러 개의 파티션으로 나누는 과정
- 예:
C:\,D:\,/dev/sda1등 - 비유: 큰 책장을 여러 칸으로 나누는 작업
-
포매팅
- 각 파티션에 특정 **파일 시스템(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 번호를 쌍으로 저장함