파일과 디렉터리

파일 시스템(file system)


  • 파일과 디렉터리를 관리하는 운영체제 내의 프로그램
  • 파일과 디렉터리를 다루어 주는 프로그램
  • 한 컴퓨터 내에 여러 개의 파일 시스템을 사용할 수 있음 

  • 파일과 디렉터리는 데이터 관점에서는 그냥 보조 기억 장치에 저장된 데이터 덩어리일 뿐.
    이를 운영체제가 일목요연하게 관리해주는 것

 


 

 

파일


  • 파일이란 보조 기억 장치에 저장되어 있는 의미 있는 정보들을 모은 논리적 단위 (관련 있는 정보들을 한데 모아놓은 단위)
  • 파일의 구성 요소
    • 파일을 실행하기 위한 정보
    • 부가 정보 ( = 속성, 메타 데이터)

 

파일의 속성

  • 종류는 운영 체제, 파일 시스템 별로 다를 수 있지만 대표적으로 아래 내용들이 있음

  • 유형
    • 같은 이름의 파일이어도 파일의 종류에 따라 실행 양상도 달라짐(텍스트, 음악, 영상 ...)
    • 그래서 운영체제에게 힌트를 주기 위해 확장자를 사용

 

파일 연산을 위한 시스템 호출

  1. 파일 생성
  2. 파일 삭제
  3. 파일 열기
  4. 파일 닫기
  5. 파일 읽기
  6. 파일 쓰기
  • 어떤 응용 프로그램도 임의로 파일에 접근하고 조작할 수 없음
  • 파일을 다루려면 운영체제에게 시스템 호출을 통해 부탁해야 함
  • 그래서 운영체제는 위와 같이 파일 연산을 위한 시스템 호출을 제공
  • 암기할 필요는 없음

 

 


 

디렉터리


  • 윈도우에서는 폴더(folder)라고 부름
  • 옛날 운영체제에서는 기본적으로 하나의 디렉터리(1단계 디렉터리)만 존재했음
  • 하지만 요즘은 여러 개의 디렉터리가 계층적으로 구성 => Tree 구조 디렉터리

1단계 디렉터리

 

 

트리 구조 디렉터리

  • 여러 계층으로 파일 및 폴더를 관리하는 트리 구조 디렉터리
  • 최상위 디렉터리( = 루트 디렉터리, /), 서브 디렉터리로 구성
  • 최상위 디렉터리에서부터 여러 개의 디렉터리들이 계층적으로 구성될 수 있음 

 

경로

  • 계층적 디렉터리를 관리하며 생겨난 개념
  • 디렉터리를 이용해 파일/디렉터리의 위치, 나아가 이름까지 특정 지을 수 있는 정보
  • 같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 동일한 이름의 파일이 존재할 수 있음
  • 절대 경로와 상대 경로 
    • 절대 경로
      • 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로 (루트 디렉터리부터 시작하는 경로)
      • e,g, ) /home/guest/d.jpg
      • 여기서 "/"는 루트 디렉터리를 나타내기도 하지만, 디렉터리간의 구분자로도 사용함
    • 상대 경로
      • 현재 디렉터리에서 자기 자신까지 이르는 경로 (현재 디렉터리부터 시작하는 경로)
      • e,g,) 현재 디렉터리 경로가 /home일 경우 상대 경로는 guest/d.jpg

 

디렉터리 연산을 위한 시스템 호출

  1. 디렉터리 생성
  2. 디렉터리 삭제
  3. 디렉터리 열기
  4. 디렉터리 닫기
  5. 디렉터리 읽기
  • 파일과 마찬가지로 어떤 응용프로그램도 임의로 디렉터리 연산을 할 수 없음
  • 연산을 하기 위해선 운영체제에게 시스템 호출 형태로 부탁해야 함
  • 디렉터리 연산을 위한 시스템 호출의 종류는 여러가지가 있는데 그냥 이렇구나 알고 넘어가면 됨 

 

 

디렉터리 엔트리

  • 지금까지 설명으로는 파일과 디렉토리가 엄연히 다른 존재라고 생각할 수 있지만,
    사실 많은 운영체제에서는 디렉터리를 그저 '특별한 형태의 파일'로 간주함
  • 즉, 디렉터리는 그저 '포함된 정보가 조금 특별한 파일' 

  • 파일의 내부에는 파일과 관련된 정보들이 있다면,
    디렉터리의 내부에는 해당 디렉터리에 담겨 있는 대상과 관련된 정보들이 담겨 있음(주로 테이블[표] 형태로 구성)

  • 각 엔트리(행)에 담기는 정보
    • 디렉터리에 포함된 대상의 이름
    • 그 대상이 보조기억장치 내에 저장된 위치(를 유추할 수 있는 정보)
      파일 시스템마다 차이가 있을 수 있음
    • 다음과 같이 디렉터리 엔트리에 파일 속성을 명시하는 경우도 있음
       
  • 예시

  • .. : 상위 디렉터리
  • . : 현재 디렉터리 

