[OS] File System : File Protection _ Implementation of Access Matrix

parkheeddong·2023년 6월 5일
0

Operating System

목록 보기
60/63
post-thumbnail

Access Matrix의 구현 방법

📌 기존의 Problem

대략 domain이 100개라면, file이 백만 ~ 수천만 개일 것이다.

이 matrix를 커널에 저장해놓아야 하는데, 크기가 크므로 커널 공간의 낭비가 생길 수 있다.

더불어 대부분은 그 파일을 생성한 도메인에서만 접근권한을 갖고, 나머지 도메인들은 접근권한을 가지고 있지 않는 경우가 많다. 즉 대부분의 cell이 NULL 인, Sparse Matrix인 경우가 많다.

따라서 더 좋은 방법으로 Access Matrix를 구현해 보자!

1) Global Table

NULL이 아닌 CELL들을 모두 모아서 다음과 같이 <Domain, Object, Rights-set> 으로 저장한다.

문제 = 이렇게 해도 워낙 수가 많기 때문에 여전히 테이블의 크기는 크다.

2) Access list

object마다 각 column에서 null이 아닌 cell들만 뽑는다.


이후 각 도메인별 접근 권한 <Domain, Rights-set>을 만들어서 access list를 만든다. 이를 해당 파일의 FCB (Inode)에 저장해둔다.


=> 실제로 유닉스, 리눅스에서 사용되고 있는 방법

유닉스에서는 도메인이 그 파일의 소유자, 그 소유자가 속한 그룹, 나머지 전체로 분류된다.
소유자(owner)는 rwx가 모두 가능하고, group은 read, write, 나머지는 read만 가능하다.

3) capability list


도메인 별로, 가로축 row 에서 null만 제외하고 cell을 뽑는다.

각 프로세스가 권한을 갖긴 오브젝트들에 대해서 <Object, Rights-set> capability list를 만든다. capability list는 최대 도메인 개수만큼 나온다.

🔔 실제 사용 예제 : open system call

세 번 open operation이 이뤄지는 상황이다.

프로세스 p1의 도메인에 대해서, 각각의 오브젝트에 대해서 가진 권한을 명시해둔 것이므로 위 예시에서의 file table이 capability list이다.

그런데, capability list는 프로세스가 실행하는 동안만 유지된다. 만약 프로세스가 해당 파일들을 close하면 해당 entry들이 모두 사라진다❗❗

즉 capability list는 transient하게 존재하며, 필요없으면 사라진다. 그러나 access list는 inode 안에 permanent하게 존재한다.

0개의 댓글