오늘은 디렉토리에 대해서 알아봅니다.
디렉토리
디렉토리는 파일의 속성을 저장하는 파일을 의미합니다. 정확히는 file의 이름과 FCB의 식별자만을 저장합니다.
디렉토리에 파일을 복사하여 저장하는 것은 비효율적이기 때문이죠.
보통 디렉토리에 저장되는 정보들은 아래와 같습니다. 여기서 inode는 index node의 약자로 리눅스에서의 FCB를 호칭명입니다.
디렉토리에는 현재 파일과 상위 파일의 정보까지 저장한다는 것을 기억해두시면 좋습니다.
Hierachical Directory
우리가 흔히 쓰는 디렉토리는 계층 구조를 가집니다. 가장 루트 노드를 필두로 하여 여러 디렉토리들이 있고 이러한 것을 계층으로 관리하기 때문이죠.
이러한 계층 구조를 이용해서 디렉토리가 파일을 찾는 과정을 예시를 통해 확인해봅시다.
이러한 파일 구조가 있는 가운데, 우리는 루트 노드에서 list.txt를 open하고 싶습니다.
vi /usr/member/list.txt
이런식으로 입력한 것이 되겠습니다.
open이란?
파일에 허용되는 operation 중 하나인데, 만약 우리가 open으로 지정한 경로에 해당 파일이 있으면 해당 파일의 정보를 보조기억장치에서 메인 메모리로 복사하여 open해주고, 그렇지 않다면 create를 한 후에 메인 메모리에 복사하는 operation을 의미합니다.
그럼 운영체제는 가장 먼저 루트 노드에서 usr 파일을 찾을 것입니다. 정확히는 디렉토리겠네요.
루트 노드의 inode는 2입니다. 거기서 usr에 해당하는 것을 찾아야겠네요. 확인해보니 inode 4에 위치해있다는 것을 알 수 있습니다.
특이하게 루트노드는 자신의 상위 노드가 없으므로 상위 노드도 자신을 가리키는 모습을 확인할 수 있습니다.
그럼 이제 inode 4로 접근하여 다음 디렉토리인 member를 찾겠습니다.
member가 inode 23에 있네요!! 이제 inode 23을 찾아가봅니다.
다행히 42번에 list.txt를 찾았습니다. 그렇다면 이제, 운영체제에서는 보조기억장치에서 FCB의 indentifier가 42인 파일을 메인메모리로 복사하여 open 작업을 수행하게 될 것입니다.
Acyclic-Graph Directories
디렉토리는 계층구조임과 동시에 순환 구조를 갖습니다. 마치 우리가 하나의 파일을 바로가기 형태로 만들어서 여러 폴더에 넣어놓을 수 있느 것처럼 말이죠. 이렇게 되면 하나의 파일을 여러 부분에서 접근할 수 있습니다.
저희가 다뤄볼 것은 바로가기입니다. 여기서는 Link라고 불리는데, 이 또한 파일의 한 종류입니다. 운영체제에서 Link 기능을 제공함으로써 아래와 같은 문제가 발생할 수 있습니다.
이러한 구조를 갖는다고 해봅시다. 여기서 동그라미는 파일을 의미하고, 화살표가 link를 의미합니다.
여기서 a에 있는 link되어 있는 파일을 지우게 되면 해당 파일이 삭제됩니다. 그럼 b의 link는 어떻게 될까요?? 아마 아무것도 가리키지 않지만 Link만 존재하는 상황이 될 수 있습니다. 이러한 상황에서 b의 link는 dangling pointer입니다.
이러한 문제를 해결하는 방식들을 소개해볼까 합니다.
1. 방관하기
아무것도 하지 않습니다. 이것은 사용자에게 책임을 떠넘긴다는 것을 의미합니다. (이게 뭐임;;)
2. FCB의 entry count 사용
FCB에 entry count라는 속성을 추가합니다. 이는 자신의 파일을 가리키는 link의 수를 의미합니다. 만약 a에서 삭제하라는 명령을 해도, FCB의 entry count는 2였기 때문에 단지 1로 바뀌는 것 뿐 실질적으로 파일을 삭제하지 않습니다. 이는 entry count가 기존에 1이었고, 0이 되었을 때 삭제되게 되는 방법입니다.
접근권한
이전 글에서 장치 파일에서 접근권한이 있음을 확인했습니다. 그것에 대해 조금 다뤄보고자 합니다.
접근권한은 owner access, group access, public access에 대해서 read, write, execute의 세가지 종류가 있습니다.
따라서 총 9자리로 나타내며, 아래와 같이 나타낼 수 있습니다.
그래서 우리는 모든 권한을 십진수 기준 3자리로 표현할 수 있습니다. 777은 모든 access를 ownwer, group, public에게 주고, 111은 실행권한만 주는 등.. 숫자로 표현할 수 있습니다.
'CS > OS' 카테고리의 다른 글
[운영체제] 리눅스의 파일 시스템 (0) | 2023.11.02 |
---|---|
[운영체제] 파일 시스템 (1) | 2023.10.28 |
[운영체제] File (0) | 2023.10.28 |
[운영체제] Deadlock 처리 (1) | 2023.10.21 |
[운영체제] Deadlock (0) | 2023.10.21 |