[운영체제] 파일 시스템

diveintoo·2024년 4월 4일
0

혼공컴운

목록 보기
15/15

📑 본 글은 <혼공컴운>을 읽고 정리한 글입니다.

1. 파일과 디렉터리

운영체제 내부 파일 시스템이 관리하는 존재 : 파일과 디렉터리

1-1. 파일

파일

  • 하드 디스크나 보조기억장치에 저장된 관련 정보의 집합
  • 의미 있고 관련 있는 정보를 모은 논리적 단위

파일 속성(attribute) / 메타데이터(metadata)

  • 파일 관련 부가 정보
  • 파일 크기 / 보호(rwx) / 생성 날짜 / 생성자 / last_modified_date 등등
  • 파일 유형
    • 운영체제가 인식하는 파일 종류
    • 흔히 파일 이름 뒤에 확장자(extension)를 붙여서 표시한다.
    • 실행 파일 / 목적 파일 / 소스 코드 파일 등등

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

  • 파일을 다루는 모든 작업은 운영체제에 의해 이루어진다.
  • 응용 프로그램은 파일을 다루기 위해 운영체제에 시스템 호출을 해야한다.
  • 파일 생성 / 파일 삭제 / 파일 열기 / 파일 닫기 / 파일 읽기 / 파일 쓰기

1-2. 디렉터리

디렉터리(directory) / 폴더(folder)

  • 파일을 일목요연하게 관리하기 위한 그룹
  • 여러 계층을 가진 트리 구조 디렉터리(tree-structured directory)
  • 최상위 디렉터리(root directory)/

경로(path)

  • 디렉터리를 이용해 파일 위치, 파일 이름을 특정 짓는 정보
  • 모든 파일은 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로를 가지고 있다.
  • 절대 경로(absolute path)
    • 루트 디렉터리부터 시작하는 경로
    • /home/sujin/a.shroot(/) 아래 home 아래 sujin 아래에 있는 a.sh라는 파일
  • 상대 경로(relative path)
    • 현재 디렉터리부터 시작하는 경로
    • 현재 디렉터리 경로가 /home 라면,
      • a.sh의 경로는 sujin/a.sh이다.(앞에 슬래시 X)
      • ./sujin/a.sh.은 현재 디렉터리를 말한다.
  • cd 연산 : change directory
    • cd .. → 상위 디렉토리로 이동
    • cd sujin → sujin 디렉토리로 이동
    • if I’m in root directory, cd .. → doing nothing(there’s no parent dir)

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

  • 디렉터리를 다루는 모든 작업은 운영체제에 의해 이루어진다.
  • 디렉터리 생성 / 디렉터리 삭제 / 디렉터리 열기 / 디렉터리 닫기 / 디렉터리 읽기
??디렉터리도파일이라고???이게무슨눈칫밥도밥이다같은소리?????머?? 디렉터리도 파일이라고??? 이게무슨 눈칫밥도 밥이다 같은 소리?????

디렉터리는 내부에 해당 디렉터리에 담겨있는 대상과 관련된 정보를 담고 있다.

보조기억장치에 테이블 형태의 정보로 저장된다.

디렉터리 엔트리

  • 엔트리 → 디렉터리 파일 속 테이블의 행
  • 내용물
    • 디렉터리에 포함된 대상의 이름
    • 보조기억장치 내에 저장된 위치를 유추할 수 있는 정보 → 파일 할당 방법에 따라 다름
    • 생성 시간, 수정된 시간, 크기 등등
  • .. → 상위 디렉터리 . → 현재 디렉터리
  • 자기 직속 파일이나 디렉터리들만 테이블에 저장한다.

2. 파일 시스템

파일 시스템은 파일과 디렉토리를 보조장치에 어떻게 저장 or 접근하는걸까?

2-1. 파티셔닝과 포매팅

새 하드 디스크나 SSD 사용하기 전에 해야할 작업 2가지 소개해드리겠음

파티셔닝(partitioning)

  • 저장 장치의 논리적인 영역을 구획하는 작업 like 칸막이
  • **파티션** : 파티셔닝 작업을 통해 나누어진 영역

포매팅(formatting)

  • 파일 시스템을 설정 : 어떤 방식으로 파일을 저장하고 관리할 것인지
  • 새로운 데이터를 쓸 준비를 하는 작업
    • 저수준 포매팅 : 공장에서 수행되는 물리적인 포매팅
    • 고수준 포매팅 : 파일 시스템을 생성하는 포매팅 ← pick!
파일시스템에는여러종류가있고,파티션마다다른파일시스템을설정할수있다.파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수 있다.

이제 파일과 디렉터리 생성할 수 있다.

2-2. 파일 할당 방법

블록(block)

  • 운영체제가 파일과 디렉터리를 관리하는 단위(Read / Write)
    • 하드 디스크의 가장 작은 저장 단위는 섹터 / 블록은 섹터 여러 개 묶은 것
  • 파일을 저장하면 보조저장장치 내 하나 이상의 블록에 걸쳐 저장된다.

