- 파일 시스템 (File System)
: 저장장치 내에서 데이터를 읽고 쓰기 위해 미리 정해진 약속
: 파일 저장 및 검색을 용이하도록 유지/관리하는 방법
: 파일을 어떻게 관리할 것인가에 대한 메커니즘과 정책
: 파일 + 디렉토리 구조
: EXT2, EXT3, FAT, FAT32, NTFS, JFFS, JFFS, JFFS2, ISO 9660 ...
: Journaling File System - 파일 시스템의 변화를 기록해 두었다가 시스템 결함으로 문제가 발생할 경우 파일 시스템 복구
- 섹터에 대한 파일 매핑
- 기능
: 파일 생성, 제거, 수정
: 타인과 파일 공동 사용
: Backup & Recovery
: 물리적 장치 이름 대신 기호화된 이름 사용- 장치와의 독립성 제공 : C:, D:, /, /home, /dev/sda1
: 정보의 안전한 보관편리한 인터페이스
: 타겟 저장장치에 따른 최적화된 접근, 할당 정책
- 파일 (File)
: 디스크와 같은 물리적인 저장 매체에 저장되는 데이터 집합
: 데이터 정보에 대한 논리적인 저장 단위
: 저장장치의 물리적 특성을 추상화한 논리적 저장 단위
: 자료가 파일 안에 존재해야만 보조 저장장치에 기록될 수 있음
- 속성(Attributes)
: 이름, 식별자, 타입, 위치, 크기, 보호, 시간 등
: 파일의 내용을 제외한 파일의 모든 정보는 보조 저장장치에 상주하는 디렉터리 구조 내에 유지
: 1단계, 2단계 디렉터리 구조, 트리 구조 디렉터리, 일반 그래프 디렉터리 구조 등 다양한 디렉터리 구조가 존재
- 할당 방법 (Allocation Methods)
: 파일 시스템은 파일을 디스크 블록(block)이라는 논리적인 단위의 집합으로 관리
-> 사용자가 파일을 디스크에 저장하기를 요청하면 파일은 블록단위로 분할되어 파일 시스템 정책에 따라 일정한 장소에 내용을 기록
-> 블록의 크기는 1KB, 4KB, 16KB, 64KB 등
: 디스크 할당의 주요 문제는 파일들을 어떻게 디스크 공간에 배치해야 디스크 공간을 효율적으로 사용할 수 있고, 파일들에 빨리 접근할 수 있는가
: 디스크의 직접 접근 특성이 파일의 구현에 융통성을 허용
- 디스크 블록 할당 방법
■ 연속 할당 (Contiguous Allocation)
: 하나의 파일을 디스크 내의 연속된 블록에 순차적으로 할당하는 방법, 디스크 탐색 횟수를 최소화
: 가용 공간을 선택하는 방법 - First-Fit, Best-Fit, Worst-Fit
: 파일의 크기가 가변적으로 변화되는 경우 연속 할당을 사용할 경우 성능 저하 발생
: 내부 단편화, 외부 단편화 발생
■ 불연속 할당 (Discontiguous Allocation)
: 불연속적인 공간에 흩어진 디스크 블록에 나누어 저장
□ 연결 할당(Linked Allocation)
: 흩어진 블록들을 연결 리스트로 관리
: 순차 접근인 경우 효과적이지만 직접 접근 시에는 매우 비효율적 -> 포인터 접근 시마다 디스크 읽기와 탐색 오버헤드 존재
: FAT
: 연속 할당의 문제점인 외부 단편화와 내부 단편화 문제를 해결
□ 색인 할당(Indexed Allocation)
: 디스크 블록에 대한 위치 정보를 가지고 있는 인덱스 블록 사용
-> 블록이 할당될 때마다 해당 정보를 인덱스 블록에 기록
-> 직접 접근 문제 해결. 인덱스 블록 유지 비용 발생
: 파일이 커지면 하나의 인덱스 블록만으로 관리 불가능
-> 여러 개의 인덱스 블록이 필요하면 이를 연결리스트로 관리
: Linux는 inode 기법을 이용
리눅스 파일 시스템 계층 분석
- 리눅스 디스크 접근
■ 장치 파일은 /dev에 위치: 디스크가 설치되면 장치 파일을 이용하여 해당 디스크 접근
-> /dev/sdb3 -> SCSI 타입의 두 번째 디스크의 세 번째 파티션
-> /dev/sda1 -> SCSI 타입의 첫 번째 디스크의 첫 번째 파티션
■ 파티션 (partition)
: 물리 장치의 논리적인 분리
: 파일 시스템은 파티션마다 하나씩 만들어짐-> SCSI 타입의 하드 디스크 -> sda, sdb
-> IDE 타입의 하드 디스크 -> hda, hdb
- Mount
: 파일 시스템을 트리 구조의 특정 노드에 mapping하는 역할
: Root file system -> 시스템 부팅 시 root directory로 mount 됨
: 각각의 파일 시스템은 마운트될 위치를 지정해 mount 명령으로 마운트시키거나 unmount 명령으로 언마운트(해체)할 수 있음
■ mount 과정
① 추가된 HDD가 정상적으로 인식되었는지 확인
-> cat /var/log/dmesg | grep sdb
② 파티션 생성
-> fdisk /dev/sdb
③ 파일 시스템 생성
-> mkfs -t ext3 /dev/sdb1
④ 파일 시스템 마운트
-> mkidr /home2 (Mount point 생성)
-> mount -t ext3 /dev/sdb1 /home2 (새로 추가한 HDD를 /home2로 마운트)
- 계층 개요
■ 가상 파일 시스템 (VFS : Virtual File System)
: 표준 유닉스 파일 시스템이 제공하는 모든 시스템 콜을 처리하는 커널 소프트웨어 계층
: 여러 종류의 파일 시스템에 대해 공통 인터페이스를 제공함■ 디스크 파일 시스템 (Ext2,Ext3,Ext4 등)
: 디스크나 입출력 장치에 정보를 저장하거나 입출력 및 검색 등을 하기 위한 계층: 장치에의 입출력이나 저장 형태 등, 장치에 의존적인 부분은 감추고 사용자에게 논리적이고 장치에 독립적인 쉬운 사용 인터페이스를 제공하기 위해 존재.
■ 페이지 캐시 (=Disk Cache)
: 디스크의 정상적인 일부 데이터를 램이 보유하는 소프트웨어 메커니즘.
: Page라는 단위로 메모리에 일부 데이터를 저장.
-> 한번 접근했던 데이터에 다시 접근할 때 디스크에 접근하지 않고 메모리에서 데이터를 읽음으로써 빠른 처리가 가능.
■ 일반 블록 계층 (Generic Block Layer)
: 시스템 내 모든 블록 장치에 대한 요청을 다루는 커널 구성 요소
: 일반 블록 계층은 각 하드웨어 블록 장치의 특징들을 숨겨서 블록 장치에 대한 추상적인 관점을 제공
: 실제 입출력 연산을 위해 하위 구성 요소에 필요한 모든 정보를 준비하는 계층.
■ I/O Scheduler Layer
: 일반 블록 계층에서 넘어온 입출력 전송 요청을 커널 정책에 따라 정렬하는 계층
: I/O 스케줄러의 목적은 서로 가까운 I/O 요청을 그룹화 시켜서 디스크 탐색 오버헤드를 줄이는 것
■ (Block) Device Driver
: I/O 스케줄러가 큐잉한 I/O 요청을 처리하는 계층. 요청을 해석하여 디스크 컨트롤러의 하드웨어 인터페이스에 적당한 명령을 보냄
: 하드웨어(디스크) 인터럽가 발생했을 시 이를 처리할 수 있는 인터럽트 핸들러가 있음
∴ 각 계층 구조 동작
'Major > Linux' 카테고리의 다른 글
리눅스 - 가상 파일 시스템 (0) | 2016.01.28 |
---|---|
리눅스 - 파일 디스크립터 (7) | 2016.01.28 |
리눅스 - System Call (0) | 2016.01.28 |
리눅스 - 기초 (0) | 2016.01.28 |
내장형 시스템 - 하드웨어 (0) | 2016.01.26 |