OS_15_Files and Directories
![post-thumbnail](https://velog.velcdn.com/images/saewoohan/post/f183f34f-c37f-4573-a564-85b26842e845/image.png)
OS_15_Files and Directories
1. File Concept
1) File System
- 파일 시스템은 OS의 측면에서 가장 눈에 띄는 부분이다.
- 파일 시스템은 file과 directory 구조 두 가지로 구성된다.
- Files
- A directory structure
- File: logical stroage unit (사용자의 관점으로)
- physical storage device에 매핑된다.
- 보통은 비휘발성
- 파일 내용은 전원 장애나 시스템 재부팅을 겪어도 지속된다.
- File은 data와 program을 나타낸다.
- Data: numeric, character, or binary data
- Program: executables
2) File Attributes
- Name: 파일의 심볼릭한 이름으로, 인간이 읽을 수 있는 유일한 정보
- Identifier: unique tag (number)
- Type: 다양한 유형을 지원하는 시스템에서 필요한 파일의 유형 정보
- Location: 파일이 저장 위치에서의 위치를 나타내는 포인터.
- Size: 현재 파일의 크기
- Protection:
- 읽기, 쓰기, 실행을 수행할 수 있는 사용자를 제어하는 정보
- Time, date, and user identification
- 보호, 보안 및 사용량 모니터링에 유용한 정보
- Creation, last modification and last use
- 기타 정보들은 파일의 디렉토리 구조에 유지되며, 이 디렉토리 구조는 디스크에 유지된다.
![](https://velog.velcdn.com/images/saewoohan/post/eb7ee460-86e4-4be6-8cc1-576a9894a7bd/image.png)
file control block
3) File Types
- 파일 시스템에 대한 OS설계 시 고려해야할 점.
- Should OS recognize and support file types?
- e.g.)
- user는 text file을 실행하려고 할 것이다.
- OS는 이러한 시도를 방지 할 수 있다.
- 파일 유형 규현을 위한 일반적인 기술
- file name의 일부로 type를 표현
- Two parts: name + extension
- Extension은 application에 대한 힌트일 뿐이다.
- Unix는 magic number를 사용하여 파일의 유형을 대략적으로 나타낸다.
- 이를 통해 파일을 유효한 실행 파일로 식별하고 형식에 대한 추가정보를 제공
4) File Operations
- File은 Abstract Data Type이다.
- OS는 파일에 대해서 수행할 수 있는 일반적인 작업을 위해 system call을 제공한다.
- file operation을 위한 최소한의 작업 세트
- Open (create), close, read, write
- Resposition within file, delete, truncate
- Copy = create + read + write
a) Open and Close Operations
- Open system call
- 지속적인 검색을 피하기 위해서 사용
- file의 metadata를 memory로 이동시킨다. (open file tables)
- 실제 데이터를 제외한 파일에 대한 모든 정보가 이 메모리에 저장된다.
- Close system call
- memory에서 해당 entry를 제거한다 (open file tables)
- OS는 두개의 file table을 사용한다.
- Per-process open-file table
- System-wide open-file table
b) Access Methods - Sequential Access
- Sequential access
- 가장 간단하고 자주 쓰이는 방법이다.
- 파일내의 정보를 순서대로, 한 레코드를 다음 레코드로 처리한다.
- Editors와 compiler가 주로 이런 방법으로 파일에 접근한다.
- read나 write는 자동적으로 file pointer를 전진시킨다.
![](https://velog.velcdn.com/images/saewoohan/post/15cfde47-ee5a-492d-b6fe-bd2e3c6c56df/image.png)
5) Views on Files and Disk Allocation
- Logical record unit (사용자 관점)
- file은 logical record unit이다.
- UNIX에서는 파일의 구조나 내용에 관계 없이 bytes의 stream으로 정의한다.
- Physical recored unit (Kernel 관점)
- disk I/O는 1 block 단위로 수행된다.
- 512 bytes per block
- A file of 1,949 bytes
- 4개의 block 할당 (2,048 bytes)
- 마지막 99 bytes는 버려진다.
![](https://velog.velcdn.com/images/saewoohan/post/a9fd72a6-7182-4853-98b8-76bbb9a89db9/image.png)
Different Views
6) Mapping of File Data
- 다른 층계 사이에서의 file data mappings
![](https://velog.velcdn.com/images/saewoohan/post/05172427-d108-4689-94c8-17d620a86a28/image.png)
2. Directory Structure
1) Directory Structure
- To manage millions of files
- Disk는 한 개 이상의 partition으로 구분 될 수 있다.
- Minidisks in the IBM World
- Volumes in PC and Macintosh arena
- 한 디스크는 여러 개의 분리된 파티션을 제공한다.
- 여러개의 디스크가 하나의 파티션을 제공 할 수도 있다.
- Partitions(virtual disk)는 여러 운영체제를 저장하고 시스템 부팅을 가능하게 할 수 있다.
- 각 partition은 file에 대한 정보가 저장된다.
- Device directory of volume table of contents
- Directory는 name, location, size, and type을 저장한다.
- Directory는 symbol table로 보여 질 수 있다.
![](https://velog.velcdn.com/images/saewoohan/post/b9d80695-b245-4c59-b6a9-d62c50079187/image.png)
a) Single-Level Directory
- 모든 file들은 같은 디렉토리에 포함되어 있다.
- All files는 unique name을 가져야 한다.
- 많은 파일들을 추적하는 것은 어려운 작업이다.
![](https://velog.velcdn.com/images/saewoohan/post/037003d4-930d-403c-957a-15a507fa6917/image.png)
b) Two-Level Directory
- 유저마다 분리된 directory를 제공한다.
- MFD (master file directory)
- UFD (user file directory)
![](https://velog.velcdn.com/images/saewoohan/post/59641050-db78-4bd4-b842-6b56c5d605a9/image.png)
c) Tree-Structured Directories
- two-level directory의 일반화
- directory는 file이나 하위 Directory의 집합을 포함한다.
- Directory는 기본적으로 파일의 한 형태이지만 특별하게 취급된다.
- 디렉토리 항목중 하나의 bit는 파일인지 디렉토리인지 정의한다.
- As a file (0) or as a directory (1)
- directory를 생성하고 삭제하기 위한 특별한 시스템 콜이 필요하다.
- Path name
- Absolute path nam: root/spell/mail
- Relative path name: prt/first = root/spell/mail/prt/first
![](https://velog.velcdn.com/images/saewoohan/post/55da8616-86a9-4245-af8d-115c8d51a3b4/image.png)
d) Acyclic-Graph Directoried
- tree structure는 file과 directory의 공유를 허용하지 않는다.
- acyclic graph는 디렉토리와 파일의 공유를 허용한다.
- 파일에 대한 여러 본사본을 작업하지 않아도 된다.
- 여러 사용자가 같은 파일을 수정하면, 다른 사용자가 즉시 볼 수 있다.
- acyclic directory를 구현하는 Common way
- link라고 불리는 새로운 directory 항목을 만든다.
- link는 기본적으로 다른 directory나 file을 가리키는 pointer로 작동한다.
![](https://velog.velcdn.com/images/saewoohan/post/7f82c54b-2f11-48f2-9fde-61f740ac8430/image.png)
e) Soft Link and Hard Link
- Soft link: $ ln -s original.txt new.txt
- Soft link는 “name”을 사용하여서 file을 redirecting 한다.
- 즉, original file의 이름이 변경되면 soft link는 pointing을 멈춘다.
- 만약 원래 파일 이름으로 새 파일을 만들면, soft link는 해당 새 파일을 가리킨다.
- soft link는 file systems 간에 작동 할 수 있다.
- Hard link: $ ln exist.txt new.txt
- 이름이 바뀌어도 영향을 받지 않는다, inode(file control block)을 참조하기 때문에
- 원본을 삭제해도 실제로 삭제되지 않고 여전히 접근이 가능하다.
- 그러나 서로 다른 file system에서는 사용 할 수 없다.
f) Some Issues with acyclic-graph directories
- Two different names (aliasing)
- 공유된 structures를 한번 이상 탐색하지 않으려 할때 중요하다.
- Deletion problem (dangling pointer)
- Dangling pointer는 존재하지 않는 파일이나 다른 파일을 가르킬 수 있다.
- Solutions to deletion problem
- link를 dangling으로 두는 것이다.
- 이 dangling link를 사용하려는 시도는 다른 illegal file name에 대한 접근과 동일하게 처리된다.
- 모든 references가 삭제될 때까지 파일을 유지한다.
- 이 방법에서는 모든 참조목록을 유지해야한다.
- file reference는 크기가 가변적이고 potentially large size이다.
- 실제로는 참조 수만 유지하면 된다. (UNIX hard link for nonsymbolic links, inode)
g) General Graph Directory
- acyclic graph의 주된 장점은 그래프를 순회하는 알고리즘의 상대적 단순성이다.
- 우리는 성능상의 이유로 하위 디렉토리를 다시 검색하는 것을 피하려고 한다.
- General graph는 cycle의 존재를 허용한다.
- 잘못 설계된 algorithm이 무한 루프에 빠질 수 있다는 문제점을 가지고 있다.
- 이를 간단히 해결하는 방법은 디렉토리 순회 도중에 링크를 우회하는 것이다.
![](https://velog.velcdn.com/images/saewoohan/post/cb4c84c2-83a5-4b68-9ce7-9825ea326fbd/image.png)
h) File System Mounting
- file이 사용되기 전에 파일을 열어야 하듯이
- file system도 사용하기 전에 mounted되야 한다.
- 별도의 disk나 partition에 위치한 file을 가져오기 위해서는, 해당 file system을 mount해야한다.
- mount [-t filesystemtype][-o options] devicename mountpoint
- mount -t iso9660 /dev/hdc /mnt
- unmounted file system은 mount point에서 mount된다.
![](https://velog.velcdn.com/images/saewoohan/post/e68109e0-a5cb-4dae-8e87-292c6eda6706/image.png)