
1. 파일과 파일 시스템
1. 파일 시스켐의 개요
파일 시스템의 개념
파일들을 제2저장장치에 보관한다.
- 파일 시스템: 사용자 대신 파일을 보관하고 관리하는 파일 관리자를 두어 저장장치의 전체 관리를 맡긴다.
- 파일 관리자: 사용자의 요청에 따라 파일을 저장하거나 파일의 내용을 읽어온다.
- 디스크립터:사용자가 특정 파일에 접근하려면 파일 관리자로부터 파일에 접근할 수 있는 권한(키)을 흭득해야 하는데, 이때 파일 접근 권한 파일
저장장치에서는 파일 관리자가 파일 테이블을 사용하여 파일의 생성, 수정, 삭제등을 수행한다.
파일 시스템의 기능
파일 시스템
- FAT -> NTFS
- 아이노
파일 시스템은 파일과 파일의 집합체인 디렉터리를 관리한다. 파일을 한곳에 보관하면 관리하기 어렵기 때문에 파일 시스템에서는 방을 여러개 많들어 파일을 저장한다.
- 파일 및 디렉터리에 대한 접근 방법을 제공
- 권한이 없는 사용자의 접근을 차단한다.
- 파일 내용이 손상되지 않도록 무결성을 보장
- 사고로부터 파일을 보호하기 위한 백업과 복구 잡업
- 암호화하여 악의적인 접근으로부터 차단한다.

블록과 파일 테이블
메모리를 바이트 단위, 주소는 바이트 단위
저장장치에서는 파일을 일정 크기(블록)로 묶어서 관리
한 블록에 주소 하나가 할당되며 운영체제와 저장장치 사이에서는 파일을 블록 단위로 전송한다.

2. 파일
파일 종류과 확장자
파일은 논리적인 데이터의 집합으로 하드디스크 같은 제2저장장치에 저장된다.
0과 1의 비트 패턴으로 이루어 진다.
- 실행 파일: 운영체제가 메모리로 가져와 CPU를 이용하여 작업하는 파일이다.
- 데이터 파일: 데이터 파일은 스스로 프로세스가 될 수 없고, 운영체제가 전송하거나 보관만 할 뿐 특별하게 다루지 않는다. 즉. 0과 1로 이루어진 데이터 덩어리일 뿐이다.
확장자
- 이미지 파일: bmp, jpg, gif, png, webp
- 음악 파일: wav, mp3, ogg, aac, flac
- 윈도우 실행 파일: exe, com

