본문 바로가기

CS

[CS] 파일 시스템

목차

  • 파일
  • 디렉터리
  • 파일 할당 방법
  • 파일 시스템

 

파일 시스템(file system)

  • 파일과 디렉터리를 관리하는 운영체제 내의 프로그램
  • 파일과 디렉터리를 다루어 주는 프로그램

 

파일과 디렉터리

  • 보조기억장치의 데이터 덩어리, 파일과 디렉터리

 

파일

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

 

파일을 이루는 정보

  • 파일을 실행하기 위한 정보 + 부가 정보 (= 속성, 메타 데이터)

 

파일의 속성

 

 

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

  1. 파일 생성
  2. 파일 삭제
  3. 파일 열기
  4. 파일 닫기
  5. 파일 읽기
  6. 파일 쓰기 등

 

디렉터리

  • 윈도우에서는 폴더(folder)
  • 1단계 디렉터리

 

 

 

 

  • 여러 계층으로 파일 및 폴더를 관리하는 트리 구조 디렉터리
  • 최상위 디렉터리(루트 디렉터리, /), 서브 디렉터리

경로

  • 디렉터리를 이용해 파일/디렉터리의 위치, 나아가 이름까지 특정 지을 수 있는 정보
  • 절대 경로: 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로
    • /home/minchul/a.sh
  • 상대 경로: 현재 디렉터리에서 자기 자신까지 이르는 경로
    • 현재 디렉터리 경로가 /home 일 경우: guest/d.jpg

같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 동일한 이름의 파일이 존재할 수 있음.

 

 

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

  1. 디렉터리 생성
  2. 디렉터리 삭제
  3. 디렉터리 열기
  4. 디렉터리 닫기
  5. 디렉터리 읽기 등

 

디렉터리 엔트리

사실 많은 운영체제에서는 디렉터리를 그저 '특별한 형태의 파일' 로 간주한다.

즉, 디렉터리는 그저 '포함된 정보가 조금 특별한 파일'

 

파일의 내부에는 파일과 관련된 정보들이 있다면,

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

  • 이 정보는 보통 테이블(표) 형태로 구성

디렉터리 엔트리

  • 각 엔트리(행)에 담기는 정보
  • 디렉터리에 포함된 대상의 이름
  • 그 대상이 보조기억장치 내에 저장된 위치(를 유추할 수 있는 정보)

파일 시스템마다 차이가 있을 수 있다.

 

다음과 같이 디렉터리 엔트리에 파일 속성을 명시하는 경우도 있다.

 

 

 

. : 현재 디렉터리

.. : 상위 디렉터리

 

 

 

 

 

파일 시스템

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

 

 

 

파티셔닝과 포매팅

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

 

파티셔닝

  • 저장 장치의 논리적인 영역을 구획하는 작업
  • 구분된 하나의 영역을 파티션이라고 한다.

 

포매팅

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

 

USB 포매팅 예시

파일 시스템은 포매팅할 때 결정된다.

 

  • 파일 시스템에는 여러 종류가 있고,
  • 파티션마다 다른 파일 시스템을 설정할 수도 있다.

포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉토리 생성이 가능해진다.

 

 

파일 할당 방법

  • 포매팅까지 끝난 하드 디스크에 파일을 저장하기
  • 운영체제는 파일/디렉토리를 블록 단위로 읽고 쓴다.
    • 즉, 하나의 파일이 보조기억장치에 저장될 때에는 여러 블록에 걸쳐 저장된다.
    • 하드 디스크의 가장 작은 저장 단위는 섹터이지만 보통 블록 단위로 읽고 쓴다.

파일을 보조기억장치에 할당하는 두 가지 방법

  • 연속 할당
  • 불연속 할당

오늘날 사용하는 할당은 불연속 할당

 

 

연속 할당

  • 이름 그대로 보조기억장치 내 연속적인 블록에 파일 할당

 

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

 

 

  • 구현이 단순하지만 외부 단편화를 야기할 수 있다.

 

 

파일 D와 F 삭제(잔여 블록 11개, 블록 7개 이상 사용하는 파일 할당 X)

 

 

불연속 할당 - 연결 할당

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

 

 

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

  • 블록의 끝이라면 표시자를 기록

 

단점

  • 반드시 첫 번째 블록부터 하나씩 읽어들여야 한다.
  • 접근 속도가 느리다.
  • 오류 발생시 해당 블록 이후 블록은 접근이 어렵다.

 

 

불연속 할당 - 색인 할당

  • 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식
  • 파일 내 임의의 위치에 접근하기 용이하다.

 

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

 

 

 

 

FAT 파일 시스템

  • 연결 할당 기반 파일 시스템
  • 연결 할당의 단점을 보완

 

각 블록에 포함된 다음 블록 주소를 한데 모아 테이블(FAT: File Allocation Table) 로 관리

 

 

FAT를 활용하는 파일 시스템

FAT가 메모리에 캐시될 경우 느린 임의 접근 속도 개선 가능

 

 

디렉터리 엔트리

파일의 속성까지도 같이 명시가 된다.

 

 

 

FAT 파일 시스템에서 파일에 어떤 식으로 접근할까요?

 

 

 

 

유닉스 파일 시스템

  • 색인 할당 기반 파일 시스템
  • 색인 블록 == i - node
    • 파일의 속성 정보와 15개의 블록 주소 저장 가능

 

 

i-node를 사용하는 파일 시스템

  • i-node가 파일 시스템의 핵심

 

 

그럼 15개 블록 이상을 차지하는 파일은 어떡할까요?

 

유닉스 파일 시스템은 이러한 문제를 다음과 같이 해결합니다.

 

  • 1. 블록 주소 중 12개에는 직접 블록 주소 저장
    • 직접 블록: 파일 데이터가 저장된 블록

 

  • 2. 1번으로 충분하지 않다면 13번째 주소에 단일 간접 블록 주소 저장
    • 단일 간접 블록: 파일 데이터를 저장한 블록 주소가 저장된 블록

 

  • 3. 2번으로 충분하지 않다면 14번째 주소에 이중 간접 블록 주소 저장
    • 이중 간접 블록: 단일 간접 블록들의 주소를 저장하는 블록

 

  • 4. 3번으로 충분하지 않다면 15번째 주소에 삼중 간접 블록 주소 저장
    • 삼중 간접 블록: 이중 간접 블록들의 주소를 저장하는 블록

 

 

 

  • 윈도우 운영체제에서 사용하는 NTFS(파일 시스템)
  • 리눅스 운영체제에서 사용하는 EXT 파일 시스템

 

 

해당 포스팅에 나온 글과 이미지들은 강민철 저자님의 혼자 공부하는 컴퓨터 구조 + 운영체제의 책과 강의를 참고하여 만들어졌습니다.

책에서 보다 깊게 나오는 내용이 있으므로 한번 구매하고 보셔도 좋을 것 같습니다.

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr

 

'CS' 카테고리의 다른 글

[CS] 페이지 교체와 프레임 할당  (0) 2024.05.26
[CS] 페이징의 이점  (0) 2024.05.26
[CS] 운영체제의 메모리 관리 방식 페이징  (0) 2024.05.26
[CS] 교착 상태  (0) 2024.05.26
[CS] 동기화  (0) 2024.05.26