반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 Chapter 15. 파일시스템 부분을 읽고 정리한 내용입니다.

파일

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

파일을 이루는 정보

  • 이름
  • 파일을 실행하기 위한 정보
  • 파일 관련 부가 정보 (속성, 메타데이터)
    • 파일 형식, 위치, 크기 등
 

파일 속성과 유형

속성 이름  의미
유형 운영체제가 인지하는 파일의 종류 (텍스트, 실행, 음성)
크기 현재크기 & 허용 가능한 최대 크기
보호 어떤 사용자가 파일을 읽고/쓰고/실행할 수 있는지
생성 날짜 ...
마지막 접근 날짜  
마지막 수정 날짜  
생성자  
소유자  
위치  

* 속성 이름 자체가 의미를 담고 있는 내용인 경우는 생략

파일 유형

  • 확장자를 이용해 유형을 나타냄

 

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

  • 파일을 다루는 모든 작업은 운영체제에 의해 이뤄지고 응용프로그램은 파일을 조작할 수 없음

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

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

디렉토리

  • 파일들을 정리하기 위해 사용되고 윈도우에서는 폴더라고 부름

옛 운영체제에서는 하나의 디렉토리만 존재했음 (single-level directory)

 

이후, 여러 계층을 가진 tree-structured directory가 생겨남

최상위 디렉토리(root directory, '/'로 표현) 아래 여러 서브 디렉토리가 있을 수 있음

 

절대 경로와 상대 경로

  • 절대 경로: 루트 디렉토리에서 자기 자신까지 이르는 고유한 경로
    • /home/minchul/a.sh
  • 상대 경로: 현재 디렉토리부터 시작하는 경로
    • 현재 디렉토리 경로가 /home이라면 a.sh의 상대 경로는 minchul/a.sh

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

  • 디렉토리 생성, 삭제, 열기, 닫기, 읽기

디렉토리 엔트리

  • 많은 운영체제에서 디렉토리를 그저 ‘특별한 형태의 파일’로 간주
  • 디렉토리는 보조기억장치에 테이블 형태의 정보로 저장되는데 각각의 행을 디렉토리 엔트리라고 함
파일 이름  위치를 유추할 수 있는 정보
   

파일 시스템에 따라 디렉터리 엔트리에 파일 속성을 명시하는 경우도 있음

파일 이름 위치를 유추할 수 있는 정보 생성 시간 수정된 시간     크기
         

 

예시

 

home 디렉토리는 대략 다음과 같이 구성됨

파일 이름  위치를 유추할 수 있는 정보
.. (상위 디렉토리)  
. (현재 작업 디렉토리)  
minchul  
guest  

minchul 디렉토리 엔트리에는 디렉토리에 포함된 파일들의 이름(a.sh, b.c, c.tar)과 이들의 위치를 알 수 있는 정보들이 포함되어있음

 

파일 시스템

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

파티셔닝과 포매팅

  • 보조기억장치를 사용하려면 파티션을 나누는 작업과 포맷 작업을 거쳐야 함
  • 파티셔닝: 저장 장치의 논리적인 영역을 구획하는 작업 (일종의 칸막이로 영역을 나누는 작업)
    • 파티션: 파티셔닝 작업으로 나눠진 영역 하나하나
  • 포매팅: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고 새로운 데이터를 쓸 준비를 하는 작업

Windows에서 USB의 파일 시스템 예시

  • 포매팅 할 때 파일 시스템이 결정됨
  • 파일 시스템은 여러 종류가 있고 파티션마다 다른 파일 시스템을 설정할 수도 있음

 

파일 할당 방법

  • 운영체제는 파일과 디렉토리를 블록(block) 단위로 읽고 씀
    • 하나의 파일이 보조기억장치에 저장될 떄 하나 이상의 블록에 걸쳐 저장됨
  • 하드 디스크의 가장 작은 저장단위는 섹터지만 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶어 관리

  • 하드 디스크내에 여러 블록이 있음

 

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

  1. 연속 할당
  2. 불연속 할당
    • 연결 할당
    • 색인 할당

 

