•파일 시스템의 기본 개념
- 장기적 정보 저장에 대한 요구
엄청 많은 양의 정보를 저장할 수 있어야 한다.
프로세스가 그것을 사용하고 종료하더라도 남아있어야한다.
다수의 프로세스가 동시에 접근할 수 있어야 한다.
- 파일 시스템의 책임
보조 저장소에 대한 추상화 구현(파일)
파일을 논리적으로 조직화(디렉토리)
프로세스, 사람, 기계 간의 정보 공유 허가
비인가 접근에 대한 데이터 보호(보안)
•파일
- 파일이란?
보조 저장소에 기록된 관련 정보의 명명된 집합체
파워 결함이나 시스템 리부팅에도 유지됨
OS는 파일을 통한 정보 저장의 일관된 논리적 뷰를 제공
- 파일 구조
Flat: 연속된 바이트
간단한 기록 구조 : lines, fixed length, variable length
복합한 구조 : formatted document, relocatable load file
•파일 타입
- 파일은 타입을 가질 수 있다.
1) 파일 시스템으로 이해되는 형식
2) OS의 다른 부분이나 런타임 라이브러리로 이해되는 형식
3) 어플리케이션 프로그램으로 이해되는 형식
- OS는 파일 형식을 어떻게 인지할까?
1) 윈도우
name + extension 의 형식으로 인지
파일 이름만으로도 형식을 알 수 있다.
2) 유닉스
파일 이름 확장명 힌트를 허용하지만 이러한 확장명은 운영 체제에 의해 적용되거나 의존되지 않습니다.
대부분 사용자가 파일의 내용 유형을 결정하는 데 도움이됩니다.
UNIX는 각 파일을 8 비트 바이트 시퀀스로 간주합니다. 이러한 비트에 대한 해석은 운영 체제에서 이루어지지 않습니다.
•파일 접근
- sequential access
바이트를 한번에 하나씩 순서대로 읽는다.
- direct access
주어진 블락/바이트 넘버로 랜덤 액세스한다.
- record access
파일은 고정 길이 또는 가변 길이 레코드의 배열이며 레코드 #에 의해 순차적으로 또는 무작위로 읽거나 씁니다.
- index access
파일 시스템은 파일의 각 레코드의 특정 필드에 대한 인덱스를 포함하고, 해당 필드에 대한 값을 읽으며 시스템은 인덱스 (DB)를 통해 레코드를 찾습니다.
•파일 오퍼레이션
- open-file table
디렉토리 탐색 오버헤드를 피하기 위해 OS는 open file에 대한 정보를 담은 작은 테이블을 유지합니다.
파일 오퍼레이션이 요청되면, 그 파일은 이 테이블의 인덱스로 명시됩니다. 따라서 탐색이 필요없게 됩니다.
파일이 더 이상 사용되지 않으면, 프로세스에 의해 닫히고, OS는 엔트리를 제외시킵니다.
•디렉토리
- 사용자들에게 있어서, 파일을 조직화하기 위해 구성된 방식을 제공합니다.
- 파일 시스템에 있어서, 구현시 논리 파일 구성을 디스크의 실제 파일 배치와 분리 할 수 있는 편리한 이름 지정 인터페이스를 제공합니다.
- 계층적 디렉토리 시스템
대부분의 파일 시스템은 멀티레벨 디렉토리를 제공합니다.
대부분의 파일 시스템은 현재 디렉토리에 대한 개념을 제공합니다.
-> 현재 디렉토리에 대한 상대적 이름
-> 루트 디렉토리로 시작된 절대적 이름
- 내부
일반적으로 디렉토리는 특별한 메타데이터를 가진 파일(파일 이름, 파일 속성 등에 대한 리스트)입니다.
일반적으로 순서가 없습니다. -> 일반적으로 디렉토리를 읽을 때에 소팅됩니다.
디렉토리 구조와 파일들 모두는 디스크에 저장됩니다.
•디렉토리 조직화
- 효율성 : 파일을 빠르게 위치할 수 있습니다.
- 명명 : 유저들에게 편리합니다. 두 유저가 다른 파일을 같은 이름으로 쓸 수 있습니다. 같은 파일이 여러개의 다른 이름을 가질 수 있습니다.
- 그룹핑 : 파일 속성에 의해 논리적으로 그룹핑
- 종류
1) 트리 구조 디렉토리
탐색에 용이
그룹화 기능
현재 디렉토리
2) 비 순환 그래프 디렉토리
하위 디렉토리와 파일들을 공유할 수 있습니다. -> 삭제시 dangling pointer가 발생할 수 있습니다.
•파일 시스템 마운팅
- 마운팅 : 파일 시스템을 마운트해야 시스템에서 프로세스를 사용할 수 있습니다.
1) 윈도우 : 드라이브 루트 (C:\, D:\ 같은 것들)
2) 유닉스 : 존재하는 빈 디렉토리 (= 마운트 포인트)
ㆍ파일 공유
- 멀티 유저 시스템에서 파일의 공유가 요구됩니다.
통신 및 동기화의 기반
분산 시스템의 경우, 파일은 네트워크를 통해 공유될 수 있습니다.
- 세가지 핵심 요소
1) 동시 액세스의 의미
한 프로세스가 쓰고 있는 중에 다른 프로세스가 읽으면 어떻게 될까?
두 프로세스가 파일을 작성할 목적으로 같은 파일을 동시에 열면 어떻게 될까?
2) 파일 락을 이용한 동시성 제어
3) 보호
ㆍ보호
- 파일 시스템은 몇 종류의 보호 시스템을 반드시 수행합니다.
누가 파일에 접근할 수 있는지에 대한 제어 (유저 제어)
그들이 파일에 어떻게 접근하는지에 대한 제어 (read/write/exec/addend/delete 등등 권한 제어)
- 일반화
1) 객체에 대한 파일 일반화 (what)
2) 주체에 대한 유저 일반화 (who)
3) 행동에 대한 read/write 일반화 (how)
- 보호 시스템
보호 시스템은 주어진 "대상"을 주어진 "주체"에 의해 수행되는 주어진 "행동"이 허용되어야 하는지를 결정합니다.
• 파일 시스템의 구현
- 유저의 관점
파일이 어떻게 이름 지어지는지
그것들이 어떠한 행동이 허용되는지
디렉토리 트리가 어떻게 생겼는지
- implementor의 관점
파일과 디렉토리가 어떻게 저장되는지
디스크 공간이 어떻게 관리되는지
어떻게 모든 작업이 효율적이고 믿을 수 있게 만들 수 있는지
- 파일 시스템 구조
논리적 구조 유닛
관계된 정보들의 집합체
보조 저장소에 저장됨 (레이어로 구성됨)
FCB(File control block) : 파일에 대한 정보로 구성된 저장소 구조
- 디스크 구조
Boot control block
해당 파티션에서 OS를 부팅하기 위해 시스템에 필요한 정보.
UFS (Unix File System): boot block
Windows NTFS: partition boot sector
Partition control block
파티션 세부 정보 : 파티션의 블록 수, 블록 크기, 사용 가능한 블록 수, 사용 가능한 FCB 수 등
UFS: superblock
Windows NTFS: Master File Table
Directory structure
파일을 조직화하기 위해 사용됨
Individual files
FCB contains many of file’s details
UFS: inode
- 메모리 구조
메모리 내 정보는 파일 시스템 관리 및 성능 향상을 위해 (캐싱을 통해) 사용됩니다.
In-memory partition table
각 마운틴된 파티션의 정보를 포함합니다.
In-memory directory structure
최근에 액세스 한 디렉토리의 디렉토리 정보를 보유합니다.
System-wide open-file table
각각의 오픈 파일에 대한 FCB의 사본을 저장합니다.
Per-process open-file table
시스템 차원의 열린 파일 테이블에서 해당 항목에 대한 포인터가 들어 있습니다.
•디렉토리의 구현
- 데이터 블록에 대한 포인터가있는 파일 이름의 선형 리스트
프로그램하기 쉽다.
작동에 시간이 오래걸립니다.
엔트리는 평균 검색 시간을 줄이고 정렬 된 디렉토리 리스팅을 쉽게 생성하도록 정렬 될 수 있습니다 (예를 들어, B- 트리를 사용).
- 해시 테이블 : 해시 데이터 구조를 선형 리스트에 적용
디렉토리 탐색 시간이 줄어듭니다.
해시 테이블은 일반적으로 고정된 크기이며 해시 함수는 해당 크기에 따라 다릅니다. (충돌 메커니즘 필요)
많은 수의 파일에도 사용가능합니다. (해시 테이블을 확대하고 재매핑. 체인-오버플로우 해시 테이블을 사용)
- 메타데이터의 위치
1) 디렉토리 엔트리에 존재
2) 분리된 데이터 구조에 존재(inode)
3) 하이브리드
'레거시 > OS' 카테고리의 다른 글
Mass Storage Structure (0) | 2017.06.19 |
---|---|
I/O Systems (0) | 2017.06.19 |
Virtual Memory (0) | 2017.06.18 |
Memory Management (0) | 2017.06.18 |
File System(2) (0) | 2017.06.18 |