파일 이름
- 파일이름.확장자
- 파일이름은 최대 255, 영문자, 숫자, 붙임표, 밑줄, 마침표, 스페이스바, &, ~, 대소문자 구분x,
- 마침표 다음을 확장자로 인식
- 확장자는 3글자 이상
파일 연결 프로그램
- 실행 파일을 더블클릭하면 프로세스가 생성된다
- 데이터 파일을 더블클릭하면 해달 파일을 사용하는 응용 프로그램이 실행된다.
- 데이터 파일이 필요로 하는 응용 프로그램을 운영체제가 실행하는 것이지 데이터 파일 자체가 실행되는 것이 아니다.
- 윈도우에서 데이터 파일에 연결된 응용 프로그램을 변결할 수 있다.
- 파일 확장자를 바꿀 수 있지만, 확장자를 바꾼다고 해서 내용이 바뀌지 않는다.
파일 속성
| 속성 | 특징 | |
| name | 파일 이름 | 확장자를 포함한 전체 이름 |
| type | 파일 종류 | 실행 파일, 동영상 파일, 사진 파일, 음악 파일과 같은 확장자로 구분된다. |
| size | 파일 크기 | 파일의 용량 |
| time | 파일에 대한 접근 시간 | 접근 시간, 변경 시간, 최근 열어본 시간... |
| location | 파일 위치 | 파일 위치가 다르면 서로 다른 파일 |
| accessibility | 파일에 대한 접근 권한 | 접근 권한 읽기, 쓰기, 숨긴 파일 |
| owner | 파일 소유자 | 소유자, 그룹, 제3자 |
파일 작업 - 파일 자체를 변경하는 작업
| 작업 | 설명 | |
| open | 파일을 연다. | 더블 클릭하면 파일이 열리거나 연결 프로그램을 실행한 후 데이터 파일을 가져온다. |
| close | 파일을 닫는다. | 파일 사용 후 닫는다. 응용 프로그램을 종료해도 파일이 자동으로 닫힌다. |
| cerate | 새로운 파일을 생성한다. | 새로운 파일을 만든다. |
| remove | 파일을 이동한다. | 저장된 디렉터리의 위치를 변경하는 것, 휴지통으로 이동하면 파일이 삭제된다. |
| copy | 파일을 복사한다. | 똑같은 파일을 하나 더 만드는 것 |
| rename | 파일 이름을 변경한다 | 파일 이름을 바꾸는 것 |
| list | 파일을 나열한다. | 디렉터리에 있는 파일의 이름을 보여준다. 파일이름, 크기, 만든 날짜 등 나열됨. |
| search | 파일을 찾는다. | 파일을 찾을 때 검색을 한다. 이름순, 크키순, 만든 날짜순으로 검색가능 *: 모든 문자를 대체한다는 의미 ?: 한 글자가 더 있는 파일을 찾으라는 의미 |
파일 작업 - 파일 내용를 변경하는 작업
| 작업 | 설명 | 작업 | 설명 |
| open() | 파일을 연다. (권한 획득) | write() | 파일에 새로운 내용을 쓴다. (함수 쓰기) |
| create() | 새로운 파일을 생성한다. 권한 획득) | update() | 파일 내용 중 일부를 변경한다. (생신 작업) |
| close() | 파일을 닫는다. | insert() | 파일에 새로운 내용을 추가한다. (추가 작업) |
| read() | 파일 내용을 읽는다. (함수 읽기) | delete() | 파일 내용 중 일부를 지운다.(삭제) |
파일 헤더
- 파일 속성: 파일 크기, 만든 날짜, 접근 권한과 같은 파일 속성은 모든 파일에 공통으로 적용된다.
- 파일 체이블에 위치하고 해당 파일에 필요한 정보를 가지고 있는 파일 헤더는 파일의 맨 앞에 위치한다.
- 파일 헤더: 파일의 버전 번호, 크기, 특수 정보 등 응용 프로그램이 필요한 정보가 담겨 있다.
- 파일 마다 자신에게 필요한 정보를 따로 정의하여 사용할 수 있는데, 이는 파일 헤더에 기록된다.
- mp3: 파일헤더에 가수명, 앨범명, 앨범 사진 등이 기록된다.
- 사진 파일: 파일 헤더에 카메라 기종, 셔터 속도, 조리개 값 등이 기록된다.
3. 저장장치 관리 기법
파티션
하드디스크나 SSD와 같은 대용량 저장장치는 통째로 사용하기도 하지만, 대개 2개나 3개로 나눠서 사용한다.
저장장치를 2개 이상으로 나누는것을 파티션을 나눈다고 한다.

