운영체제(11) : 파일 시스템

김두현·2024년 12월 18일
1
post-thumbnail

📍목차


  1. 파일과 파일 시스템
  2. 디렉터리의 구조
  3. 디스크 파일 할당

1️⃣ 파일과 파일 시스템


운영체제는 저장장치에 파일을 저장하기 위해 파일 시스템을 운영한다.
본 포스팅에서는 파일의 특징과 디렉터리의 구조, 파일 시스템의 구현 방식을 알아보고, 저장장치의 빈 공간 관리 방법까지 알아보자.

✔️ 파일 시스템 개념

가상 메모리에서 메모리 관리자가 메모리 매핑 테이블을 이용해 가상 주소를 물리 주소로 변환하듯이,

저장장치에서는 파일 관리자가 파일 테이블을 사용해 파일의 생성, 수정, 삭제 등을 수행한다.

또한 파일 시스템에서는 운영체제가 사용자에게 파일 접근 권한인 파일 디스크립터를 생성하여 전달한다.

✔️ 블록과 파일 테이블

메모리 주소는 바이트 단위로 부여된다.
그러나 파일이 저장되는 하드디스크 등의 저장장치는 수 TB로, 메모리보다 훨씬 크다.
수 TB의 저장장치에 바이트 단위의 주소를 부여하려면 매우 큰 주소 체계가 필요하기 때문에, 좀 더 큰 단위를 사용한다.

저장장치는 파일을 일정 크기로 묶어서 관리하는데, 이를 블록이라고 한다.

블록은 저장장치에서 사용하는 가장 작은 단위로, 한 블록에 주소 하나가 할당된다.
즉, 운영체제와 저장장치는 파일을 블록 단위로 주고받는다.

위 예시에서 파일 A를 읽어오라고 명령하면, 1, 3, 9번 블록의 데이터를 차례대로 읽어서 사용자에게 전달한다.
만일 파일 테이블에 존재하지 않는 파일 F를 요청하면, 빈 블록에 나누어 저장한 뒤 파일 테이블에 블록 번호를 기록한다.

✔️ 파일 종류

파일은 운영체제 입장에서 크게 실행 파일데이터 파일로 나뉜다.

  • 실행 파일 : 운영체제가 메모리로 가져와 CPU를 이용해 작업하는 파일. 즉, 사용자의 요청으로 프로세스가 된 파일
  • 데이터 파일 : 실행 파일이 작업하는 데 필요한 데이터를 모아놓은 파일. ex) 사진, 음악, 문서 파일 등

데이터 파일은 스스로 프로세스가 될 수 없고, 운영체제 입장에서 모든 데이터 파일은 0과 1로 이루어진 데이터 덩어리일 뿐이다.

파일 연결 프로그램

윈도우에서 실행 파일을 더블클릭하면 프로세스가 실행된다.
반면 데이터 파일을 더블클릭하면 해당 파일을 사용하는 응용 프로그램이 실행되는데,
이를 파일 연결 프로그램이라고 한다.

예를 들어 확장자가 avi인 파일을 실행하면 동영상 플레이어가 실행되고, 운영체제가 해당 데이터 파일을 동영상 플레이어에게 넘겨준다.

주의할 점은 파일 확장자를 변경해도 내용이 바뀌지는 않는다는 것이다.
anim.avi 파일 anim.txt 파일로 바꿔도 동영상 파일이 문서 파일이 되지는 않기 때문에,
anim.txt을 실행하면 문서 편집기가 열리지만 동영상 파일을 인식하지 못한다.

✔️ 파일 헤더

파일 용량, 생성일, 접근 권한 등의 파일 속성은 모든 파일에 공통으로 적용된다.
이러한 파일 속성과 달리 파일마다 자신에게 필요한 정보를 따로 정의하여 사용할 수 있는데, 이는 파일 헤더에 기록된다.
예를 들어 사진의 파일 헤더에는 카메라 기종, 셔터 속도, 조리개 값 등이 기록되고 mp3 파일의 헤더에는 가수명, 앨범명 등이 기록된다.

위와 같이 파일 속성은 파일 테이블에 위치하며, 파일 헤더는 파일의 맨 앞에 위치한다.

✔️ 저장장치 관리 기법

1. 파티션

대용량 저장장치는 일반적으로 통째로 사용하기보다는 2개나 3개로 나누어서 사용한다.

파티션은 디스크를 논리적으로 분할하는 작업으로, 저장장치를 2개 이상의 묶음으로 나눈다.