연속 할당(contiguous allocation)

  • 가장 단순한 방식
  • 블록을 3, 2, 5개 차지하는 정도의 크기를 가진 파일 a, b, c가 있다면 아래처럼 할당

  • 연속으로 할당된 파일에 접근하기 위해서는 파일의 첫번째 블록 주소와 블록 단위의 길이만 알면됨

 

  • 연속 할당을 사용하는 파일 시스템에서는 디렉토리에 엔트리에 파일 이름과 더불어 첫번째 블록 주소와 블록 단위의 길이를 명시

장점

  • 구현이 단순

단점

  • 외부 단편화를 야기할 수 있음

 

단점 예시

위의 사진과 같이 파일이 연속할당방식으로 저장된 상황에서 파일 D, F가 삭제 된다면?

  • 블록은 총 11개가 남지만, 크기가 블록 7개 이상을 사용하는 파일은 할당될 수 없음

 

연결 할당(linked allocation)

  • 불연속 할당의 종류
  • 파일을 이루는 데이터를 linked list로 관리

  • 4개의 블록으로 구성된 a라는 파일이 있다고 할 때
  • 10→5→13→2 순으로 블록이 연결되어 있고 2번 블록에는 다음 블록이 없다는 특별한 표시자(-1)를 기록

 

  • 디렉토리 엔트리에는 파일 이름과 함께 첫번째 블록 주소와 블록 단위의 길이를 명시

길이가 아닌 마지막 블록의 주소를 기록할 수도 있음

단점

1. 반드시 첫번째 블록부터 하나씩 차례대로 읽어야 함

  • 파일 내 임의의 위치에 접근하는 속도(random access 속도)가 매우 느려 성능면에서 비효율적

2. 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없음

  • 하나의 블록 안에 파일 데이터와 다음 블록 주소가 모두 포함되어 있다보니, 파일을 이루는 블록에 하나라도 문제가 발생하면 이후 블록에 접근할 수 없음

 

색인 할당(indexed allocation)

  • 파일의 모든 블록 주소를 색인 블록(index block)이라는 하나의 블록에 모아 관리하는 방식

색인 할당 예시

  • 파일 a의 색인 블록은 4번 블록
  • 파일의 데이터는 7, 13, 11 블록이 저장되어 있다고 가정
  • 파일 a에 순차적으로 접근하고 싶다면 생인 블록에 저장된 주소로 차례대로 접근하면 됨

 

  • 임의의 위치에 접근하고 싶다면 색인 블록의 i번째 항목이 가리키는 블록에 접근하면 됨
  • 디렉토리 엔트리에는 파일 이름과 색인 블록 주소를 명시

색인 할당을 기반으로 만든 파일 시스템이 유닉스 파일 시스템

 

파일 시스템 살펴보기

대표적인 파일 시스템 2가지

  1. FAT 파일 시스템: USB, SD 카드등의 저용량 저장 장치에 사용됨
  2. 유닉스 파일 시스템:유닉스 계열 OS에 사용됨

FAT 파일 시스템 (File Allocation Table)

  • 연결 할당 기반 파일 시스템의 단점을 보완
    • 단점의 근본적인 원인은 블록 안에 다음 블록의 주소를 저장했기 때문

 

각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리하면? 파일 할당 테이블(FAT)!

  • 파일의 첫번째 블록 주소(4번블록)만 알면 4→8→3→5 순으로 파일의 데이터가 담긴 모든 블록에 접근할 수 있음
  • 이렇게 FAT을 이용하는 파일 시스템이 바로 FAT 파일 시스템
  • MS-DOS에서 사용되었고 최근까지 저용량 저장 장치용 파일 시스템으로 많이 사용됨
  • 버전에 따라 FAT12, 16, 32가 있으며 숫자는 블록을 표현하는 비트수를 의미

FAT(FAT12) 파일 시스템을 사용하는 파티션 도식도

  • FAT 영역: FAT가 저장되고 파티션의 앞부분에 만들어짐
  • 루트 디렉토리 영역: 루트 디렉토리가 저장되는 영역
  • 데이터 영역: 서브 디렉토리와 파일들을 위한 영역

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

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

