* 본 내용은 운영체제를 공부하며 추후 복습하기 위해 포스팅하는 게시물입니다.
File System이란? File을 저장하고 관리하고 보호하는 시스템을 의미
File
- 이름이 있는 연관된 데이터들의 집합을 의미
- 운영체제는 다양한 장치를 File이라는 논리적 단위로 보여줌
- create, delete, read, write, open, close 연산이 존재하며 open을 해야만 read, write가 가능
Directory
- Directory 하부의 있는 파일들의 일부 metadata를 내용으로 가지고 있는 특별한 파일을 의미
Partition(=Logical Disk)
- 하나의 물리적 디스크를 여러 개의 논리적 디스크로 분할하는게 일반적ex) C 드라이브, D 드라이브
- 여러 개의 물리적 디스크를 하나의 논리적 디스크로 구성하기도 함(RAID)
- 보통 Partition을 사용하는 경우는 하나의 File System or Swap Area의 용도
Open()
- 파일을 read 하거나 write 하기 위해서는 open 시스템 콜을 호출해야함
- 디스크에 존재하는 File의 metadata를 메모리에 할당
예제) 경로 "/a/b/c"에 존재하는 파일을 읽어라
fd = open("/a/b/c");
1) root 디렉토리의 metadata를 커널 메모리에 할당
2) root 디렉토리는 하부의 파일들의 일부 metadata를 가지고 있기 때문에 /a/ 디렉토리의 metadata를 커널 메모리에 할당함
3) 2)번과 마찬가지로 "/a/b/" 디렉토리의 metadata를 커널 메모리에 할당
4) "/a/b/" 디렉토리의 c 파일의 metadata를 메모리에 할당한 후 각 프로세스의 PCB에 c 파일의 metadata를 가리키는 포인터를 테이블에 저장
5) 반환값으로 테이블의 인덱스를 반환
Read
- 파일을 읽어 커널 메모리에 저장함(Buffer Cache)으로써 다른 프로세스가 같은 파일을 요청할 때 디스크에 요청하지 않아도 됨
- 요청한 프로세스에게 커널 메모리에 저장한 데이터의 사본을 전달
- 같을 파일을 읽더라도 각 프로세스별로 읽는 부분이 다르기 때문에 offset이라는 metadata를 커널메모리 or PCB에 저장함(운영체제 구현에 따라 다름)
File Protection
- 파일을 보호하는 3가지 방법이 존재
1) Access Control Metrix
- 행렬을 이용하여 파일과 사용자 간 접근권한을 표시하는 방법
- LinkedList를 이용하여 사용자가 가지고 있는 권한이 있는 파일 리스트로 관리할 수 있으며, 반대로 파일에 대한 권한을 가지고 있는 사용자 리스트로 관리할 수 있음
- 공간 낭비가 심함
2) Grouping
- 파일에 대한 사용자를 3가지 분류로 분할(owner, group, others)
- 각 분류별로 파일에 대한 접근권한을 부여(분류별 3bit씩 총 9bit 사용)
- 하나의 파일에 9bit를 할당하여 권한을 줄 수 있기때문에 효율적
3) Password
- 파일에 Password를 부여하는 방식
- 파일 별 Password, 접근권한 별 등 Password에 대한 관리가 어려움
순차 접근(Sequence)
- 파일을 읽는데 처음부터 읽는방식
- A, B, C로 구성된 파일에서 C를 읽기 위해서 A, B를 읽은 다음 읽어야함
직접 접근(Direct)
- 파일을 읽는데 임의의 시점부터 읽는방식
- A, B, C로 구성된 파일에서 C를 읽기 위해서 C를 바로 읽을 수 있음
디스크에 파일 데이터를 저장하는 방식에는 3가지가 존재한다.
* 디스크에는 저장할 수 있는 논리적인 최소단위를 블록이라 함
* 하나의 블록은 하나의 섹터로 구성됨(섹터는 512 byte)
1) Continuous Allocation
- 파일 데이터를 연속적으로 블록에 할당하는 방식
장점
- 파일 데이터가 인접해있기 때문에 빠른 I/O가 가능하다. 빠르게 저장하고 읽어와야하는 Swap Area에 사용된다.
- 디스크의 데이터를 읽어오는 시간은 header가 seek 하는 시간이 가장 큰 비중을 차지하기 때문에 블록들이 인접하게 할당되었을 경우 header가 블록을 찾을 움직임이 많지 않기 때문에 빠른 I/O가 가능하다.
- 직접 접근이 가능하다.
단점
- 외부조각이 발생할 수 있으며, 파일의 수정에 제한이 있다.(파일은 크기가 변할 수 있기 때문에)
- 수정될 것을 대비하여 블록을 크게 할당할 경우에는 내부조각이 발생할 수 있다.
2) Linked Allocation
- 블록에 데이터와 다음 블록을 가르키는 포인터를 할당하는 방식
장점
- 조각이 발생하지 않는다.
- 파일의 수정에 제한이 없다.
단점
- 순차접근만이 가능하다.
- 하나의 블록(섹터)이 고장이 발생하여 읽지 못할경우 다음 블록을 읽을 수 없다.
- 블록의 일부를 다음 블록을 가르키는 포인터로 사용해야 하기 때문에 블록 전체를 데이터 공간으로 사용할 수 없다.
3) Indexed Allocation
- 파일을 구성하는 블록을 가르키는 포인터를 파일의 첫 블록(인덱스 블록)에 할당하는 방식
- 데이터가 큰 파일은 Multi-Level or Linked Schema를 이용하여 인덱스 블록을 구성할 수 있음
장점
- 직접 접근이 가능하다.
- 조각이 발생하지 않는다.
- 파일의 수정에 제한이 없다.
단점
- 크기가 작은 파일(하나의 블록만을 사용하는)의 경우 불필요하게 인덱스 블록을 할당해야 한다.
여러 파일시스템이 존재하며 유닉스계열의 파일시스템과 윈도우계열의 파일시스템을 알아본다.
유닉스 파일시스템
- 파일의 metadata를 저장하는 inodeList 영역이 존재한다.
- 하나의 파일에 하나의 inode가 매칭
- inode는 고정된 크기이며, inode에 대한 구성은 직접적으로 데이터블록을 가르키는 영역, 한번의 포인터를 이용하는 인덱스 영역, 두번의 포인터를 이용하는 인덱스 영역 등으로 구성되어 있다.
- 파일의 크기에 상관없이 디스크 공간을 효율적으로 관리한다.
FAT(Fast Allocation Table) 파일시스템
- 파일의 metadata 대부분은 directory가 관리하며, 파일의 위치만 FAT이라는 테이블이 관리한다.
- FAT 테이블에는 모든 파일에 대한 위치정보가 저장되고 관리된다.
VFS
- 여러 파일시스템이 존재하기 때문에 사용자는 같은 기능일지라도 서로 다른 파일시스템의 함수를 호출을 해야하는 문제가 발생
- 이러한 문제점을 보완하기 위해 추상화를 제공함으로써 해결(JDBC의 API를 생각하면 됨)
NFS
- Network를 통해 원격에 존재하는 파일시스템을 사용할 수 있게 함
- 클라이언트측과 서버측에서 NFS 에 대한 모듈이 존재해야 함
'운영체제' 카테고리의 다른 글
FileSystem이란?(2) (0) | 2021.04.16 |
---|---|
Virtual Memory에 대해서 알아보자 (0) | 2021.03.29 |
Memory Management에 관해서 알아보자 (0) | 2021.03.25 |
DeadLock에 관해서 알아보자 (0) | 2021.03.21 |
Race Condition(경쟁 상태)이 발생하는 사례란? (0) | 2021.03.19 |