10. 파일 시스템 인터페이스(File System Interface)
10. 파일 시스템 인터페이스(File System Interface)
▶ 파일 시스템: 파일 집합, 디렉토리 구조, 단편(partition)
10.1 파일의 개념(File Concept)
▶ 정보의 저장
- 저장 장치: 다양한 물리적 저장 단위 ex) 자기 디스크, 자기 테이프, 광학 디스크 등
↕ 매핑(운영체제)
- 파일: 일관되고 논리적인 저장 단위
① 프로그램: 원시 프로그램, 목적 프로그램
② 데이터: 문자, 숫자, 문숫자 등으로 구성 → 비트, 바이트, 행(line), 레코드들의 연속체
10.1.1 파일 속성(File Attributes)
▶ 모든 파일 정보는 보조기억장치에 상주하는 디렉토리 구조에 유지됨
- 이름: 문자열로 구성 → 그 이름으로 조회
- 형태: 파일의 종류
- 위치: 파일이 존재하는 장치와 위치에 대한 포인터
- 크기: 현재 크기(바이트, 워드, 블록 등), 최대 허용 가능한 크기
- 보호: 접근 제어 정보 → 판독, 기록, 실행의 주체
- 시간, 날짜, 사용자 식별: 생성, 최근 수정, 최근 사용(last use)에 대한 정보 유지
→ 보호, 보안, 사용자 감시에 활용
10.1.2 파일 조작(File Operations)
▶ 운영체제는 파일의 생성, 기록, 판독, 재설정, 삭제, 절단 등을 위한 시스템 호출(system call) 제공
- 파일 생성: ① 공간 할당(11장), ② 디렉토리 항목 생성
- 파일 기록: ① 파일명에 의한 위치 탐색, ② 기록 포인터(write pointer) 유지 및 갱신
- 파일 판독: ① 파일명과 복사 위치에 의한 호출, ② 판독 포인터(read pointer) 유지 및 갱신
→ 기록 포인터+판독 포인터: 현재 파일 위치 포인터(current file position pointer)
- 파일 안에서의 재설정(reposition): 파일 탐색(seek) 조작 명령에 의한 새 위치 찾기
- 파일 삭제: ① 디렉토리에서 해당 항목 찾기, ② 기억공간 해제, ③ 디렉토리 항목 삭제
- 파일 절단: 파일 내용만 지우기 → 파일 길이 속성만을 0으로 설정
▶ 기본 조작 명령은 다른 파일 조작 명령을 실행하기 위해 결합될 수 있음
ex) 파일 복사: 새 파일 생성, 옛 파일 판독, 새 파일 기록
▶ 파일 개방과 폐쇄의 구현
- 묵시적: 첫 번째 참조시 개방하고, 개방한 작업이나 프로그램의 종료시 폐쇄
- 명시적: 시스템 호출에 의한 개방과 폐쇄
▶ 개방 파일 테이블: 프로세스들이 개방한 파일들에 관한 테이블
- 파일 포인터: 현재 파일 위치 포인터 → 각 프로세스마다 생성
- 파일 개방 계수: 계수가 0에 도달할 때, 비로소 항목을 제거
- 파일의 디스크 위치
▶ 파일의 메모리 사상: [그림 10.1] 기억장치 사상 파일
10.1.3 파일 형태(File Types)
▶ 운영체제가 파일 형태를 인식하면, 그 파일을 합리적으로 조작하게 할 수 있음
→ 파일 이름의 한 부분(확장자)에 의한 파일 형태 명시
[그림 10.2] 공통 파일 형태
- 원시 프로그램의 실행 시도 → 최근 수정/생성 시간을 참조한 자동 재컴파일 후 실행
- 파일의 개방 시도(ex: 문서.hwp) → 생성자 프로그램의 자동 호출(ex: HWP 프로그램 실행)
10.1.4 파일 구조(File Structure)
▶ 운영체제와 파일 구조의 관계
1) 운영체제가 다중 파일 구조를 관리하는 경우
(장점)
- 적절한 처리 가능
(단점)
- 여러 유형의 파일 처리를 위한 프로그램 탑재로 운영체제가 비대해짐
- 모든 파일은 운영체제가 정의하는 파일 형태 중 하나라야 함
ex) 암호화된 파일: 수행 불가
2) 운영체제가 어떠한 파일의 형태도 제공하지 않는 경우
ex) UNIX: 단지 바이트들의 연속체로 간주
(장점)
- 사용자에게 최대한의 융통성 부여
(단점)
- 응용 프로그램별로 입력 파일을 적당한 구조로 해석하는 고유 프로그램 필요
즉, 운영체제로부터 어떠한 도움도 받지 못함
10.1.5 내부 파일 구조(Internal File Structure)
▶ 물리적 레코드 ↔ 논리적 레코드
- 물리적 레코드: 디스크의 경우 고정 블록 - 섹터
pack↑↓unpack
- 논리적 레코드: UNIX의 경우 1byte
▶ 내부 단편화(internal fragmentation): 파일을 블록 단위로 나누어 유지함으로써 발생하는 마지막 블록의 낭비된 바이트
→ 일반적으로 블록 크기가 클수록 심함
ex) 파일 1949 바이트 → 4블록 2048 바이트: 99 바이트 낭비
(1블록 = 512 바이트)
10.2 접근 방법(Access Methods)
10.2.1 순차 접근(Sequential Access) ← 테이프 모델 기반
▶ 개념: 순차적으로 읽거나 쓰고 현재 파일 위치 포인터는 자동적으로 증가
[그림 10.3] 순차 접근 파일
- 파일내에서 순차적으로만 판독하거나 기록할 수 있음
- 특정 시스템에서는 n개(통상 1개) 단위의 레코드 앞뒤로 이동 가능
10.2.2 직접 접근(Direct Access) ← 디스크 모델 기반
▶ 개념: 파일을 블록 혹은 레코드의 집합으로 간주하고, 판독이나 기록의 순서에 제약이 없음
→ 대규모 정보 접근에 유용
- 특히 대규모 정보의 경우, 파일명에 대한 해쉬 함수(hash function)를 사용하거나, 주기억장치내의 색인표(in-core index)를 이용하여 파일 탐색
- 파일의 시작부터 매겨지는 상대 블록 번호를 매개 변수로 하는 파일 조작
① 대치 방식: read next → read n; write next → write n
② 추가 방식: position to n + read next; position to n + write next
- 직접 접근에서 순차 접근의 모의 실험
[그림 10.4] 직접 접근 파일에서 순차 접근의 모의 실험
10.2.3 색인 접근(Index Access) ← 직접 접근 기반
▶ 각 파일마다 색인(index)을 두는 방법
- 각 색인에는 여러 블록을 가리키는 포이터들로 구성됨
- 파일 접근 방법: 색인 탐색 후 포인터에 의한 직접 접근
(예) 소매 가격 파일: (품목) Universal Product Code(UPC)(10bytes) + 가격(6bytes)
→ 모든 품목을 UPC 코드로 정렬한 후, 각 블록의 첫 품목에 대한 UPC로 구성된 색인을 사용
▶ 색인 파일에 대한 색인을 만드는 방법: 큰 파일의 경우 색인 파일이 방대해지므로
- 1차 색인 파일: 이진 탐색
- 2차 색인 파일: 이진 탐색
- 데이터 블록: 선형 탐색
(예) IBM의 ISAM(Indexed Sequential Access Methods): 2차 색인의 디스크 블록을 지정하는 작은 마스터 색인을 사용
(예) VMS: [그림 10.5] 색인과 상대적 파일(relative file)의 예
10.3 디렉토리 구조(Directory Structure)
▶ 파일 시스템: 두 부분으로 구성
- 분할(partition)/볼륨(volume)
- 장치 디렉토리(device directory)/볼륨 테이블(volume table)
[그림 10.6] 전형적인 파일 시스템의 구성
▶ 디렉토리에 대한 조작
① 파일 탐색: 파일명에 의해 디렉토리를 탐색
② 파일 생성: 디렉토리에 해당 파일의 항목을 추가
③ 파일 삭제: 디렉토리에서 해당 파일의 항목을 제거
④ 디렉토리 나열: 디렉토리 내의 파일들에 대한 항목 내용을 보여줌
⑤ 파일의 재명명: 파일의 내용이나 사용이 변경될 때마다 파일명 변경 가능
⑥ 파일 시스템 횡단: 일정 기간마다 파일 시스템의 내용과 구조를 테이프나 디스크에 저장
→ 예비 복사(backup copy)
10.3.1 1 단계 디렉토리(Single Level Directory)
▶ 개념 및 특성: [그림 10.7] 1단계 디렉토리
- 모든 파일이 같은 디렉토리에 있어 유지 및 이해가 용이
- 디렉토리내의 모든 파일의 이름이 구별되어야 함
→ 일반적으로, 파일명의 크기에 제한 있음
ex) MS-DOS: 11자, UNIX: 255자, MS-WINDOWS: 256자
10.3.2 2 단계 디렉토리(Two Level Directory)
▶ 개념 및 특성: [그림 10.8] 2단계 디렉토리 구조
- 각 사용자마다 별도의 사용자 파일 디렉토리(User File Directory; UFD)가 배정됨
- 업무의 시작이나 등록(login)시 마스터 파일 디렉토리(Master File Directory; MFD)를 먼저 탐색
→ “사용자간의 독립”
(장점) 서로 다른 사용자간의 파일명 혼란 해결
파일의 생성/삭제시 해당 사용자 파일 디렉토리만 탐색하므로 서로 다른 사용자가 동일한 이름의 파일을 사용할 수 있음
(단점) 사용자간의 협력이 어려워짐
다른 사용자의 파일 참조가,
1) 불가한 경우
2) 가능한 경우: 경로(사용자 이름 + 파일명)를 명시해야 함
ex) USERA의 파일 ‘TEST’
- USERA의 경우: TEST
- USERB의 경우: /USERA/TEST
10.3.3 트리 구조 디렉토리(Tree Structured Directory)
▶ 개념 및 특성: [그림 10.9] 트리 구조로 된 디렉토리 구조
- 사용자들이 자신의 종속 디렉토리(subdirectory)를 생성
→ 각 파일은 유일한 경로를 가짐: ex) MS-DOS
- 파일(0)과 종속 디렉토리(1)의 구분: 각 항목에 한 비트 지정
→ 디렉토리의 생성, 삭제, 변경: 시스템 호출
- 경로 이름
1) 완전 경로 이름: 루트 디렉토리(root directory)부터 지정된 파일까지의 경로 명시
2) 상대 경로 이름: 현재 디렉토리(current directory)를 기준으로 지정
- 다른 사용자의 파일 접근이 용이
→ 탐색 경로 지정 가능
ex) 순위 예: 1) 자신의 지역 디렉토리
2) 시스템 파일 디렉토리
3) 다른 사용자의 디렉토리
10.3.4 비순환 그래프 디렉토리(Acyclic-Graph Directory)
▶ 개념: [그림 10.10] 비순환 그래프 디렉토리 구조
- 디렉토리들이 종속 디렉토리나 파일을 공유할 수 있도록 허용하는 구조
프로그래머1
프로그래머2
공유 파일
공유 디렉토리
공유 파일
▶ 공유 파일/공유 디렉토리 구현 방법
1) 새로운 디렉토리 항목 사용: ‘링크’ - 다른 파일이나 종속 디렉토리를 가리키는 포인터
2) 공유 파일에 관한 모든 정보를 복사하여 필요로 하는 디렉토리에 두는 방법
▶ 문제점
1) 동일한 파일이 서로 다른 경로에 의해 참조되는 중복 참조 문제
2) 삭제된 공유 파일 공간의 재사용 시점 결정 문제
① 파일의 삭제시 링크도 삭제하는 방법: 각 파일에 대한 링크 리스트 필요
② 파일의 삭제시 링크를 그대로 두는 방법: 파일의 존재 유무 파악 필요
③ 파일에 대한 모든 참조가 삭제될 때까지 파일을 보존하는 방법
→ 마지막 참조가 제거되었는지를 결정하는 방법 필요
- 각 파일에 대한 파일 참조 리스트(reference list) 사용: 리스트의 크기가 가변이고 매우 커짐
- 각 파일에 대한 참조 계수(reference count) 사용
10.3.5 일반적인 그래프 디렉토리(General Graph Directory)
▶ 개념: [그림 10.11] 일반적인 그래프 디렉토리
- 순환 가능 구조
▶ 문제점
1) 탐색시: 무한 순환 가능
2) 삭제시: 참조 카운트가 0이 아닌 경우에도 삭제되어야 하는 경우 발생 - 'self-referencing'
(해결) 쓰레기 수집(garbage collection): 접근 가능 파일을 표시한 뒤, 표시 안된 파일들을 사용 가능 기억 장소의 리스트에 추가
→ 처리 시간이 많이 소모됨
10.4 파일 보호(File Protection) → 19장 참조
▶ 물리적인 손상으로부터의 보호[신뢰도]: 복사에 의해 해결 ex) 정기적인 자동 복사
- 하드웨어의 문제: 판독이나 기록상의 오류, 전원 장애, 헤드 파손, 먼지, 온도, 고의적인 파괴행위
- 소프트웨어 문제: 파일 시스템의 버그(bug)
▶ 부적격한 접근으로부터의 보호[보안]: 접근 제어로 해결
10.4.1 접근의 형태(Types of Access)
▶ 제어되는 명령
- 기본 조작의 통제: 판독, 기록, 실행, 추가, 삭제, 리스트
- 상위 조작의 통제: 재명명, 복사, 편집 등
→ 일반적으로 상위 조작은 기본 조작에 의해 통제됨: ex) 판독(기본) → 복사(상위)
10.4.2 접근 리스트와 그룹(Access Lists and Groups)
▶ 사용자의 신원에 따라 접근을 허용하는 방법
→ 접근 리스트(access list): 각 파일과 디렉토리에 대해, 각 사용자의 이름과 접근 유형을 규정
▶ UNIX의 경우
- 세 가지 부류의 사용자(19.4.2절 참조)
① 소유자(u): 파일을 생성한 사용자
② 그룹(g): 파일을 공유하고 유사한 접근을 필요로 하는 사용자들의 집합
③ 다른 사람(o): 시스템에 있는 모든 다른 사람
- 세 가지(3bit) 제어 명령: UNIX의 경우
① r: 판독 접근
② w: 기록 접근
③ x: 실행 제어
→ 접근 리스트는 총 9bit 필요: [10.4.4 참조]
10.4.3 다른 보호 방법(Other Protection Approaches)
▶ 암호(passwords)에 의해 파일/디렉토리 접근을 제어하는 방법
→ 제어 명령(판독, 기록 등)에 따라 구분되는 다중 암호의 사용 가능
▶ 파일의 이름을 알고 있는 경우에만 접근할 수 있게 하는 방법
→ 동일한 파일도 사용된 경로 이름에 따라 다른 접근 유형을 가질 수 있음
10.4.4 예: UNIX
▶ 디렉토리 리스팅: 파일/디렉토리 보호, 소유자명, 그룹명, 파일 크기(byte), 생성 날짜, 파일명
[그림 10.12] 디렉토리 리스팅 예
10.5 일관성 의미 구조(Consistency Semantics)
▶ 일관성 의미 구조: 동시에 공유된 파일에 접근하려고 하는 다수 사용자의 의미 구조를 규정하는 시스템의 특성
→ 파일 공유를 제공하는 파일 시스템 평가의 중요한 기준
▶ 파일 세션(file session): 개방과 폐쇄 사이의 연속된 파일 접근(판독, 기록)
10.5.1 UNIX 의미 구조(UNIX Semantics)
▶ UNIX 파일 시스템의 단일 영상 개념
- 한 사용자의 개방 파일에 대한 기록이 그 파일을 동시에 개방하고 있는 다른 모든 사용자에게 보여짐
- 파일의 현재 위치 포인터 공유로 한 사용자에 의한 포인터 이동이 다른 모든 사용자에게 영향을 끼침
10.5.2 세션 의미 구조(Session Semantics)
▶ Andrew 파일 시스템의 여러 다른 영상 개념
- 한 사용자의 개방 파일에 대한 기록이 그 파일을 동시에 개방하고 있는 다른 모든 사용자에게 즉시 보여지지 않음
- 일단 파일이 폐쇄되면, 그 파일에서 발생한 변경은 그 후에 시작되는 세션에서만 보여지고, 이미 개방된 그 파일의 예들에서는 이러한 변화를 반영하지 않음
10.5.3 불변 공유 파일 의미 구조(Immutable-Shared-Files Semantics)
▶ 특별한 경우
→ 공유 파일은 파일명이 재사용되거나 파일 내용이 변경될 수 없음
'시리즈 > OS' 카테고리의 다른 글
12. 입출력 시스템(I/O Systems) (0) | 2014.08.12 |
---|---|
11.1 파일 시스템 구조(File-System Structure) (0) | 2014.08.08 |
가상 기억장치(Virtual Memory) (0) | 2014.07.27 |
기억장치 관리(Memory Management) (0) | 2014.07.25 |
운영체제 - 교착 상태(Deadlocks) (0) | 2014.07.24 |