File System - File System Interface
- 파일 시스템은 관련된 정보 자료를 저장하는 실제적인 파일들의 집합체와 시스템 내의 모든 파일에 관한 정보를 제공하는 디렉터리 구조로 구성된다.
1. File Concept
- 파일은 보조 기억 장치에 기록된 관련 정보의 집합으로 정의할 수 있다.
A. File Attributes
- 파일은 사용자가 이름을 붙여서 만들고 그 이름으로 파일을 참조한다.
- 파일은 만들어지면 그 파일을 생성한 프로세스, 사용자, 시스템으로부터 독립한다.
- 파일은 전형적으로 다음과 같은 속성을 가진다.
- 이름, 식별자, 타입, 위치, 크기, 보호( 접근 제어 정보 ), 시간, 날짜, 사용자 식별
- 파일에 대한 정보는 보조 기억 장치에 상주하는 디렉터리 구조에 의해서 유지된다. 디렉터리 항목은 파일의 이름과 고유 식별자로 구성된다.
B. File Operations
- 운영체제가 파일을 적절히 정의하기 위해 실행할 수 있는 연산들
- 파일 생성
- 파일 쓰기
- 파일 읽기
- 파일 위치 재설정
- 파일 삭제
- 파일 절단
- 위와 같은 파일 연산들은 지명된 파일과 관련된 디렉터리를 찾는 작업을 한다. 그래서 반복적인 탐색을 피하고자 많은 시스템들은 파일이 맨 처음 사용될 때
open()
시스템 호출을 한다. open()
호출을 하면 운영체제는 모든 열린 파일에 대한 정보를 갖는 열린 파일 테이블을 유지한다.
- 운영체제는 프로세스별 테이블과 범 시스템 테이블을 사용한다.
- 프로세스별 테이블은 각 프로세스가 연 모든 파일들을 기록하고 여기에는 프로세스가 파일을 어떻게 사용하는가에 대한 정보가 저장되어있다.
- 프로세스별 테이블의 각 항목은 다시 범 시스템 열린 파일 테이블들을 가리킨다. 즉, 어떤 프로세스가 파일을 열면 범 시스템적으로 존재하는 열린 파일 테이블과 프로세스별 테이블의 어떤 항목이 연결되고 열린 파일 테이블은 파일을 연 프로세스의 수를 가리키는 열린 계수가 1 증가한다.
C. File Types
- 운영체제가 파일 유형을 지원한다면, 운영체제는 파일에 대한 합리적인 연산을 수행 할 수 있다. 시스템은 파일 유형에 따라 파일 연산 명령을 결정한다.
D. File Structures
- 운영체제가 여러 파일 구조를 지원하는 경우
- 장점: 적절한 수행
- 단점: 운영체제 크기 증가, 응용성이 떨어짐
- 운영체제가 파일 형태, 구조에 제한을 두지 않는경우
- 장점: 유연성 극대화
- 단점: 응용 프로그램들일 각자의 프로그램에서 사용되는 파일들에 대한 적절한 해석 필요
E. Internal File Structure
- 물리적 레코드(디스크의 한 블록) ↔ 논리적 레코드의 변환
- 파일은 블록 단위로 저장하는데 이 때문에 내부 단편화 문제가 발생한다.
2. Access Mode
A. Sequential Access
- 순차 접근: 테이프 모델을 기반으로, 순차적으로 읽거나 쓰고 현재 파일 위치 포인터는 자동으로 증가한다.
B. Direct Access
- 디스크 모델을 기반으로하여 논리 레코드의 집합으로 정의된 직접접근 파일은 어떠한 블록이라도 직접 접근을 할 수 있다.
- 실제 파일의 절대적인 블록번호가 N이더라도 사용자가 보기에는 일반적으로 0 또는 1으로 시작한다.
C. Index Access
- 찾고자 하는 레코드가 있으면 먼저 index를 찾고 그 index를 바탕으로 파일을 직접 접근하고 원하는 레코드를 찾는다.
3. Directory and Disk Structure
- 볼륨과 파티션: 볼륨이란 저장장치의 할당 바이트들을 분할, 조합하는 데이터 구조체이다. 파일 시스템으로 포맷된 디스크의 저장영역을 말하는 것이다. 볼륨과 파티션은 서로 다른 개념으로 만약 하드디스크를 하나의 볼륨 덩어리로 본다면, 이 덩어리를 각가의 작은 볼륨 덩어리로 분할할 수 있고 파티션은 이렇게 분할이 가능한 볼륨의 경계를 나누는 것이다.
A. Directory Overview
- 디렉터리는 파일의 이름을 그 위치로 바꾸어 주는 “심볼 테이블’으로 볼 수 있다.
- 각 디렉터리는 다음과 같은 연산을 수행한다.
- 파일 찾기
- 파일 생성
- 파일 삭제
- 디렉터리 나열
- 파일의 재명명
- 파일 시스템의 순회
B. 1단계 디렉터리
- 가장 간단한 디렉터리로 모든파일이 한 개의 디렉터리 밑에 있다.
C. 2단계 디렉터리
- 각 사용자는 UFD(User File Directory)를 가지고 시스템은 UFD를 가리키는 MFD(Master File Directory)를 가진다.
D. Tree-Structured Directory
- 임의의 깊이를 가지는 트리 구조의 디렉터리로 사용자들이 자신의 종속 디렉터리를 가진다.
- 디렉터리의 각 항목은 하나의 비트로 일반파일(0)인지 디렉터리 파일(1)인지 구분한다.
E. Acyclic-Graph Directory
- 트리구조는 파일 또는 디렉터리의 공유를 허용하지 않는다. 비순환 그래프는 디렉터리들이 하위디렉터리들과 파일을 공유할 수 있도록 허용하는 구조이다.
- 유닉스에서 공유파일은 일반적으로 link라고 불리는 새로운 디렉터리 항목을 만드는 것으로, 링크는 다른 파일이나 하위 디렉터리를 가리키는 포인터이다.
- 문제점
- 동일한 파일이 서로 다른 경로에 의해 참조되는 중복 참조의 문제
- 삭제시 공유 파일 공간의 문제
- 파일 삭제시 링크도 삭제 → dangling pointer문제
- 파일 삭제시 링크 그대로 두기 → 파일의 존재 유무 파악하는데 드는 비용
- 파일에 대한 모든 참조가 삭제될 때까지 파일을 보존하는 방법
- 마지막 참조가 제거 되었는지 결정할 필요
- 각 파일에 대한 참조 리스트 사용: 리스트의 크기가 가변이고 커짐
- 각 파일에 대한 참조 계수 사용
F. General graph Directory
- 순환이 가능한 구조이다.
- 문제점
- 삭제시 사실상 사용하지 않는 파일인데 순환으로 인해 참조 계수가 0이아닌 파일이 있을 수 있다. → 이 경우 가비지 콜렉션을 사용한다.
4. File-System-Mounting
- 파일 시스템은 프로세스들에 의해 사용되기 전에 마운트 되어야 한다.
- 파일 시스템 마운팅 과정
- 운영체제에게 디바이스 이름과 파일 시스템을 부착할 수 있는 파일 구조내의 위치(마운트 포인트)가 주어지고 마운트 포인트는 마운트 되는 파일 시스템이 부착될 비어 있는 디렉토리이다.
- 다음에 운영체제는 디바이스가 유효한 파일 시스템을 포함하는지 확인한다. 그 과정은 디바이스 드라이버가 디바이스 디렉터리를 읽고, 디렉터리가 유효한 포맷을 가지고 있는지 확인하도록 요청함으로써 이루어진다.
- 운영체제는 파일 시스템이 지정된 마운트 포인트에 장착되었음을 디렉토리 구조에 기록한다. 이 기법은 운영체제가 디렉토리 구조를 순회하고 파일 시스템을 적절히 교체할 수 있게 한다.
5. File Sharing
- 파일 공유는 공동 작업을 원하거나 결과를 얻기 위해 요구되는 노력을 줄이기 원하는 사용자에게 중요하다.
A. Multiple Users
- 디렉터리 구조가 사용자의 파일 공유를 허용한다면, 시스템은 파일 공유를 중재해야 한다.
- 이러한 파일 공유와 보호를 위해, 시스템은 파일과 디렉터리에 대해 단일 사용자 시스템보다 더 많은 속성을 가져야 한다.
- 주어진 파일 또는 디렉터리의 소유자와 그룹은 파일 속성들과 같이 저장되고 어떤 사용자나 그룹이 파일 연산을 요구할때 그 요청 한 사용자의 ID를 파일 소유자 속성과 비교한 뒤 요청을 들어줄지 말지 결정한다.
B. Remote File Systems
- WWW(World Wide Web)
- FTP
- DFS(Distributed File System)
C. Consistency Sementics
6. Protection
A. Types of Access
- 보호 기법은 가능한 파일 접근 유형을 제한 함으로써 통제된 접근을 제공한다.
- 접근유형
B. Access Control
- 사용자의 신원에 따라 특정 파일에 대한 접근 허용 여부를 결정하는 것으로 각 파일과 디렉터리에 접근 제어 리스트(access control list)를 연관해 두는 것이다.
- 접근 리스트의 길이를 간결하게 하기 위해서 많은 시스템은 모든 사용자들을 세가지 부류로 분류한다.( 소유자, 그룹, 모든 사람)
C. Other Protection Approaches