Chapter11 파일 시스템
1. Disk System
- Disk pack
- 비활발성 데이터 영구 저장 장치
- 구성
- Sector : 데이터 저장/판독의 물리적 단위
- Track : platter 한 면에서, 중심으로 부터 같은 거리에 있는 sector의 집합
- Cylinder : 같은 반지름을 갖는 track의 집합
- Platter : 양면에 자성 물질을 입힌 원형 금속판
- Surface : platter의 윗면과 아랫면
- Disk drive
- Disk pack에 데이터를 기록하거나 판독할 수 있도록 구성된 장치
- 구성
- Head : 디스크 표면에 데이터를 기록 및 판독하는 장치
- Arm : head를 고정하는 장치
- Positioner : arm을 지탱하는 장치, head를 원하는 track으로 이동
- Spindle : disk pack을 고정하는 회전축
1.1 Disk Address
- Physical disk address
- Sector(물리적 데이터 전송 단위)를 지정
- Surface Number
- Cylinder Number
- Sector Number
- Sector(물리적 데이터 전송 단위)를 지정
- Logical disk address : relative address
- Disk system의 데이터 전체를 block들의 나열로 취급
- Mapping 방법
1.2 Data Access
- Data Access Time의 구성
- Seek Time : 디스크 head를 필요한 cylinder로 이동하는 시간
- Rotational delay : 필요한 sector가 head 위치로 도착하는 시간
- Data transmission time : 해당 sector를 읽어서 전송/기록 하는 시간
2. File System
- 운영체제의 한 부분
- 구성
- Files
- Directory structure
- Partitions
2.1 Files
- 보조 기억 장치에 저장된 연관된 정보들의 집합
- 보조 기억 장치 할당의 최소 단위
- OS는 File operation(create, read, write, delete ...)들에 대한 system call을 제공해야 함
- Access Methods
- Sequential access(순차접근) : file을 record 단위로 순서대로 접근
- Directed access(직접 접근) : 원하는 block을 직접 접근
- Indexed access : index를 참조하여 원하는 block을 찾은 후 데이터에 접근
2.2 Directory structure
- File들을 분류, 보관하기 위한 개념
- 일종의 폴더 개념
2.3 Partitions
- 일종의 virtual disk
- 디스크 하나를 두개의 파티션으로, 두개의 디스크를 하나의 파티션으로 할 수 있음
2.4 Mounting
- 현재의 file system에 다른 file system을 붙이는 것
3. Directory Structure
3.1 Logical directory structure
- Flat(single-level) directory structure
- File System 내에 하나의 directory만 존재
- 명명법, 보호, 관리가 어려움
- 2-level directory structure
- 사용자 마다 하나의 directory 배정
- MFD(Master File Directory)
- UFD(User File Directory)
- Sub-directory 생성 불가능, 파일 공유 불가
- 사용자 마다 하나의 directory 배정
- Hierarchical(tree-structure) directory structure
- Tree 형태의 계층적 directory 사용 가능
- 하부 directory 생성/관리 가능
- system call이 제공되어야 함
- 대부분의 OS에서 사용
- Acyclic graph directory structure
- Hierarchical graph directory structure에서 더 확장한 개념
- shared directory, shared file을 담을 수 있음
- link 개념 사용
- Cycle을 허용 하지 않음
- General graph directory structure
- Acyclic graph directory structure의 일반화 개념
- Cycle을 허용
- file 탐색 시, 무한 루프를 고려해야 함
4. File Protection
- File에 대한 부적절한 접근 방지
- 접근 제어가 필요한 연산
- Read (R)
- Write (W)
- Execute (X)
- Append (A)
- Protection Mechanism
- Password 기법
- Access Matrix 기법
4.1 Password 기법
- 각 file들에 PW 부여
- 비현실적인 방법
- 사용자가 파일 각각에 대한 PW를 기억하고 있어야하고, 접근 권한 별로 서로 다른 PW를 부여해야 하기 때문
4.2 Access Matrix 기법
- 범위(domain)와 개체(object)사이의 접근 권한을 명시
- 용어
- Object : 접근 대상
- Domain : 접근 권한의 집합
- Access right : <object-name, rights-set>
- Implementation
- Global Table
- 시스템 전체 file들에 대한 권한을 Table로 유지
- 단점 : large table size
- Access List
- access matrix의 열(column)을 list로 표현
- $A_{list}(F_k)={<D1, R1>, <D2,R2>,\cdots,<Dm, Rm>}$
- object 생성 시, 각 domain에 대한 권한 부여
- object 접근 시 권한을 검사(접근 할 때마다 계속 → 느림)
- access matrix의 열(column)을 list로 표현
- Capability List
- access matrix의 행(row)을 list로 표현
- $C_{list}(D1)={<F1, R1>, <F2,R2>,\cdots,<Fp,Rp>}$
- Capability(C)는 일종의 통행증 역할(접근 할 때 한 번만 확인)
- 시스템이 capability list 자체를 보호 해야 함
- access matrix의 행(row)을 list로 표현
- Global Table
- Lock-key Mechanism
- Access list + Capability list
- Object는 Lock, Domain은 key를 가짐
- Object 별 권한 관리(권한 취소 등)가 어려움
- 과정
- Object에 대한 첫 접근 → access list 탐색 → 접근 허용 시, Capability 생성 후 해당 프로세스에게 전달 → 이후 접근시에는 권한 검사 불필요 마지막 접근 후 → Capability 삭제
5. Allocation Methods
5.1 Continuous Allocation
- 한 File을 디스크의 연속된 block에 저장
- 장점
- 효율적인 file 접근
- 단점
- 새로운 공간 확보 어려움 → External fragmentation
- 파일의 사이즈가 커져야 할 때를 처음에 고려해야 함.
5.2 Linked Allocation
- File이 저장된 block들을 linked list로 연결
- 비연속 할당 가능
- Directory는 각 file에 대한 첫 번째 block의 포인터를 가짐
- 장점
- 간단하고, external fragmentation이 없음
- 단점
- 직접 접근에 비효율적
- 포인터 저장을 위한 추가적인 공간 필요
- 포인터의 위치를 임의로 바꾸면 파일을 사용 할 수 없음
5.3 FAT (File Allocation Table)
- 각 block의 시작 부분에 다음 블록의 번호를 기록하는 방법
5.4 Indexed Allocation
- File이 저장된 block의 정보를 index block에 모아 둠
- 직접 접근에 효율적 → 순차 접근은 비효율적
- index block의 크기에 따라 파일의 최대 크기가 제한
- space overhead 존재
6. Free Space Management
6.1 Bit Vector
- 시스템 내 모든 block들에 대한 사용 여부를 1bit flag로 표시
- 간단하고 효율적
- bit vector 전체를 메모리에 보관 해야 함 → 대형 시스템에 부적합
6.2 Linked list
- 빈 blcok을 linked list로 연결
- 비효율적
6.3 Grouping
- n개의 빈 block을 그룹으로 묶고, 그룹 단위로 linked list로 연결
- 연속된 빈 block을 쉽게 찾을 수 있음
6.4 Counting
- 연속된 빈 block들 중 첫 번째 block의 주소와 연속된 block의 수를 table로 유지
- 빈 블록이 연속되지 않으면 비효율적 → continuous allocation 시스템에 적합
'CS > [OS]' 카테고리의 다른 글
Chapter12 입출력 시스템 & 디스크 관리 (0) | 2022.01.06 |
---|---|
Chapter10 가상메모리 관리 (0) | 2021.12.30 |
Chapter9 가상메모리 (0) | 2021.12.28 |
Chapter8 메모리(주기억장치) 관리 (0) | 2021.12.23 |
Chapter7 교착상태(Deadlock Resolution) (0) | 2021.12.21 |