대략 domain이 100개라면, file이 백만 ~ 수천만 개일 것이다.
더불어 대부분은 그 파일을 생성한 도메인에서만 접근권한을 갖고, 나머지 도메인들은 접근권한을 가지고 있지 않는 경우가 많다. 즉 대부분의 cell이 NULL 인, Sparse Matrix인 경우가 많다.
따라서 더 좋은 방법으로 Access Matrix를 구현해 보자!
NULL이 아닌 CELL들을 모두 모아서 다음과 같이
<Domain, Object, Rights-set>
으로 저장한다.문제 = 이렇게 해도 워낙 수가 많기 때문에 여전히 테이블의 크기는 크다.
object마다 각 column에서 null이 아닌 cell들만 뽑는다.
이후 각 도메인별 접근 권한<Domain, Rights-set>
을 만들어서 access list를 만든다. 이를 해당 파일의 FCB (Inode)에 저장해둔다.
=> 실제로 유닉스, 리눅스에서 사용되고 있는 방법
유닉스에서는 도메인이 그 파일의 소유자, 그 소유자가 속한 그룹, 나머지 전체로 분류된다.
소유자(owner)는 rwx가 모두 가능하고, group은 read, write, 나머지는 read만 가능하다.
도메인 별로, 가로축 row 에서 null만 제외하고 cell을 뽑는다.
각 프로세스가 권한을 갖긴 오브젝트들에 대해서<Object, Rights-set>
capability list를 만든다. capability list는 최대 도메인 개수만큼 나온다.
세 번 open operation이 이뤄지는 상황이다.
프로세스 p1의 도메인에 대해서, 각각의 오브젝트에 대해서 가진 권한을 명시해둔 것이므로 위 예시에서의 file table이 capability list이다.
그런데, capability list는 프로세스가 실행하는 동안만 유지된다. 만약 프로세스가 해당 파일들을 close하면 해당 entry들이 모두 사라진다❗❗
즉 capability list는 transient하게 존재하며, 필요없으면 사라진다. 그러나 access list는 inode 안에 permanent하게 존재한다.