그동안 운영체제를 공부하며 메모리의 주소를 통해 데이터에 접근하는 HW 적인 방식에 대해 알아보았다. 이번 시간에는 우리가 GUI 를 통해 요청하면 OS 에서 파일의 정보를 가져오는 파일 시스템에 대해 알아보려고 한다.
File 이란 '이름' 을 통해 데이터에 접근하는 단위로 OS 에서 파일은 단순한 저장 용도가 아닌 작업 수행을 위한 데이터의 논리적 단위이기도 하다.
File System 은 이러한 파일들을 관리하는 체계로 모든 파일들을 파일의 Meta Data 인 File Attribute(Name, Created Time, Permission, Directory, Type, Size etc) 로 관리하며 다음과 같은 연산들을 활용한다.
1. Open/Close
2. Read/Write
3. Create/Delete
4. Remove, Reposition...

프로세스에서 특정 파일을 오픈하는 과정을 살펴보면 기존의 프로세스의 메모리 관리 간 데이터를 올리는 것 처럼 파일의 정보를 가진 Table 을 활용해 디스크에 저장된 파일의 데이터를 가져온다.
여기서 Directory 란 파일의 집합을 관리하는 파일로 File Attribute 를 활용해 하위 파일 들을 관리하며 위와 같이 특정 파일의 경로 상 모든 디렉토리 파일 또한 메모리에 올려야 최종 타겟 파일에 접근할 수 있다. 파일의 디렉토리는 Linear List 나 Hash Table 형식으로 구현되어 있으며 자신의 하위 파일들의 이름을 Key 로 Meta Data 를 매핑해 관리한다.
하지만 모든 파일이 항상 접근 가능하진 않다. 파일에 접근하기 위해서는 접근 권한이 필요하며 접근 권한 또한 파일 시스템에서 다음과 같이 관리한다.
1. Global Table
[사용자 : 전체 파일들] 의 권한을 테이블로 관리하는 방법. 파일의 수가 많을수록 테이블이 커지고 가용 가능한 빈 공간 또한 많아지기에 확실하면서도 비효율적인 방법이다. (반대로 파일 별로 사용자 권한을 나타낸 것은 Access Matrix 라고 한다)

2. Capability List
위의 방식에서 빈 공간을 줄이기 위해 파일 혹은 사용자 별로 Linked List 로 Permission 을 관리하는 방법. 단, 중간에 Pointer 를 잃어버리게 되면 다른 권한 정보도 잃어버리는 문제가 있다.
3. Grouping
Unix OS 에서 사용되는 방식.

파일에 대한 접근 권한을 가지고 있다면 파일에 접근하여 파일의 정보를 디스크에서 가져오게 되는데 디스크의 종류 혹은 디스크의 저장 방식에 따라 접근 방식이 달라진다.
1. 연속 저장
파일을 디스크의 Block(데이터 저장단위, Paging 의 프레임과 유사함)에 데이터를 연속으로 저장하는 방식. 가용 가능한 빈 공간이 발생하는 단편화 문제와 파일의 크기 수정에 어렵다는 단점이 존재하지만, 파일의 I/O 가 빠르고 직접 접근(O(1))이 가능하다.
2. 연결 저장
연속 저장의 단편화 문제를 해결한 저장 방식. 모든 Block 은 다음 Block 을 가르키는 Pointer 를 가지고 있고 Pointer 유실 시 문제와 더불어 직접 접근이 아닌 순차 접근(O(N))을 하기에 느리다는 단점을 가지고 있다. (Upgrade Version : FAT)
3. Index 할당
임의의 Block 에 다른 모든 Block 의 정보를 적어두는 방식. 직접 접근과 단편화 문제가 해결 가능하지만 Table 의 공간 차지 그리고 512Byte 를 넘어가는 정보를 담을 수 없다는 단점을 가지고 있다. (그만큼 Table Block 이 더 필요하게 됨)
4. 실제 운영 체제의 File System(Unix)

5. 실제 운영 체제의 File System(FAT)

이어서 파일 저장 간 발생하는 빈 공간 (Free Space) 는 다음과 같은 방법들로 관리한다.
1. Bit Map
모든 빈 공간을 Linear List 에 0(Empty) / 1(Full) 로 표현, 연속 저장되어 있기에 연속된 빈 공간을 찾기에는 적합함.
2. Linked List
모든 빈 공간을 Linked List 로 연결, 연속적 데이터를 찾기에는 시간이 걸림.
3. Grouping
Index Allocation 방식으로 빈 공간의 Pointer 가 다른 빈 공간들을 가르킴. 1:N
4. Counting
Grouping 시 하위 연속된 빈 공간의 Count 를 추가.
마지막으로 모든 디바이스가 각자의 OS 를 가지고 있기에 서로의 File System 을 가지고 있다. 따라서 서로 다른 File System 간에는 그에 따른 OS 의 시스템 함수 System Call 이 다를 수 있기 때문에 이를 동일한 인터페이스로 서로 접근이 가능하게 해주는 API 를 VFS(Virtual File System) 그리고 네트워크를 통해 서로 공유하는 것을 NAS(Network File System) 이라고 한다.
'컴퓨터 공학 > 운영체제' 카테고리의 다른 글
| 디스크 관리 (0) | 2023.02.10 |
|---|---|
| 메모리 관리 - 가상 메모리 (0) | 2023.02.06 |
| 메모리 관리 - Segmentation (0) | 2023.02.06 |
| 메모리 관리 - Paging (0) | 2023.02.05 |
| 메모리 관리 (0) | 2023.01.31 |