파일 시스템

soyeon·2023년 1월 9일

운영체제

목록 보기
10/10
post-thumbnail

파일과 디렉터리

💡 운영체제는 보조기억장치에 있는 데이터들을 어떻게 관리할까?

파일

: 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합

모든 파일에는 파일 이름과 파일을 실행하기 위한 정보, 파일 관련 부가 정보가 있다.

이 부가 정보를 속성 / 메타데이터라고 부른다.

파일 속성과 유형

운영체제마다 유지하는 파일 속성은 조금씩 차이가 있지만, 대표적인 속성의 종류는 다음과 같다.

속성 이름의미
유형운영체제가 인지하는 파일의 종류
크기파일의 현재 크기와 허용 가능한 최대 크기
보호어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지
생성 날짜파일이 생성된 날짜
마지막 접근 날짜파일에 마지막으로 접근한 날짜
마지막 수정 날짜파일이 마지막으로 수정된 날짜
생성자파일을 생성한 사용자
소유자파일을 소유한 사용자
위치파일의 보조기억장치상의 현재 위치

파일 속성 중에서 파일 유형같은 이름의 파일이더라도 유형이 다르면 실행 양상이 달라진다.

따라서 파일을 실행할 운영체제에게 파일 유형을 알려주어야 한다.

파일 유형을 알리기 위해 가장 흔히 사용하는 방식이 확장자를 이용하는 것입니다.

파일 유형대표적인 확장자
실행 파일없는 경우, exe, com, bin
목적 파일obj, o
소스 코드 파일c, cpp, cc, java, asm, py
워드 프로세서 파일xml, rtf, doc, docx
라이브러리 파일lib, a, so, dll
멀티미디어 파일mpeg, mov, mp3, mp4, avi
백업/보관 파일rar, zip, tar

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

파일을 다루는 모든 작업은 운영체제에 의해 이뤄진다.

응용 프로그램이 파일을 조작하려면 운영체제에게 부탁을 해야 합니다. 운영체제는 파일 연산을 위한 시스템 호출을 제공합니다.

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

디렉터리

: 파일들을 일목요연하게 관리할 수 있다. 윈도우에서는 폴더라고 부른다.

옛날에는 모든 파일이 하나의 디렉터리 아래에 있었습니다. 이런 구조를 1단계 디렉터리라고 합니다.

하지만! 컴퓨터 용량이 커지면서 1단계 디렉터리로는 많은 파일을 관리할 수 없게 되었습니다.
➡️ 트리 구조 디렉터리 등장

최상위 디렉터리(루트 디렉터리)가 있고 그 아래에 여러 서브 디렉터리(자식 디렉터리)가 있다.

이로 인해 경로라는 개념이 생겨났다. 디렉터리를 이용해 파일 위치, 파일 이름을 특정 짓는 정보이다.

절대 경로와 상대경로

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

절대 경로 : 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로
상대 경로 : 현재 디렉터리부터 시작하는 경로

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

운영체제는 디렉터리 연산을 위한 시스템 호출도 제공한다.

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

디렉터리 엔트리

디렉터리도 파일이다.

파일과 디렉터리는 내부에 있는 파일과 디렉터리와 관련된 정보를 표 형태로 가지고 있다.

디렉터리 엔트리에는 파일의 이름보조기억장치 내에 저장된 위치를 유추할 수 있는 정보가 담긴다.

이를 통해 디렉터리에 속한 파일들의 이름와 이들의 위치를 알 수 있다.

파일 시스템

💡 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램을 파일 시스템이라고 한다.

파티셔닝과 포매팅

아직 한 번도 사용된 적이 없는 새 하드 디스크나 SSD가 있다고 생각해 봅시다. 우리는 이 보조기억장치에 바로 파일을 생성하거나 저장할 수 없습니다.

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

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

커다란 서랍 안에 물건을 마구잡이로 보관하면 정리하는게 쉽지 않습니다.

하지만, 칸막이를 설치해 영역을 나누면 조금 더 수월하게 정리를 할 수 있겠죠?

포매팅 : 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지 결정하고, 새로운 데이터를 쓸 준비를 하는 작업을 의미한다.

🔥 저수준 포매팅 vs 논리적 포매팅
저수준 포매팅
: 저장장치를 생성할 당시 공장에서 수행되는 물리적인 포매팅
논리적 포매팅 : 파일 시스템을 생성하는 포매팅

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

포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉터리를 생성할 수 있습니다.

파일 할당 방법

운영체제파일과 디렉터리를 블록 단위로 읽고 씁니다.