(a) 저장장치2개, 파티션 2개
(b) 저장장치 1개, 파티션을 분리하면 2개의 논리적인 저장장치로 보인다.
(c) 여러개의 파티션을 통합하는 기능 (마운트)을 가지고 있다. 저장장치나 파티션의 개수와 상관없이 하나의 파일 시스템만 가진다. 1개의 저장장치 처럼 보인다.
-> 윈도우에서 각 파티션이 따로 보이는 이유는 파티션마다 파일 테이블이 따로 존재하기 때문이다.
포맷
포맷은 저장장티의 파일 시스템을 초기화 하는 작업이다.
- 빠른 포맷: 데이터를 그대로 둔 채 파일 테이블만 초기화 하는 방식이다. 복구 프로그래으로 일부 파일이 되살아 나는데, 저장된 데이터가 남아 있기 때문이다. 파일의 헤더를 찾아서 파일을 복구할 수 있다.
- 느린 포맷: 파일 테이블을 초기화 하고 블록의 데이터를 0으로 만든다. 시간이 오래걸리고, 불량 섹터를 찾을 수 있다. 블록 크기를 설정할 수 있다.
- 페이징 메모리 관리를 설명할 때 한 페이지의 크기를 너무 크게 하면 내부 단편화가 발생한다.
- 블록 크기가 너무 크면 적은 주소로 많은 양의 데이터를 관리할 수 있지만 낭비되는 공간(내부 단편화)이 생긴다.
- 블록 크기가 너무 작으면 많은 양의 블록 주소가 필요한다.
- 페이징 메모리 관리를 설명할 때 한 페이지의 크기를 너무 크게 하면 내부 단편화가 발생한다.
조각 모음
조각화, 단편화: 파일을 저장했다가 지우기를 반복하면 중간중간 빈공간이 생딘다.
하드디스크에 조각이 많이 생기면 큰 파일이 여러 조각으로 나뉘어 저장된다. (성능 저하) -> 조각 모음으로 극복
그러나 요즘 USB나 SSD는 조각모음을 하지 않아도 성능 차이가 별로 없다.
4. 파일 구조
순차 파일 구조
: 파일 내용이 하나의 긴 줄로 늘어선 형태로 카세트테이프가 대표적이다.
순서대로 나온다. 앞으로 감거나 뒤로 감아서 원하는 위치로 가야 한다.
open(), cerate() 로 권한을 얻고 -> 파일 디스크립터를 사용자에게 준다. -> 파일 디스크럽트는 맨 앞에서 앞으로 전진한다. -> 순차 구조의 읽기와 쓰기 작업 진행 -> read(), write() 명령을 내리면서 파일 디스크럽트가 계속 전진한다.
(특정 위치로 가야 할때는 lseek()명령어를 사용한다. )

장점
- 순서대로 기록 (공간 낭비 x)
- 구조가단순해서 메모리를 이용한 저장장치도 적용할 수 있다.
- 순서대로 데이터를 읽거나 저장할 때 매우 빠르다.
단점
- 파일에 새로운 데이터를 삽입하거나 삭제할 때 시간이 많이 걸린다.
- 특정 데이터로 이동할 때 직접 접근이 어렵기 때문에 앞에서부터 순서래도 움직여야 한다.
인덱스 파일 구조 - ISAM
인덱스 데이블을 추가하여 순차 접근과 직접접근이 가능하다. (특정 파일로 직접 접근할 수 있다.)
순차 파일 구조를 유지하면서도 디스크를 이용한 저장장치의 장점을 살렸다.

현대 파일 주고는 인덱스 파일 구조다.
순차 파일 구조로 파일을 저장하고, 인덱스 테이블을 보고 원하는 파일에 직접접근한다.
장점
- 인덱스 테이블을 여러 개 만들면 다양한 접근이 가능하다 (빠른 접근이 필요한 시스템에 사용된다.)
- 인덱스 테이블을 만들면 사용자 질의에 빠르게 응답할 수 있다.
- 인덱스 구성 방법에 따라 접근 속도가 달라진다. 일반적으로는 B트리를 사용한다.
직접 파일 구조
직접 파일 구조에 저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인주소로 바로 변환하는 파일 구조다.
특정 함수로 직접 접근이 가능한 것이 직접 파일구조 이며, 이때 사용하는 함수를 해시 함수라고 한다.

장점
- 해시 함수(데이터를 찾을 때 끝자리를 기준으로 찾는다.)로 주소를 변환하기 때문에 데이터 접근이 매우 빠르다
단점
- 전체 데이터가 고르게 저장될 수 있는 해시 함수를 찾기는 쉽지 않다.
- 해시함수를 찾아도 저장 공간이 낭비된다는 문제가 있다. -> 이용 효율이 떨어진다.
2. 디렉터리의 구조
여러 파일을 하나로 섞어놓은 것보다 같은 종류끼리 모아서 보관하면 원하는 파일을 찾기로 쉽고 관리하기도 편하다.
1. 디렉터리의 개념
하나의 디렉터리에는 여러 개의 파일과 자식 디렉터리가 존재한다.
- 루트 디렉터리: 최상위에 있는 디렉터리, 슬래시(/)
- 자식 디렉터리: 루트 디렉터리 아래에 자식 디렉터리가 있다.
2. 디렉터리 파일
일반 파일에는 데이터가 담겨 있고, 디렉터리 파일 정보가 담겨 있다.
디렉터리 헤더에는 디렉터리 이름, 만든 시간, 접근 권한 등의 정보가 기록되어 있고, 디렉터리 정보가 시작되는 위치를 가리킨다.

