파일 시스템
* 혼자공부하는 컴퓨터구조 운영체제를 공부하였습니다.
파일시스템이란
파일과 디렉터리를 보조기억장치에 할당하고 접근하는 방법이다.
대표적으로 FAT 파일 시스템과 유닉스 파일 시스템이 있다.
막 공장에서 생산되어 한번도 사용된 적이 없는 하드디스크 or SSD가 있다면
파티셔닝과 포매팅을 하기 전까지는 사용할 수 없다.
* 파티셔닝
- 저장장치의 논리적인 영역을 구획하는 작업
- 보조기억장치의 영역을 나누는 작업이다.
- 파티셔닝을 통해 나눠진 영역 하나를 파티션이라고 한다.
* 포매팅
- 어떤 방식으로 파일을 저장하고 관리할지 결정하는 작업이다.
- 파일 시스템을 설정하여 새로운 데이터를 쓸 준비를 하는 작업.
- 물리적 포매팅(공장 수행)과 논리적 포매팅(파일 시스템 생성)이 있다.
옛날에는 USB를 처음 구매후 컴퓨터에 꽂으면 포매팅을 하라고 나왔었다고 한다.
파일시스템에는 여러 종류가 있고, 파티션마다 다른 파일시스템을 설정할 수 있다.
포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉터리 생성이 가능해진다.
파일 할당 방법
- 포매팅까지 끝난 하드 디스크에 파일을 저장하기
- 운영체제는 파일/디렉터리를 블록 단위로 읽고 쓴다. (하나의 파일은 여러 블록에 걸쳐 보조기억장치에 저장됨)
-> 하드디스크의 가장 작은 저장단위는 섹터이지만 보통 블럭단위로 읽고쓴다.
- 연속할당과 불연속할당(연결할당, 색인 할당)의 방법이 있다. (불연속 할당을 많이 사용한다.)
연속 할당
- 보조기억장치 내 연속적인 블록에 파일 할당
- 연속된 파일에 접근할때는 첫번째 블록 주소와 블록 단위의 길이만 알면 된다.
- 디렉터리 엔트리: 파일 이름 & 첫번째 블록 주소 & 블록 단위 길이
단점: 구현이 단순하지만 외부 단편화를 야기할 수 있다.
불연속 할당
연결할당
- 각 블록의 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태
- 파일을 이루는 데이터 블록을 연결리스트로 관리
- 파일이 여러 블록에 흩어져 저장되어도 무방하다.
- 디렉터리 엔트리 : 파일 이름 & 첫번째 블록 주소 & 블록 단위의 길이
- 블록의 끝에는 특별한 지시자를 사용한다. (예를들어 -1을 표시하거나, 끝을 알 수 있도록)
단점
- 파일의 임의의 위치에 접근하는 속도가 느리다. (중간부터 읽기가 안됨)
- 오류 발생시 해당 블록 이후 블록은 접근이 어렵다.
색인할당
- 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리
- 파일 내 임의의 위치에 접근이 용이하다.
- 디렉터리 엔트리: 파일 이름 & 색인 블록 주소
실제로 사용되는 파일 시스템
1. FAT 파일 시스템
- USB, SD카드 등 저용량 저장장치에서 사용된다.
1) 연결 할당 기반 파일 시스템
2) 연결 할당의 단점을 보완했다.
- 각 블록에 포함된 다음 블록 주소를 한데 모아 테이블(FAT: File Allocation Table)로 관리
- FAT 12, 16, 32는 블록을 표현하는 비트수이다.
- FAT는 메모리에 캐시될 경우 느린 임의 접근 속도 개선된다.
3) 디렉터리 엔트리: 파일 이름, 확장자, 속성, 예약영역, 생성시간, 마지막접근시간, 마지막 수정시간, 시작블록, 파일 크기
2. 유닉스 파일 시스템
- 색인 할당 기반 파일 시스템
- 색인 블록 == i-node
1) 파일의 속성 정보와 15개의 블록 주소 저장이 가능하다. (i-node만 읽어도 15개 정보를 가져온다.)
2) 15개보다 큰 파일은?
- 블록 주소 중 12개에는 직접 블록 주소 저장 (직접 블럭: 파일 데이터가 저장된 블록)
- 12개로 부족하다면 13번째 주소에 단일 간접 블록 주소 저장(단일 간접블럭 : 파일 데이터를 저장한 블록 주소가 저장된 블록)
- 두번째로도 부족하다면 14번째에 이중 간접 블록 주소 저장(이중간접블럭: 단일 간접 블럭들의 주소를 저장하는 블럭)
- 세번째로도 부족하다면 15번째에 삼중 간접 블록 주소 저장(삼중간접블럭: 이중 간접 블럭들의 주소를 저장하는 블럭)
3) I-node가 파일 시스템의 핵심이다.
- 이 파일의 속성, 저장된 위치들까지 전부 다 알 수 있다.(파일 크기가 아무리 크더라도).
- 파일 이름을 뺀 모든것을 갖고있다고 봐도 된다.
- 디렉터리 엔트리 : i-node 번호, 파일 이름
** 파일 시스템에 대한 개념은 굉장히 방대하다고 한다. 파일시스템만 다루는 전공서적도 있을 정도
이외에도 윈도우즈의 NTFS, 리눅스의 EXT 파일시스템을 알아두면 좋다고 한다.