하드디스크의 가장 작은 단위는 섹터이지만, 운영체제는 섹터를 블록이라는 단위로 묶어서 관리합니다.

파일은 여러개의 블록에 걸쳐 저장됩니다. 파일을 보조기억장치에 할당하는 방법에는 크게 두가지가 있습니다.

연속 할당

: 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식

파일에 접근하기 위해서는 파일의 첫번째 블록 주소블록 단위의 길이만 알면 된다.
디렉터리 엔터리에 파일 이름과 첫번째 블록 주소와 블록 단위 길이를 명시한다.
외부 단편화 문제가 발생할 수 있다.

불연속 할당

연결 할당

: 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식
디렉터리 엔트리에는 파일이름, 첫번째 블록 주소, 길이를 명시한다.

외부 단편화 문제를 해결하지만 다른 단점이 있다.
1. 반드시 첫번째 블록부터 하나씩 차례대로 읽어야 한다.
임의 접근 속도가 매우 느리다.
2. 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근할 수 없다.
따라서 이를 조금 변형하여 사용한다. 대표적인 파일 시스템이 FAT 파일 시스템이다.

색인 할당

: 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식

임의 접근이 가능하다.

색인 블록만 알면 파일 데이터에 접근할 수 있기 때문에 디렉터리 엔트리에 색인 블록 주소가 명시된다.
이 방법을 기반으로 만든 파일 시스템이 유닉스 파일 시스템이다.

파일 시스템 살펴보기

FAT 파일 시스템

USB 메모리, SD 카드 등의 저용량 저장 장치에서 사용된다.

연결 할당의 단점을 보완한 파일 시스템이다.

연결 할당에서는 블록 안에 다음 블록의 주소를 저장하였다는 단점이 있었다.

하지만, 각 블록에 포함된 다음 블록의 주소들을 모아서 테이블로 관리하면 이 단점을 해소할 수 있다. 이 테이블을 파일 할당 테이블(FAT)이라고 부른다.

FAT 파일 시스템은 버전에 따라 FAT12, FAT16, FAT32가 있다. 숫자는 블록을 표현하는 비트 수를 의미한다. 윈도우에서는 블록 대신 클러스터라는 용어를 사용한다.

FAT는 파티션의 앞부분에 만들어진다. 하드 디스크의 한 파티션을 FAT 파일 시스템으로 포맷하게 되면, 해당 파티션은 아래와 같이 구성된다.

FAT는 실행하는 도중에 메모리에 캐시될 수 있다. 그러면 임의 접근의 성능이 개선된다.

유닉스 파일 시스템

유닉스 계열 운영체제에서 사용된다.

색인 할당은 색인 블록을 기반으로 파일의 데이터 블록을 찾습니다.

유닉스 파일 시스템에서는 이 색인 블록을 i-node라고 부릅니다.

i-node에는 파일 속성 정보열다섯개의 블록 주소가 저장될 수 있다.

유닉스 파일 시스템에서는 파일마다 i-node가 있고, i-node마다 번호가 부여되어 있다.

그리고, i-node들은 파티션 내 특정 영역에 모여 있다.

그런데! i-node의 크기는 유한합니다. 파일이 블록 20개, 30개를 차지하면 i-node 하나로 파일의 데이터 블록을 모두 가리킬 수 없습니다.

이를 해결하는 방법
1. 블록 주소 중 열두개에는 직접 블록 주소를 저장한다.
직접 블록 : 파일 데이터가 저장된 블록
i-node의 열다섯개 블록 중 처음 열두개에는 직접 블록 주소를 저장한다.
2. 첫번째 내용으로 충분하지 않다면 열세번째 주소에 단일 간접 블록 주소를 저장한다.
열두개의 블록 주소로 파일의 모든 블록을 가리킬 수 없다면 열세번째 블록 주소는 단일 간접 블록의 주소를 저장한다.
단일 간접 블록 : 파일 데이터를 저장한 블록 주소가 저장된 블록
3. 두번째 내용으로 충분하지 않다면 열네번째 주소에 이중 간접 블록 주소를 저장한다.
4. 세번째 내용으로 충분하지 않다면 열다섯번째 주소에 삼중 간접 블록 주소를 저장한다.
▶ 웬만한 크기의 파일은 모두 표현할 수 있다.

유닉스 파일 시스템의 디렉터리 엔트리파일 이름i-node 번호로 구성된다.

이외에도 윈도우 운영체제에서 사용하는 NT 파일 시스템(NTFS), 리눅스 운영체제에서 사용하는 ext 파일 시스템 등이 있습니다.

0개의 댓글