- . : 자기 자신의 디렉터리
- .. : 상위 디렉터리
3. 경로
경로는 파일이 전체 디렉커리 중 어디에 있는지를 나타내는 정보다.
한 디렉터리에는 같은 이름을 가진 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 같은 이름의 파일이 존재할 수 있다.
- 절대 경로: 루트 디렉터리를 기준으로 파일의 위치를 나태나는 방식 ( /program/clata/exm.c)
- 상대 경로: 현재 위치를 기준으로 파일의 위치를 표시하는 방 ( ../user/exm.c)
디렉터리를 이동할 때 cd 명령을 사용한다.
cd는 절대 경로와 상대 경로는 모두 사용할 수 있는데, 현재위치 보다 아래에 있는 데이터에 접근할 때는 상대경로를, 다른 디렉터리로 이동할 때는 절대 경로를 사용한다.
4. 디렉터리 구조
- 초기 1단계 디렉터리: 루트 디렉터리에 새로운 디렉터리를 만들 수 있지만 디렉터리 안에 자식 디렉터리를 만들 수는 없다. (디렉터리 안에 파일만 존재한다. )
- 다단계 디렉터리구조(트리 디렉터리 구조): 여러 간계의 디렉터리가 가지터럼 뻗어 있다. 단계디렉터리 주고는 단계확장에 제약이 없고 파일과 디렉터리 모두 저장할 수 있다. - 순환이 없다.
- 오늘날은 순환이 있는데, 바로 링크 때문이다. 바로가기는 다른 디렉터리에 있는 파일에 바로 갈 수 있다. ln

5. 마운트
파티션을 나누어 파티션마다 서로 다른 파일 테이블을 사용해야 했다

유닉스의 경우 서버용으로 만들어진 운영체제이므로 파일 테이블의 크기에 제한이 없다.
하나의 파일테이블로 여러 개의 디스크 혹은 파이션을 통합하여 관리할 수 있다 -> 여러 개의 파티션을 통합하는 명령러가 마운트

- /mnt: 마운트 연결 지점
- 마운트를 사용하면 디렉터리를 이동할 때마다 다른 파티션으로 넘어가지만 사용자는 이를 알지 못한다.
- 마운트를 사용하면 파티션이 몇 개이든 하나로 통합할 수 있다.
- /dev: 마운트 해제
3. 디스트 파일 할당
1. 할당 방식
연속 할당과 불연속 할당
전체 디스크 공간을 같은 크기(블록)로 나누고 각 공간에 주소를 붙여서 관리한다.
파일 시스템은 파일의 이름과 파일이 시작되는 블록 주소를 가진 파일 테이블을 관리한다.
- 데이터 읽기: 파일 관리자는 파일 테이블에서 해당 파일의 블록 주소를 찾아 그 위치에서 데이터를 읽어온다.
- 파일 테이블은 파티션당 하나씩 존재하며 파티션의 맨 앞부분에 위치한다.
일반적으로 하나의 파일은 여러 개의 블록을 사용하는데, 여러 개의 블록을 어떻게 연결하는지에 따라 연속 할당과 불연속 할당 방식으로 구분된다.
- 연속 할당: 데이터를 디스크상에 연속적으로 배열
- 불연속 할당: 데이터를 분산하여 저장하고 정보를 파일 시스템이 관리하는 방식이다. - 연결 할당, 인덱스 할당
연결 할당 - 채인 할당
연결할당은 파일에 속한 데이터를 연결 리스트로 관리하는 방식이다.
파일 테이블에는 시작 블록에 대한 정보만 저장하고 나머지는 시작블록에 연결하고 저장한다. 맨 끝에는 널을 삽입한다.
연결할당 방식은 테이블 형태로 관리한다. - FAT
- FAT: 파티션 전체 블록에 대한 정보를 가진 테이블 (열의 갯수 = 파티션에 존재하는 블록의 개수)로 데이터가 어떤 블록에 연결되어 있는지를 나타내는 블록 번호가 있다.