이런식으로 디렉터리에 접근 가능

 


 

파일 시스템

  • 파일 시스템이 파일과 디렉터리를 보조기억장치에 할당하고 접근하는 방법
  • 대표적인 파일 시스템의 종류(FAT 파일 시스템, 유닉스 파일 시스템) 학습

 

파티셔닝과 포매팅


  • 이제 막 공장에서 생성되어 한 번도 사용된 적 없는 새 하드 디스크 / SSD는 파티셔닝, 포매팅 하기 전까지는 사용할 수 없음 

 

 

파티셔닝

  • 저장 장치의 논리적인 영역을 구획하는 작업
  • 물건을 그냥 두는 것보다 칸막이를 설치하고 여러 물건을 목적에 따라 분류해 정리하는 것이 더 편한 것과 같음
  • 즉, 하드디스크나 SSD 처럼 용량이 큰 저장장치를 하나 이상의 논리적인 단위로 구획하는 작업을 "파티셔닝" 이라고 함
  • 파티션(Partition) : 파티셔닝을 통해 나누어진 영역들 

 

 

 

 

윈도우 운영체제 - 파티션 만들기 및 포맷 

  • 파일 시스템이 파티셔닝 되어 있는 모습과 용량을 직접 확인할 수 있음 

 

 

포매팅

  • 파일 시스템을 설정
  • 어떤 방식으로 파일을 관리할지 결정, 새로운 데이터를 쓸 준비를 하는 작업

 

  • 참고 - 포매팅의 종류
    • 저수준 포매팅 : 공장에서 수행되는 물리적인 포매팅
    • 논리적 포매팅 : 파일 시스템을 생성하는 포매팅(앞으로 이야기 할 포매팅)

 

  • USB 포매팅 예시
    • 파일 시스템은 포매팅 할 때 결정됨 

 

  • 파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수 있음
  • 포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉터리 생성이 가능해짐

 

 


파일 할당 방법


  • 포매팅까지 끝난 하드 디스크에 파일을 저장하는 방법
  • 운영체제는 파일/디렉터리를 블록 단위로 읽고 씀
    • 하드 디스크의 가장 작은 저장 단위는 섹터이지만, 섹터는 크기가 너무 작고 개수도 많기 때문에,
      하나 이상의 섹터를 블록이라고 하는  단위로 묶은 뒤에 블록 단위로 파일과 디렉토리를 관리함
  • 하나의 파일이 보조기억장치에 저장될 때에는 여러 블록에 걸쳐 저장됨 
  • 파일이 크면 많은 수의 블록에, 파일이 작으면 적은 수의 블록에 저장됨 

원통 = 하드디스크 / 네모 = 블록 / 숫자 = 블록 주소

 

 

파일 할당의 종류

 

  • 파일을 보조기억장치에 할당하는 두 가지 방법 : 연속 할당, 불연속 할당
  • 요즘은 불연속 할당이 많이 사용됨 

 

연속 할당

  • 보조 기억 장치의 연속적인 블록에 걸쳐서 파일을 저장하는 방식
    (= 파일이 저장 장치 내에서 연속적인 공간을 차지하도록 블록을 할당하는 방법)

 

 

  • 연속된 파일에 접근하기 위해 파일의 첫 번째 블록 주소와 블록 단위의 길이만 알면 됨
  • 디렉터리 엔트리 : 파일 이름 & 첫 번째 블록 주소 & 블록 단위 길이 명시

 

연속 할당의 부작용

  • 연속 할당의 구현은 단순하지만 외부 단편화를 야기할 수 있음


불연속 할당 -  연결 할당

  • 각 블록의 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당
  • 파일을 이루는 데이터 블록을 연결 리스트로 관리
  • 불연속 할당의 일종 : 파일이 여러 블록에 흩어져 저장되어도 무방 

 

 

  • 디렉터리 엔트리 : 파일 이름 & 첫번째 블록 주소 & 블록 단위의 길이

블록의 끝을 위 예시처럼 -1로 표시할 수도 있고, 디렉터리 엔트리에 첫 번째 블록 주소와 마지막 블록 주소를 기록할 수도 있음

 

 

연결 할당의 단점

  • 반드시 첫 번째 블록부터 하나씩 읽어들여야 함
    • = 파일의 임의의 위치에 접근하는 속도 (= 임의 접근 속도)가 느리다
    • 영화 파일처럼 엄청 큰 파일이어도 첫 번째 블록부터 접근해야 함 
    • 성능 면에서 비효율
  • 오류 발생 시 해당 블록 이후 블록 접근이 어려움 

 

 