하나의 묶음에는 하나의 파일 시스템이 탑재되며, 각 파티션에는 이름이 부여된다.
윈도우에서 C: 드라이브, D: 드라이브와 같이 알파벳순으로 이름이 부여되는 것이 파티션의 이름이다.

파일 테이블은 탑재된 파티션의 영역에 저장된 파일만 관리한다.

그러나 파티션이 너무 많아지면 각 파티션을 관리하기 복잡해진다.
따라서 일부 운영체제는 이를 해결하기 위해 여러 개의 파티션을 통합하는 기능을 가지며, 이를 마운트라고 한다.
여러 개의 파티션을 하나로 통합하게 되면, 파일 시스템 또한 하나가 된다는 것을 의미한다.

2. 포맷

포맷은 저장장치의 파일 시스템을 초기화하는 작업이다.

포맷은 빠른 포맷과 느린 포맷으로 나뉜다.

  • 빠른 포맷 : 데이터는 그대로 둔 채 파일 테이블만 초기화한다.
  • 느린 포맷 : 파일 테이블을 초기화하고, 모든 블록의 데이터를 0으로 만든다.

저장장치를 포맷하는 경우 블록의 크기를 지정할 수 있는데,
페이징 메모리 관리를 설명할 때 한 페이지를 너무 크게하면 내부 단편화가 발생한다고 언급한 바 있다.

디스크 블록의 크기도 메모리의 크기와 마찬가지로, 너무 크게 잡으면 낭비되는 공간이 생기는 내부 단편화 문제가 발생한다.

3. 조각 모음

하드디스크를 사용하다 보면 점점 느려지는 경우가 있는데, 이는 파일을 저정하고 지우는 과정을 반복하며 중간중간 빈 공간이 생기기 때문이다. 이를 조각화라고 한다.

조각이 많이 생기면 큰 파일이 여러 조각으로 나뉘어 저장되고, 이를 읽기 위해 하드디스크의 여러 곳을 돌아다니는 과정에서 속도가 저하되는 것이다.

따라서 하드디스크 대신 USB나 SSD를 사용하는 경우가 많은데, 하드디스크와 달리 반도체를 이용해 전자로 데이터를 입출력하기 때문에 조각 모음을 하지 않아도 되기 때문이다.
오히려 조각 모음은 USB의 메모리나 SSD의 소자의 수명이 단축되기 때문에 하지 않는 것이 좋다.

✔️ 파일 구조

파일은 하나의 데이터 덩어리다.
파일 구조는 이 덩어리를 어떻게 구성하느냐에 따라 순차 파일 구조, 인덱스 파일 구조, 직접 파일 구조로 나뉜다.

1. 순차 파일 구조

일반 파일은 기본적으로 순차 파일 구조를 띄는데, 카세트테이프가 대표적인 예이다.
열 곡의이 담긴 카세트테이프를 재생하면 1번 곡부터 10번 곡까지 차례대로 실행되며, 원하는 곡을 듣기 위해서는 앞으로 담거나 되감기를 해야 한다.
이러한 접근 방식을 순차 접근이라고 한다.

순차 파일 구조는 구조가 단순하나, 데이터를 삽입하고 삭제하는 과정이 오래 걸린다는 단점이 있다.

2. 인덱스 파일 구조

인덱스 파일 구조는 순차 접근만 가능한 순차 파일 구조의 단점을 보완한 것으로,
인덱스 테이블을 추가하여 순차 접근과 직접 접근이 모두 가능하다.

위 사진의 예에서 만약 4번 곡을 듣고싶다면, 인덱스 테이블에서 4번 곡의 블록 번호인 39번을 찾아 바로 접근한다.

현대의 파일 시스템은 인덱스 파일 구조를 갖는다.
순차 파일 구조로 파일을 저장하고, 인덱스 테이블을 통해 원하는 파일에 직접 접근한다.
이러한 인덱스 파일 구조는 원하는 종류의 인덱스 테이블을 만들어 다양한 접근이 가능하다는 점이다.

3. 직접 파일 구조

직접 파일 구조는 저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 변환하는 구조다.

학번을 key로 하여 대학생 정보를 저장한다고 가정하고, 학번을 10으로 나눈 나머지를 주소로 할당한다고 하자.
학번이 10인 학생은 0번에, 11인 학생은 1번에 저장된다.

이렇게 특정 함수로 직접 접근이 가능한 것이 직접 파일 구조이며, 이때 사용한 특정 함수를 해시 함수라고 한다.

직접 파일 구조는 해시 함수를 통해 매우 빠른 데이터 접근이 가능하나, 전체 데이터가 고르게 저장되는 해시 함수를 찾기 어렵다는 단점이 있다.

