[OS] 파일시스템

Yuri JI·2023년 1월 9일
0

cs스터디

목록 보기
6/9

파일시스템은 파일과 디렉터리를 관리한다.
파일과 디렉터리는 보조기억장치에 있는 데이터 덩어리인데, 파일과 디렉터리가 무엇인지, 그리고 운영체제는 이것을 어떻게 관리하는지 알아보자

File, 파일

파일이란 하드 디스크나 SSD 같은 보조기억장치에 저장된 정보의 집합이다.
모든 파일에는 이름과 파일 실행을 위한 부가정보가 있는데, 이 부가정보를 속성, 메타데이터라고 한다.

맥 OS 파일 속성
  • 문서 유형(파일 유형)은 운영체제가 인식하는 파일의 종류로, 확장자를 통해 운영체제가 파일 유형을 인식한다.

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

파일을 다루는 모든 작업은 운영체제를 통해야 한다. 따라서 응용프로그램에서 파일을 조작해야한다면 시스템 호출을 통해 운영체제에게 부탁해야한다. 운영체제는 아래와 같은 연산을 위해 시스템 호출을 제공한다.

  • 파일 연산을 위한 시스템 호출 종류
    • 파일 생성 / 삭제 / 열기 / 닫기 / 읽기 / 쓰기

Dicrectory, 디렉터리

디렉터리는 파일들을 관리하기 위해 이용할 수 있다.
예전 운영체제에서는 하나의 디렉토리 아래에 모든 파일이 존재하는 1단계 디렉토리 구조였다. 컴퓨터 용량이 많아짐에 따라 관리할 수 있는 파일이 많아졌고 여러 계층을 가진 트리 구조 디렉토리로 발전했다.

트리 구조 디렉터리

트리 구조 디렉터리의 맨 위 층에는 최상위 디렉토리가 있고, 그 아래에 여러 서브 디렉터리가 존재한다.
최상위 디렉터리는 흔히 루트 디렉터리로 불리고, 슬래시(/)로 표현한다. 서브 디렉터리는 자식 디렉터리로 표현할 수 있다.
이렇게 계층으로 디렉터리를 표현하다보니 자연스럽게 경로라는 개념이 생겼다.

맥 OS 디렉토리 구조
https://www.oreilly.com/library/view/macintosh-terminal-pocket/9781449328962/ch01s03s01.html

경로

경로는 디렉터리를 이용하여 파일의 위치를 특정 짓는 정보이다.

절대 경로 : 루트 디렉터리부터 시작하는 경로
상대 경로 : 현재 디렉터리부터 시작하는 경로

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

파일 연산을 위해 시스템 호출을 이용해야 하는 것처럼, 디렉토리에 대한 작업이 필요할 때도 시스템 호출을 이용해야한다.

  • 디렉터리 연산을 위한 시스템 호출 종류
    • 디렉터리 생성 / 삭제 / 열기 / 닫기 / 읽기

디렉터리 엔트리

운영체제는 파일과 디렉터리를 완전히 다른 별개의 존재로 여기지 않는다. 디렉터리 역시 파일로 취급한다. 포함된 정보가 조금 특별한 형태의 파일로 다룬다.

💡 파일은 내부에 해당 파일과 관련된 정보를 다루고 있고, 디렉터리는 내부에 해당 디렉터리에 담긴 대상과 관련된 정보를 다룬다.

디렉터리가 다루는 정보는 보통 테이블(표) 형태로 구성되어 있고 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다.

파일 시스템 별로 디렉터리 엔트리에 담기는 정보는 차이가 있다. 하지만 공통적으로 해당 디렉터리에 무엇이 담겨 있는지, 그리고 보조기억장치 내에 파일/디렉터리의 위치를 유추할 수 있는 정보를 디렉터리 엔트리에 저장한다.

파일 시스템

파일 시스템은 파일과 디렉터리를 보조기억장치에 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램이다.
파일 시스템에는 다양한 종류가 있고, 하나의 컴퓨터에서는 여러 파일 시스템을 사용할 수 있다.

파일시스템이 파일과 디렉토리를 보조기억 장치에 어떻게 저장(할당)하고 접근하는지에 대한 내용을 공부하고, 대표적인 파일 시스템 FAT파일시스템유닉스 파일시스템에 대해 알아보자.

방금 막 생성된 하드 디스크, SSD는 우리가 바로 이용할 수 없다. 보조기억장치를 사용하려면 파티셔닝과 포매팅 작업을 거쳐야 한다.

