13. File-System Interface

파일 시스템의 인터페이스에 대해 알아보자. 이는 파일의 모음과 디렉토리 구조로 이루어지며 운영 체제와 컴퓨터 시스템 이용자의 데이터와 프로그램에 대한 접근을 가능케 한다.

13.1. File Concept

운영 체제가 논리적 저장소 단위를 추상화한 것을 파일이라 한다. 이는 운영 체제로부터 (대개 비휘발성의) 물리적 기기로 매핑되며, 이차 저장소에 기록된 연관된 정보의 모임이라 할 수 있다. 파일의 종류로 텍스트를 담은 텍스트 파일, 소스를 담은 소스 파일, 실행 가능한 실행 파일 등이 있다.

13.1.1. File Attributes

파일의 특성에는 다음 등이 있다: 이름, 식별자, 타입, 위치, 크기, 보호, 타임스탬프와 사용자 식별자. 최신 파일시스템은 확장 파일 특성을 지원하기도 한다. 이의 인터페이스로 파일 정보창이 있다.

13.1.2. File Operations

파일에 대한 동작에는 다음 등이 있다: 파일 생성, 파일 열기, 파일 쓰기 (이 때 시스템은 파일 내 쓰기 포인터의 위치를 유지해야 한다), 파일 읽기 (이 때 시스템은 파일 내 읽기 포인터의 위치를 유지해야 하며, 이는 프로세스별 현재 파일 위치 포인터로 유지되어야 한다), 파일 내 위치 재배치(시크라고도 함), 파일 삭제(하드 링크를 허용하는 파일의 경우 마지막 링크가 삭제되어야 파일이 삭제됨), 파일 병합. 이 외에도 다양한 동작 등이 있다.

많은 파일 동작은 그 파일이 있는 디렉토리 주소를 필요로 하기 때문에 운영 체제는 파일-열기 테이블을 파일이 처음 사용되기 전에 미리 계산해 둔다. 어떤 시스템은 파일에 대해 첫 참조가 행해질 때 묵시적으로 그 파일을 열기도 한다. 같은 파일에 대한 파일 열기와 파일 쓰기는 여러 프로세스에 의해 동시적으로 이루어질 수 있으므로 운영 체제는 프로세스별 테이블과 시스템별 테이블을 모두 관리해야 한다. 프로세스별 테이블의 각 요소는 또한 시스템별 파일 열기 테이블을 가리킨다. 파일 열기 테이블은 각 파일에 대해 얼마나 많은 프로세스가 그 파일을 열고 있는지를 나타내는 열기 카운트도 유지해야 한다. 요약하면, 열린 파일과 연관된 정보들은 다음과 같다: 파일 포인터, 파일 열기 카운트, 파일 위치, 접근 권한.

파일 잠금은 읽기-쓰기 락과 비슷하다. 공유 잠금은 여러 프로세스가 동시에 얻을 수 있는 락이고, 독점 잠금은 한 번에 한 프로세스만 얻을 수 있는 락이다. 또한, 운영 체제는 프로세스가 독점 잠금을 얻을 시 다른 프로세스의 접근을 운영체제가 막아야 하는 의무적 잠금과 프로세스가 잠금을 얻을 시 다른 프로세스의 접근도 허용되는 권고적 잠금을 제공해야 한다. 파일 잠금은 프로세스 동기화와 동일한 종류의 조심성을 필요로 한다.

13.1.3. File Types

파일 타입은 여러 방식으로 구현되는데 그 중 한 방식은 파일명의 일부인 확장자로 넣는 것이다. 예를 들어 .sh는 쉘 스크립트가 된다. UNIX 시스템은 이진 파일의 시작 부분에 매직 넘버를 넣어서 파일의 데이터 유형을 식별하기도 한다.

13.1.4. File Structure

파일 유형은 파일 구조를 나타낼 수도 있다. 운영 체제가 복수의 파일 구조를 지원하게 된다면 운영 체제는 크고 번잡해진다. 그래서 어떤 운영 체제들은 가능한 파일 구조의 종류를 최소한도로 유지한다.

13.1.5. Internal File Structure

운영 체제는 논리적 기록 여러 개를 물리적 블록으로 묶어 내부 파일 구조에 대해 물리적 기록 크기가 논리적 기록의 길이와 불일치하는 문제를 해결한다.

13.2. Access Methods

파일 접근 방식들을 알아보자.

13.2.1. Sequential Access

가장 간단한 방법은 순차적 접근으로 파일 내 정보를 순차적으로 처리하는 것이다.

13.2.2. Direct Acess

다른 방법은 직접 접근(상대 접근)으로 파일을 고정 길이의 논리적 기록들로 만들어 프로그램이 특정한 순서 없이 기록을 읽고 쓰게 하는 것이다. 이는 대용량 정보에 대한 즉각적인 접근에 유용하다. 사용자가 운영 체제에 제공하는 블록 번호는 상대적 블록 번호이다. 이는 운영 체제가 파일이 어디에 위치해야 할지를 결정하는 할당 문제를 해결하는 것을 돕는다. 모든 운영체제가 순차적 접근과 직접 접근을 다 지원하는 것은 아니다.

