[FILE SYSTEM] 파일 읽기 및 생성 실행 과정

zeo·2021년 10월 30일
0

디스크에서 '/foo/bar 파일' 읽기

(파일 크기는 3개 블럭 크기 12kb로 설정)

  1. /foo/bar에 대한 읽기 요청이 발생하면,
    가장 먼저 root 디렉터리의 inode로 이동해서 파일에 대한 경로를 알아냄
    (root 디렉터리의 inode는 파일 시스템이 mount될 때 알 수 있는데, 보통 inode 2번임)
    root 디렉터리의 inode를 읽어서 root 디렉터리의 데이터 위치로 갈 수 있게 됨

  2. root 디렉터리의 data 부분에서, "foo라는 이름, inode" 쌍을 찾고
    해당 inode를 가지고 foo 디렉터리의 inode로 이동

  3. foo 디렉터리의 inode 부분을 읽어서 foo 디렉터리의 data 부분으로 찾아감

  4. foo 디렉터리의 data 부분을 읽어서 "bar 파일, inode 번호" 쌍을 알아내서 bar의 inode로 이동

  5. bar의 inode로 이동해서 읽으면 bar를 open할 수 있음

  6. bar라는 파일을 open 했으므로 읽기 작업 수행
    읽기 위해 bar라는 파일의 데이터 블록으로 이동해야 하므로 bar inode를 읽어 데이터 블록의 위치를 알아냄

  7. 알아낸 데이터 블록의 위치로 가서, 해당 데이터 읽기

  8. 데이터를 읽었다는 것은 접근했다는 것이므로, 최종 접근 시간을 inode에 기록

디스크에서 '/foo/bar 파일' 생성

  1. root inode로 찾아가서 root 데이터 블록의 위치를 알아내 이동

  2. root 디렉터리의 data 부분에서, "foo라는 이름, inode" 쌍을 찾고
    해당 inode를 가지고 foo 디렉터리의 inode로 이동

  3. foo 디렉터리의 inode 부분을 읽어서 foo 디렉터리의 data 부분으로 찾아감

  4. foo 디렉터리 안에 bar라는 파일을 만들기 위해, 현재 권한으로 쓰기 작업을 할 수 있는지 여부 확인하기
    또한, bar라는 파일이 기존에 있는지 확인 필요
    만약 쓰기 권한이 있고, bar라는 파일이 없으면 아직 새로운 파일을 위한 inode 번호가 없는 상태이므로, 현재 사용 가능한 inode 번호를 알아내기 위해 inode bitmap으로 이동

  5. inode bitmap을 읽어, 사용 가능한 inode 번호 찾기

  6. 사용 가능한 inode 번호 찾으면, 해당 inode 번호는 사용 중으로 표시해주기

  7. 다시 foo의 데이터 블록으로 돌아와서 bar라는 파일과 이에 할당된 inode 번호를 추가해주기

  8. 사용 가능한 inode 블록은 default 값으로 설정되어 있기 때문에 읽어들인 다음,

  9. bar에 대한 정보를 bar inode를 쓰기

  10. bar라는 파일이 생성되며 foo가 수정되었기 때문에, 수정 정보도 업데이트 해주기
    bar에 대한 inode가 생성된 상태가 됨

  11. bar inode를 읽고 새로운 데이터를 위한 디스크 블록을 할당하기 위해 사용 가능한 디스크 블록을 기록하는 data bitmap으로 이동

  12. 사용 가능한 디스크 블록을 찾기 위해 data bitmap 읽기

  13. 사용 가능한 디스크 블록을 찾고, bar를 위해 사용할 것임을 표시해주기

  14. 할당받은 디스크 블록으로 가서, 데이터를 쓰기

  15. 디스크 블록에 쓰기 작업 끝내면, bar inode로 돌아와서 수정된 정보를 bar inode에 쓰기

0개의 댓글