조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다.
1. 블록
- 데이터를 읽고 쓰는 최소 단위
표) 계층별 블록 단위
더보기
| 계층 | 단위 | 특징 |
| Memory | Byte | CPU가 직접 다루는 최소 단위 |
| HDD 물리 | Sector (512B/4KB) | 디스크가 물리적으로 읽는 최소 단위 |
| File System | Block (보통 4KB) | OS가 파일을 관리하는 최소 단위 |
| Windows 파일 시스템 | Cluster (보통 4KB) | 블록 묶음 단위 |
2. 파일
- 논리적인 데이터 집합
- 실제 저장 장치에서 여러 개의 블록으로 나뉘어 저장됨
헤더
| 구성 요소 | 설명 | 특징/예시 |
| 첫 블록 주소 | 파일 데이터 시작 위치 | |
| name | 파일 이름 | |
| type | 파일 유형 | regular, directory, socket |
| size | 파일 크기 | 바이트 단위 |
| time | 생성/수정/접근 시간 | |
| location | 디스크 상의 물리적 위치 | |
| accessibility | 파일의 접근 권한 | 읽기, 쓰기, 실행 |
| owner | 파일 소유자 | UID/GID |
타입
| 타입 | 표기 | 설명 | 특징 |
| Regular file | - | 일반 파일 (텍스트, 이미지, 실행 파일 등) | 바이너리 형태로 저장됨 |
| Directory | d | 파일 목록을 담는 특수 파일 | |
| Symbolic link | l | 다른 파일을 가리키는 링크 | - 원본 삭제 시 깨짐 - i-node 번호 공유 안함 |
| Character device | c | 입출력 콘솔 장치 (키보드, 터미널 등) | /dev/console로 마운트됨 |
| Block device | b | 블록 장치 (HDD, SSD 등) | /dev/sda*로 마운트됨 |
| FIFO (named pipe) | p | 특수 파일 (프로세스 간 통신용 파이프) | /run/systemd/initctl/fifo*로 마운트됨 |
| Socket | s | 특수 파일 (네트워크/IPC 통신용) | /dev/log*로 마운트됨 |
표) 구조
더보기
| 파일 구조 | 특징 | 특징 |
| 순차 파일 구조 | 데이터를 순서대로 차례대로 저장하는 구조 | - 저장 공간에 낭비되는 부분이 없음 - 수정 및 삽입 작업 시 비용이 많이 듦 - 특정 데이터로 이동 시 직접 접근 불가 |
| 인덱스 파일 구조 | 순차 파일 구조에 인덱스 테이블을 추가한 구조 |
- 플로피 디스크, CD-ROM, HDD 등에서 사용
|
| 직접 파일 구조 | 키 값을 해시 함수로 계산해서 곧바로 물리 주소로 매핑함 |
- 접근이 매우 빠름
|
표) 종류
더보기
| 파일 종류 | 설명 | 특징 |
| 실행 파일 | 운영체제가 직접 실행할 수 있는 파일 | - 내부에 기계어 코드가 포함됨 - 메모리에 로드되어 프로세스로 실행됨 - 유닉스에서는 확장자가 아닌 접근 권한으로 실행 여부가 결정됨 |
| 데이터 파일 | 실행 파일이 읽어서 사용하는 파일 | - 실행 파일이 작업을 수행하는 데 필요한 데이터를 포함 - 스스로 실행되지 않음 |
| 파일 종류 | 설명 | 특징 |
| 이진 파일 | 사람이 읽기 어려운 기계 친화적 파일 | - 컴퓨터가 데이터를 효율적으로 저장하고 처리하기 위해 사용됨 - 다양한 데이터: 텍스트, 이미지, 오디오, 비디오 등 - 포맷 정보(글꼴, 스타일 등) 등 |
| 텍스트 파일 | 사람이 읽을 수 있는 문자 기반 파일 | - 문자 기반 데이터 (이미지, 비디오 등은 포함되지 않음) - 코드, 로그 파일, 구성 파일 |
링크
| 구분 | 하드 링크 | 심볼릭 링크 |
| 정의 | 기존 파일과 동일한 inode를 공유하는 또 다른 이름 | 원본 파일의 참조를 문자열로 저장한 파일 |
| inode 공유 | ✅ | ❌ |
| link count 증가 | ✅ | ❌ |
| 다른 파일시스템 | 불가 | 가능 |
| 원본 삭제 시 | 유지 | 깨짐 |
| 수정 시 반영 | 동일 | 동일 (원본 기준) |
예제) hard link
더보기
echo hello > a
ln a b
12345 -rw-r--r-- 2 user user 6 a
12345 -rw-r--r-- 2 user user 6 b
예제) symbolic link
더보기
echo hello > a
ln -s a b
12345 -rw-r--r-- 1 user user 6 a
12346 lrwxrwxrwx 1 user user 1 b -> a
3. 파일 디스크립터
- 프로세스가 열린 파일을 식별하기 위한 정수 값
- ✅ 프로세스의 파일 접근에 사용됨
- ✅ 프로세스마다 파일 디스크립터 테이블을 가지고 있음
표) 기본 FD 번호
더보기
✅ 모든 프로세스는 기본 파일 디스크립터 번호가 등록되어 있음
- 0: stdin (표준 입력)
- 1: stdout (표준 출력)
- 2: stderr (표준 에러)
예시) open()
더보기
파일 관리자로부터 파일 디스크립터를 리턴받음
int fd = open("text.txt", O_RDONLY);
'OS' 카테고리의 다른 글
| [따배셸] 2. Bash Shell과 변수 (0) | 2025.03.31 |
|---|---|
| [따배셸] 1. Linux Shell 이란? (0) | 2025.03.31 |
| [쉽게 배우는 운영체제] 9. 가상 메모리 관리 (0) | 2024.12.13 |
| [쉽게 배우는 운영체제] 8. 가상 메모리의 기초 (0) | 2024.12.12 |
| [쉽게 배우는 운영체제] 7. 물리 메모리 관리 (0) | 2024.12.12 |