파티셔닝과 포매팅 작업 이후에 파일과 디렉터리를 생성할 수 있다 !

파티셔닝

저장 장치의 논리적인 영역을 구획하는 작업이다. 하나의 물리적인 디스크 저장장치를 여러 독립적인 공간인 파티션으로 나눈다.
파일 시스템은 파티션마다 하나씩 만들어진다.

출처: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bitnang&logNo=70183582975

💡 파티셔닝의 목적

  • 하나의 물리적 디스크를 몇 개의 영역으로 나누어 관리가 용이하도록
  • 운영체제가 여러 가지인 경우 각각의 파일시스템을 단일 영역에 독립적으로 유지할 수 있게 하기 위해
  • 한 파티션이 손실 되더라도 다른 파티션 영역은 손실로부터 보호할 수 있는 확률을 높이기 위해

포매팅

파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업이이다. 어떤 파일 시스템을 이용할지 결정하는 단계이다. 파티션마다 다른 파일 시스템을 설정할 수 있다.

파일 할당 방법

하드 디스크의 포매팅 이후부터 파일 및 디렉터리를 할당할 수 있다.
이때 운영체제는 파일과 디렉터리를 블록(block) 단위로 읽고 쓴다. 크기가 작은 파일은 적은 수의 블록에 걸쳐 저장되고, 크기가 큰 파일은 여러 블록에 거쳐 저장된다.

💡 블록(block)과 섹터(sector)
하드 디스크의 가장 작은 저장 단위는 섹터이지만, 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶은 뒤 파일과 디렉터리를 관리한다. 파일 시스템이 모든 섹터를 관리하기에는 개수가 너무 많고 크기도 작기 때문이다.

파일을 보조기억장치에 할당하는 방법은 크게 연속 할당불연속 할당이 있고, 불연속 할당은 크게 연결 할당, 색인 할당으로 나뉜다.

현재는 불연속 할당을 사용한다.

연속 할당(contiguous allocation)

연속 할당은 가장 단순한 방식으로, 파일이 저장 장치 내에서 연속적인 공간을 차지하도록 블록을 할당하는 방법이다.
연속으로 할당된 파일에 접근하기 위해서는 파일의 첫 번째 블록 주소블록 단위의 길이만 알면된다. 이를 위해 파일시스템은 디렉터리 엔트리에 파일 이름과 함께 첫번 째 블록 주소블록 단위의 길이를 명시한다.

장점 : 파일을 그저 연속적으로 저장하면 되기때문에 구현이 단순하다.
단점: 외부 단편화를 야기한다.

연결 할당(linked allocation)

연속 할당의 문제인 외부 단편화를 해결할 수 있는 방식으로, 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식이다.
즉, 파일을 이루는 데이터를 연결 리스트로 관리한다.

1번 블록 끝에 8번 블록 주소를, 8번 블록 끝에 3번 블록 주소를, 3번 블록에는 다음 블록이 없다는 특별한 지시자(예. -1)를 기록한다.

장점: 외부 단편화 문제를 해결했다.
단점: 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 한다. 즉 임의 접근(random access) 속도가 매우 느려 성능 면에서 비효율적이다. 또한 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록에 접근할 수 없다. 하나의 블록 안에 파일 데이터와 다음 블록의 주소가 모두 포함되어 있다보니, 블록 하나에 문제가 생기면 다음 블록에 접근 할 수 없다.

연결 할당을 변형한 대표적인 파일 시스템은 FAT 파일 시스템이다.

색인 할당(indexed allocation)

파일의 모든 블록 주소를 색인 블록(index block)이라는 하나의 블록에 모아 관리하는 방식이다.
파일 a의 색인 블록은 4번 블록이고, 파일 a의 데이터는 1번, 5번 ,7번 블록에 저장되어있다 가정해보면, 4번 블록 안에는 파일 a를 구성하는 블록들의 주소인 1, 5, 7이 적혀있다. 파일 a에 순차적으로 접근하고자 한다면 색인 블록에 저장된 주소에 차례대로 접근하면 된다. 파일시스템은 이를 위해 디렉터리 엔트리에 파일 이름과 색인 블록 주소를 명시한다.

장점: 연결 할당과 달리 파일 내 임의 접근하기 쉽다. 파일의 i번째 데이터 블록에 접근하고자 한다면, 색인 블록의 i번째 항목이 가리키는 블록에 접근하면 된다.

참고한 블로그

https://shkit.tistory.com/19

profile
안녕하세요 😄

0개의 댓글