불연속 할당 - 색인 할당

  • 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식
  • 하나의 블록 안에 어떤 주소에 접근해야 되는지가 쭉 적혀 있는 형태
  • 파일 내 임의의 위치에 접근하기 용이 

 

  • 디렉터리 엔트리 : 파일 이름 & 색인 블록 주소 

 

 


파일 시스템


FAT 파일 시스템

  • 연결 할당 기반 파일 시스템
  • 연결 할당의 단점을 보완
  • USB 메모리, SD카드 등 저용량 저장장치에서 많이 사용되는 파일 시스템 
    • 운영 방식이 단순하여 작은 용량의 프로그램들을 읽고 쓸 때 속도가 빠름
    • 그래서 모바일 기기, 디지털 카메라 등 다른 기기와 호환이 잘 됨(FAT32 추가 공부)

연결 할당의 모습

 

  • 연결 할당의 단점 발생 원인은 모든 블록 안에 다음 번지 블록의 주소를 기록했기 때문
  • 그러므로, 각 블록에 포함된 다음 블록 주소를 한 곳에 모아 테이블(FAT : File Allocation Table)로 관리함으로써 단점 보완 

 

  • FAT 데이터 자체가 메모리에 캐시될 수 있음
  • FAT가 메모리에 캐시될 경우 느린 임의 접근 속도 개선 가능 (보조기억장치보다 메모리에 있는게 더 빠르니까)

 

 

FAT 파일 시스템의 파티션 모습

  • 예약 영역 : 이미 정해져 있는 일정 데이터들을 저장하는 공간
  • FAT 영역 : FAT가 저장된 공간
  • 루트 디렉터리 영역 : 루트 디렉터리가 저장되는 영역
  • 데이터 영역 : 서브 디렉터리와 파일들을 저장하기 위한 영역

 

FAT 파일 시스템의 디렉터리 엔트리

  • 파일의 속성까지도 디렉터리 엔트리에 표기

 

 

FAT 파일 시스템이 파일에 접근하는 과정 예시

  • /home/minchul/a.sh을 읽는 과정 

 

파티션 내에 저장된 디렉터리 내용

 

  • 루트 디렉터리 접근 → home 디렉터리 위치 확인 → 3번 블록으로 이동하여 home 디렉터리 확인, 민철 디렉터리 탐색 →  15번 블록으로 이동하여 민철 디렉터리 확인, a.sh 파일 탐색 →  9번 블록으로 이동 , 파일 읽기 시작 → 8번 블록으로 이동 → 11번 블록으로 이동 → 13번 블록으로 이동 → -1을 만났으므로 파일의 끝 

 

 

 

유닉스 파일 시스템

  • 색인 할당 기반 파일 시스템
  • 색인 블록 == i - node
    • 파일의 속성 정보와 15개의 블록 주소 저장 가능 
    • 파일의 속성은 무엇인지, 어디에 저장되어 있는지가 총 15개 블록에 걸쳐 확인해 볼 수 있음 
    • 파일마다 i - node를 가지고 있고, i - node마다 고유한 번호가 부여되어 있음
    • i - node만 봐도 어떤 파일이 어떤 속성을 갖고 있고 어디에 저장되어 있는지 전부 다 알 수 있음 

 

유닉스 파일 시스템의 파티션 모습

 

 

 

만약 15개의 블록 주소보다 큰 파일을 저장해야 한다면?

만약 30개의 블록에 걸쳐 저장되어야 하는 파일이라면?

 

 

1. 블록 주소 중 12개에는 직접 블록 주소 저장

  • 직접 블록 : 파일 데이터가 저장된 블록 

 

 

2. 1번으로 충분하지 않다면 13번째 주소(블록 주소 12)에 단일 간접 블록 주소 저장

  • 단일 간접 블록 : 파일 데이터를 저장한 블록 주소가 저장된 블록 

 

3. 2번으로 충분하지 않다면 14번째 주소(블록 주소 13)에 이중 간접 블록 주소 저장

  • 이중 간접 블록 : 단일 간접 블록들의 주소를 저장하는 블록 

 

4. 3번으로 충분하지 않다면 15번째 주소(블록 주소 14)에 삼중 간접 블록 주소 저장

  • 삼중 간접 블록 : 이중 간접 블록들의 주소를 저장하는 블록 

 

유닉스 파일 시스템의 디렉터리 엔트리

 

  • i - node가 파일 시스템의 핵심
  • 사실상 i - node가 파일 이름 빼고 모든 것을 다 갖고 있다고 봐도 됨 
  • 그러므로 디렉터리 엔트리에는 i - node 번호, 파일 이름만 명시가 되어 있음 

 

 

유닉스 파일 시스템이 파일에 접근하는 방법 예시

  • /home/minchul/a.sh을 읽는 과정

 