시작 블록을 통해 FAT에서 해당 파일의 내용들에 접근할 수 있음

  • 속성은 읽기전용/숨김 파일/시스템 파일/ 일반 파일/ 디렉토리 등을 식별하기 위한 항목

아래 디렉토리 구조를 이루는 FAT 파일 시스템에서 /home/minchul/a.sh 파일을 읽는 과정

 

/home/minchul/a.sh 에 접근하는 과정

  1. 루트 디렉토리에서 home 디렉토리는 몇번 블록에 있는지 살펴봄 → 3번 블록
  2. 3번 블록을 읽어 home 디렉토리 내용을 살펴보고 minchul 디렉토리가 몇번 블록에 있는지 살펴봄 → 15번
  3. 15번 블록을 읽어 a.sh 파일의 첫번째 블록 주소를 확인 → 9번
  4. FAT을 통해 9→8→11→13 블록 순서로 a.sh 파일 내용에 접근 가능

 

유닉스 파일 시스템

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

  • 파일마다 i-node를 가지고 있고 i-node 마다 고유한 번호가 부여되어있음

 

UNIX 파일 시스템을 사용하는 파티션 도식도

  • 파티션 내에 i-node 영역에 i-node들이 있고 데이터 영역에 디렉토리와 파일들이 있음

 

문제: i-node의 크기는 유한한데 블록을 20개, 30개, 그 이상 차지하는 파일은?

첫째, 블록 주소 중 12개에는 직접 블록 주소를 저장

  • i-node가 가리킬 수 있는 열다섯 개의 블록 주소 중 처음 12개에는 파일 데이터가 저장된 블록 주소를 직접 명시
    • direct block: 파일 데이터가 저장된 블록

 

둘째, ‘첫째’ 내용으로 충분하지 않다면 13번째 주소에 단일 간접 블록 주소를 저장

  • 단일 간접 블록(single indirect block): 파일 데이터가 저장된 블록 주소가 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록을 의미

 

 

셋째, ‘둘째’ 내용으로 충분하지 않다면 14번째 주소에 이중 간접 블록 주소를 저장

  • 이중 간접 블록(double indirect block): 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록

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

삼중 간접 블록: 이중 간접 블록 주소가 저장된 블록

 

unix 파일 시스템의 디렉토리 엔트리도 파일 이름과 i-node 번호로 구성됨

UNIX 파일 시스템의 디레고리 엔트리

 

예시

  • 유닉스 파일 시스템에서 /home/minchul/a.sh 파일을 읽는 과정

 

  • 루트 디렉토리 위치는 루트 디렉토리의 i-node를 통해 확인
    • 유닉스 파일 시스템은 루트 디렉토리의 i-node를 항상 기억하고 있음
    • 2번 i-node가 루트 디렉토리의 i-node라고 가정
  1. i-node 2를 통해 루트 디렉토리 위치 파악 → 1번 블록
  2. 1번 블록을 읽으면 루트 디렉토리 내용을 알 수 있음 → home 디렉토리의 i-node 번호는 3
  3. i-node 3에 접근하여 home의 디렉토리 위치 파악 →210번 블록
  4. 210번 블록을 읽으면 home 디렉토리 내용을 알 수 있음 → minchul의 i-node 번호는 8
  5. i-node 8에 접근하면 minchul 폴더의 위치 파악 → 121번 블록
  6. 121번 블록을 읽으면 minchul 디렉토리 내용을 알 수 있음 → a.sh 파일의 i-node 번호는 9번
  7. i-node 9에는 98, 12, 13 블록이 있음

⇒ 결론적으로 a.sh 파일을 읽기 위해 98→12→13 블록에 접근하면 됨, i-node를 통해 위치 정보를 알고, 블록을 통해 내용을 알 수 있음

 

 

반응형

'OS' 카테고리의 다른 글

블로킹/논블로킹  (0) 2024.08.10
동기/비동기  (0) 2024.08.10
가상 메모리(Virtual memory)  (0) 2024.07.28
교착상태(Deadlock)  (0) 2024.07.19
프로세스 동기화  (0) 2024.07.19

+ Recent posts