[CS Study : OS] 파일 시스템

Byuk_mm·2022년 8월 27일
0
post-thumbnail

컴퓨터 과학에 대한 지식을 습득하고 정리하는 기록용 포스팅입니다.
예외를 판단하는 사고를 기르고, 효율적인 코드를 작성하기 위해
컴퓨터 과학 지식을 활용하는 것을 목표로 합니다.


✅ 파일과 파일 시스템


📌 파일 시스템 개요

  • 운영체제는 사용자가 직접 파일을 보관하거나 접근하지 못하도록 하기 위해, 대신 파일을 보관하고 관리하는 파일 관리자를 두어 저장 장치의 전체 관리를 맡기는데 이를 파일 시스템이라고 한다.

  • 가상 메모리에서 메모리 관리자가 메모리 매핑 테이블을 사용하여 가상 주소를 물리 주소로 변환하는 것과 마찬가지로, 저장 장치에서는 파일 관리자가 파일 테이블을 사용하여 파일을 관리한다.
    윈도우의 경우 FAT(File Allocation Table), 유닉스의 경우 I-node와 같은 파일 할당 테이블을 유지한다.

  • 데이터는 운영체제와 저장 장치 간에 블록 단위로 전송된다. 블록은 저장 장치에서 사용하는 가장 작은 단위로, 한 블록에 주소 하나가 할당 된다.
    메모리는 바이트 단위로 저장되고, 하드 디스크의 물리적인 구조상 가장 작은 저장 단위는 섹터이다.

  • 섹터마다 주소를 부여하면 너무 많은 양의 주소가 필요하기 때문에 파일 관리자는 여러 섹터를 묶어 하나의 블록으로 만들고, 블록 하나에 주소 하나를 배정한다.


📌 파일 분류와 확장자

  • 모든 파일은 0과 1의 비트 패턴으로 이루어지며, 운영체제 입장에서는 크게 실행 파일데이터 파일로 나뉜다.

  • 실행 파일 : 운영체제가 메모리로 가져와 CPU를 이용하여 작업을 하는 파일이다. 즉, 사용자의 요청으로 프로세스가 된 파일을 말한다.

  • 데이터 파일 : 실행 파일이 작업하는 데 필요한 데이터를 모아놓은 파일이다.

  • 실행 파일과 데이터 파일은 둘 다 더블클릭하면 실해외딕 때문에 데이터 파일을 실행 파일로 착각하기 쉽다. 그러나 데이터 파일이 필요로하는 응용 프로그램을 운영체제가 실행하는 것이지 데이터 파일 자체가 실행되는 것은 아니다.


📌 파일 구조

1. 순차 파일 구조(Sequential File Structure)

  • 일반 파일은 기본적으로 순차 파일 구조이다. 순차 파일 구조는 파일 내용이 하나의 긴 줄로 늘어선 형태로 카세트 테이프가 대표적인 예이다.

  • 장점
    1. 모든 데이터가 순서대로 기록되기 때문에 저장 공간에 낭비되는 부분이 없다.
    2. 구조가 단순하다.
    3. 순서대로 데이터를 읽거나 저장할 때 매우 빠르게 처리된다.

  • 단점
    1. 파일에 새로운 데이터를 삽입하거나 삭제할 때 시간이 많이 걸린다.
    2. 특정 데이터로 이동할 때 직접 접근이 어렵기 때문에 앞에서부터 순서대로 움직여야 한다.


2. 인덱스 파일 구조(Index File Structure)

  • 순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능하다.

  • 현대의 파일 시스템은 인덱스 파일 구조로,
    파일을 저장할 때는 순차 파일 구조로 저장하고, 파일에 접근할 때는 인덱스 테이블을 보고 원하는 파일에 접근한다.

  • 데이터베이스와 같이 데이터의 빠른 접근이 필요한 시스템에 사용된다.


3. 직접 파일 구조(Direct File Structure)

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

  • 특정 함수를 이용하여 직접 접근이 가능한 파일 구조이며, 이때 사용하는 함수를 해시 함수라고 한다.

  • 해시 함수를 이용하여 주소를 변환하기 때문에 데이터 접근이 매우 빠르지만, 해시 함수를 선정하는 것이 큰 중요 포인트이다.




✅ 디스크 파일 할당


📌 연속 할당과 불연속 할당

  • 파일 시스템은 기본적으로 메인 메모리 시스템과 유사하다.
    전체 디스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리한다.
    이때 같은 크기로 나뉜 공간 하나를 블록이라하며, 한 블록의 크기는 1~8KB이다.

  • 일반적으로 하나의 파일은 여러 개의 블록으로 사용하는데, 여러 개의 블록을 어떻게 연결하는지에 따라 연속 할당과 불연속 할당 방식으로 구분된다.

  • 연속 할당 : 연속 할당은 파일을 구성하는 데이터를 디스크상에 연속적으로 배열하는 방식이다.
    파일을 저장하거나 삭제하다 보면 빈 공간이 생기는데, 디스크에 남은 공간 중 파일의 크기와 맞는 연속된 공간이 없을 때는 연속 할당이 불가능하기 때문에 실제로 사용되지 않는다.

  • 불연속 할당 : 불연속 할당은 비어 있는 블록에 데이터를 분산하여 저장하고 이에 대한 정보를 파일 시스템이 관리하는 방식이다.
    대표적으로 연결 할당과 인덱스 할당 방식이 있다.


📌 연결 할당(Linked Allocation)

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

  • 파일 테이블에는 시작 블록에 대한 정보만 저장하고 나머지 데이터는 시작 블록부터 연결하여 저장한다.

  • 파일의 맨 끝에는 링크 대신 NULL을 삽입한다. 체인 할당이라고도 한다.

  • 윈도우의 FAT가 연결 할당 방식으로 관리된다.

  • 하나의 파티션이 사용할 수 있는 디스크 용량이 테이블의 주소 크기로 제한된다는 단점이 있다.


📌 인덱스 할당(Index Allocation)

  • 인덱스 할당 방식에서는 테이블의 블록 포인터가 데이터 블록을 연결하는 것이 아니라,
    데이터의 인덱스를 담고 있는 인덱스 블록을 연결한다.

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


📌 디스크 빈 공간 관리

  • 블록 하나의 크기를 크게 잡으면 -> 적은 주소로 많은 양의 데이터를 관리할 수 있지만 낭비되는 공간이 생기고,
    블록 하나의 크기를 작게 잡으면 -> 많은 양의 블록 포인터가 필요하다.

  • 단편화에 의해 발생된 블록의 빈공간을, 디스크에 파일을 저장할 때마다 모든 테이블을 다 뒤져서 찾는 것은 비효율적이다.

  • 내부 단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 파일 시스템은 빈 블록의 정보만 모아놓은 빈 공간 리스트(Free Block List)를 유지한다.

  • 블록의 내용을 지우지 않고 빈 공간 리스트에 삽입하는 것은 해당 블록에 새로운 데이터를 덮어쓰지 않는 한 원래 데이터를 복구할 수 있는 여지를 남긴다.




✅ 참고

도서 : 쉽게 배우는 운영체제

profile
어디야 벽벽 / 블로그 이전 -> byuk.dev

0개의 댓글