일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Data Structure
- spring webflux
- Spring
- 운영체제
- 백준
- 자료구조
- Java
- 컴퓨터구조
- 자바
- design pattern
- Kafka
- Algorithm
- Galera Cluster
- 디자인 패턴
- OS
- JavaScript
- JPA
- mongoDB
- Heap
- MSA
- c언어
- 알고리즘
- IT
- 파이썬
- redis
- 네트워크
- MySQL
- Proxy
- react
- C
Archives
- Today
- Total
시냅스
파일 시스템 구현, Implementing File-Systems 본문
파일 시스템 구조, File-System Structure
- 파일시스템은 쉽게 데이터를 저장하고, 찾고 인출할 수 있게 함으로써 저장장치를 더욱 효율적이고 편리하게 사용
- 고려해야 할 것
- 사용자에게 어떻게 보여야 할지
- 파일은 무엇인지, 그 속성
- 디렉터리 구조
- 파일에 허용되는 연산
- 각 층은 낮은 층의 기능을 사용하여 새로운 기능을 만들어 상위층에게 제공한다.
- 입/출력 제어 층은 장치 드라이버 루틴들과 인터럽트 핸들러로 이루어져 있어서 메모리와 디스크 시스템 간의 정보 전송을 담당한다.
- 기본 파일 시스템 층은 적절한 장치 드라이버에게 저장장치상의 블록을 읽고 쓰도록 일반적인 명령을 내리는 층이다.
- 파일-구성 모듈 층은 파일과 상응하는 논리 블록을 알고 있다.
- 논리 파일 시스템 층은 메타데이터 정보를 관리한다.
- 파일 내용 자체인 데이터를 제외한 모든 파일 시스템 구조를 말한다.
- 파일 이름을 심볼릭하게 줄 경우 처리하여 하위층인 파일 구성 모듈에 필요한 정보를 넘겨주기 위해 디렉터리 구조를 관리한다.
- 파일 구조는 파일 제어 블록을 통해 유지된다.
- 파일 제어 블록(file control block, FCB) 는 소유, 허가 그리고 파일 내용의 위치를 포함하여 파일에 관한 정보를 가지고있다.
- inode로 구현된다.
파일 시스템 구현, Implementing File-Systems
- 부트 제어 블록은 시스템이 그 파티션으로부터 운영체제를 부트시키는 데 필요한 정보를 가지고 있다.
- 일반적으로 첫 번째 블록이다.
- 부트 블록 또는 파티션 부트 섹터라 불린다.
- 볼륨 제어 블록은 볼륨의 블록의 수, 블록의 크기, 가용 블록의 수와 포인터, 가용 FCB 수와 포인터 같은 볼륨 정보를 포함한다.
- 슈퍼블록, 마스터 파일 테이블 이라 불린다.
- 디렉터리 구조는 파일을 조직화하는 데 사용된다.
- UFS에서는 디렉터리 구조에 파일 이름 및 해당 inode 번호가 저장된다.
- NTFS에서는 마스터 파일 테이블에 이러한 정보가 저장된다.
- open을 통해 파일을 열면, 다른 프로세스에 의해 사용 중인지 확인하기 위해 범 시스템 오픈 파일 테이블을 검색한다.
- 사용 중이면, 기존 범 시스템 오픈 파일 테이블을 가리키는 프로세스별 오픈 파일 테이블 항목이 생성된다.
- 만일 파일이 오픈되지 않았다면, 주어진 파일 이름을 디렉터리 구조에서 찾는다.
- 파일이 발견되면 FCB가 메모리내의 범 시스템 오픈 파일 테이블에 복사된다.
- 이 테이블은 FCB를 저장할 뿐만 아니라, 파일을 오픈한 프로세스의 수도 저장한다.
- 범 시스템 오픈 파일 테이블의 항목에 대한 포인터와 몇 개의 다른 필드를 갖는 새로운 항목이 프로세스별 오픈 파일 테이블 안에 만들어진다.
- 이 필드들은 파일 안의 현재 위치를 가리키는 포인터와 파일이 오픈된 접근 모드 등을 포함한다.
- open은 프로세스별 파일 시스템 테이블 내의 파일에 대한 포인터를 찾아 돌려준다.
- 같은 파일에 대한 다중 오픈 연산을 빠르게 하기 위하여 파일에 대한 포인터를 캐싱한다.
- 이것을 파일 디스크립터 또는 파일 핸들이라고 부른다.
디렉터리 구현, Directory Implementation
- 선형 리스트
- 프로그래밍은 쉽지만, 선형탐색을 해야하므로 실행 시간이 길다.
- 해시 테이블
- 파일 이름을 제시하면 해시로부터 값을 얻어 그것을 포인터로 활용하여 직접 접근할 수 있다.
- 성능이 크게 개선된다.
- 단점은 고정된 크기를 갖는다는 점과 해시 테이블의 크기에 따라 해시 기능도 제한을 받는다는 점이다.
할당 방법, Allocation Methods
- 어떻게 저장장치 공간에 배치해야 디스크 공간을 효율적으로 사용하고, 파일에 빨리 접근할 수 있는가.
- 연속 할당
- 연속적인 공간에 차지하도록 한다.
- 탐색 횟수를 최소화하며 시간 또한 최소화 된다.
- 구현하기 쉽지만 한계로 최신 파일 시스템에서는 사용되지 앟는다.
- 새로운 파일을 위한 가용 공간을 찾으며 외부 단편화 문제의 어려움이 발생한다.
- 연결 할당
- 연결 리스트 형태로 저장한다.
- 장치 내에 흩어져 저장될 수 있다.
- 각 블록이 다음 블록을 가리키는 포인터를 포함한다.
- 외부 단편화가 없다.
- 파일은 계속해서 얼마든지 커질 수 있다.
- 직접 접근 방식에는 매우 비효율적이다.
- 포인터들을 위한 공간이 추가로 필요하다.
- 해결책은 블록을 모아 클러스터라고 하는 단위로 만들고 블록이 아닌 클러스터를 할당하는 것이다.
- 파일 할당 테이블 (FAT, MS-DOS에서만 사용된다.)
- 각 파티션의 시작 부분이 FAT로 사용된다.
- FAT 테이블은 각 블록마다 한 개의 항목을 가지고 있고 이 항목은 디스크 블록 번호를 인덱스로 찾는다.
- 디렉터리 항목은 각 파일의 첫 번째 블록 번호를 가리킨다.
- 그 블록 번호를 가지고 FAT 테이블로 가면 그 항목은 다음 블록의 블록 번호를 가리킨다.
- 마지막 블록은 파일의 끝을 나타내는 특수한 값을 가지고 있다.
- 색인 할당
- 색인 할당은 모든 포인터들을 하나의 장소, 색인 블록으로 관리함으로써 외부 단편화 문제와 파일 크기 선언 문제를 해결한다.
- 블록이 처음 쓰이면 가용 블록 관리자로부터 한 블록을 받아 그 주소를 인덱스 블록의 i 번째 항에 기록한다.
- 연결 기법 : 블록의 크기가 크면 여러 개의 색인 블록으로 연결한다.
- 다중 수준 색인 : 여러 개의 두 번째 수준 색인 블록(실제 파일)들의 집합을 가리키기 위하여 첫 번째 수준의 색인 블록을 사용한다.
- 결합 기법 : inode에 색인 포인터 15개를 유지하여 12개에는 직접 블록을 저장한다. 작은 파일의 경우 추가 색인 블록이 필요 없다. 나머지 3개는 간접 블록을 가리키는 포인터이다. 첫 번째는 단일 간접 블록(데이터를 저장하고 있는 주소를 저장) 두 번째는 이중 간접 블록 (실제 데이터 블록을 가리키는 포인터를 저장하는 블록) 마지막은 삼중 간접 블록의 주소를 저장한다.
가용 공간의 관리, Free-Space Management
- 시스템은 가용 공간을 리스트로 유지하고 관리한다.
- 새로운 파일을 만들려면 가용 공간 리스트를 탐색하여 할당 받는다.
- 가용 공간 리스트는 비트 벡터 혹은 비트맵 으로 구현된다.
- 블록이 비어있다면 1, 할당되어 있다면 0이다.
- 연결 리스트
- 모든 가용 블록들을 함께 연결한다.
- 그룹핑
- 첫 번째 가용 블록 내에 n개의 블록 주소를 저장하는 방법이다.
- 계수
- 연속된 가용 블록의 첫 번째 블록의 주소와 연속된 블록의 개수만 유지한다.
'운영체제' 카테고리의 다른 글
EC2 스토리지 증가 시 적용되지 않을 때 (+ Linux File System) (1) | 2023.10.08 |
---|---|
파일 시스템 인터페이스, File-System Interface (0) | 2022.06.16 |
입출력 시스템, I/O System (0) | 2022.06.07 |
대용량 저장장치 구조, Mass-Storage Structure (0) | 2022.06.06 |
가상 메모리, Virtual Memory (0) | 2022.05.24 |
Comments