[운영체제] 파일 시스템 1 : File & File System, Directory and Logical Disk, File Protection

드림보이즈·2023년 8월 8일
0

파일시스템 1
(참고 강의 : http://www.kocw.net/home/search/kemView.do?kemId=1046323)

File & File System

File

  • A named collection of related information (특정 정보를 모아놓은 '이름')
  • 일반적으로 비휘발성의 보조기억장치에 저장
  • 운영체제는 다양한 저장 장치를 file이라는 논리적 단위로 볼 수 있게 해줌
  • Operation : create, read, write, reposition(lseek), delete, open, close

파일은 정보를 모아 '이름'으로 구분해놓은 것이다.
파일에 관한 명령을 할 땐 먼저 open하고 읽던, 쓰던, 지우던 하고, close 해줘야 한다.
open을 해야 메모리에 올리기 때문이다.

File attribute ( metadata)

  • 파일 내용이 아니라 "파일을 관리하기 위한 각종 정보들"
    - 파일 이름, 위치, 유형, 사이즈 등...
    -접근 권한, 시간, 소유자 등

File system

  • 운영체제에서 파일을 관리하는 부분
  • 파일, 파일 메타데이터, 디렉토리 정보 관리
  • 파일 저장 방법 결정
  • 파일 보호 등

Directory and Logical Disk

Directory

  • 파일의 메타데이터 중 일부를 보관하고 있는 특별한 파일
  • 디렉토리에 속한 파일 이름 및 파일 attribute들
  • Operation : search, create, delete a file / list a directory, rename a file, traverse the file system

디렉토리는 파일의 메타데이터 중 일부를 보관하는 파일이다.

Partition(Logical Disk)

  • 하나의 물리적 디스크 안에 여러 파티션을 두는게 일반적
  • 여러 물리적인 디스크를 하나의 파티션으로 둘 수도
  • 파티션으로 구성하고 file system, swapping 용도로 나눌 수 있음

하나의 하드웨어 하드 디스크를, 여러 논리적으로 구분해 놓을 수 있다. 이것이 파티션인데,
이를 통해 메모리 관리에서 배운 Swapping area와 file system을 구분할 수 있는 것이다.

Open()

Open()을 통해 파일을 디스크에서 메모리에 '메타데이터'를 올린다.
메타데이터에는 파일 이름, 위치 등이 담긴다고 했다.
여기서 위치를 통해 파일 컨텐츠에 접근할 수 있는 것이다.
좀 더 자세히 알아보자.

Open("/a/b/c")

그림을 함께 보면서 이해해보자.

프로세스 A가 파일 open을 요청했다. (시스템 콜)
운영체제가 CPU를 잡고 요청을 수행해준다.

  1. "/"
    root 디렉토리도 일종의 파일이라고 했다.
    root의 metadata를 커널 메모리의 Open file table로 가져온다. (파일 시스템은 운영체제가 하니까)
    root의 metadata에 root의 content 위치가 담겨 있다.

  2. "a"
    root의 content 위치에 들어가면 a 디렉토리의 metadata가 있다.(디렉토리에 파일 메타데이터의 일부를 담는다고했지?)
    a 디렉토리의 metadata를 커널 메모리의 Open file table로 가져온다.
    a metadata에 a content의 위치가 담겨있다.

  3. "b"
    a content 위치로 가보면 안에 파일 b의 metadata가 담겨있다. Open file table로 가져온다.

  1. 프로세스 A PCB에 b 포인터 저장

PCB에는 이 프로세스가 어떤 파일을 열어봤는지 배열이 있는데, 위에 보이는 list of open files다.
이미 메모리에 올라와있는 b의 메타데이터를 가르키는 포인터를 저장해 놓는다.
open 할 때마다 1,2,3 과정을 반복할 필요가 없이 포인터로 바로 b의 metadata에 접근이 가능한 것이다.
따라서 fd는 list of open files의 file b meta pointer인 인덱스이다.

여기까지가 Open()이고, 이 밑은 다른 operation, Read를 해보자.

Read()

  1. Process A의 PCB의 list of open files에서 fd를 찾는다. b의 metatata 위치를 가르킨다.

  2. b의 metatata에 b content 위치를 알고 있다. 가서 b의 내용을 커널 영역의 buffer caching 영역으로 가져온다.

  3. 파일 b의 시작점을 안 줬으니 통째로 복사해서 Process A에 전달한다.

여기서 Open file table은 시스템 전체에 1개 있는 것이고, list of open files는 프로세스 각각 존재하는 것이다.
따라서 만약에 프로세스 B가 buffer cache에 있는 파일 b를 read 한다면, open할 필요없이 바로 전달이 가능하다.
또한, 파일 시스템은 메모리 관리와 다르게 전부 운영체제가 일을 하니까, LFU, LRU 적용이 가능하다.

File Protection

각 파일에 대해 누구에게 어떤 유형의 접근(read/write/execution)을 허락할 것인가?

Access Control 방법

1. Access Control Matrix

  • Access Control List : 파일 별로 누구에게 어떤 접근 권한이 있는지 표시
  • Capability : 사용자 별로 자신이 접근 권한을 가진 파일 및 권한 표시

둘 중 하나만 쓰면 됨

2. Grouping

  • 전체 user를 owner, group, public 3개로 구분
  • 각 파일에 대해 세 그룹의 접근 권한(rwx)를 3비트씩 표시

    9비트로 가능하니 얼마나 효율적인가?

3. Password

  • 파일마다 비번 걸기(디렉토리도 가능)
  • 모든 접근 권한에 대해 하나의 비번 : all or nothing
  • 접근 권한별 password : 관리, 암기 문제

비번 거는 건 그냥 읽고 잊어버리자. 구리다.

Mounting

파티션으로 하나의 물리적 디스크를 여러 개로 나눌 수 있다고 했다.
그런 디스크 1에서 디스크 3을 접근하고 싶을 때 사용하는 것이 Mounting이다.
disk 1의 디렉토리에 disk 3 root를 연결하는 것이다.

Access Methods

파일을 접근할 때, 시스템이 접근하는 파일 정보의 접근 방식

순차접근 (sequential access)

  • 카세트 테이프처럼
  • 읽거나 쓰면 offset은 자동적으로 증가
  • A,B,C 순서가 있을 때, A 다음 C가 읽고 싶으면, 반드시 B를 읽고 간다.

직접접근 (direct access)

  • LP 판처럼
  • 파일 구성하는 레코드를 임의의 순서로 접근이 가능함
  • A,B,C 순서가 있을 때, A 다음 C가 읽고 싶으면, 바로 간다.
profile
10년 후 세계 최고 블록체인 개발자

0개의 댓글

관련 채용 정보