메모리는 주소를 통해 접근
파일은 이름을 통해 접근
용어 정리
File
- A named collection of related information
- 대체로 비휘발성 보조기억장치에 저장
- OS 는 다양한 저장장치를 file 이라는 동일한 논리적 단위(일반 file 과는 조금 다름)로 관리함.
- 연산
- create / read / write
- reposition (lseek) : file 의 현재 접근 위치 수정
- delete / open (file 의 metadata 를 메모리에 올림) / close ...
- 파일 자체의 내용이 아니라 파일을 관리하기 위한 정보들
- 파일 이름, 유형, 저장된 위치, 사이즈
- 접근권한 (읽기 쓰기 실행), 시간 (생성 변경 사용), 소유자 ...
File System
- OS 에서 파일을 관리하는 부분
- 파일 + 메타데이터, 디렉토리 (계층 구조) 정보 등을 관리
- 파일의 저장 방법 결정
- 파일 보호 ...
Directory
- 파일의 메타데이터 중 일부를 보관하고 있는 특별한 파일
- 그 디렉토리에 속한 파일의 이름 및 attribute 를 내용으로 가짐.
- operation
- search, create, delete, rename a file
- list a directory, traverse the file sys
Partition (= Logical Disk)
- 논리적인 단위.
- 하나의 물리 디스크 안에 여러 파티션을 둘 수 있음. -> 각 파티션에 file system 을 갈거나 swapping 을 하는 등 다양한 용도로 사용 가능.
- 여러개의 물리 디스크를 하나의 파티션으로 구성할 수 있음.
연산
open
ex) open("/a/b/c")
- 디스크로부터 파일 c 의 메타데이터를 가져와서 메모리에 올림.
system call 이 일어나서 disk I/O 를 하는 상황.
- fd = open("/a/b")
- root 의 메타데이터(a 의 메타데이터가 들어있음) 를 메모리에 올림
- 2 에서 a 의 메타데이터 (a의 위치, b의 메타데이터가 들어있음) 찾음.
- a open : a 의 메타데이터 메모리에 올림
- 4 에서 b 의 메타데이터 찾음.
- b open : b 메타데이터 메모리에 올림
- b 의 metadata 에 있는 저장 시작 위치에서 요청한 용량만큼 읽음 (디스크)
- 읽어온 내용 전달.
- OS 가 읽은 내용 일부를 메모리에 저장해둔다. -> buffer cache
- buffer cache : 한번 읽었으면 또 읽어올 필요 X. 다른 프로세스가 동일한 파일을 불러도 메모리에 올라와있으면 메모리에서 읽어옴.
buffer cache 에 해당 내용이 있든 없든 OS로 CPU 제어권 넘어감. (-> LRU, LFU 사용 가능!!)
- 읽어온 내용 copy 해서 사용자 프로그램에 전달.
- 시스템 내에 global 하게 오픈된 파일 테이블도 있고,
- 프로세스마다 있는 것도 있음.
- 메모리에 파일을 올려놓게 되면 현재 프로세스가 이 파일의 어떤 위치를 접근하고 있는지 offset 데이터를 OS가 추가로 유지해야함.
- offset 은 프로세스별로 관리.
- PCB 에 있는 테이블은 위치만 가르키기 때문에 Offset 정보를 포함하진 않음.
프로세스의 PCB 내에 메타데이터를 가리키는 테이블에 연결됨.
-> 한번 오픈하면 다시 올릴 필요 없이 해당 테이블의 인덱스만 가지고 있으면 됨.
- read(fd) 를 한다면..?
- PCB 테이블에서 찾아서 b의 메타데이터를 찾아가면 됨.
File Protection
- 메모리에 대한 Protection 은 메모리는 CPU 하나가 접근하므로 read-only / write 연산에 대해서만 해주면 됐음.
- 파일 시스템은 여러 사용자가 접근할 수 있음. -> 각 파일에 대해 어떤 유형(read / write / execution) 의 접근을 허용할 것인지
Access Control Matrix
- 행렬로 유지하면 너무 커진다는 문제가 있음.
- 아래 둘 중 하나의 리스트만 만들어서 용량을 줄이기도 함. -> 그래도 큼!
- Access Control List : 파일별로 누구에게 어떤 권한이 있는지 표시
- Capability : 사용자 별로 자신이 접근 권한을 가진 파일 및 해당 권한 표시
Grouping
- 일반적으로 많이 사용
- 전체 user 를 owner, group, public 세 그룹으로 구분
- 각 파일에 대해 세 그룹의 접근 권한 (rxw) 3 비트씩으로 표시. -> 파일 하나에 대해 9 bit 로 접근 권한을 표시할 수 있음.
- ex) UNIX
owner group public
rwx r-x r--
111 101 100 (각 권한이 있으면 1 없으면 0으로 표현)
Password
- 파일 / 디렉토리마다 패스워드를 둔다.
- 접근 권한별로 password 를 주면... 암기 / 관리 문제가 생김.
File System Mounting
- 하나의 물리적인 디스크를 파티션을 통해 여러개로 나누어서 파일 시스템을 설치할 수 있음.
- root file system 으로 특정 OS 에 대해서 다른 파티션에 설치된 파일 시스템에 접근하려면..? -> Mounting
- root 의 디렉토리 이름에 다른 파티션의 file system 의 Root 를 연결해주면 된다.
Access Methods
- 순차 접근 (sequential access)
- ~= 카세트 테이프
- 읽거나 쓰면 offset 은 자동적으로 증가
- 직접 접근 (direct access, random access)
- ~= LP 레코드 판
- 파일을 구성하는 레코드를 임의 순서로 접근
- 하지만 직접 접근이 가능한 매체라도 데이터 접근 방식을 어떻게 관리하냐에 따라 순차 접근만 가능할 수도 있다.
-> 왜? 다음 시간에~
출처 / 참고
반효경 교수님의 2014 운영체제 10. File Systems 강의를 듣고 포스팅하고,
공룡책을 읽고 추가 정리합니다.
사진 출처는 강의 자료.