2️⃣ 디렉터리의 구조


그래프 디렉터리 구조

초기의 파일 시스템은 파일이 많지 않아 1단계 구조의 단순한 형태였다.
그러나 파일이 많아지며 다단계 디렉터리 구조가 생겨났고, 오늘날의 운영체제는 다른 디렉터리에 속한 파일이나 디렉터리로 바로 갈 수 있는 바로가기 기능이 있기 때문에 그래프 디렉터리 구조를 갖는다.

마운트

파티션은 논리적인 디스크 분할이라고 언급한 바 있다.
그러나 유닉스의 경우 윈도우와 달리 파일 테이블의 크기에 제한이 없고, 하나의 파일 테이블로 여러 개의 디스크 혹은 파티션을 통합하여 관리할 수 있다.
따라서 유닉스에서는 하나의 파일 테이블에 여러 개의 파티션을 붙여서 사용하는데, 이때 사용하는 명령어가 마운트다.

마운트를 사용하면 디렉터리를 이동할 때마다 다른 파티션으로 넘어가지만, 파일 시스템은 하나이기 때문에 사용자는 하나의 파티션으로 보인다.

3️⃣ 디스크 파일 할당


✔️ 할당 방식

파일 시스템은 전체 디스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리한다.
하나의 공간을 블록이라고 하며, 여러 개의 블록을 어떻게 연결하는지에 따라 연속 할당불연속 할당 방식으로 구분된다.

  • 연속 할당 : 파일을 구성하는 데이터를 디스크상에 연속적으로 배열한다.
    실제로는 사용되지 않는데, 이는 파일 삭제로 인해 생긴 빈 공간에 파일의 크기가 맞지 않는다면 저장이 불가능하기 때문이다.
  • 불연속 할당 : 비어 있는 블록에 데이터를 분산하여 저장하고, 이에 관한 정보를 파일 시스템이 관리하는 방식이다.
    대표적인 방식으로 연결 할당인덱스 할당 방식이 있다.

✔️ 불연속 할당 : 연결 할당 방식

연결 할당은 파일에 속한 데이터를 연결 리스트로 관리하는 방식이다.

파일 테이블에는 시작 블록에 대한 정보만 저장하고, 나머지 데이터는 시작 블록부터 연결하여 저장한다.
파일의 맨 끝에는 null을 삽입한다.

아래의 예시에서 파일 B의 전체 데이터를 찾는 경우, 우선 파일 테이블에서 시작 블록의 위치인 2를 찾는다.
이후 디스크의 해당 블록으로 이동해 다음 데이터가 저장된 블록을 찾은 후 다시 이동하는 과정을 반복한다.

✔️ 불연속 할당 : 인덱스 할당 방식

인덱스 할당은 테이블의 블록 포인터가 데이터의 인덱스를 담고 있는 인덱스 블록을 연결한다.

인덱스 블록은 실제 데이터의 위치 정보를 순서대로 보관한다.

인덱스 할당 방식에서는 테이블이 꽉 차 더 이상 데이터를 연결할 수 없을 때 간접 인덱스 블록을 통해 무한히 확장할 수 있다.
인덱스 할당 방식을 사용하는 파일 시스템인 아이노드의 예시는 아래와 같다.

✔️ 빈 공간 관리

디스크에 파일을 저장할 때마다 모든 테이블을 뒤져서 빈 공간을 찾는 것을 비효율적이다.

따라서 파일 시스템은 빈 공간을 효율적으로 관리하기 위해 빈 블록 정보를 모아놓은 빈 공간 리스트를 유지한다.

위의 예시에서 파일 B를 삭제하면, 파일 B가 사용한 블록의 내용이 바로 지워지는 것이 아니라 빈 공간 리스트에 삽입된다.
이를 통해 블록에 새로운 데이터를 저장하지 않는 한 데이터를 복구할 수 있게 되며, 데이터 삭제 시간 또한 생략할 수 있다.

👏 마무리


본 포스팅에서는 파일 시스템의 역할과 파일이 관리되는 방식에 대해 알아보았다.
마지막 Chapter가 남았으나, 네트워크의 발전 과정을 요약한 내용이므로 운영체제 시리즈는 본 포스팅을 마지막으로 마무리한다.

네트워크 시리즈와 더불어 CS를 처음으로 각잡고 처음부터 끝까지 공부할 수 있어 뿌듯했다😆


참고 자료

쉽게 배우는 운영체제


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM

0개의 댓글

관련 채용 정보