File : 사용자에 의해 생성된 데이터 컬렉션으로, 사용자는 파일 시스템을 이 데이터 컬렉션을 생성한다.
파일의 특징
파일은 저장 장치에 저장되며, 반영구적으로 유지된다.
파일은 여러가지 속성을 가지며, 서로 다른 프로세스들은 파일을 공유할 수 있다.
파일은 특정 응용 프로그램에 대한 내용을 정의할 수 있다. 또한, 파일 간의 관계를 표현하기 위해 계층적 구조나 더 복잡한 구조로 조직될 수 있다.
파일의 속성 : 파일 이름, 확장자, 파일 위치, 파일의 크기, 소유자, 마지막 수정 시간, 접근 권한 등.
File System : 파일로 조직된 데이터를 저장하는 방법뿐만 아니라 파일에 대한 연산을 제공하는 System Call 함수의 집합이다.
Create : 새로운 파일을 정의하고 생성한다.
Delete : 파일을 제거한다.
Open : 기존 파일을 프로세스에 의해 '열린' 상태로 불러오며, 해당 프로세스가 파일에 대한 작업을 수행하도록 한다. 만약 존재하지 않는 파일에 대해 Open 연산을 수행하면, Create System call을 통해 새로운 파일을 생성한다.
Close : 프로세스가 참조중인 파일을 닫아, 파일에 대한 프로세스의 작업을 중단시킨다.
Read : 프로세스가 파일의 데이터 일부 또는 전체를 읽는다.
Write : 프로세스가 파일을 업데이트하여 기존 데이터를 수정하거나 새로운 데이터를 추가할 수 있다.
Single Level Directory : 파일 시스템에서 가장 단순한 디렉토리 구조이다. 이 구조는 모든 파일 시스템에 존재하는 파일들이 하나의 디렉토리에 존재하는 형태이다. 즉, 모든 파일이 하나의 디렉토리에 저장되므로, 구현이 매우 단순하고 파일을 관리하는 데 있어 복잡한 데이터 구조가 필요없다.
장점 : 구조가 단순하여 사용 및 관리가 직관적이며, 파일 검색이 빠르다.
단점 : 모든 파일의 이름이 고유하게 존재해야한다. 따라서 파일 이름 충돌이 빈번하기 때문에 확장성에 있어 한계가 크다.
Two Level Directory : 이 시스템은 마스터 디렉토리의 하위 디렉토리로 사용자 디렉토리가 존재한다. 2단계 디렉토리 구조를 구성한다.
Master Directory
시스템에 존재하는 모든 사용자 디렉토리가 존재하는 디렉토리이다.
일반적으로 OS가 관리하며, User Directory에 대한 접근 권한 정보등이 포함된다.
User Directory
각 사용자는 자신의 디렉토리를 갖는다.
이 디렉토리에는 해당 사용자가 소유한 모든 파일이 포함된다.
사용자는 자신의 디렉토리에 대해서만 접근 권한이 존재한다.
장점
이름 충돌을 최소화 할 수 있으므로 확장성이 개선되었다.
OS가 모든 디렉토리를 관리하기 때문에 보안 및 접근 제어를 강화가 강화된다.
파일 시스템이 보다 구조화되고 조직화되므로 관리가 용이하다.
단점
Single Level Directory에 비해 복잡성이 증가한다.
디렉토리에 접근하여 파일을 찾아야하므로, 검색 시간이 증가한다. (예, User_A/dirname/filename)
Tree Structure Directory : 디렉토리를 계층적(Tree 구조)으로 구성하여 파일과 디렉토리를 보다 효율적으로 관리할 수 있도록 하는 구조이다. 이 구조는 이전 디렉토리 구조의 한계를 극복하고 파일 관리와 검색을 용이하게 하며, 파일 이름의 중복 문제를 더욱 완벽히 해결한다.
Hierarchical Structure (계층적 구조) : 디렉토리와 파일이 계층적으로 구성되어, 상위 디렉토리와 하위 디렉토리 관계를 형성한다.
Absolute Path (절대 경로) : 루트 디렉토리에서 시작하는 경로
Relative Path (상대 경로) : 현재 작업 디렉토리 기준에서 시작하는 경로
Root Directory : 트리 구조의 최상위 디렉토리로, 모든 파일과 하위 디렉토리는 루트 디렉토리에 속한다.
Sub Directory : 루트 디렉토리 아래에 위치한 디렉토리로, 추가적인 하위 디렉토리나 파일을 포함할 수 있다. 계층 구조를 이루며, 트리 구조로 확장된다.
File : 각 디렉토리 내에 포함된 데이터의 단위로, 고유한 경로를 통해 접근 가능하다. (예시, root/User/Document/OS/Chapter11.pdf)
장점
파일과 디렉토리를 논리적으로 그룹화하여 관리하므로, 각 파일의 성격에 따라 효율적으로 관리가 가능하다.
파일 이름 및 디렉토리 이름 중복 문제를 해결하기 용이하다. 따라서, 확장성이 좋다고 할 수 있다.
단점
UNIX : UNIX 파일 시스템에서는 6가지 유형의 파일을 구분한다.
Regular or Ordinary file (일반 파일) : 바이트 스트림으로 이루어진 데이터의 집합이다.
Directory file (디렉토리 파일) : UNIX에선 Directory 또한 파일로 간주하며 관리한다. 실제로 디렉토리 파일은 파일 시스템만이 디렉토리 파일에 쓰기 권한이 존재하며, 사용자 프로그램은 읽기 권한만 부여된다.
Special file (특수 파일) : 데이터를 포함하지 않지만, 물리적 장치를 파일 이름으로 매핑한다. 즉, I/O 장치와 특수 파일이 연결되어 있다.
pipes (파이프) : 파이프는 프로세스 간 통신을 지원하는 파일 시스템이다. 하나의 프로세스에서 데이터를 생성하고 다른 프로세스에서 이를 소비하는 형태로 동작한다.
Links : 특정 파일을 참조하는 파일이다.
Symbolic links : 연결된 파일의 이름을 포함하는 데이터 파일이다.
Index Node (Inode) : UNIX 파일 시스템에서 파일을 관리하기 위해 사용하는 자료구조이다. 모든 파일과 디렉토리는 기본적으로 1개의 Inode를 갖는다.
Inode에 포함되는 정보 : 파일 유형, 접근 권한, 파일 소유자, 파일 크기, 파일 생성 및 수정 시간, 데이터 블록 위치, 링크 수 (해당 Inode를 참조하는 링크의 수), Inode 번호 (Inode의 고유 식별 번호)...
특징
하나의 Inode를 참조하는 여러 파일이 존재할 수 있다. (Hard Link)
각 파일은 정확히 하나의 Inode에 의해 제어된다.
Hard Link : 원본 파일과 동일한 Inode를 갖는 링크이다. 즉, 여러 이름을 갖는 각 파일들이 동일한 Inode를 참조하고, 같은 파일 정보를 갖는다. 마치 파일 복사와 비슷한 이치이다.
원본 파일이나 하드 링크 파일에 변경사항이 적용되면 서로에게 영향을 미친다.
하드 링크를 갖는 파일 중 하나가 삭제되더라도, 다른 파일은 독립적으로 존재한다. 심지어 원본 파일이 삭제되더라도, 하드 링크 파일은 독립적으로 존재할 수 있다.
하드 링크는 동일한 파일 시스템 내에서만 사용 가능하다.
디렉토리에 대한 하드 링크는 불가능하다.
Symbolic Link : 원본 파일을 참조하는 파일이다. 심볼릭 링크는 파일의 경로를 저장하고, 해당 경로를 통해 원본 파일에 접근한다. Windows의 바로가기와 비슷하다.
심볼릭 링크는 원본 파일과 다른 Inode를 갖는다. 심볼릭 링크 파일은 원본 파일의 경로를 텍스트 형태로 저장한다.
실제 데이터를 저장하지 않는다.
원본 파일이 삭제되면, 심볼릭 링크는 더이상 유효하지 않은 파일이 된다.
심볼릭 링크는 다른 파일 시스템 간에도 생성 가능하다.
디렉토리에 대한 심볼릭 링크는 가능하다.
File Allocation (파일 할당) : 파일 시스템에서 파일을 저장하기 위해 디스크 공간을 할당하는 방법을 의미한다. UNIX 시스템에서는 파일 할당이 주로 디스크 블록 단위로 이루어진다.
File Allocation Table (FAT) : 파일이 디스크에 저장된 위치를 추적하고 관리하기 위한 테이블이다. 이 방식은 매우 단순하면서도 강력하지만, 저장 장치의 블록만큼의 Size가 필요하다. 또한 빈 공간에 대한 항목도 포함해야하므로, 오버헤드가 크다.
Contiguous Allocation : 연속 할당은 파일이 연속된 디스크 블록에 저장되는 방식이다. 즉, 파일이 생성될 때 하나의 연속될 블록 집합을 파일에 할당한다.
장점
단점
파일의 크기가 동적으로 변경되기 어려워 확장성이 좋지 않다.
External Fragment 문제가 발생할 수 있다. 즉, 파일이 삭제되고 추가되는 과정에서 빈 공간이 작은 조각으로 나뉘게 된다.
Compaction (조각 모음) : 외부 단편화 문제를 해결하기 위해 디스크의 빈 공간을 모아 하나의 연속된 공간으로 만드는 과정이 필요하다.
Chained Allocation : 연결 할당은 파일의 각 블록이 다음 블록의 위치를 가리키는 포인터 역할을 하는 방식이다. 즉, Linked list와 유사한 구조로 볼 수 있다.
장점
연속 할당에 비해 파일의 크기가 동적으로 변경될 수 있어, 확장성이 좋다.
외부 단편화가 발생하지 않는다.
단점
Direct Access 방식이 아니므로, 검색 속도가 매우 느리다.
만약 한 포인터(블록)이 유실되면, 그 뒤의 파일 전체가 유실될 가능성이 존재한다.
Indexed Allocation : 인덱스 할당은 연속 할당과 연결 할당의 문제를 해결하기 위해 고안된 파일 할당 방식이다. 이 환경에서 Index Table을 사용하면 FAT로 인해 발생하는 오버헤드를 줄일 수 있다.
Index Table : 인덱스 테이블은 각 파일에 대한 별도의 인덱스 블록을 포함하며, 이 블록에는 파일의 데이터 블록에 대한 포인터가 존재한다.