1. 루트 디렉터리에 접근 (i - node 2)

  • 유닉스 파일 시스템은 루트 디렉터리에 접근하기 위한 데이터 주소를 담고있는 노드를 항상 기억하고 있음
  • 2번 노드를 확인함으로써 루트 디렉터리가 1번에 있다는 것을 확인 

 

2. 루트 디렉터리에서 home의 i - node 번호 확인 : 3

 

 

3. i - node 3 확인하여 홈 디렉터리의 위치 확인 : 210번 블록

 

 

4. 210번 블록에서 홈 디렉터리 확인, 민철 디렉터리의 i - node 번호 확인 : 8 

 

 

5. i - node 8번에 있는 민철 디렉터리의 주소 확인 : 121번 블록 

 

6. 121번 블록의 민철 디렉터리에서 a.sh 파일의 i - node 확인 : 9

 

7. i - node 9번 확인하여 a.sh 파일 주소 확인 : 98, 12, 13 

8. 98, 12, 13번 블록 읽기

 

 

 

 

 

출처 : 혼자 공부하는 컴퓨터구조 + 운영체제

 

 

 

 

(추가 공부)

NTFS (New Technology File System) - 윈도우 운영체제

  • New Technology File System
    • Boot Sector (VBR) : 컴퓨터 저장 장치에서 포맷된 각 파티션(볼륨)의 가장 첫 번째 섹터에 위치하는 영역. 파티션 정보
    • Master File Table(MFT) : 파일 및 디렉터리 관리를 위한 정보
    • Data : 실제 데이터 저장
  • 윈도우 운영체제의 파일시스템
  • 큰 용량의 파일을 효율적으로 관리할 수 있고, 안정적인 보안 및 복구 기능을 지원함
  • 안정성과 보안성이 좋지만 액세스 속도가 느리다는 단점이 있음 
  • 특징
    • 데이터 복구 기능(저널링, Journaling) 
      • 파일 시스템의 변경 사항을 로그로 기록하여, 정전이나 시스템 오류 등 문제 발생 시에도 기록을 토대로 데이터를 빠르게 복구하는 기능
      • 저널링
        • 파일 시스템에서 데이터 무결성을 보장하기 위한 핵심 기술
        • 파일 시스템이 데이터를 디스크에 기록하는 과정에서 문제가 발생할 경우를 대비해 파일 시스템의 변경 사항을 기록하는 방식으로, 시스템 오류 후에도 데이터를 복구할 수 있음
        • 저널(Journal)이라는 공간에 변경 사항을 먼저 기록함. 이 저널은 로그처럼 작동하며 파일 시스템에 어떤 변경이 발생할지 미리 기록해둠 
    • 보안 및 권한 설정
      • 파일 및 디렉터리 단위로 사용자 권한 설정 가능(읽기, 쓰기, 실행)
      • 파일과 디렉터리 단위로 암호화 기능 지원(EFS, Encrypting File System)
    • 대용량 지원 : 이론상 264 Bytes까지 가능하나, 실제로 244 Butes(16TB)까지 지원 

 

NTFS의 파티션 구조(VBR)

 

 

 

참고 :

https://velog.io/@rinm/NTFS-structure

https://nurilab.github.io/2022/12/07/ntfs1/

 

 

EXT 파일 시스템 - 리눅스 운영체제 

  • Extended File System ( = EXT = EXTFS)
  • MFS(MINIX File System)의 한계를 위해 만듦
    • 파일 시스템 최대 크기 64MB(MFS) -> 2GB(EXT)
    • 파일 이름 최대 길이 14~30byte(MFS) -> 255byte(EXT)
  • EXT1, EXT2, EXT3, EXT4 등의 버전이 있음
  • EXT4는 저널링 기능과 대용량 파일 지원을 강화한 최신 버전으로 성능과 안정성이 대폭 향상됨
    • 최대 16TB의 파일과 1EB(엑사바이트) 파일 시스템 크기를 지원
    • 저널링 기능 지원 : 데이터 무결성 보장, 손상 방지
    • 파일 시스템을 빠르게 검사하는 기능이 있어 부팅 시간 단축
    • 저장 장치의 디스크 공간을 효율적으로 사용하기 위해 지연 할당(Delayed Allocation)을 사용하여 파일 데이터를 더 나은 방식으로 배치
    • 시스템이 부팅된 상태에서도 파일 시스템을 검사할 수 있음
    • 파일이 조각나지 않도록 설계되어 파일 액세스 속도가 빠름 

참고 :

https://doyourjob.tistory.com/entry/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9CFile-System%EA%B3%BC-%EC%9C%A0%ED%98%95FAT-NTFS-EXT-HFS-APFS

https://m.blog.naver.com/battledocho/50090598670