파일 시스템
파일 관리자
파일은 사용자가 직접 저장할 수 없고, 운영체제를 통해 저장장치(HDD, SSD)에 저장된다.
운영체제는 파일을 관리하기 위해 파일 관리자를 사용하며, 이를 파일 시스템이라 부른다.
파일 관리자는 파일 테이블을 통해 파일을 관리한다.
파일시스템의 기능
파일, 디렉토리 생성
파일, 디렉토리 수정 및 삭제
파일 권한 관리
다른 사용자로부터 파일을 보호하기 위해서
현 운영체제는 다중사용자를 지원하므로, 꼭 필요한 기능이다)
무결성 보장
파일이 손상되지 않도록
백업과 복구
파일의 암호화
참고
하드디스크와 플래시 메모리(SSD)는 블록 디바이스이다.
파일 시스템은 저장장치에 저장된다 → 블록 디바이스이다.
저장 장치의 전송단위는 블록이지만, 사용자는 Byte 단위로 접근해야한다. → 파일관리자가 변환한다.
파일은 헤더와 데이터가 존재하며, 헤더에는 파일의 속성이 저장되어있다.
운영체제는 파일 제어 블록(파일 디스크립터)를 가지고 있으며, 이는 파일마다 독립적으로 존재한다.
저장장치에 존재하다가, 파일이 열리면 메모리로 이동한다.
파일 시스템이 관리하며, 사용자의 직접 참조는 불가능하다.
파일의 구조
파일 = 데이터의 집합으로, 구성 방법으로 종류를 구분한다.
순차 파일 구조
파일의 내용이 연속적으로 이어져있다.
파일 디스크립터는 파일의 맨 앞에 위치한다.
lseek 함수로 파일을 이동시킨다.
장점: 모든 데이터가 순차적으로 기록되어 공간의 낭비가 없고, 구조가 단순하다.
단점 : 특정 지점으로 바로 이동이 어려워서, 데이터를 삽입하거나 삭제하기 위해 탐색하려면 많은 시간이 걸린다.
직접 파일 구조
저장하려는 데이터를 해시함수를 통해 저장 위치를 결정한다.
해시함수를 잘 골라야하며, 저장 공간 낭비의 단점이 존재한다.
인덱스 파일 구조
순차 접근과 직접 접근 방식의 장점이 존재한다.
디렉토리
1개 이상의 파일을 가질 수 있으며, 자식 디렉토리를 가질 수 있다.
여러 층으로 구성되며, 최상위 디렉토리를 루트 디렉토리라고 한다.
유닉스의 경우 루트 디렉토리와 디렉토리 구분을 /로 사용한다.
윈도우의 경우 루트 디렉토리는 파티션 이름 (C:), 디렉토리 구분은 \로 사용한다.
디렉토리도 하나의 파일이다.
파일에는 데이터가 저장되며, 디렉토리에는 파일의 정보가 저장 돼 있을 뿐이다.
현재 디렉토리 :
.
상위 디렉토리 :
..
루트 디렉토리의 경우, 상위 디렉토리가 없기 떄문에 점 두개도 자기 자신을 가리킨다.
디렉토리는 순환이 있는 트리이다. (바로가기 기능때문에)
현재는 다단계 디렉토리구조이다.
파일과 디스크
파일시스템(디스크)
파일 정보를 파일 테이블로 관리한다.
페이징처럼 디스크의 공간을 일정한 크기로 나누고, 해당 공간에 주소를 할당하여 관리한다.
나눈 공간을 블록이라고 부른다. (크기 : 1~8KB)
파일이 시작하는 위치 정보도 담겨있다.
파일은 여러 개의 블록으로 연결된다.
연속 할당
디스크에 연속적으로 저장한다.
파일의 시작만 알면, 파일의 전체를 알 수 있다.
외부 단편화가 발생하기 때문에 사용되지 않는다.
불연속 할당
디스크의 비어있는 공간에 데이터를 분산해서 할당한다.
파일 시스템이 관리한다.
연결 할당과 인덱스 할당이 존재한다.
디스크를 나누는 크기가 1KB라면, 낭비되는 공간은 줄지만 관리해아할 블록의 수가 많아진다.
디스크를 나누는 크기가 8KB라면, 관리해야할 블록 수는 줄지만, 낭비되는 공간이 많아진다.
연결 할당
파일에 속한 데이터를 연결리스트로 관리한다.
파일 테이블에는 시작 블록에 대한 것만 저장한다.
시작부터 null이 나올 때까지 참조하여 모든 데이터를 참조할 수 있다.
인덱스 할당
테이블의 블록 포인터가 데이터 블록이 아닌 인덱스 블록을 연결한다.
데이터가 많아서 테이블이 가득 차면, 인덱스 블록을 더 만들어 연결한다. (테이블의 확장 가능)
파일의 크기가 작다면, 데이터를 바로 참조하는 블록 포인터를 이용하고, 파일의 크기가 크다면 간접 데이터를 이용해 많은 데이터에 접근할 수 있다.
더 큰 데이터가 필요하면, 이중 간접 포인터, 삼중 간접 포인터를 활용할 수 있다.
파일 시스템의 효율적인 관리
파일을 저장할 때마다 빈 공간을 찾는 것은 비효율적이다.
파일 시스템은 효율적인 관리를 위해 free block list를 가진다.
특정 파일을 삭제하면, 파일의 모든 정보를 지우는 것이 아니라, 파일 테이블의 헤더를 삭제하고 free block list에 추가한다.
사용자는 파일이 삭제된 것처럼 느끼지만, 실제로는 데이터가 저장돼있다.
포렌식을 통해 데이터를 복구할 수 잇는 이유임.
Last updated