1. 파일 & 파일 시스템
File
- 보조기억장치에 저장된 관련 정보의 집합 ("A named collection of related information")
→ 또한 운영체제는 다양한 저장 장치를 File이라는 동일한 논리적 단위로 취급
File Attribute (= Metadata)
- (파일 자체의 내용이 아닌) 파일을 관리하기 위한 각종 정보
→ 파일 이름, 파일 유형, 파일 사이즈, 파일 위치
→ 파일 접근 권한 (읽기 / 쓰기 / 실행), 파일 접근 시간 (생성 / 변경 / 사용), 파일 소유자 등
File System
- 운영체제에서 파일을 관리하는 부분
→ 파일 및 파일의 메타데이터, 디렉터리 정보 등을 관리
→ 파일의 저장 방법 결정
→ 파일의 보호 등
2. 디렉터리 & 파티션
Directory
- 파일의 메타데이터 중 일부를 저장하고 있는 특별한 형태의 파일
→ 파일 이름, 파일 위치 등
Partition (= Logical Disk)
- 저장 장치를 논리적으로 구획한 영역
→ 하나의 (물리적) 디스크 안에 여러 개의 파티션을 구성하는 것이 일반적
→ 여러 개의 (물리적) 디스크를 하나의 파티션으로 구성하기도 함
→ (물리적) 디스크를 파티션으로 구성한 뒤 각각의 파티션에 File System을 설치하거나 Swapping 용도로 사용 가능
3. open() 시스템 콜 & read() 시스템 콜
open("/a/b")
- 1. root의 메타데이터를 Open File Table에 저장
→ Open File Table : 현재 열려있는 파일들에 대한 메타데이터를 유지하는 테이블 (Open File Table은 메모리의 커널 영역에 하나만 존재)
→ root의 메타데이터 위치는 운영체제가 알고 있음 - 2. root의 content 내 파일 a를 찾은 후 파일 a의 메타데이터를 Open File Table에 저장
- 3. 파일 a의 content 내 파일 b를 찾은 후 파일 b의 메타데이터를 Open File Table에 저장
- 4. 프로세스의 PCB 내 File Descriptor Table에 파일 b의 메타데이터를 가리키는 포인터가 담긴 엔트리가 추가됨
→ File Descriptor Table : Open File Table의 엔트리를 가리키는 포인터를 유지하는 테이블 (File Descriptor Table은 메모리 커널 영역에 프로세스별로 하나씩 존재)
→ File Descriptor Table 엔트리의 인덱스를 File Descriptor라고 함 - 5. 파일 b의 File Descriptor를 반환
Read(fd ...)
- 1. File Descriptor를 통해 Open File Table의 엔트리를 읽음
→ 해당 엔트리에는 파일의 메타데이터가 저장되어 있음 - 2. 파일의 메타데이터를 통해 읽고자 하는 파일의 content가 메모리 내 버퍼 캐시에 캐시 되어있는지 확인
→ if cached : 캐시 데이터를 복사하여 프로세스에 반환
→ else : 파일의 content를 읽어 버퍼 캐시에 저장 후 복사하여 프로세스에 반환
4. 파일 보호 (File Protection)
각 파일에 대해 누구에게 어떤 유형의 접근 (Read / Write / Execute)을 허락할 것인가?
Access Control Matrix
- 파일과 파일에 대한 접근 권한으로 이루어진 행렬 표
- 오버헤드가 심하기 때문에 Linked List를 통한 구현이 존재
→ Access Control List : 파일 중심 Linked List
→ Capability List : 사용자 중심 Linked List
Grouping
- 전체 사용자를 Owner, Group, Other 세 그룹으로 구분
- 각 파일에 대해 세 그룹의 접근 권한 (rwx)을 3비트씩 표시
Password
- 파일마다 비밀번호를 두는 방법
→ 디렉터리 파일에 비밀번호를 두는 방법도 가능
5. 마운팅 (Mounting) & 파일 접근 방법 (File Access Methods)
Mounting
- 한 저장 장치의 파일 시스템을 다른 저장 장치의 파일 시스템에 접근할 수 있도록 편입시키는 작업
File Access Methods
- 시스템이 제공하는 파일 정보의 접근 방식
→ 순차 접근 (Sequential Access)
→ 직접 접근 (Direct Access, Random Access)
6. 파일 저장 방식 (Allocation of File Data in Disk)
연속 할당 (Contiguous Allocation)
- 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식
→ 디렉터리에 파일명과 파일의 시작 주소와 파일 길이가 저장됨 - 장점
→ 빠른 I/O 가능 (한 번의 보조기억장치 seek / rotation으로 많은 바이트를 transfer 가능, 프로세스의 Swapping 용도로 사용 가능)
→ Direct Access 가능 - 단점
→ 외부 단편화 발생
→ 파일 사이즈 확장이 어려움
연결 할당 (Linked Allocation)
- 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당하는 방식 (Linked List)
→ 디렉터리에 파일명과 파일의 시작 주소와 끝 주소가 저장됨 - 장점
→ 외부 단편화 발생 X - 단점
→ Direct Access 불가
→ 신뢰성 문제 발생 (하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록부터 접근 불가)
→ 포인터를 위한 공간이 블록의 일부가 되므로 공간 효율성 감소 - 변형
→ FAT 파일 시스템 : 포인터를 별도의 위치에 보관하여 신뢰성과 공간 효율성 문제 해결
색인 할당 (Indexed Allocation)
- 하나의 파일의 모든 블록 주소를 인덱스 블록이라는 하나의 블록에 모아 관리하는 방식
→ 디렉터리에 파일명과 파일의 인덱스 블록 주소가 저장됨 - 장점
→ Direct Access 가능
→ 외부 단편화 발생 X - 단점
→ 내부 단편화 발생
→ 파일 사이즈가 클 경우 하나의 인덱스 블록에 할당할 수 없음 (해결 방법 : Linked Scheme, Multi-Level Index 등) - 변형
→ UNIX 파일 시스템
7. UNIX 파일 시스템
UNIX 파일 시스템의 디렉터리 내부
- 파일명과 i-node 번호가 저장됨
Boot Block
- 부팅에 필요한 정보가 저장된 블록 (Bootstrap Loader 포함)
→ Bootstrap Loader : 컴퓨터의 부팅 프로세스를 시작하는 프로그램 - 부팅 과정
→ 1. 컴퓨터의 전원이 켜지면 Boot Block 내 BootStrap Loader가 실행됨
→ 2. Bootstrap Loader가 보조기억장치 내의 운영체제 커널을 찾아 메모리에 적재
→ 3. 제어권을 운영체제에 전달 - UNIX 파일 시스템뿐만 아니라 타 파일 시스템의 0번 블록 또한 Boot Block
Super Block
- 파일 시스템에 대한 총체적인 정보가 저장된 블록
→ 사용 중인 블록의 위치, 빈 블록의 위치 등
i-node List
- i-node를 저장하는 List
→ i-node (index node) : 파일명을 제외한 모든 메타데이터와 Data Block 주소를 저장하는 데이터 구조 - Multi-Level Index 방식을 통해 파일 사이즈가 큰 파일 또한 표현 가능
Data Block
- 실제 파일 내용이 저장된 블록
8. FAT (File Allocation Table) 파일 시스템
FAT 파일 시스템의 디렉터리 내부
- 파일명과 파일의 시작 Data Block 주소와 다른 모든 메타데이터가 저장됨
FAT
- 파일의 메타데이터 중 파일의 Data Block 주소를 저장하는 테이블 (파일의 2번째 Data Block 주소부터)
→ FAT 파일 시스템에서 디렉터리는 이를 제외한 모든 메타데이터를 저장 - Linked List 형태로 연결되어있기 때문에 파일의 시작 Data Block 주소를 알고 있다면 파일의 전체 데이터를 알 수 있음
- 파일의 저장 방식 중 연결 할당 방식의 단점을 보완
→ Direct Access 가능
→ 신뢰성 문제 해결
9. Disk Free Space Management
Bit map (Bit Vector)
- 0 또는 1의 값을 가지는 플래그를 통해 사용 중인 블록과 비어있는 블록을 나타내는 방식
→ 부가적인 공간이 필요
→ 연속적인 n개의 비어있는 블록을 찾는 데 효과적
Linked List
- 모든 비어있는 블록을 연결
→ 공간의 낭비가 없음
→ 그러나 연속적인 n개의 비어있는 블록을 찾는 데 효과적이지 못함
Grouping
- Linked List 방식의 변형
- Linked List 방식보다는 효과적이지만 여전히 연속적인 n개의 비어있는 블록을 찾는 데 효과적이지 못함
Counting
- Grouping 방식의 변형 (프로그램이 종종 여러 개의 연속적인 블록을 할당하고 반납하는 성질에 착안)
- Grouping 방식에서 포인터를 저장하고 있는 블록이 빈 블록뿐만 아니라 빈 블록의 개수까지 저장
- 연속적인 n개의 비어있는 블록을 찾는 데 효과적
10. 디렉터리 구현
Linear List
- <파일명, 파일의 메타데이터>의 List
→ 검색 시간이 O(n)
→ 구현이 간단함
Hash Table
- Linear List + Hashing
→ 검색 시간이 O(1)
→ 해시 충돌 발생 가능
파일의 메타데이터 저장 위치
- 1. 디렉터리 내에 직접 저장
- 2. 디렉터리에 포인터를 두고 다른 곳에 저장
→ UNIX의 i-node, Windows의 FAT 등
긴 파일명의 지원
- 파일명이 디렉터리 엔트리의 고정 크기보다 길어질 경우
→ 남은 파일명을 디렉터리의 일부 공간에 저장 후
→ 엔트리의 마지막 부분에 해당 공간을 가리키는 포인터를 저장
11. VFS (Virtual File System) & NFS (Network File System)
VFS
- 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스 (API)를 통해 접근할 수 있게 해주는 운영체제 계층
NFS
- 분산 시스템에서 네트워크를 통해 파일을 공유할 수 있게 해주는 대표적인 파일 공유 방법
12. Page Cache & Buffer Cache
Page Cache
- 가상 메모리의 페이징 시스템에서 사용하는 프레임을 캐싱의 관점에서 설명하는 용어
Memory-Mapped I/O
- Memory-Mapped I/O를 통해 파일의 일부를 가상 메모리의 특정 페이지에 매핑시킨 후 해당 페이지에 대한 메모리 접근 연산으로 파일 I/O를 수행하도록 할 수 있음
- 과정
→ 1. 프로세스가 운영체제에 파일의 일부를 자신의 가상 메모리의 특정 페이지에 매핑시켜달라고 요청
→ 2. 추후 프로세스가 해당 페이지에 접근했을 때 메모리에 적재되어있지 않았다면 페이지 폴트 발생
→ 3. 운영체제가 해당 페이지를 메모리에 적재한 이후부터는 운영체제의 개입 없이 파일 I/O 가능
→ 4. 해당 페이지는 Swap Out될 때 Swap Area로 이동되지 않음 (운영체제가 파일에 변경된 내용을 Write)
Buffer Cache
- 파일 시스템을 통한 I/O 연산에서 사용하는 메모리의 특정 영역을 나타내는 용어
- 모든 프로세스가 공용으로 사용
Unified Buffer Cache
- 최근 운영체제에서는 기존의 Buffer Cache가 Page Cache에 통합됨
→ Buffer Cache도 페이지 단위로 관리
이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
또한 반효경 교수님의 "운영체제와 정보기술의 원리" 책을 참고하였습니다.
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=238716482
'운영체제' 카테고리의 다른 글
Blocking vs Non-Blocking & Synchronous vs Asynchronous (0) | 2024.08.12 |
---|---|
9. 가상 메모리 (0) | 2024.01.19 |
8. 메모리 관리 (0) | 2024.01.12 |
7. 교착 상태 (Deadlock) (0) | 2024.01.09 |
6. 프로세스 동기화 (0) | 2024.01.03 |