Home 파일 시스템
Post
Cancel

파일 시스템

파일과 파일시스템

사용자 -> 운영체제 -> 운영체제가 파일들을 하드디스크에 안전하게 저장해준다.

  • 파일관리자
    • 운영체제는 파일관리를 위해 파일관리자를 둔다.
    • 역할
      • 파일 테이블을 이용해서 파일들을 관리하다.
      • (메모리관리자가 페이지 테이블을 이용해서 메모리를 관리하는 것처럼)
  • 파일 시스템의 기능
    • 파일과 디렉토리를 만든다.
    • 파일과 디렉토리를 수정하고 삭제한다.
    • 파일의 권한을 관리한다.
    • 파일의 내용손상을 막기 위해 무결성을 보장한다.
    • 백업과 복구를 한다.
    • 파일을 암호화해 보호한다.
  • 파일시스템은 하드디스크나 flash memory에 저장되기 때문에 전송단위가 블록이다.
  • 전송 단위는 블록이지만, 사용자는 바이트 단위로 파일 접근이 가능해야 한다. -> 파일관리자가 중간에서 관리해준다.
  • 확장자로 파일의 성격을 파악할 수 있다.
  • 더블클릭 시 바로 연결되는 프로그램 설정 가능
    • EX) exe 파일 더블클릭-> 실행 파일로 인지-> 운영체제가 프로세스를 만들어서 실행한다.
  • 파일의 구성
    • 파일은 헤더 와 데이터로 이루어져 있으며 헤더는 파일의 속성들이 담겨있다.
  • 파일 디스크립터
    • 운영체제가 파일을 관리하기 위해 파일의 정보를 보관하는 것
    • 파일마다 독립적으로 존재한다.
    • 저장 장치에 위치하다 파일이 열리면 메모리로 옮겨간다.
    • 파일 디스크립터는 운영체제만이 관리한다.(사용자는 참조할 수 없음)

파일은 데이터의 집합으로 어떻게 구성하냐에 따라 아래와 같이 나눈다.

  • 순차파일구조
    • 파일의 내용이 연속적으로 이루어진 경우
    • 모든 데이터가 순서대로 기록된다. -> 남는 공간이 없고 구조가 단순하다.
    • 특정지점으로 바로 이동이 불가해 특정 데이터를 수정/삭제하는 것에 시간이 많이 걸린다.
  • 직접파일구조
    • 해시함수를 통해 저장위치를 결정하는 파일구조
    • Hash Table 자료구조, json
    • 데이터 접근이 빠르다.
    • 해시함수의 선정이 굉장히 중요하다 -> 잘 골라야 한다
    • 저장공간이 낭비될수있다.
      • 기준점에 의해 데이터들이 각 저장되는데 기준점에 알맞는 데이터들이 적으면 그 공간에는 다른 공간에 비해 더 적은 데이터들이 쌓인다.
  • 인덱스파일구조
    • 순차파일구조와 직접파일구조의 장점을 모은 구조
    • 순차적으로 데이터들이 정렬되어있고 원하는 데이터를 선택하면 그 인덱스값을 보고 그에 맞는 데이터를 가지고 온다
    • 인덱스 참고 자료

디렉토리

: 1개 이상의 파일을 가질 수 있고 자식 디렉토리도 가질 수 있다.

  • 최상위 디렉토리는 루트 디렉토리로 칭한다.(/ 혹은 c:)
  • 디렉토리도 파일이다.
    • 일반파일에는 데이터가 저장되어있고 디렉토리에는 파일정보가 저장되어있다.
    • ’.’ = 현재 디렉토리
    • ’..’ = 상위 디렉토리 (루트 디렉토리는 상위가 없기때문에 본인을 가르킨다.)
  • 다단계 디렉토리 구조
    • 기존에는 루트에만 디렉토리 존재가능했으나 현재는 어떠한 디렉토리에도 하위 디렉토리가 가능하다.
    • 트리구조
    • 바로 가기 기능으로 순환이 생긴다. -> 순환이 있는 트리구조

파일과 디스크

전체 디스크 공간을 일정 크기(블록)로 나누고 그 공간에 주소를 할당해서 관리한다. 한 블록당 1 ~ 8 KB이다. 파일의 정보를 파일테이블로 관리, 파일이 시작하는 블록의 정보도 담겨있다. 하나의 파일은 여러개의 블록으로 이루어짐 이 블록들을 연결하는 방법에 따라

  • 연속 할당
    • 디스크에 연속적으로 저장
    • 시작블록만 알면 전체를 알 수 있음
    • 메모리의 세그멘테이션 기법처럼 외부단편화 -> 실제 사용안한다.
  • 불연속 할당
    • 비어있는 디스크에 분산해서 저장한다. 분산된 블록은 파일시스템이 관리한다.
    • 연결 할당
      • 연결리스트 : 각 노드가 데이터와 포인터(이전 노드와 다음 노드의 주소)
      • 노드를 통해 다른 노드로 이동하며 순환할 수 있다.
      • 파일 테이블에 시작 노드에 대한 정보만 기재하고 나머지는 연결리스트를 통해 다른 블록들에 접근하는 방식
    • 인덱스 할당
      • 블록 포인터가 직접 연결이 아니라 데이터들의 인덱스를 가지고 있는 인덱스 블록을 연결한다.
      • 인덱스 블록은 테이블이 꽉 찬 경우, 인덱스 블록을 더 만들어서 연결 -> 테이블 확장 가능
      • i-node 방식

디스크에 파일을 저장할때마다 빈 공간을 찾으려고 모든 공간을 뒤지는건 비효율적 파일시스템이 빈 공간을 모아둔 free block list가 존재한다.

파일 삭제 -> 파일 테이블에서 해당 파일의 헤더 삭제 -> free block list에 사용했던 블록들을 넣는다.-> 유저에게는 삭제한 것 처럼 보이나 실제로 데이터는 삭제되지 않기 떄문에 ㅎ추후 포렌식으로 데이터 복구가능 -> 범죄 방지

This post is licensed under CC BY 4.0 by the author.

입출력 장치

Message Queue