단점
- 하나의 파티션이 사용할 수 있다는 디스크 용량이 테이블의 주소 크기로 제한된다는 점이다. (최대 할당 크기레 제한)
- FAT16은 16bit 주소를 사용하고 파티션 크기는 32GB로 한정된다.
- FAT32는 8TB까지 지원하고 파일 하나의 크기는 4GB로 한정한다.
- 64bit 주소를 지원하는 NTFS파일 시스템을 사용하고 있다.
인덱스 할당
인덱스 할당 방식에서는 테이블의 블록 포인터가 아닌, 데이터의 인덱스를 담고 있는 인덱스 블록을 연결한다.
인덱스 블록은 실제 데이터의 위치에 관한 정보를 순서대로 보관학 있다.

아이노드: 테이블이 꽉 차 더 이상 데이터를 연결할 수 없을 때 인덱스 블록을 연결하는 간접 인덱스 블록을 만들면 테이블을 무한히 확장할 수 있다
아이노드 테이블
- 파일 제어 블록 (슈퍼 블록): 파일 소유자와 각종 속성을 나타낸다.
- 블록 포인터: 데이터가 있는 블록의 위치
- 간접 포인터: 크기가 작은 파일은 직접 연결된 블록 포인터로 빠르게 접근할 수 있다.
- 이중 간접 포인터: 파일의 크기가 커서 인덱스 블록 하나로도 다 연결할 수 없을 때
- 삼중 간접 포인터: 이중 간섭 포인터 보다 더 필요한 경우 삼중 간접 포인터를 사용한다.
파일의 크기가 작은 경우 블록을 직접 연결하여 빠르게 접근하고, 파일의 크기가 큰 경우 인덱스 블록과 이를 연결하는 간접 포인터를 이용하여 확장한다.

2. 빈 공간 관리
디스크레 파일을 저장할 때마다 모든 테이블을 뒤져서 빈 공간을 찾는 것은 비효율적이다.
단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 빈 블록의 정보만 모아놓은 빈 공간 리스트를 유지한다.

- 블록의 내용을 지우기 않고 빈 공간 리스트에 삽입하는 것은 해당 블록에 새로운 데이터를 덮어쓰지 않는 한 원래 데이터를 복구할 수 있는 여지를 남긴다.
- 리스트에 먼저 들어온 블록부터 할당한다.
시스템 오류 복구 명령
- 윈도우: 디스크 오류 검사 (CHKDSK)
- 유닉스: FSCK
4. 유닉스 파일의 특징
유닉스 파일 시스템의 접근 패턴
- -: 일반 파일
- d: 디렉터리
- l: 링크 (윈도우의 바로가기 기능)

- r: read
- w: write
- e: execute
유닉스에서는 특정 파일 확장자를 사용하지 않고 접근 패턴을 이용하여 사용자의 권한을 설정하기 때문에 실행 파일인지 아닌지 판단하려면 접근 패턴을 확인해야 한다. (유닉스에는 확자아가 없어서 접근 패턴이 x면 살행가능한 파일이고, 없으면 불가능하다. )

chmod명령으로 접근 패턴을 알 수 있다.
: read는 4, write는 2, execute는 1이며 chmod 명령을 이용하여 살리고 싶은 숫 자를 모두 더하면 된다.
출처 : 조성호 , 『IT CookBook, 쉽게 배우는 운영체제(2판)』한빛아카데미(2023).
'COMPUTER SCIENCE > OS' 카테고리의 다른 글
| [쉽게 배우는 운영체제 2판] 10장 연습문제 (0) | 2025.09.21 |
|---|---|
| [쉽게 배우는 운영체제 2판] 9장 연습문제 (0) | 2025.09.20 |
| [쉽게 배우는 운영체제 2판] 10. 입출력 시스템과 저장장치 (1) | 2025.06.05 |
| [쉽게 배우는 운영체제 2판] 9. 가상 메모리 관리 (0) | 2025.05.27 |
| [쉽게 배우는 운영체제 2판] 8장 연습문제 (0) | 2025.05.23 |