13.2.3. Other Access Methods

다른 접근 방법들은 직접 접근법에 기반하며, 이는 파일의 인덱스를 다루는 것을 포함한다.

13.3. Directory Structure

디렉토리 구조를 알아보자. 디렉토리에 적용되는 동작들은 다음 등이 있다: 파일 탐색, 파일 생성, 파일 삭제, 디렉토리 열거, 파일 이름 수정, 파일 시스템 순회.

13.3.1. Single-Level Directory

가장 간단한 구조는 단일 층 디렉토리로, 모든 파일이 같은 디렉토리에 담겨져 있다.

13.3.2. Two-Level Directory

이층 디렉토리 구조에서는 각 사용자가 각각의 사용자 파일 디렉토리(UFD)를 갖고 있고, 이는 단일 사용자의 파일만을 나열한다. 사용자가 작업을 시작하거나 로그인할 때 시스템은 마스터 파일 디렉토리(MFD) 내에서 해당하는 사용자 파일 디렉토리를 반환한다. 사용자 디렉토리는 그 자체적으로 필요에 따라 생성 또는 삭제될 수 있어야 한다. 이는 이름 충돌 문제를 해결하지만 사용자간 분리를 시킨다는 단점도 있다. 이 경우 경로명은 사용자명과 파일명 모두에 의해 정의된다. 사용자간 공용으로 쓰이는 시스템 파일의 경우 모든 사용자 파일 디렉토리에서 검색 경로를 검색함으로써 이를 해결한다.

13.3.3. Tree-Structured Directories

이층 디렉토리를 일반화한 트리 구조 디렉토리를 생각할 수 있다. 이 때 각 프로세스는 현재 디렉토리를 갖는다. 최초 현재 디렉토리는 사용자가 로그인할 때의 홈이다. 이 때 파일의 경로명도 루트로부터 시작하는 절대 경로명과 현재 디렉토리에 대해 상대적인 상대 경로명이 있다. 이러한 구조는 사용자가 자체적으로 파일들을 구조화할 수 있게 해 준다. 트리 구조 디렉토리에서는 디렉토리를 삭제할 때 그 아래의 부분디렉토리도 전부 삭제되어야 한다.

13.3.4. Acyclic-Graph Directories

비순환그래프 디렉토리는 디렉토리들이 부분디렉토리와 파일들을 공유할 수 있게 한다. 이는 두 디렉토리가 같은 파일을 복제해서 들고 있는 것이 아니라는 것을 주지할 필요가 있다. 이는 파일에 대한 포인터를 디렉토리에 링크하고 필요 없어질 때 이 링크를 해제함으로써 구현할 수 있다. 다른 접근법으로는 공유되는 파일을 디렉토리간에 전부 북제하는 방법도 있다.

비순환그래프 디렉토리 구조는 트리 구조보다 유연하지만 더 복잡하다. 파일이 복수의 절대 경로를 가질 수 있는 문제도 있고, 파일 삭제도 복잡해진다. 그래서 시스템들은 심볼릭 링크로 이를 해결하기도 한다. 이 구조상 파일을 삭제하려면 파일에 대한 참조가 모두 없어질 때 삭제되어야 한다. 문제점은 파일 참조 리스트의 크기가 커진다는 것이다. UNIX는 비심볼릭 링크(하드 링크)에 파일 정보 블록에 참조 카운트를 유지해 이를 해결한다.

13.3.5. General Graph Directory

비순환그래프 디렉토리의 이점은 그래프 순환이 쉽다는 점이고 파일에 대한 참조가 더 이상 없는지를 판별하기가 쉽다는 것이다. 일반적인 그래프 디렉토리에 대해서는 이 문제를 파일 시스템을 순회할 때 방문하는 디렉토리의 수를 제한해서 이를 해결한다. 그래프에 순환이 존재할 경우 파일에 대한 참조가 불가능해도 참조 카운트가 0이 아닐 수 있으므로 쓰레기 수집 방법을 써야 한다.

13.4. Protection

파일에 대한 가용성은 파일을 여러 벌 복제해서 이루어진다. 파일에 대한 보호는 여러 방법으로 이룰 수 있다.

13.4.1. Types of Access

파일에 대한 보호는 파일에 대한 접근방식을 제한함으로써 이루어질 수 있다. 파일에 대한 가능한 접근들은 다음과 같다: 읽기, 쓰기, 실행, 덧붙임, 삭제, 나열, 특성 변경. 파일에 대한 보호는 이들 중 가능한 메커니즘을 제한해 이루어진다.

13.4.2. Access Control

