15.1 파일과 디렉터리

15.1.1 파일

  • 컴퓨터를 이용할 때는 파일 단위로 이용한다.

  • 파일; file: 보조기억장치에 저장된 관련 정보의 집합을 의미

    • 의미 있고 관련 있는 정보를 모은 논리적 단위
  • 파일을 이루는 정보

    • 이름
    • 파일을 실행하기 위한 정보
    • 파일 관련 부가 정보: 속성(attribute) 또는 메타데이터(metadata)

image-20240503105237933.png

image-20240503105326582.png

  • 파일 속성 중 파일 유형은 운영체제가 인식하는 파일 종류를 나타냄.

    • 확장자; extension을 사용해서 파일 이름 뒤에 붙어서 파일 유형을 알려줌
  • 파일 연산을 위한 시스템 콜

    • 파일을 다루는 모든 작업은 운영체제에 의해서만 이뤄짐, 운영체제가 아래 연산을 위한 시스템 콜을 제공

    • 파일 생성, 삭제, 열기, 닫기, 읽기, 쓰기

15.1.2 디렉터리

image-20240503105556809.png

  • 파일들을 일목요연하게 관리하기 위해 디렉터리; directory를 이용할 수 있다.
  • 윈도우에서는 디렉터리를 폴더; folder 라 부름

image-20240503105721645.png

  • 컴퓨터 용량이 커지니, 저장할 수 있는 파일도 많아지고, 1단계 디렉터리로는 많은 파일을 관리하기가 어렵기 때문에

    • 여러 계층을 가진 트리 구조 디렉터리가 생겨남.
  • 자연스레 생긴 개념이 바로 경로(Path) 이다, 디렉터리를 이용해 파일 위치, 나아가 파일 이름을 특정 짓는 정보

    • 절대 경로: 루트 디렉터리(/)부터 시작하는 경로
    • 상대 경로: 현재 디렉터리부터 시작하는 경로
  • 디렉터리 연산을 위한 시스템 콜

    • 파일 연산을 위해서 운영체제가 시스템 콜을 제공하는 것 처럼, 디렉터리 연산을 위해서도 시스템 콜 제공
    • 디렉터리 생성, 삭제, 열기, 닫기, 읽기

image-20240503110253784.png

image-20240503110329350.png

  • 많은 운영체제에서는 디렉터리를 그저 ‘특별한 형태의 파일’로 간주
  • 즉, 디렉터리도 파일입니다.
  • 단지 포함된 정보가 조금 특별할 뿐
  • 디렉터리는 내부에 해당 디렉터리에 담겨 있는 대상과 관련된 정보를 담고 있다.
    • 이 정보는 보통 테이블(표) 형태로 구성됩니다. 즉, 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장
  • 디렉터리에 포함된 대상의 이름과 그 대상이 보조기억장치 내에 저장된 위치를 유추할 수 있는 정보가 담긴다
    • 디렉터리 엔트리만 보아도 해당 디렉터리에 무엇이 담겨 있는지, 그것들은 보조기억장치의 어디에 있는지를 직간접적으로 알수 있다.

15.2 파일 시스템

  • 파일 시스템: 파일과 디렉터리를 보조기억장치에 일목요연하게 저장, 접근할 수 있게 하는 운영체제 내부 프로그램

15.2.1 파티셔닝과 포매팅

  • 보조기억장치를 사용하려면 파티션을 나누는 작업(파티셔닝)과 포맷 작업(포매팅) 을 거쳐야 한다.

image-20240503110556343.png

  • 파티셔닝pirtioning은 저장 장치의 논리적인 영역을 구획하는 작업을 의미
    • 칸막이로 영역을 나누는 작업이 바로 파티셔닝
    • 용량이 큰 저장 장치를 하나 이상의 논리적인 단위로 구획
    • 파티셔닝 작업을 통해 나누어진 영역 하나하나를 파티션; partion

image-20240503110923927.png

  • 포매팅; fomating: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장 및 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
    • 즉, 어떤 종류의 파일 시스템을 사용할지는 바로 이때 결정
  • 포매팅의 종류에는 엄밀히 말하면 저수준 포매팅과 논리적 포매팅이 있습니다.
    • 저수준 포매팅: 저장 장치를 생성할 당시 공장에서 수행되는 물리적인 포매팅
    • 고수준 포매팅: 파일 시스템을 생성하는 포매팅
  • 여기서 설명하는 포매팅은 고수준 포매팅

15.2.2 파일 할당 방법

image-20240503111134404.png

  • 운영체제는 파일과 디렉터리를 블록; block 단위로 읽고 쓴다.
    • 즉, 하나의 파일이 보조기억장치에 저장될 때는 하나 이상의 블록에 걸쳐 저장
  • 하드 디스크의 가장 작은 저장 단위는 섹터이지만,
  • 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶은 뒤 블록 단위로 파일과 디렉터리를 관리
    • 파일 시스템이 모든 섹터를 관리하기에는 개수가 너무 많고 크기도 작기 때문
  • 블록 안에 적힌 번호는 블록의 위치를 식별하는 주소
  • 크기가 작은 파일은 적은 수의 블록에 걸쳐 저장될 것이고, 크기가 큰 파일은 여러 블록에 걸쳐 저장

image-20240503111150185.png

15.2.2.1 연속 할당, contiguous allocation

image-20240503143700273.png

  • 연속적인 블록에 파일을 할당하는 방식
  • 외부 단편화 야기

