-
파일 시스템(File Systems)Computer Engineering/운영체제 2019. 8. 23. 18:17
안녕하세요 dely입니다:)
오늘은 파일 시스템(File Systems)에 대해 정리해보겠습니다.
파일 시스템은 실제적인 데이터를 저장하는 파일과
파일들을 계층적으로 연결하는 디렉토리로 구성됩니다.
1. 파일(File)
파일은 관련된 정보들의 집합에 이름을 부여한 것으로
비휘발적 성질을 가진 물리적 장치에 저장됨으로써 영속성을 가질 수 있습니다.
File attribute는 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들을 말합니다.
파일 이름이나 유형, 저장된 위치, 파일 사이즈와 같은 metadata들을 가지고 있게 됩니다.
2. 디렉토리(Directory)
파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일입니다.
디렉토리 안에 있는 파일 이름 및 file attribute를 가지고 있습니다.
3. 파티션(Partition(=Logical Disk))
하나의 물리적 디스크 안에 여러 파티션을 두게 됩니다.
file system을 깔거나 swapping 등 다른 용도로 사용할 수 있습니다.
4. File Protection
각 파일에 대해 누구에게 어떤 유형의 접근을 허락할 것인지에 대한 내용입니다.
접근 제어 방법은 다음과 같습니다.
1) Access control Matrix
사용자들과 파일들을 엑셀 파일과 같은 테이블에 행과 열로 적어두고
read, write 접근 권한 정보를 정리한 것입니다.
(1) ACL(Access Control List) : 파일을 기준으로 누구에게 어떤 접근 권한이 있는지 표시합니다.
(2) Capability : 사용자를 기준으로 자신이 접근 권한을 가진 파일 및 해당 권한을 표시합니다.
2) Grouping
각각의 파일에 대해서 owner, group, public 세가지 그룹으로 구분합니다.
각 파일에 대해 세 그룹의 접근 권한을 rwx 3비트로 표시하게 됩니다.
일반적으로 쓰이는 방법입니다.
3) Password
파일이나 디렉토리마다 password를 두는 방법입니다.
접근 권한 그룹을 가지는 공간에서는 password가 다양해지기 때문에 password 관리 문제가 생기게 됩니다.
5. File System의 Mounting
파일 시스템이 여러개가 있을 때
하나의 파일 시스템에서 다른 파티션에 있는 파일 시스템의 파일에 접근하려고 한다면
Mounting를 이용합니다.
Mounting은 운영체제에게 마운트하려는 파일 시스템을
저장하고 있는 장치의 이름을 넘겨주고,
이것을 현재의 파일 시스템에서 어디에 둘 것인지 알려주면 됩니다.
아래의 그림처럼 하나의 노드를 추가함으로써 다른 파일 시스템과 연결되는 방식입니다.
6. 접근 방법(Access Methods)
1) 순차 접근(sequential access)
데이터 a, b, c가 있을 때, 현재 위치 a에서 c로 접근하려면 b를 꼭 거쳐야하는 구조(일명 카세트 테이프 사용 방식)
2) 직접 접근(direct access, random access)
데이터 a, b, c가 있을 때, 현재 위치 a에서 c로 접근하려면 바로 건너뛰어 접근할 수 있는 구조(일명 LP 레코드 판, CD 사용 방식)
7. 디스크에 파일 데이터 저장 방법(Allocation of File Data in Disk)
1) 연속 할당(Contiguous Allocation)
연속적으로 데이터가 저장되는 방식입니다.
그래서 디렉토리에 각 file에 따른 시작점과 파일의 길이에 대한 정보를 갖고 있습니다.
(1) 단점
파일의 크기가 균일하지 않고 시작점이 각자 다르기때문에 외부조각이 발생한다는 것입니다.
또 미리 파일의 크기를 키우는데 제약이 있습니다.
(2) 장점
한 번의 seek, rotation으로 연결되어있는 파일들에 빠른 접근이 가능합니다.
따라서 process swapping용으로 사용하기 좋고, direct access가 가능합니다.
2) 연결 할당(Linked Allocation)
파일의 시작 위치와 종료 위치만 디렉토리가 가지고 있고,
각 위치에 다음 위치 정보를 가지고 있는 방식입니다.
(1) 단점
- 하나의 데이터 위치를 따라가면 다음 위치를 알 수 있기 때문에
직접 접근은 어렵고 순차 접근만 가능합니다.
- 만약 한 sector가 고장나서 pointer가 유실되면 많은 부분을 잃게 됩니다.
- 포인터 저장 공간(4byte)으로 비효율적입니다.
(2) 장점
외부 조각이 발생하지 않습니다.
3) 인덱스 할당(Indexed Allocation)
디렉토리에 인덱스 블록을 두고, 인덱스 블록 안에 파일 데이터들의 포인터 정보를 담아 두는 방식입니다.
(1) 단점
인덱스 공간으로 작은 파일의 경우 공간 낭비가 됩니다.
작은 파일의 경우 index 저장하기에 부족하기 때문에 맨 마지막에 다음 index를 적어두는 방식인
linked scheme과 multi-level index를 통해 문제를 해결할 수 있습니다.
(2) 장점
외부 조각이 발생하지 않고, Direct access가 가능합니다.
8. FAT 파일시스템 구조
FAT 파일시스템은 마이크로소프트가 도스를 만들 때 사용한 시스템으로,
파일의 메타데이터 중 위치정보를 가지고 있습니다.
Data block에서 다음 데이터의 위치정보를 담아두는 공간으로
앞에서 언급한 연결 할당(Linked Allocation)에서의 단점을 해결할 수 있습니다.
직접 접근이 가능하고, Data block의 내용 하나가 유실되더라도 FAT에 저장된 index로 인해 다른 부분에 접근가능하고,
포인터 저장을 FAT에 해두기 때문에 저장공간을 효율적으로 쓸 수 있습니다.
9. 가용 공간의 관리(Free Space Management)
파일 시스템에서 비어있는 부분을 어떻게 관리할 수 있는지에 대한 방법을 이야기합니다.
1) bit map or bit vector
Data block의 사용여부를 컨트롤 할 비트 테이블을 가지고, 비어있으면 0이고 사용중이면 1을 설정합니다.
부가적인 공간이 필요하지만, 연속적인 n개의 free block을 찾는 것에 효과적입니다.
2) Linked List
비어있는 free block들을 모두 연결해둡니다.
연속적인 가용공간을 찾는 것은 어렵지만, 공간의 낭비가 없다는 장점을 가지고 있습니다.
3) Grouping
하나의 free block에 다음 free block의 위치(index)들을 저장해두는 방식입니다.
index를 사용하기 때문에 비어있는 블록들을 찾기에는 효과적이지만, 연속적인 빈 블록을 찾기에는 어렵습니다.
4) Counting
연속적인 빈 블록을 관리하게 위해
비어있는 블록의 첫번째 위치와 그 이후 몇 개가 빈 블록인지를 나타내는 두 가지 정보를 가지고 있게 됩니다.
10. 디렉토리 구현 방법(Directory Implementation)
1) Linear List
파일 이름과 파일의 메타데이터를 테이블 형식으로 관리합니다.
구현이 간단하지만, 파일 탐색 시 linear search를 사용해야하기 때문에 시간이 많이 소요됩니다.
2) Hash Table
해쉬 함수를 적용하여 파일 이름의 공간을 설정합니다.
해쉬 함수 특성 상 일정 범위 안에서 데이터 관리가 가능하다는 장점과
collision(다른 파일명에 같은 metadata)이 발생한다는 단점을 가지고 있습니다.
11. VFS vs NFS
1) VFS(Virtual File System)
사용자가 파일시스템에 접근하기 위해 시스템 콜을 할 때
원래는 각자 다른 파일 시스템에 접근해야하지만 그 윗단에 추상적인 파일 시스템(VFS),
즉, 파일시스템 인터페이스를 두어서 사용자가 파일시스템을 편리하게 사용할 수 있도록 합니다.
2) NFS(Network File System)
원격에 있는 파일 시스템에 접근할 때 사용하게 됩니다.
클라이언트에 있는 VFS를 사용하여 NFS client 모듈과 네트워크 모듈을 거치고,
서버측 NFS server 모듈과 VFS를 통해 파일시스템에 접근하게 됩니다.
반응형'Computer Engineering > 운영체제' 카테고리의 다른 글
가상 메모리(Virtual Memory) (0) 2019.08.21 메모리 관리(Memory Management) (0) 2019.08.18 교착 상태(Deadlocks) (0) 2019.08.17 프로세스 동기화(Process Synchronization) (0) 2019.08.16 CPU 스케쥴링(CPU Scheduling) (0) 2019.08.08