[운영체제] 파일과 파일 시스템

컴공생의 코딩 일기·2023년 6월 5일
0

운영체제

목록 보기
9/9

쉽게 배우는 운영체제 2판 책을 통해 내용을 정리한 글입니다!

파일과 파일 시스템

파일 시스템 개요

파일 시스템의 기능

파일 시스템은 파일과 파일의 집합체인 디렉터리(directory)를 관리한다.

유닉스 -> 디렉터리
윈도우 -> 폴더

파일 시스템은 파일 및 디렉터리의 생성, 수정, 삭제 등을 관리한다.

파일 시스템의 역할

  1. 파일 및 디렉터리에 대한 접근 방법을 제공하고 권한이 없는 사용자의 접근을 차단
  2. 파일 내용이 손상되지 않도록 무결성을 보장
  3. 파일을 암호화하여 악의적인 접근으로 부터 차단

블록과 파일 테이블

저장장치에서는 파일을 일정 크기로 묶어서 관리하는데 이를 블록이라고 한다.
저장장치의 단위 -> 블록(block)

파일

파일 종류와 확장자

  • 파일은 논리적인 데이터의 집합으로 하드디스크 같은 제2저장장치에 저장된다.
  • 모든 파일은 0과 1의 비트 패턴(bit pattern)으로 이루어진다.

운영체제 입장:

  • 실행 파일: 운영체제가 메모리로 가져와 CPU를 이용하여 작업하는 파일, 사용자의 요청으로 프로세스가 된 파일이다.
  • 데이터 파일: 실행 파일이 작업하는 데 필요한 데이터를 모아놓은 파일(이미지 뷰어 프로그램의 사진 파일, 뮤직 플레이어의 음악 파일, 워드 프로세서의 문서 파일), 데이터 파일은 스스로 프로세스가 될 수 없고, 운영체제가 전송하거나 보관만 할 뿐 특별하게 다루지 않는다.

파일 이름

파일 이름은 '파일이름.확장자' 형태로 구성된다.

파일 연결 프로그램

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

데이터 파일이 필요로 하는 응용 프로그램을 운영체제가 실행하는 것이지 데이터 파일 자체가 실행되는 것이 아니다.

파일 속성


파일 작업

파일을 지우거나 이름을 바꾸는 것과 같이 파일을 변경하는 일을 파일 작업 또는 파일 연산(file operation)이라고 한다. (파일 작업은 파일 자체를 변경하는 것과 파일 내용을 변경하는 것으로 나눌 수 있다.)

파일 내용을 변경하는 작업은 프로세스 입장에서 수행하는 것으로 아래 표와 같이 주로 함수 형태로 이루어진다.

파일 헤더

파일마다 자신에게 필요한 정보를 따로 정의하여 사용할 수 있는데 이는 파일 헤더(header)에 기록된다.

  • 버전 번호
  • 크기
  • 특수 정보

파일 크기, 만든 날짜, 접근 권한과 같은 파일 속성은 모든 파일에 공통으로 적용된다.

모든 파일에 공통으로 적용되는 정보인 파일 속성은 파일 테이블에 위치하고 해당 파일에 필요한 정보를 가지고 있는 파일헤더는 파일의 맨 앞에 위치한다.

저장장치 관리 기법

파티션

파티션은 디스크를 논리적으로 분할하는 작업이다.
예) C:드라이브, D:드라이브...


a) 대용량 저장장치의 경우, 하나로 사용하기 보다 여러 개로 나누어 사용하면 관리하기가 편하다.
b) 파일 테이블은 탑재된 파티션의 영역에 저장된 파일만 관리한다.
c) 여러 개의 파티션을 하나로 통합한다는 것은 저장장치나 파티션의 개수에 상관없이 하나의 파일 시스템만 가진다.

포맷

포맷(format)은 저장장치의 파일 시스템을 초기화하는 작업이다. 파일 테이블이 없는 저장장치를 포맷하면 파일 테이블이 새로 탑재되고, 파일 테이블이 있는 저장장치를 포맷하면 파일 테이블이 초기화되어 아무것도 저장되지 않은 처음 상태로 돌아간다.

빠른 포맷:

  • 데이터는 그대로 둔 채 파일 테이블만 초기화하는 방식
  • 기존에 저장된 데이터는 저장장치에 그대로 남지만 사용자에게 보이지 않는다.

느린 포맷:

  • 파일 테이블을 초기화할 뿐 블록의 모든 데이터를 0으로 만든다.
  • 불량 섹터를 찾는다.

조각 모음

하드디스크에 조각이 많이 생기면 큰 파일이 여러 조각으로 나뉘어 저장된다. 이를 읽으려면 하드디스크의 여러 곳을 돌아다녀야 하므로 성능 저하로 이루어진다.

파일 구조

파일은 하나의 데이터 덩어리다.

순차 파일 구조

  • 일반 파일은 기본적으로 순차 파일 구조(sequential file structure)다.
  • 순차 파일 구조는 파일 내용이 하나의 긴 줄로 늘어선 형태이다.
  • 예) 카세트테이브

순차 파일의 장점:

  • 모든 데이터가 순서대로 기록되기 때문에 저장 공간에 낭비되는 부분이 없다.
  • 구조가 단순하여 테이프는 물론 플로피디스크나 메모리를 이용한 저장장치에도 적용할 수 있다.
  • 순서대로 데이터를 읽거나 저장할 때 매우 빠르게 처리한다.

순차 파일의 단점:

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

인덱스 파일 구조

  • 순차 파일 구조에 인덱스 테이블을 추가하여 순차 접근과 직접 접근이 가능하다.
  • 인덱스 테이블을 여러 개 만들면 다양한 접근이 가능하다.

