> For the complete documentation index, see [llms.txt](https://minhee0327.gitbook.io/mini-til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://minhee0327.gitbook.io/mini-til/computer-science/operatingsystem/12_.md).

# 12. 파일시스템 이해

* 파일시스템:
  * 운영체제가 저장매체에 파일을 쓰기위한 알고리즘(자료구조)
  * 참고
    * 파일시스템이 만들어진 이유(블록)
      * 0 과 1의 데이터를 어떻게 저장매체에 저장할까?
        * bit로 관리하기에는 오버헤드가 너무 큼
        * block단위로 관리하기로 함.(보통 4KB)
        * 블록마다 고유번호를 부여해서 관리
    * 파일 시스템이 만들어진 이유(파일)
      * 사용자가 각 블록 고유번호를 관리하기 어려움
        * 추상적(논리적) 객체 필요: 파일
      * 사용자는 파일단위로 관리
        * 각 파일에는 블록단위
    * 파일 시스템이 만들어진 이유(저장방법)
      * 저장매체에 효율적으로 파일을 저장하는 방법
        * 가능한 연속적인 공간에 파일을 저장하는 것이 좋음
        * 외부 단편화, 파일 사이즈 변경 문제로 불연속 공간에 파일 저장 기능지원 필요
          * 블록체인: 블록을 링크드 리스트로 연결
            * 끝에 있는 블록을 찾으려면, 맨 처음 블록부터 주소를 따라가야함.
            * 연속적인 공간이 아니더라도, 연결된 블록을 찾아 사용.
          * 인덱스 블록기법: 각 블록에 대한 위치 정보를 기록하여 한번에 끝 블록을 찾아갈 수 있도록 함.
  * 참고2: 다양한 파일 시스템
    * Windows: FAT, FAT32, NTFS
      * 블록위치를 FAT이라는 자료구조에 기록
    * Linux(Unix): ext2, ext3, ext4
      * 일종의 **인덱스 블록 기법인 inode 방식 사용**.
* 파일시스템과 시스템콜
  * **동일한 시스템콜 을 사용해서**, *다양한 파일 시스템 지원 가능*토록 구현
    * read/write 시스템 콜 호출시, 각 기기 및 파일 시스템에 따라 &#x20;

      실질적인 처리를 담당하는 함수 구현(예: read\_spec/write\_spec )
    * 파을 실제 어떻게 저장할지는 다를 수 있음
      * 리눅스의 경우 ext4 외 NTFS, FAT32 파일 시스템 지원
* inode 방식파일시스템
  * 파일 시스템 기본구조
    * 수퍼블록: 파일시스템정보 및 파티션 정보 포함(`df`로 해당 정보 확인가능)
    * 아이노드 블록: 파일 상세 정보(PCB)
    * 데이터 블록: 실제 데이터(1\~4KB)
* inode와 파일
  * 파일: inode 고유값과 자료구조에 의해 주요 정보관리
    * '파일이름: inode'로 파일이름은 inode 번호와 매칭
    * 파일시스템은 inode를 기반으로 파일 엑세스
    * inode 기반 메타 데이터(상세 정보) 저장
* inode 구조
  * inode 기반 메타 데이터(파일권한, 소요자정보, 파일사이즈, 생성시간, direct blcks, single indirect, double indirect, triple indirect)
* 디렉토리 엔트리
  * 리눅스 파일탐색: 예: \~/home/ubuntu/link.txt
    * 각 디렉토리 엔트리(dentry)를 탐색
      * 각 엔트리는 해당 디렉토리 파일/ 디렉토리 정보를 가지고 있음
    * '/'dentry에서 home을 찾고, home에서 ubuntu를 찾고, ubuntu에서 link.txt파일 이름에 해당하는 inode를 얻음.
* 가상파일 시스템(Virtual File System)
  * Network등 다양한 기기도 동일한 파일 시스템 인터페이스를 통해 관리 가능.
  * 예: read/write 시스템콜 사용하여 각 기기별 read\_spec/write\_spec 코드 구현

    (운영체제 내부) &#x20;
* 참고: 리눅스(유닉스) 운영체제와 가상 파일 시스템
  * 모든 것은 파일이라는 철학을 따름
    * 모든 인터렉션은 파일을 읽고, 쓰는 것처럼 이루어져있음
    * 마우스, 키보드와 같은 모든 디바이스 관련된 기술도 파일과 같이 다루어짐
    * 모든 자원에 대한 추상화 인터페이스로 파일 인터페이스를 활용
