운영체제 - 09
Updated:
강의
http://www.kocw.net/home/search/kemView.do?kemId=1226304
운영체제 - 파일 시스템
1. File and File System
1.1 File
- A named collection of related information
-
일반적으로 비활성의 보조기억장치에 저장
- 운영체제는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 볼 수 있게 해줌
- 연산(operation) : create, read, write, reposition(lseek), delete, open, close 등
1.2 File attribute (혹은 파일의 metadata)
- 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들
- 파일 이름, 유형, 저장된 위치, 파일 사이즈
- 접근 권한(읽기,쓰기,실행), 시간(생성,변경,사용), 소유자 등 이게 모두 메타데이터
1.3 File System
- 운영체제에서 파일을 관리하는 부분
- 파일 및 파일의 메타데이터, 디렉토리 정보들을 관리
- 파일의 저장 방법 결정
- 파일 보호 등
2. Directory and Logical Disk
2.1 Directory
- 파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일
- 그 디렉토리에 속한 파일 이름 및 파일 attribute 들
- 연산 : search for a file, create a file, delete a file, list, rename, traverse the file system
2.2 Partition (=Logical Disk)
- 하나의 (물리적) 디스크 안에 여러 파티션을 두는게 일반적
- 여러 개의 물리적인 디스크를 하나의 파티션으로 구성하기도 함
- (물리적) 디스크를 파티션으로 구성한 뒤 각각의 파티션에 file system을 깔거나 swapping 용도로 사용
3. Open
- 디스크로부터 파일 b의 메타 데이터를 메모리로 가지고 오는 예제
- 디렉토리 경로의 검색에 너무 많은 시간을 소요함
- read, wirte를 위해 Open한 파일은 파일의 메타데이터를 메모리에 가지고 있음 (Open file table)
-
Open file table에 대한 위치 정보를 file descripter(배열 형식으로)이라는 곳에서 별도로 가지고 있음
- buffer 캐슁 : (그림에서 b content를 가지고 있는 커널 메모리 영역) 커널 메모리 영역이 사용자 메모리 영역에서 요청한 read(write)를 가지고 있다고 똑같은 요청을 받으면 disk까지 가지 않고 가지고 있는 내용을 그대로 보내 주는 것. 이런 곳에서는 LRU 알고리즘 사용 가능
4. File Protection
- 각 파일에 대해 누구에게 어떤 유형의 접근(read, write, execution)을 허락할 것인가?
4.1 Access control Matrix
- ACL(Access Control List) : 파일별로 누구에게 어떤 접근 권한이 있는지 표시
-
Capbility : 사용자별로 자신이 접근 권한을 가진 파일 및 해당 권한 표시
- 둘 중에 하나 쓰면 됨. 그러나 모든 것을 관리하기에 부담.
4.2 Grouping
- 전체 user를 owner, group, public의 세 그룹으로 구분
- 각 파일에 대해 세 그룹의 접근 권한(rwx)을 3비트씩으로 표시
4.3 Password
- 파일마다 비밀번호 두는 방법(디렉토리 파일에 둘 수 도 있음)
- 암기, 관리 문제
5. 파일 시스템의 Mounting
-
다른 파티션에 있는 파일을 읽어야 할때는 어떡해야 하냐?
-
해당 파티션의 디렉토리 경로가 다른 파티션의 루트 디렉토리가 된다는 것
6. Access Methods
- 시스템이 제공하는 파일 정보의 접근 방식
6.1 순차 접근(Sequential access)
- 카세트 테이프를 사용하는 방식처럼 접근
- 읽거나 쓰면 offset은 자동적으로 증가
6.2 직접 접근(direct access, random access)
- LP 레코드 판과 같이 접근하도록 함
- 파일을 구서하는 레코드를 임의의 순서로 접근할 수 있음
7. Allocation of File Data in Disk
- 아래는 고전 방식
7.1 Contiguous Allocation (연속 할당)
- 하나의 파일이 연속해서 Disk에 저장되는 방법
- 빠른 입출력. 한번에 많은 용량을 읽고 쓸 때 사용. real time, swapping에 사용
- direct 접근이 가능
- 외부조각이 발생할 수 있음
- 파일의 수정(크기가 커질때)이 어려움. 얼마나 큰 hole을 할당할 것인가? (뒤에 여유 공간이 없으면 파일이 커질 때 연속할당이라는 규칙으로 인하여 수정이 불가능. 그래서 생성 시 충분히 큰 공간을 줘야 함. 그러면 또 공간이 낭비될 수도 있음)
7.2 Linked Allocation
- 외부조각이 발생하지 않음
- Direction 접근이 불가능
- 한 섹터가 망가지면 다음 위치는 알 수가 없으므로 유실됨. (Reliablity)
- 다음 공간의 위치를 가지기 위한 포인터 변수를 가져야함. (공간 낭비)
7.2.1 File allocation table(FAT) 파일 시스템
- 포인터를 별도의 위치에 보관하여 신뢰성과 공간 효율성 문제를 해결
7.3 Indexed Allocation
- 첫 번째 섹터가 모든 파일의 위치를 가짐
- 외부조각 없음
- 직접 접근이 가능
- 작은 파일의 경우 공간 낭비
- 매우 큰 파일의 경우 공간(한정되어 있으므로)을 다 표현이 불가능
- 그래서 맨 마지막 인덱스에 연속된 파일 위치를 가직 있는 다른 섹터를 가르키게 함
8. UNIX 파일 시스템의 구조
- 이제는 아래부터는 7번의 고전이 아닌 실제 지금 사용하고 있는 파일 시스템 구조
-
boot block이 맨 앞에 나오는 것은 약속 : 부팅에 필요한 정보가 있으므로 (bootstrap block)
-
super block : 파일 시스템에 관한 총체적인 정보를 가지고 있음
-
Inode block : 파일 이름을 제외한 파일의 모든 메타 데이터를 저장
-
Data block : 파일의 실제 내용을 보관. 그리고 inode에서 제외된 파일 이름을 가지고 있음
즉, data block의 파일 디렉토리 구조에 (파일이름, 해당 파일 inode 번호) 형태로 있음
-
파일 위치를 direct blocks에서 직접 가르키나 파일이 큰 경우 single, double direct를 이용하여 파일의 위치를 담고 있는 공간을 포인터로 가르키게 하여 간접 접근 한다.
9. FAT 파일 시스템의 구조
- Window에서 dos 만들 때 사용하던 구조
-
Fat에서 Data block의 파일의 위치 정보들을 가지고 있음
- data block이 모든 파일의 정보에 대해서 다 가지고 있음
-
data block에서 해당 정보를 읽고 fat block을 뒤져봄. 다음 위치가 있으면 다시 data block을 뒤지고 없으면 끝. 있으면 다시 data block을 뒤지고
- 이렇게 되면 linked 할당 문제들을 해결(순차 접근 문제, 공간 문제, reliability)
10. Free Space Management
- 할당되지 않은 공간(메모리)에 대해서 관리
10.1 Bit map or Bit vector
- Bit map은 부가적인 공간을 필요로 함
- 연속적인 N개의 free block을 찾는데 효과적
- 이것을 많이 쓴다.
10.2 Linked List
- 모든 free block들을 연결시켜 놓음
- 연속적인 가용 공간을 찾는 것이 어렵다. (다 뒤져야 하니까)
- 공간 낭비는 없다.
- 실제는 검색이 어려워 안씀
10.3 Grouping
- linked list 방법의 변형
- 첫 번째 free block이 N개의 포인터를 가짐
- 효율적이나 이것도 부담스러움
10.4 Counting
-
프로그램들이 종종 여러 개의 연속적인 block을 할당하고 반납한다는 성질에 착안
-
연속적인 블록들의 첫 번째 블록에 몇 개가 블록이 연속되어 있는지 정보를 가지고 있음
-
그래서 나중에 할당할 때 빈 연속적인 블록들의 첫 번째 블록만 보고 그에 맞는 연속적인 블록들을 할당
11. Directory 구현
11.1 Linear List
- (파일이름, 파일 메타데이터) 의 리스트
- 구현이 간단
- 디렉토리 내에 파일이 있는지 찾기 위해서는 선형 검색이 필요 (시간이 많이걸림)
11.2 Hash Table
- 선형 리스트 + 해슁
- Hash table은 파일 이름을 파일의 선형 리스트의 위치로 바꾸어줌
- 탐색 시간이 적음
- 충돌 발생이 있음(hash 특징)
11.3 File의 메타데이터 보관 위치
- 디렉토리 내에 직접 보관
- 디렉토리에는 포인터를 두고 다른 곳에 보관 : inode, FAT 등
11.4 Long file name의 지원
- 파일 이름의 크기는 정해져 있음
- 만약 길어질 경우 한정 크기 마지막 부분에 이름의 뒷부분이 위치한 곳의 포인터를 두는 방법
- 이름의 나머지 부분은 동일한 디렉토리 파일의 일부에 존재
12. VFS and NFS
12.1 Virtual File System
- 서로 다른 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스(API)를 통해 접근할 수 있게 해주는 OS의 계층
12.2 Network File System
- 분산 시스템에서는 네트워크를 통해 파일이 공유될 수 있음
13. Page Cache and Buffer Cache
- Page Cache는 LRU 알고리즘을 사용 할 수 없다.
- Buffer Cache는 LRU 알고리즘을 사용 할 수 있다.
- Buffer Cache는 사용자 프로세스가 운영체제에게 시스템콜을 요청했을 경우 File System에서 파일을 읽어 드린(or Write) 내용을 가지고 있다. 그래서 파일을 언제 메모리에 마지막으로 올렸는지 정보를 가지고 있다.
-
Page cache의 경우도 사용자 프로세스가 운영체제에게 시스템 콜을 하면 swap 영역에서 파일을 읽어 사용자 메모리 영역에 올린다. 이때 page cache가 꽉 찼을 경우 swap을 해야 하는데 운영체제는 page 캐쉬에 파일을 올렸는지 정보를 가지고 있지 않다. (왜냐하면 운영체제가 사용자 메모리 영역을 접근 할 수가 없으므로) 그래서 LRU 알고리즘을 사용할 수 없다. 이를 위해 하드웨어 clock 알고리즘을 이용한다.
- 최근 운영체제는 Unified Buffer Cache : page, buffer 캐쉬를 합침
#### 13.1 메모리 Map I/O
- 사용자 메모리가 운영체제 개입 없이(시스템콜 없이) 파일시스템(DISK)에 직접 read, write 하는 것
- 파일 시스템의 주소를 물리적 메모리에 올려서 접근
- 가상 메모리 구조에 있는 data, code 영역이 이렇게 이용되고 있음
- 직접 접근하기 때문에 여러 프로그램에 하나의 저장 공간에 read, write할 경우 충돌의 문제가 있음