직접 파일 구조

  • 직접 파일 구조(direct file structure)는 저장하려는 데이터의 특정 값에 어떤 관계를 정의하여 물리적인 주소로 바로 변환하는 파일 구조다.
  • 특정 함수로 접근이 가능하다. (예: 해시 함수)

디렉터리의 구조

디렉터리의 개념

디렉터리는 관련 있는 파일을 하나로 모아놓은 곳으로 1개 이상의 자식 디렉터리(sub directory)와 1개 이상의 파일을 가질 수 있다.
루트 디렉터리(root directory):

  • 최상위에 있는 디렉터리
  • 슬래시(/)를 뜻함
    자식 디렉터리(sub directory):
  • program, windows, user라는 자식 디렉터리가 있다.

디렉터리 파일

  • 디렉터리도 파일이다.
  • 일반 파일에는 데이터가 담겨 있고 디렉터리에는 파일 정보가 담겨 있다.
  • 디렉터리 헤더에는 디렉터리 이름, 만든 시간, 접근 권한등의 정보가 기록되어 있다.
  • 마침표(.): 자신의 디렉터리
  • 2개 마침표(..): 상위 디렉터리

경로

  • 경로는 파일이 전체 디렉터리 중 어디에 있는지를 나타내는 정보다.
  • 한 디렉터리에는 같은 이름을 가진 파일이 존재할 수 없지만, 서로 다른 디렉터리에는 같은 이름의 파일이 존재할 수 있다.

  • 절대 경로(absolute path): 루트 디렉터리를 기준으로 파일의 위치를 나타내는 방식(슬레시(/)로 시작 예:/user/exm.c)
  • 상대 경로(relative): 현재 위치를 기준으로 파일의 위치를 표시하는 방식 (절대 경로는 문자로 시작하며, 언제나 자신이 위치한 디렉터리를 기준으로 한다. 예: data/exam.c)

cd(change directory):

  • 디렉터리를 이동할 때 사용하는 명령어
  • 절대경로, 상대경로 모두 사용 가능

현재 위치보다 아래에 있는 데이터를 접근할 때는 상대 경로를 사용하고 다른 디렉터리로 이동할 때는 절대 경로를 사용한다.

디렉터리 구조

초기 파일 시스템:

  • 1단계 구조
    현대 파일 시스템:
  • 다단계 디렉터리 구조(트리 구조), 디렉터리에 파일과 디렉터리를 둘 다 저장 가능
  • 자료구조에서는 트리를 순환이 없는 그래프라고 정의하지만 오늘날의 디렉터리구조에는 순환이 있다. (예: 윈도우 바로가기)


마운트

마운트는 하나의 파일 테이블의 여러 개의 파티션 통합하는 명령어이다.

디스크 파일 할당

할당 방식

  • 메인메모리 시스템과 유사
  • 전체 디스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리(공간 하나 -> 블록)

파일 시스템은 파일의 이름과 해당 파일이 시작되는 블록 주소를 가진 파일 테이블을 관리한다.

파일 테이블:

  • 파티션당 하나씩 존재
  • 파티션의 맨 앞 부분에 위치

연속 할당과 불연속 할당

연속 할당(contiguous allocation):

  • 파일을 구성하는 데이터를 디스크상에 연속적으로 배열하는 간단한 방식
  • 디스크에 남은 공간 중 파일의 크기와 맞는 연속된 공간이 없을 때는 연속 할당이 불가능

불연속 할당(non-contiguous allocation):

  • 비어 있는 블록에 데이터를 분산하여 저장하고 이에 관한 정보를 파일 시스템이 관리하는 방식
  • 연결 리스트를 이용한 연결 할당과 인덱스를 이용한 할당이 있다.

연결 할당(linked allocation)

  • 연결 할당은 파일에 속한 데이터를 연결 리스트로 관리하는 방식
  • 파일 테이블에는 시작 블록에 대한 정보만 저장
  • 나머지 데이터는 시작 블록부터 연결하여 저장
  • 파일에 맨 끝에 해당하는 블록헤는 링크 대신 널(null)을 삽입

  • 연결 할당 방식은 테이블 형태로 관리
  • 예) 윈도우의 FAT
  • 테이블을 이용한 방식의 단점은 하나의 파티션이 사용할 수 있는 디스크 용량이 테이블의 주소 크키로 제한된다.

인덱스 할당(indexed allocation)

  • 인덱스 할당 방식에서는 테이블의 블록 포인터가 데이터 블록을 연결하는 것이 아니라, 데이터의 인덱스를 담고 있는 인덱스 블록을 연결
  • -1은 null을 의미
  • 테이블이 꽉 차 더 이상 데이터를 연결할 수 없을 때 인덱스 블록을 연결하는 간접 인덱스 블록(indirect index block)을 만들면 무한히 확장 할 수 있다.

  • 파일 제어 블록: 파일 소유자와 각종 속성
  • 블록 포인터: 데이터가 있는 블록의 위치를 직접 연결하는 포인터
  • 간접 포인터: 크기가 작은 파일은 직접 연결된 블록 포인터로 빠르게 접근할 수 있다. 하지만 크기가 커서 블록 포인터가 다 차면 인덱스 블록을 생성한 후 간접 포인터를 생성하여 인덱스 블록을 연결한다.

빈 공간 관리

  • 파일 시스템은 빈 블록의 정보만 모아놓은 빈 공간 리스트(free block list)를 유지
  • 빈 공간 리스트로 보내지면 내용은 지워지지 않고 빈 공간 리스트에 삽입됨
  • 새로운 블록을 할당할 때는 리스트에 먼저 들어온 블록부터 할당(디스크 복구나 휴지통에서 삭제한 파일을 되살리는 일이 가능)
profile
더 좋은 개발자가 되기위한 과정

0개의 댓글