운영체제

[OS/운영체제] 파일 시스템 (File System) -(1)

4Legs 2020. 11. 17. 16:24

파일 (File)

운영체제는 물리적 메모리의 한 부분을 논리적 저장 단위인 파일로 간주한다. 

파일은 보조 저장장치에 기록된 관련된 정보들의 집합이다. 사용자의 관점에서 파일은 보조 저장장치의 최소 할당량이다. 따라서 데이터는 파일 안에 존재하지 않으면 보조 기억장치에 기록될 수 없다.

파일은 프로그램과 데이터를 표현한다. 데이터 파일은 숫자거나, 문자거나, 이진 데이터를 담은 파일일 수 있다. 파일의 형태는 자유롭지만 일반적으로 파일은 비트, 바이트 등의 연속으로, 사용자에 의해 의미가 정해진다. 즉 파일의 정의는 매우 광범위하다.

 

파일 속성 (File Attributes)

파일은 사용자의 편의를 위해 문자열로 나타낸 이름을 붙여 관리된다. 파일의 이름 등을 포함한 파일의 속성들은 다음과 같다.

이름 (Name) : 사용자에 의해 인식될 수 있는 형태로 유지되는 유일한 속성이다.

식별자 (Identifier) : 파일 시스템 내에서 파일을 구분하는 속성이다. 고유성을 가진다.

유형 (Type) : 다른 유형의 파일을 지원하는 시스템에 필요하다.

위치 (Location) : 장치에서 파일의 위치를 나타내는 정보이다.

크기 (Size) : 파일의 현재 크기를 나타낸다.

보호 (Protection) : 해당 파일에 대한 읽기, 쓰기, 실행 권한 등의 접근 제어 정보를 나타낸다.

시간과 날짜 (Time)

 

파일 연산 (File Operations)

파일은 추상적인 데이터 유형이다. 따라서 파일을 적절하게 정의하려면 파일을 통해 수행되는 연산들에 대해 고려해야 한다.

파일 생성 (Creating) : 파일 시스템에서 생성을 위한 공간을 찾고, 디렉토리에 새 파일에 대한 정보를 추가한다.

파일 쓰기(Writing), 읽기(Reading), 위치 변경(Repositioning)

파일 삭제 (Deleting) : 파일을 삭제하기 위해서는 그 파일이 존재하는 디렉토리를 검색한다. 관련된 디렉토리 항목을 발견하면 그 파일에게 할당되었던 공간을 회수하고, 디렉토리에서 파일에 대한 정보를 삭제한다.

파일 잘라내기 (Truncating) : 파일에 대한 내용만 지우고 파일의 크기 속성만 0으로 바꾼다.

 

파일 접근 방법 (Access Methods)

파일은 정보를 저장한다. 파일이 사용될 때, 이 정보들을 반드시 컴퓨터 메모리에 접근하여 읽어야 한다. 파일 내의 정보는 이 과정에서 여러 방법에 의해 접근될 수 있다.

순차적 접근 (Sequential Access)

가장 단순한 접근법은 순차적으로 접근하는 것이다. 파일의 정보들은 일련의 순서에 의해 처리되며, 컴파일러나 편집기 등이 이러한 접근법을 사용한다.

직접 접근 (Direct Access)

또다른 방법은 파일에 직접 접근하는 것이다. 파일은 고정 길이의 논리적 기록(logical records)으로 만들어져 프로그램이 일정한 순서 없이 즉시 파일을 읽고 쓸 수 있도록 하는 것이다.

 

디렉토리와 디스크 구조

디스크는 파티션(Partition)으로 분할된다. 보통 디스크는 최소한 하나의 파티션을 가지며, 여러 디스크를 하나의 파티션으로도 사용할 수 있다.

각 파티션은 저장되어 있는 파일과 그 파일들에 관한 정보로 구성된다. 파일에 대한 정보는 디렉토리(Directory)에 유지된다. 저장된 파일들은 각각 디렉토리에서 한 항목을 가진다.

 

단일 레벨 디렉토리 (Single-Level Directory)

가장 단순한 디렉토리 구조로, 모든 파일들이 같은 디렉토리에 존재한다.

Single-Level Directory

단일 레벨 디렉토리는 파일의 수가 증가하거나 둘 이상의 사용자가 존재할 때 명확한 한계를 갖는다. 모든 파일이 같은 디렉토리에 존재하므로, 각 파일들의 이름은 고유(Unique)해야 할 것이다. 따라서 파일 이름 지정에 큰 제약이 있다.

 

2레벨 디렉토리 (Two-Level Directory)

단일 레벨 디렉토리의 한계를 보완하기 위해, 디렉토리를 사용자들의 정보를 따로 저장한 MFD(Master-File Directory)각 사용자가 가진 파일의 정보를 저장한 UFD(User-File Directory)의 2레벨로 구분한다.

Two-Level Directory

이 구조부터 경로(Path) 개념이 등장한다. 예를 들어 위 그림에서 사용자 3의 a파일은 user3/a 로 나타낸다.

 

트리 구조 디렉토리 (Tree-Structured Directories)

2레벨 디렉토리를 확장한 것으로, 최상위 디렉토리인 root를 시작으로 디렉토리들이 트리 구조를 이룬다. 또한 각 디렉토리는 하위 디렉토리를 가질 수 있다. 

Tree-Structured Directory

이 구조에서 프로세스는 현재 디렉토리(Current Directory)란 개념을 가진다. 현재 디렉토리는 프로세스가 사용하는 파일을 가장 많이 포함하는 디렉토리를 말한다. 프로세스에서 파일 참조가 발생할 때, 프로세스는 현재 디렉토리를 우선 탐색하게 된다. 현재 디렉토리와 다른 디렉토리에 접근하기 위해서는 그 디렉토리에 대한 경로가 제공되어야 한다.

절대 경로(Absolute Path) : 트리의 root로부터의 경로이다.

상대 경로(Relative Path) : 현재 디렉토리로부터의 경로이다.

 

비순환 그래프 디렉토리 (Acyclic-Graph Directories)

디렉토리를 사이클이 없는 그래프 구조로 구현함으로써 파일의 공유가 쉬워지도록 한다.

Acyclic-Graph Directories

이를 구현하는 데 링크(Link)가 사용된다. 링크는 파일 또는 디렉토리에 대한 포인터로, 심볼릭 링크와 하드 링크로 구분된다.

심볼릭 링크 (Symbolic Link) : 파일 또는 디렉토리에 대한 포인터로, 심볼릭 링크를 삭제해도 이는 파일에 영향을 주지 않는다. 윈도우에서 일반적으로 사용하는 바로가기 아이콘과 같다.

하드 링크 (Hard Link) : 파일에 대해서만 가능하고, 한 파일 시스템에서만 가능하다. 하드 링크는 원본 파일과 직접 연결된 복사본을 생성하는 것과 같다. 즉 하드 링크를 통해 파일을 수정하면 원본 파일도 수정된다.

 

※ 본 게시글은 『Operating System Concepts』 를 참고하여 작성되었습니다.