[운영체제] #10 File Systems

또상·2022년 10월 24일
0

Operating System

목록 보기
11/13
post-thumbnail

메모리는 주소를 통해 접근
파일은 이름을 통해 접근

용어 정리

File

  • A named collection of related information
  • 대체로 비휘발성 보조기억장치에 저장
  • OS 는 다양한 저장장치를 file 이라는 동일한 논리적 단위(일반 file 과는 조금 다름)로 관리함.
  • 연산
    • create / read / write
    • reposition (lseek) : file 의 현재 접근 위치 수정
    • delete / open (file 의 metadata 를 메모리에 올림) / close ...

File Attribute (파일의 metadata)

  • 파일 자체의 내용이 아니라 파일을 관리하기 위한 정보들
    • 파일 이름, 유형, 저장된 위치, 사이즈
    • 접근권한 (읽기 쓰기 실행), 시간 (생성 변경 사용), 소유자 ...

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 를 하는 상황.

  1. fd = open("/a/b")
  2. root 의 메타데이터(a 의 메타데이터가 들어있음) 를 메모리에 올림
  3. 2 에서 a 의 메타데이터 (a의 위치, b의 메타데이터가 들어있음) 찾음.
  4. a open : a 의 메타데이터 메모리에 올림
  5. 4 에서 b 의 메타데이터 찾음.
  6. b open : b 메타데이터 메모리에 올림
  7. b 의 metadata 에 있는 저장 시작 위치에서 요청한 용량만큼 읽음 (디스크)
  8. 읽어온 내용 전달.
  9. OS 가 읽은 내용 일부를 메모리에 저장해둔다. -> buffer cache
  10. buffer cache : 한번 읽었으면 또 읽어올 필요 X. 다른 프로세스가 동일한 파일을 불러도 메모리에 올라와있으면 메모리에서 읽어옴.
    buffer cache 에 해당 내용이 있든 없든 OS로 CPU 제어권 넘어감. (-> LRU, LFU 사용 가능!!)
  11. 읽어온 내용 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 강의를 듣고 포스팅하고,
공룡책을 읽고 추가 정리합니다.

사진 출처는 강의 자료.

profile
0년차 iOS 개발자입니다.

0개의 댓글