일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배열
- cors
- GraphQL
- 포인터
- C
- RT scheduling
- 웹팩
- 프로그래머스
- Machine Learning
- 이진탐색
- RxJS
- 타입스크립트
- APOLLO
- 연결리스트
- vue3
- 코딩테스트
- 알고리즘
- 프론트엔드
- 프로세스
- alexnet
- 컨테이너
- 큐
- pytorch
- 자바스크립트
- 자료구조
- 해시테이블
- 릿코드
- 스택
- 연결 리스트
- 브라우저
- Today
- Total
프린세스 다이어리
[OS] 파일 시스템이란? 파일을 저장하는 방법과 파일 시스템의 종류 본문
1. 파일 시스템의 개념
파일 시스템이란 운영체제가 저장매체에 파일을 읽거나 쓰기 위한 자료구조 또는 알고리즘이다. 컴퓨터를 꺼도 데이터를 유지하기록 데이터의 크기나 위치 등을 약속하여 운영체제에서 읽도록 개발된 시스템이다.
초창기에는 데이터를 비트 단위로 주소를 매겨서 읽고 썼는데 이는 오버헤드가 크다는 단점이 있어, 블록 단위로 관리하기 시작하였다. 4KB 단위로 데이터를 관리하기 시작하면서 주소의 수가 줄어들었고, 블록마다 고유번호를 부여하면 읽고 쓸 수 있게 되었다. 그런데 이것 또한 초반에나 가능했지, 점차 데이터와 저장매체의 규모가 늘어나자마자 바로 일반 사용자가 관리하긴 힘들어지는 문제가 생기게 됐다. 일반 사용자가 파일을 관리하기 용이하도록, 파일을 추상적(논리적) 객체로 관리하기 시작했다. 사용자는 파일 이름만 정해서 데이터를 관리하지만, 컴퓨터 내부적으로는 파일 안의 여러 블록 단위로 데이터를 관리한다.
2. 저장매체에 파일을 저장하는 방법
2-1. 연속적인 공간에 파일 저장
저장매체에 파일을 저장하는 방법은 몇 차례 발전을 거듭했다. 처음에는 가능한 연속적인 공간에 파일을 저장한다는 개념으로 접근했다. 그런데 파일의 사이즈는 수정을 거치면 마구 달라지기 때문에, 변경된 파일 사이즈까지 연속적인 공간에 저장하기에는 무리가 있었다. 이 문제를 '외부 단편화' 문제라고 한다. 따라서 불연속적인 공간에 파일을 저장하게 됐다.
2-2. 블록 체인 기법
그 블록체인 말고, 파일 시스템에서의 블록 체인 기법이다. 블록을 불연속적으로 저장하여 linked list로 관리하는 개념이다. 첫번째 블록 주소만 가지고 있으면, 주소가 불연속적이어도 원하는 블록을 어떻게든 연결된 주소로 줄줄이 찾아갈 수는 있다는 장점이 있다. 그러나 linked list의 끝자락에 있는 블록을 찾으려면 첫번째 블록부터 하나하나 다 찾아야 하기 때문에 시간상 비효율적이다.
2-3. 인덱스 블록 기법
인덱스 블록 기법은 파일마다 색인 블록을 두고, 파일이 할당된 블록의 모든 포인터를 색인 블록에 포함시켜 직접 접근하는 기법이다. 파일 크기의 변화에 유연하고, 랜덤으로 원하는 블록에 바로 접근이 가능하다는 장점이 있다. 그러나 인덱스 블록이 유실되면 파일의 전체 데이터가 소실될 뿐더러, 인덱스 정보 만큼 오버헤드가 커진다.
3. 다양한 파일 시스템들
한편 윈도우나 리눅스 운영체제에서 사용되는 파일 시스템에는 다음과 같은 종류가 있다.
Windows: FAT, FAT32, NTFS, ... -> 블록의 위치를 FAT이라는 자료구조를 기반으로 기록한다.
리눅스(Unix): ext2, ext3, ext4, ... -> 일종의 인덱스 블록 기법인 inode 방식을 사용한다.
운영체제 | 파일 시스템 |
Dos, Windows 3.1, 95 | FAT16 |
Windows 95, 98, ME | FAT16, FAT32 |
Windows NT | NTFS, FAT16 |
2000, XP | NTFS, FAT16, FAT32 |
Linux | Ext, Ext2, Ext3 -> 일종의 인덱스 블록 기법인 inode 방식을 사용 |
MAC OS | HFS, HFS+ |
개발자들은 어떤 언어를 쓰든, 어떤 파일을 쓰든 파일을 오픈하는 함수를 파일 시스템마다 다르게 사용하지 않고 있다. C를 사용하든 Python을 사용하든 파일을 열기 위해서는 똑같이 open 함수를 쓸 뿐, NTFS 파일과 ext4 파일을 열 때 다른 코드를 작성하지는 않는다. 이는 컴퓨터 read/write 시스템콜이 호출되면, 운영체제 내부적으로 각 파일 시스템마다 실질적으로 처리를 담당하는 함수가 구현되어 있기 때문이다. 파일 시스템에 따라 코드를 따로 작성할 필요가 없다.
'운영체제, 컴퓨터 구조' 카테고리의 다른 글
[OS] inode 구조와 파일 데이터를 연결하는 방법 (0) | 2022.02.07 |
---|---|
[OS] inode 방식과 가상 파일 시스템 (0) | 2022.02.06 |
[OS] 작은 C언어 코드가 실행될 때 어떻게 메모리를 사용하는지 설명 (0) | 2022.02.04 |
[OS] 가상메모리 메커니즘 중 하나인 세그멘테이션 기법 정리 (0) | 2022.02.03 |
[OS] 페이지 교체 알고리즘(Page Replacement Algorithm) 5가지와 스레싱(Thrashing) 현상 (0) | 2022.02.02 |