15-1 파일과 디렉터리
파일
- 파일(file): 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
- 이름
- 파일을 실행하기 위한 정보
- 파일 관련 부가 정보: 속성(attribute), 메타데이터(metadata)
파일 속성과 유형
- 유형: 운영체제가 인식하는 파일 종류
- 확장자(extension): 파일 종류를 표시하는 가장 흔한 방식
파일 연산을 위한 시스템 호출
- 파일을 다루는 모든 작업은 운영체제에 의해 이뤄짐
- 모든 응용 프로그램은 시스템콜을 통해 파일 연산
디렉터리
- 디렉터리(directory)
- 윈도우에선 폴더(folder)
- 1단계 디렉터리(single-level directory)
- 트리 구조 디렉터리(tree-structured directory)
- 루트 디렉터리(root directory): 최상위 디렉터리
- 경로(path): 디렉터리를 이용해 파일 위치, 파일 이름을 특정 짓는 정보
절대 경로와 상대 경로
- 절대 경로(absolute path): 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로
- 상대 경로(relative path): 현재 디렉터리부터 자기 자신까지 이르는 경로
guest/data/image.png: 현재 디렉터리 내에 있는 guest 폴더 내의 data 폴더 내에 있음./guest/data/image.png: 동일함
디렉터리 연산을 위한 시스템 호출
- 파일 연산과 마찬가지로 디렉터리 연산도 시스템콜을 통해 운영체제가 처리
디렉터리 엔트리
- 디렉터리도 포함된 정보가 조금 다른 파일일 뿐임
- 디렉터리는 보조기억장치 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 테이블 형태로 저장
- 파일 이름, 위치 유추 정보, 생성 시간, 크기 등
15-2 파일 시스템
파일 시스템: 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램
파티셔닝과 포매팅
보조기억장치를 사용하려면 파티셔닝과 포매팅을 거쳐야 함
파티셔닝(partitioning)
- 저장 장치의 논리적인 영역을 구획하는 작업
- 파티션(partition): 파티셔닝 작업을 통해 나누어진 영역 하나하나
포매팅(formatting)
- 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
- 저수준 포매팅: 저장 장치를 생성할 당시 공장에서 수행되는 물리적 포매팅
- 논리적 포매팅: 파일 시스템을 생성하는 포매팅(지금 배우는 포매팅)
- 포매팅 할 때 파일 시스템이 결정됨
파일 할당 방법
블록(block): 운영체제가 파일과 디렉터리를 읽고 쓰는 단위. 하나 이상의 섹터를 묶은 단위
- 섹터: 하드 디스크의 가장 작은 저장 단위
연속 할당
Continuous: 시간적으로 끊임없는 Contiguous: 공간적으로 인접해있는
- 연속 할당(contiguous allocation): 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
- 외부 단편화 야기
- 외부 단편화: 연속 할당 중 중간 할당이 해제되었을 때, 너무 작아 사용하지 못해 낭비되는 블록들
연결 할당
- 연결 할당(linked allocation): 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태
- 단점
- 반드시 파일의 첫 번째 블록부터 접근하여 읽어야 하므로 임의 접근(random access) 속도가 매우 느림
- 하드웨어 고장이나 오류가 발생하면 그 이후의 블록에는 접근할 수 없음
색인 할당
- 색인 할당(indexed allocation): 파일의 모든 블록 주소를 **색인 블록(index block)**이라는 하나의 블록에 모아 관리하는 방식
- 디렉터리 엔트리에 파일 이름과 더불어 색인 블록 주소를 명시
파일 시스템 살펴보기
FAT 파일 시스템, 유닉스 파일 시스템 외에도 NTFS(NT 파일 시스템), ext 파일 시스템 등이 있음.
FAT 파일 시스템
- 파일 할당 테이블(FAT: File Allocation Table)
- 각 블록의 다음 블록의 주소들을 모아 관리하는 테이블
- 파티션의 앞부분에 위치
- 파티션 구성: 예약 영역, FAT 영역, 루트 디렉터리 영역, 데이터 영역
- FAT이 메모리에 캐시되면 임의 접근의 성능이 개선
- FAT 파일 시스템의 디렉터리 엔트리
- 디렉터리 구성: 파일 이름, 확장자, 속성, 예약 영역, 생성 시간, 마지막 접근 시간, 마지막 수정 시간, 시작 블록, 파일 크기
- 클러스터: 윈도우에서 블록을 지칭하는 말
FAT 파일 시스템에서 파일을 찾아가는 과정(/home/junsu/a.sh 파일)
- 파티션의 루트 디렉터리 영역에서 home 디렉터리의 첫 번째 블록 주소를 파악
- 1에서 파악한 주소로 가 home 디렉터리 내용을 살펴 junsu 디렉터리의 첫 번째 블록 주소 파악
- 2에서 파악한 주소로 가 a.sh 파일의 첫 번째 블록 주소 파악
- FAT으로 a.sh 파일의 블록 순서를 파악하고 해당 블록들에 접근
유닉스 파일 시스템
- 색인 할당 기반의 파일 시스템
- i-node(index node)
- 색인 블록
- 파일 속성 정보와 15개의 블록 주소 저장
- 파일마다 i-node가 있고, i-node마다 번호가 부여됨
- i-node들은 파티션 내 i-node 영역에 모여 있음
- 유닉스 파일 시스템에선 루트 디렉터리의 i-node는 항상 기억하고 있음
- 15개의 블록 주소로 큰 파일을 저장하는 법
- 블록 주소 중 12개에는 직접 블록 주소를 저장
- 직접 블록(direct block): 파일 데이터가 저장된 블록
- 1에서 충분하지 않으면 13번째 주소에 단일 간접 블록 주소를 저장
- 단일 간접 블록(single indirect block): 파일 데이터를 저장한 블록 주소가 저장된 블록
- 2에서 충분하지 않으면 14번째 주소에 이중 간접 블록 주소를 저장
- 이중 간접 블록(double indirect block): 단일 간접 블록들의 주소를 저장하는 블록
- 3에서 충분하지 않으면 15번째 주소에 삼중 간접 블록 주소를 저장
- 삼중 간접 블록(triple indirect block): 이중 간접 블록들의 주소를 저장하는 블록
- 블록 주소 중 12개에는 직접 블록 주소를 저장
유닉스 파일 시스템에서 파일을 찾아가는 과정(/home/junsu/a.sh 파일)
- 루트 디렉터리의 i-node에 접근하여 루트 디렉터리의 위치를 파악
- 루트 디렉터리 블록을 읽어 home 디렉터리의 i-node 번호를 파악
- i-node 영역에서 home 디렉터리의 i-node에 접근하여 home 디렉터리 위치를 파악
- home 디렉터리의 블록을 읽어 junsu 디렉터리의 i-node 번호를 파악
- i-node 영역에서 junsu 디렉터리의 i-node에 접근하여 a.sh 파일의 i-node 번호를 파악
- a.sh 파일의 i-node에 접근하여 a.sh의 위치를 파악하여 접근
저널링 파일 시스템
- 기존 파일 시스템에선 시스템 크래시(갑작스런 강제종료나 오류)가 발생하면 파일 시스템이 훼손
- 이 경우 유닉스나 리눅스의 fsck, 윈도우의 scandisk 프로그램이 파일 시스템을 검사하고 복구
- 저널링 파일 시스템
- 저널링(journaling) 기법: 작업 로그를 통해 시스템 크래시가 발생했을 때 빠르게 복구
- 저널링 기법에서 파일 변경 시 아래 방식으로 진행
- 작업 직전 파티션의 로그 영역에 수행하는 작업에 대한 로그를 남김
- 로그를 남긴 후 작업을 수행
- 작업이 끝났다면 로그를 삭제
마운트
- 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업
- USB 내의 파일 시스템을 그대로 내 PC의 특정 디렉터리로 옮기는 것
- 기존 USB의 루트가 내 PC의 특정 디렉터리가 되는 것
댓글