가장 일반적인 보호는 파일에 대한 접근 제한으로 각 파일과 디렉토리를 접근 제어 목록(ACL)에 연관지어 이루어진다. 문제는 그 목록의 길이가 너무 길 수 있다는 점이어서, 목록을 압축하거나 그룹화해 해결한다. 보호 분류를 조금 더 제한하기 위해서, UNIX 시스템은 r(읽기), w(쓰기), x(실행)을 제어하는 3개의 비트를 둔다. Windows에서는 GUI로 이를 제어한다.

13.4.3. Other Protection Approaches

다른 접근법은 파일마다 비밀 번호를 걸어놓는 것이다. 또는 파일별이 아니라 디렉토리별로 보호를 적용할 수도 있다.

13.5. Memory-Mapped Files

파일에 접근하는 다른 방법은 가상 메모리 테크닉을 이용해 파일 입출력을 메모리 접근으로 치환하는 메모리 매핑이 있다.

13.5.1. Basic Mechanism

파일을 메모리 매핑하는 것은 디스크 블록을 메모리 내 페이지에 매핑함으로써 이루어진다. 메모리에 매핑된 파일에 대한 쓰기는 이차 저장소 내 파일에 대한 쓰기와 동기적(즉각적)일 필요가 없다. 어떤 운영 체제들은 메모리 매핑은 오로지 특정 시스템 호출만을 통해 가능케 하고 다른 표준 시스템 호출은 다른 파일 입출력을 다루는 데 쓴다. 데이터 공유를 가능케 하기 위해서, 여러 프로세스들이 같은 파일을 동시에 매핑하는 것이 허용된다. 공유 메모리는 자주 파일을 메모리 매핑하는 것으로 구현되고는 한다.

13.5.2. Shared Memory in the Windows API

Windows API는 매핑될 파일의 파일 매핑을 생성하고 프로세스의 가상 주소 공간에 매핑된 파일의 를 설치한다. 다음 프로세스는 가상 주소 공간에서 이 매핑된 파일의 뷰를 열고 생성할 수 있다. 이는 기명 공유 메모리 오브젝트를 통한 프로세스간 통신을 가능케 한다.

13.6. Summary

  • 파일은 운영 체제에 의해 정의되고 구현되는 추상 자료형이다. 이는 논리적 기록의 나열이다. 논리적 기록은 바이트, 라인 (고정 또는 가변 길이의), 또는 더 복잡한 데이터 항목일 수 있다. 운영 체제는 여러 기록 유형을 지원하거나 애플리케이션 프로그램에 그러한 지원을 할 수 있다.
  • 운영 체제의 주된 작업은 논리적 파일 개념을 하드 디스크나 NVM 장치 같은 물리적 저장소 장치에 대응시키는 것이다. 장치의 물리적 기록 크기는 논리적 기록 크기와 다를 수 있으므로 논리적 기록을 물리적 기록으로 순서화하는 것이 필요할 수 있다. 이는 운영 체제에 의해 이뤄질 수도 있고 애플리케이션 프로그램에 의해 이뤄질 수도 있다.
  • 파일 시스템 내부에서는 파일들을 체계화하기 위해 디렉토리를 만드는 것이 유용하다. 단일 층 디렉토리에서는 각 파일의 이름이 유일해야 하므로 여러 사용자가 있을 때 명명 문제가 발생할 수 있다. 이층 디렉토리는 각 사용자 파일에 대해 별개의 디렉토리를 만들어 이 문제를 해결한다. 디렉토리는 파일을 이름에 따라 나열하고 파일의 디스크 내 장소, 길이, 타입, 소유자, 생성 시점, 최근 사용 시점 등의 정보를 포함한다.
  • 이층 디렉토리의 자연스러운 일반화는 트리 구조 디렉토리이다. 트리 구조 디렉토리는 사용자가 하위 디렉토리를 만들어 파일을 체계화할 수 있게 한다. 비순환그래프 디렉토리는 사용자들에게 하위 디렉토리와 파일을 공유할 수 있게 하나 검색과 삭제를 복잡하게 한다. 일반적인 그래프 구조는 파일과 디렉토리 공유에 있어 완전한 유연성을 허용하지만 가끔은 미사용 디스크 공간을 복구하기 위해 쓰레기 수집을 필요로 한다.
  • 원격 파일 시스템은 가용성, 성능, 보안에 대한 난점을 갖는다. 분산 정보 시스템은 사용자, 호스트, 접근 정보를 유지해 클라이언트와 서버가 상태 정보를 공유하여 사용과 접근을 다룰 수 있게 한다.
  • 파일은 대다수의 컴퓨터 시스템 내에서 핵심 정보-저장소 메커니즘이기 때문에 다중 사용자 시스템 내에서는 파일 보호가 필요하다. 파일에 대한 접근은 각 접근의 유형에 따라 (읽기, 쓰기, 실행, 덧붙임, 삭제, 디렉토리 나열 등) 다르게 제어되어야 한다. 파일 보호는 목록 접근, 비밀번호, 그 외의 다른 방법들에 의해 이루어질 수 있다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중