파일과 디렉터리

재능없는 개발자·2023년 2월 4일
0

파일과 디렉터리는 모두 운영체제 내부 파일 시스템이 관리하는 존재이다.

파일

파일이란 하드 디스크나 SSD같은 보조 기억장치에 저장된 관련 정보 집합을 의미한다. 파일을 이루는 정보에는 파일의 이름과 파일을 실행하기 위한 정보 그리고 파일 관련 부가 정보가있다.
부가정보를 속성 또는 메타데이터라고 한다. 파일 속성에는 파일 유형, 크기, 보호, 생성 날짜, 마지막 접근 날짜, 마지막 수정 날짜, 생성자, 소유자, 위치 등이 있다.
파일을 다루는 모든 작업은 운영체제에 의해 이루어진다. 파일을 다루려면 운영체제에 부탁해야 한다. 사용자나 프로그램은 system call을 통해 파일을 CRUD한다.

파일 유형

파일 유형은 운영체제가 인식하는 파일 종류를 나타낸다. 같은 이름의 파일일지라도 유형이 다르면 실행 양상도 달라진다.
그래서 파일을 실행할 때, 운영체제에게 파일 유형을 알려주어야 한다. 파일 유형을 알려주기 위해 사용하는 것이 확장자이다.

디렉터리

파일을 관리하기 위해선 디렉터리를 이용한다. 과거의 운영체제는 하나의 디렉터리로 모든 파일을 관리했다. 하지만 이렇게는 모든 파일을 관리하기 힘들기 때문에 여러 계층을 가진 트리 구조 디렉터리가 생겨나게 되었다.트리 구조에는 최상위 디렉터리가 있고, 그 아래 서브 디렉터리가 있다. 최상위 디렉터리는 루트 디렉터리라 하고 슬래시( / )로 표현한다.

경로

경로는 디렉터리를 이용해 파일 위치, 파일이름을 특정짓는 정보이다.

  • 절대 경로
    같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 동일한 이름의 파일이 존재할 수 있다. 이는 루트 디렉터리부터 파일까지의 경로가 다르기 때문이다. 그래서 모든 파일은 루트 디렉터리에서 자기 자신까지 이르는 고유 경로를 가지고 있고, 이를 절대 경로라 한다.
  • 상대 경로
    상대 경로는 현재 디렉터리 부터 시작하는 경로이다.

디렉터리 엔트리

디렉터리도 그저 특별한 형태의 파일일 뿐이다. 파일이 내부에 해당 파일과 관련된 정보를 담고 있다면, 디렉터리는 내부에 해당 디렉터리에 담겨있는 대상과 관련된 정보를 담고 있다. 디렉터리는 보조기억장치에 테이블 형태의 정보로 저장된다.

파일 시스템

파일 시스템은 파일과 디렉터리를 보조기억 장치에 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램이다. 파일 시스템은 어떻게 보조기억장치에 파일이나 디렉터리를 저장하고 접근할까?

파티셔닝과 포매팅

한 번도 사용된 적이 없는 새 하드디스크나 SSD에는 곧바로 파일을 생성하거나 저장할 수 없다. 보조기억 장치를 사용하려면 파티션을 나누는 작업과 포맷 작업을 거쳐야한다. 하드디스크나 SSD처럼 용량이 큰 저장장치를 논리적인 단위(파티션)으로 구획하는 것을 파티셔닝이라 한다.
포매팅은 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업을 의미한다.
포매팅까지 완료하여 파일 시스템을 완성했다면, 파일과 디렉터리를 생성할 수 있다.

파일 할당 방법

운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다. 하드디스크의 가장 작은 저장 단위는 섹터이지만, 파일 시스템이 모든 섹터를 관리할 수는 없으므로 운영체제는 하나 이상의 섹터를 블록이라는 단위를 묶은뒤 블록 단위로 파일과 디렉터리를 관리한다. 이렇게 파일을 할당하는 방법에는 연속 할당연결 할당, 그리고 색인 할당이 있다.

  • 연속 할당
    보조기억 장치 내 연속적인 블록에 파일을 할당하는 방식이다. 연속으로 할당된 파일에 접근하기 위해서는 첫 번째 블록 주소와 블록 단위의 길이만 알면 된다. 하지만 이는 중간의 파일을 삭제하였을 때, 외부 단편화 문제를 일으킨다.
  • 연결 할당
    연결 할당은 각 블록 일부에 다음 블록의 주소를 저장하여 다음 블록을 가리키는 형태로 할당하는 방식이다.이 할당 방법은 외부 단편화 문제를 해결하지만 파일의 중간 부분부터 접근하고 싶어도 반드시 첫번째 블록부터 하나씩 차례대로 읽어야 한다는 점과, 하나의 블록에 문제가 생기면 그 블록 이후의 블록에 접근할 수 없다는 점이다.
  • 색인 할당
    색인 할당은 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식이다. 색인 할당은 연결 할당과는 달리 파일 내 임의의 위치에 접근하기 쉽다. 색인 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리에 파일 이름과 더블어 색인 블록 주소를 명시한다.

파일 시스템의 종류

FAT 파일 시스템은 usb 메모리 , SD카드 등의 저용량 장치에서 사용 되고 유닉스 파일 시스템은 유닉스 계열 운영체제에서 사용된다.

  • FAT 파일 시스템
    FAT 파일 시스템은 연결할당 기반으로 작동한다. 연결 할당 방식은 다음 블록의 주소를 이전 블록에 저장하는 방식인데 임의 접근의 성능이 좋지 못하고, 블록 중 하나라도 문제가 발생하면 그 이후 블록에는 접근할 수 없었다. FAT 파일 시스템은 이러한 다음 블록의 주소들을 한데 모아 테이블 형태로 관리한다. 이러한 테이블을 FAT라고 한다. 파일의 첫 번째 블록 주소만 알면 파일의 데이터가 담긴 모든 블록 주소에 접근할 수 있다.

  • 유닉스 파일 시스템
    유닉스 파일 시스템은 색인 할당 기반으로 작동한다. 색인 할당은 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리하는 방식이라고 했다. 유닉스에선 이 색인 블록을 i-node라고 한다. 유닉스 파일 시스템에는 파일마다 이러한 i-node가 있고, i-node들은 파티션 내 특정 영역에 모여 있다.
    i-node 하나는 기본적으로 열다섯 개의 블록 주소를 저장할 수 있다. 그럼 열 다섯개 이상의 블록을 차지하는 큰 파일은 어떻게 저장할까?

i-node가 가리키는 열다섯개의 블록 중 처음 열두 개에는 파일 데이터가 저장된 블록 주소를 명시적으로 가리킨다. 이 열두개의 블록 주소로 파일의 모든 파일을 가리킬 수 없다면 i-node의 열 세 번째 블록 주소를 이용해 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록을 가리키게 한다.

계속해서 부족하다면, 열 다섯 번째의 삼중 간접 블록 주소까지 사용한다.

이렇게 i-node만 알면 파일 속성뿐만 아니라 파일 크기가 크더라도 모든 파일 데이터를 가리킬 수 있다.

profile
https://www.youtube.com/watch?v=__9qLP846JE

0개의 댓글