파일 할당 방법

  1. 연속 할당(contiguous allocation)
    • 연속적인 블록에 파일을 할당하는 방식
    • 디렉터리 엔트리 내 주소 추정 부분 = 첫 번째 블록 주소 + 길이
    • External Fragmentation 야기 {우리는 짝꿍!}
  2. 불연속 할당 ← 운체 pick!
    1. 연결 할당(linked allocation) >> FAT 파일 시스템으로
      • 각 블록 일부에 다음 블록의 주소 저장 → Linked List
      • 파일이 여러 블록에 흩어져 저장되어도 오케이입니다.
      • 디렉터리 엔트리 내 주소 추정 부분 = 첫 번째 블록 주소 + 길이[마지막 블록 주소]
      • Random Access 속도 매우 느림(첫 번째 블록부터 차례대로 읽어야 함)
      • 하드웨어 고장이나 오류 발생 시 걍 망함 (HDD - 매우 정교하고 고장에 예민한 장치임)
    2. 색인 할당(indexed allocation) >> 유닉스 파일 시스템으로
      • 파일의 모든 블록 주소를 색인 블록(index block) 에 모아서 관리한다.
        • 색인 블록은 자기 파일의 블록 주소만 저장한다.
        • 파일마다 하나씩 가지고 있음.
      • if traverse, 색인 블록에 저장된 주소에 차례로 접근한다.
      • Random Access도 가능 - 색인 블록의 i번째 항목이 가리키는 블록에 접근
      • 디렉터리 엔트리 내 주소 추정 부분 = 색인 블록 주소

2-3. 파일 시스템 살펴보기

FAT 파일 시스템

  • USB 메모리, SD 카드 등의 저용량 저장 장치에서 사용함
  • 연결 할당 + 다음 블록의 주소들을 한데 모아 테이블 형태로 관리
  • 디렉터리 엔트리 내 주소 추정 부분 = 첫 번째 블록 주소
  • 파일 속성 정보/metadata → 디렉터리 엔트리에 저장
  • FAT(File Allocation Table)
    • {모든 블록 주소 : 다음 블록 주소} mapping
    • 파티션에 하나의 FAT로 승부하는 것
    • 파티션의 앞부분에 만들어진다.
      • FAT 파일 시스템의 파티션 구성 = FAT 영역 | 루트 디렉터리 영역 | 데이터 영역(서브 디렉터리 & 파일)
    • 실행하는 도중 메모리에 캐시될 수 있다. ⇒ 연결 할당 방식보다 random access 성능 개선됨

FAT파일시스템이파일을읽는과정FAT 파일 시스템이 파일을 읽는 과정

/home/minchul/a.sh에 접근해보겠습니다.

  1. root dir 보기 → home dir 주소 GET
  2. home dir 보기 → minchul dir 주소 GET
  3. minchul dir 보기 → a.sh의 주소 GET
  4. FAT으로 가자!
  5. 시작 주소부터 9 - 8 - 11 - 13 접근

유닉스 파일 시스템

  • 유닉스 계열 운영체제에서 사용함
  • i-node : 유닉스 파일 시스템의 색인 블록
    • 파일 속성 정보와 15개의 블록 주소 저장 가능
    • 파일마다 i-node가 있고, 각자 번호가 부여됨
    • 파일의 모든 것을 담고 있다.
    • 파티션의 앞부분에 만들어진다.
      • 유닉스 파일 시스템의 파티션 구성 = i-node 영역 | 데이터 영역(디렉터리 & 파일)
  • 파일 속성 정보/metadata → i-node에 저장
  • 디렉터리 엔트리 내 주소 추정 부분 = i-node 번호

i-node는 15개의 블록 주소를 저장 가능 → 더 큰 파일은 어떡함?

  1. 블록 주소 중 12개는 직접 블록 주소(direct block)를 저장한다.
    • 파일 데이터가 저장된 블록
  2. 12개로 모자라면 13번째 주소에 단일 간접 블록 주소(single indirect block)를 저장한다.
    • 블록 주소가 저장된 블록
  3. 이거로도 모자라면 14번째 주소에 이중 간접 블록 주소(double indirect block)를 저장한다.
    • 블록 주소가 저장된 블록 주소가 저장된 블록
  4. 이거로도?? 15번째 주소에 삼중 간접 블록 주소(triple indirect block)를 저장한다.
    • 블록 주소가 저장된 블록 주소가 저장된 블록 주소가 저장된 블록ㅋㅋ...

유닉스파일시스템이파일을읽는과정유닉스 파일 시스템이 파일을 읽는 과정

i-node에 파일 속성은 생략하고 블록 주소만 명시함

/home/minchul/a.sh에 접근해보겠습니다.

유닉스 파일 시스템은 루트 디렉터리의 i-node를 항상 기억하고 있다.

  1. root dir의 i-node = 2 보기 → 1번 블록 보기 → home dir의 i-node GET
  2. home dir의 i-node = 3 보기 → 210번 블록 보기 → minchul dir의 i-node GET
  3. minchul dir의 i-node = 8 보기 → 121번 블록 보기 → a.sh의 i-node GET
  4. a.sh의 i-node = 9 보기
  5. 98 - 12 - 13 접근

쏠쏠한 관련 상식

저널링 파일 시스템

  • 파일 시스템을 변경하는 도중에 시스템 크래시가 발생했을 때 빠르게 복구하기 위한 방법
    • 시스템 크래시 : 작업을 하던 도중 갑자기 전원이 나가거나 치명적인 오류로 인해 컴퓨터가 강제 종료되는 상황
  • 저널링(journaling) 기법이라는 작업 로그를 사용한다.
  • 파티션에 로그 영역을 만든다. ⇒ 로그 영역 | i-node 영역 | 데이터 영역(디렉터리 & 파일)
  • 저널링 기법 사용 과정
    1. 작업 직전 파티션의 로그 영역에 변경사항에 대한 로그를 남긴다.
    2. 로그를 남긴 후 작업을 수행한다.
    3. 작업이 끝나면 로그를 삭제한다.
    4. if 시스템 크래시가 발생하면, 파일 시스템 전체를 검사할 필요 없이 로그 영역에 남긴 로그만 검사하면 됨

요새는 이거 다 지원함.

마운트(mount)

  • 저장 장치 간 접근할 수 있도록 파일 시스템을 편입시키는 작업
  • 컴퓨터 ← USB 메모리 mount
    • 컴퓨터에서 usb 파일들 사용 가능

0개의 댓글