• 파일 시스템 (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
      : 파일의 크기가 가변적으로 변화되는 경우 연속 할당을 사용할 경우 성능 저하 발생
      : 내부 단편화, 외부 단편화 발생
       

     ■ 불연속 할당 (Disc
    ontiguous 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

+ Recent posts