해당 글은
경희대학교 조진성, 허선영 교수님의 강의 자료 및 내용을 정리한 글입니다
개인적으로 공부하며 작성된 글이라 잘못된 부분이 있을 수 있습니다!
오류가 있다면 알려주세요
Basic Concept
Operating System은 정보를 저장하기 위한 Logical view를 제공함.
File이란, 이러한 Logical한 Stroage를 관리하는 단위
- User와 Application data를 저장하고 불러오는 단위
- non-volatile: Booting을 해도 날아가지 않음
- Program(source, object), Data(numeric, character, binary)
File의 내용은 creator에 의해 정의됨
File Attributes
이외에 file checksum 등의 여러 정보가 있음
File에 대한 정보들은 Directory strcture에 저장되며, 이는 Disk에 유지됨
Disk 안에 있는 정보를 OS는 메모리에 올려놓고 관리하게 된다.
File Operations
create, delete를 제외한 ALL operations는 Open()이 선행되어야 한다.
따라서 OS는 Open-file table을 관리하여,
여러 Process가 파일을 열어볼 때 발생할 수 있는 Synchronization problem을 방지함
*Open Count
▶Unix/Liunx System calls
이때, fd는 File descriptor로 open file을 구분하기 위한 식별자임
File Locking
하나의 Process가 File에 접근하고 있을 때, 다른 이의 접근을 막는 것!
방식
- Reader-writer lock과 비슷한 형식: multiple reader, single writer
- Shared Lock: reader lock과 유사, 여러 프로세스가 접근할 수 있도록 허용함
- Exclusive Lock: writer lock과 유사, 오직 나만 접근함
옵션
- Mandatory: OS가 locking을 무조건으로 수행하는 것을 보장함
- Advisory: 선택적으로, 개발하는 사람에 의해 Lock이 적용 또는 해제될 수 있음
File Types
File의 Type은 어떤 level에서 관리가 되는지에 따라서 구분될 수 있다
- File system 내부에서 관리되는 Type
Disk에 있는 실제 파일들과 상관없이, 파일 시스템을 사용하고 관리하기 위한 인터페이스
- OS나 runtime libraries에 의해 관리되는 Type
실행 파일, 라이브러리 파일, 소스코드, 텍스트 등
- Application programs에 의해 관리
프로그램을 사용하면 그 안에서 관리한다
File Type을 구분하는 것도 OS별로 차이가 있음.
Window의 경우, Name으로 Type을 구분: .com / .mp3 / .jpg ....
Unix의 경우, Content로 Type을 구분: Magic num, initial characters
Access Methods
파일에 접근하는 방식에는 어떤 것들이 있나?
- Sequential Access
File을 Open하면 pointer가 읽거나 쓰기 위한 처음을 가리키고 있음
read next / write next / reset
- Direct Access
읽거나 쓰려고 하는 위치로 바로 지정함
read n / write n / position to n
다른 방식으로는 Index access 등이 있습니당
Directory Structure
디렉토리 구조란, 모든 파일들의 정보를 가지고 있는 node들로, Disk내에 유지된다.
따라서 Disk 안에는 files와 해당 file의 정보를 유지하는 Directory structure가 함께 존재하는 것쉼
이는 OS와는 독립적이고요,
OS는 해당 File system을 이해하고, 필요한 부분의 meta data를 읽어서 띄워주는 것임 ~
Directory의 논리적 구성은
- Efficiency: file의 위치를 빠르게 찾을 수 있도록
- Naming: 각 User가 동일한 이름의 File을 가질 수 있도록, 하나의 file이 여러개의 이름을 가질 수 있도록
- Grouping: files의 특성에 따라서 묶을 수 있도록
▶Single-Level Directory
모든 User가 single directory를 사용하게 되면,
같은 이름의 파일을 중복 생성할 수 없는 Naming problem
같은 속성으로 묶을 수 없는 Grouping problem 발생
▶Two-Level Directory
Path name: user name + file name
이므로, 위의 naming problem이 사라진다.
또한 각 유저가 각자의 Directory내에서만 검색하면 되므로 Efficient searching이 가능함
각 유저끼지 Grouping은 되었으나, 관리를 할 수 없다는 문제가 존재
▶Tree-Structured Directories
가장 흔하게 활용되는 directory structure로, Root directory를 가진다.
이를 통해 모든 File이 unique한 path name을 가질 수 있음
그러나, File에 다른 경로로 접근하는 하는 것이 불가넝하죠
▶Acyclic-Graph Directories
directories가 subdirectories와 files를 공유할 수 있도록 합니다.
UNIX system에서 Link로 일컫습니다.
▶General Graph Directory
한 지점에서 출발해서, 해당 지점으로 돌아올 수 있도록 하는 Cycle이 허용된다.
Cycle이 있는 경우
reference count가 실제 directory나 file을 가리키지 않더라도 0이 아닐 수도 있는 것쉼
또한 Garbage Collection과 같이, 연결이 되어 있지 않은 관계가 생기면 이를 제거해주는 역할이 필요할 수 있다
Protection
file을 보호하기 위해서는
만드는 이가 어떤 operation까지 가능한지,
어떤 유저가 가능하게 할 것인지를 control 해줘야 함. ⇒ Access control
▶Access Lists and Groups in Unix
mode: read(R) / write(W) / Execute(X)
위의 표현은 즉
Owner에게는 R, W, X 모두 가능
Group에게는 R, W 가능, X 불가능
Public에게는 X 가능, R, W 불가능 이라는 뜻
Memory-Mapped Files
현재 Disk내에 1~6 file block이 존재한다.
memory 내에 mapping만 되어 있을 뿐, 실제 physical memory에 올라와 있지는 않다.
memory address로 접근하면 Page fault
→ Disk의 file을 가져와서 Frame에 올린다.
일반적으로는
int fd = open(), read(fd, buf), write(fd, buf)의
open -> read의 과정을 거지는데
이를 통해 buffer에 쓰는 것이 쓰는 것이 아닌,
Memory address로 실제 파일에 접근하여 내용을 쓸 수 있다.
파일 내용은 Frame에 올라가 있으므로, 해당 frame을 가르키기만 하면 Share 가능.
여러 개의 process가 각자의 address space에서 해당 file을 mapping 시킬 수 있다는 장점이 존재한다.
+ Mamory mapped I/O와는 관리되는 방식에 차이가 존재한다고 하네요..
Mapping된 I/O device들이 있고, 메모리에 연결될 필요없이 mapping 되는 것이다.
'STUDY > 운영체제' 카테고리의 다른 글
[OS] Chap15. File-System Internals (0) | 2023.12.16 |
---|---|
[OS] Chap14. File-System Implementation (0) | 2023.12.13 |
[OS] Chap12. I/O Systems (0) | 2023.12.08 |
[OS] Chap11. Mass Storage Structure (0) | 2023.12.05 |
[OS] Chap10. Virtual Memory (1) | 2023.12.03 |