image-20240503143714412.png

15.2.2.1 연결 할당, linked allocation

image-20240503143740841.png

  • 연속 할당의 문제를 해결할 수 있는 방식
  • 연결 할당은 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식
    • 파일을 이루는 데이터를 연결 리스트로 관리
    • 연결 할당은 불연속 할당의 일종이기에 파일이여러 블록에 흩어져 저장되어도 무방
  • ‘어떤 블록의 주소를 저장한다’는 말은 ‘그 블록을 가리킨다’는 말과 같다.
  • 어떤 블록의 주소를 알면 해당 블든지 접근할 수 있기 때문
  • C언어의 포인터와 같은 개념

image-20240503143934355.png

  • 단점 1. 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 한다.

    • 파일의 중간 부분부터 접근하고 싶어도, 반드시 파일의 첫 번째 블록부터 접근하여 하나씩 차례대로 읽어야 한다.
    • 파일 내의 임의 접근; random access 속도가 매우 느림
  • 단점 2. 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없다.

    • 하나의 블록 안에 파일 데이터와 다음 블록 주소가 모두 포함되어 있다 보니,

    • 블록에 하나라도 문제가 발생하면, 그 블록 이후의 블록에 접근할 수 없다는 것

    • 연결 할당을 변형한 것이 오늘날까지도 많이 사용하는 FAT 파일 시스템 이다.

15.2.2.3 색인 할당, indexed allocation

image-20240503144352544.png

image-20240503144524014.png

  • 색인 할당은 파일의 모든 블록 주소를 색인 블록; index block 이라는 하나의 블록에 모아 관리하는 방식
  • 색인 할당은 연결 할당과는 달리 파일 내 임의의 위치에 접근하기 쉽다.
    • 파일의 i번째 데이터 블록에 접근하고 싶다면 색인 블록의 i번째 항목이 가리키는 블록에 접근하면 되기 때문
  • 색인 할당 파일 시스템에서는 디렉터리 엔트리에 파일 이름과 더불어 색인 블록 주소를 명시
  • 색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템 이다.

15.2.3 파일 시스템 살펴보기

  • 다양한 파일 시스템이 있지만 여러 전공서에서 공통으로 소개하는 파일 시스템은 크게 두 가지
    • 하나는 USB 메모리, SD 카드 등의 저용량 저장 장치에서 사용되는 FAT 파일 시스템
    • 다른 하나는 유닉스 계열 운영체제에서 사용되는 유닉스 파일 시스템

15.2.3.1 FAT 파일 시스템

image-20240503144900330.png

image-20240503144836578.png

  • 각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리하면 연결 할당 방식의 단점 해소
  • 이러한 테이블을 파일 할당 테이블 FAT; File Allocation Table, FAT 라고 한다.

image-20240503144916469.png

image-20240503144929649.png

image-20240503144956660.png

image-20240503145008237.png

15.2.3.2 유닉스 파일 시스템

image-20240503145032633.png

image-20240503145041655.png

  • 색인 할당은 색인 블록을 기반으로 파일의 데이터 블록들을 찾는 방식이라고 소개했습니다.
  • 유닉스 파일 시스템에서는 이 색인 블록i-node; index-node 라 한다.
    • i-node에는 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있다.
    • 유닉스 파일 시스템에서 파일 속성 정보는 i-node에 표현
  • 유닉스 파일 시스템에는 파일마다 이러한 i-node가 있고, i-node마다 번호가 부여되어 있다.
    • i-node들은 다음과 같이 파티션 내 특정 영역에 모여 있다.
    • i-node 영역에 i-node들이 있고, 데이터 영역에 디렉터리와 파일들이 있다.

image-20240503145243481.png

  • i-node 하나는 열다섯 개의 블록을 차지하는 파일까지 가리킬 수 있다.
  • 하지만 블록을 20개, 30개, 그 이상 차지하는 큰 파일도 존재한다.
    • i-node 하나만으로는 파일의 데이터 블록을 모두 가리킬 수 없다.
  • 유닉스 파일 시스템은 이러한 문제를 해결

image-20240503145259199.png

  • 첫째, 블록 주소 중 열두 개에는 직접 블록 주소를 저장합니다.
    • 직접 블록; direct block: 파일 데이터가 저장된 블록

image-20240503145307548.png

  • 둘째, ‘첫째’ 내용으로 충분하지 않다면 열세 번째 주소에 단일 간접 블록 주소를 저장
    • 단일 간접 블록 single indirect block: 파일 데이터를 저장한 블록 주소가 저장된 블록

image-20240503145314251.png

  • 셋째, ‘둘째’ 내용으로 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소를 저장
    • 이중 간접 블록; double indirect block:란 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록을 의미

image-20240503145329705.png

  • 넷째, ‘셋째’ 내용으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장

image-20240503150038826.png

image-20240503150048320.png

image-20240503150056799.png

image-20240503150106812.png

image-20240503150115605.png

image-20240503150126873.png

  • 파일 시스템을 아우르는 개념은 방대
  • 파일 시스템만을 다루는 전공서도 많다.
  • 윈도우 운영체제에서 사용되는 NT 파일 시스템(NTFS)
  • 리눅스 운영체제에서 사용되는 ext 파일 시스템

15.3 저널링 파일 시스템

image-20240503150323971.png

15.4 마운트

  • ‘저장 장치를 마운트한다’
    • 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업을 의미

image-20240503150620070.png

image-20240503150631013.png

Reference