ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OS의 파일시스템?
    학교 수업/OS 2020. 5. 10. 23:11

    OS의 자원관리 기능 중 프로세스 관리, 메모리 관리를 이전 포스팅들에서 다뤘고

    이제는 파일관리(파일시스템, 파일 및 디렉터리 생성)에 대해 보겠다.


    File System(파일시스템)

    - 컴퓨터 사용자의 응용프로그램을 실행함으로써 생성하는 정보를 파일이라는 단위로 저장&관리하는 운영체제의 서브시스템

      사용자와 보조기억장치 간의 인터페이스를 제공

     

    1. 파일 시스템의 기능

     1) 사용자가 파일을 생성, 수정, 제거할 수 있도록 한다.

     2) 여러 사용자가 파일을 공유하여 사용할 수 있도록 한다.

     3) 불의의 사고에 대비한 백업과 복구 능력이 있다.

     4) 주기억장치와 보조기억장치 간의 파일 전송 담당한다.

     5) 각 응용에 적합한 구조로 파일을 구성할 수 있도록 한다.

     

    2. 파일시스템의 파일관련 작업

     - 파일시스템이 파일에 대해 수행하는 작업은 파일 단위 작업과 레코드 작업으로 분 할 수 있다.

     - 파일 단위 작업

       open : 파일을 사용할 수 있는 상태로 준비

       close : 파일의 변경된 내용을 저장하고 사용 권한을 종료

       copy : 새로운 파일 생성

       destroy : 파일명을 디스크에서 삭제

       rename : 파일명을 변경

       list : 디스크에 저장되어 있는 파일 목록 출력

    - 레코드 단위 작업

       read : 데이터를 읽음

       write : 데이터를 기록

       update : 데이터를 갱신

       insert : 데이터를 추가

       delete : 데이터를 삭제

       search : 데이터를 검색


    3. 파일 디스크립터(file descriptor)

     - 파일을 관리하기 위한 정보(metadata)를 보관하는 파일제어블록(FCB, File Control Block)이다.

       ->유닉스에서는 inode라고 한다.

     - 보조기억장치에 존재하다가 파일이 오픈되면 주기억장치로 이동한다.

     - 파일시스템이 관리하며 사용자가 직접 참조할 수는 없다.

     - 파일 디스크립터는 파일마다 독립적으로 가지며 시스템마다 그 내용이 다르다.

     - 구성 요소

       -> 파일명, 파일유형, 접근제어정보, 생성날짜와 시간, 사용횟수, 파일구조 등. 이것들을 metadata라고 함


    4. 디렉터리(directory)

     - 파일 시스템 내부에 있으며, 디스크에 존재하는 파일에 대한 정보를 가지고 있는 테이블

     - 각 파일의 위치, 크기, 할당 방식, 형태, 소유자 등의 정보를 가진다.

     - 디렉터리 종류

       1) 1단계(단일) 디렉터리 : 모든 파일이 같은 디렉터리에서 관리되는 가장 간단한 구조


                                        모든 파일이 유일한 이름을 가져야한다.

                                        다수의 사용자가 사용하거나 파일의 수가 증가할 때 관리가 어렵다.



                

       2) 2단계 디렉터리 : 중앙에 마스터 파일 디렉터리(MFD:Master File Directory)가 있고, 그 아래에

                                각 사용자에게 할당하는 디렉터리(UFD:User File Directory)가 있는 구조


                                각 사용자에게 서로 다른 디렉터리를 할당

                                사용자는 각자 디렉터리를 가지므로 다른 사용자와 같은 이름의 파일 소지 가능

                                사용자 이름과 파일이름으로 특정 파일을 명시해야 해서, 파일 이름이 길다.

                                각 사용자명 디렉터리가 독립적이므로 파일을 공유할 수 없다.


              

       3) 트리 구조 디렉터리 : 하나의 루트 디렉터리와 다수의 서브 디렉터리로 구성


                                       서로 다른 디렉터리 내에서는 동일한 이름의 파일이나 디렉터리 생성가능

                                       파일 및 디렉터리 탐색은 절대 경로, 상대 경로를 이용한다

                                       디렉터리 생성 및 삭제가 용이

                                       Dos, Windows, Unix 운영체제에서 사용하는 구조


               절대 경로 : 루트 디렉터리를 기준으로 해당 파일이나 종속 디렉터리에 이르는 경로

               상대 경로 : 현재 디렉터리를 기준으로 해당 파일이나 디렉터리까지의 경로


              

     

       4) 비순환(비주기) 그래프 디렉터리(Acyclic Graph Directory)

               : 하위 파일이나 디렉터리의 공유를 허용하지만, 사이클이 없는 그래프 구조


                하나의 파일이나 디렉터리가 여러 개의 경로 이름을 가질 수 있다.

                단순 트리 구조보다 융통성이 좋지만 복잡하다.

                공유된 하나의 파일을 탐색할 경우 다른 경로로 두번 이상 찾아갈 수 있어서 시스템 성능 저하

                공유된 파일을 삭제할 경우, 파일은 삭제되었지만 파일을 가리키는 포인터는 남아있는 고아 포인터(dangling pointer)가 발생할 수 있다.


              

       5) 일반 그래프 디렉터리 : 트리 구조에 링크를 첨가하여 사이클이 허용되는 구조


                                         파일이나 디렉터리 공유 가능

                                         그래프 탐색알고리즘이 간단해 파일이나 디렉터리 접근 용이

                                         불필요한 파일 제거를 위해 참조 계수기(counter) 필요

                                         제거된 파일의 디스크 공간 확보를 위해 쓰레기 수집 필요


              

       

    5. 파일 시스템 마운팅(mounting)

     - 파일에 접근하려면, 파일 시스템이 프로세스들에 의해 미리 장착(mount)되어야 한다.

     - 사용하고 싶은 파일을 소유한 파일 시스템을 특정한 directory mount하면 그 때부터 그 파일을 사용 가능하다

       이 때 특정한 directorymount point라고 한다.

       (일반적으로 mount point는 비어있는 디렉토리)


    6. 파일에 접근하는 방법 

      - OS가 하나의 파일이 필요하다면, open()함수를 통해 파일을 준비시켜야한다.

      - open()과정을 자세히 보면 아래와 같다.

        ① open("파일이름")함수 호출 -> system call

        ② System-wide-open-file table을 통해, 이미 다른 프로세스가 파일을 열었는지 확인

        ③

     만일 디렉토리 내에 존재한다면,

    해당 프로세스의 per-process-open-file table에 system-wide open-file table의 해당 파일 entry를 포인터로 가리키고,

    system-wide open-file table의 값을 1증가

     만일 존재하지 않는다면,

    메모리에 있는 directory structure cache를 업데이트한다.

    해당 파일의 FCB값을 system wide open file table의 entry에 copy한다.

    그 다음 per-process open file table이 해당 entry를 가리키게 만든다.

        

    System-wide open-file table: 열려 있는 fileFCB를 복사하여 가지고 있는 table

    시스템에 한개 존재

    Per-process open-file table: system wide open file table의 주소와 함께 fileoffset과 권한 등을 나타내는 table

      프로세스마다 따로 존재


    7. 파일보호

     - 시스템에 다수의 사용자들이 있다면, 파일을 공유할 수 있다.

     - 하지만 모든 이들이 파일을 수정하는 것을 막기 위해, 즉 파일 보호를 위해 파일에 대한 권한을 사용자마다 정했다.

     - 파일권한은 소유자, 그룹, 모든 사람으로 나누어 권한을 달리한다.


       


    8. 파일시스템의 구조

     - 파일시스템은 disk에 저장되어 있으며, 여러 수준으로 구성되어있다.


    1. logical file system : Meta date 정보를 관리한다

                                 Directory 구조를 관리하며 FCB를 가지고 있다.

    2. file-organization module : 물리 블럭과 논리 블럭을 알고 있어서 논리 주소를 물리주소로 변경해 준다.

    3. basic file system : 적절한 장치드라이버에게 물리 블록을 읽고 쓰도록 명령 내린다.

    4. I/O control : Device driver interrupt handler로 이루어져있으며 고수준 언어의 명령을 디바이스에 맞는 저수준 언어로 변경해 준다.






    9. 파일 할당 방식

     - 하나의 디스크에 여러 파일이 저장되는데, 디스크에서 파일을 배치하는 방법은 여러 개가 있다.


    1) 연속할당 : 파일들을 디스크 내의 연속적으로 인접된 공간(리스트처럼)에 할당하는 방법


                    한 파일의 연속 할당은 디스크 주소(블록 단위)와 길이로 정의된다.

                    파일의 길이 n블록이고 블록 b에서 시작한다면, 파일은 b, b+1, b+2, … ,b+n을 차지한다.



    2) 연결 할당(Linked Allocation) : 파일을 디스크 블록의 연결 리스트모양으로 할당하는 방법


                                               파일의 디스크 블록들이 디스크 내에 흩어져 있다.

                                               디렉토리는 파일의 첫번째와 마지막 블록에 대한 포인터를 가진다.


    -> linked allocation의 개선법 : 파일 할당 테이블(FAT, File Allocation Table) 사용


                    FAT : 파일이나 디렉토리의 위치 정보(포인터)를 저장하는 테이블

                            디스크 헤드가 FAT정보를 읽어 임의의 블록 위치를 알아낼 수 있어, Direct access 도 가능.

                             Pointer를 별도의 공간에 저장해, reliability 문제 해결.

                             FAT 테이블은 각 디스크 블록마다 한 개의 항목을 가지고 있고, 이 항목은 디스크 블록 번호를 색인으로 찾는다.

                      


    3) 색인 할당(Indexed Allocation) : 하나의 색인 블록을 두고, 이 색인 블록에 포인터들을 모아두어 직접 접근을 가능하게 한 방법


                                                각 파일들은 디스크 블록 주소를 모아 높은 배열인 색인(index) 블록을 가진다.

                                                색인 블록의 i번째 항목은 파일의 i번째 블록을 가리킨다.

                                                디렉토리는 색인 블록의 주소를 가지고 있다.




    10. 디스크 자유 공간 관리 free-space management

    - 디스크의 공간은 제한되어 있어서, 새로운 파일들을 위해 빈 공간(자유공간)을 관리해야 한다.

    - 관리법

     1) 비트 벡터(bit vector) : 자유공간을 리스트로 구현하고, 리스트를 비트 맵 또는 비트 벡터로 구현

            각 블록은 1비트로 표현된다.(비트가 1이면 자유 블록, 0이면 이미 할당된 블록)

     


           

            -> 첫번째 자유블록 혹은 n개의 연속된 자유블록을 찾는 데에 간편한 방법


     2) 연결리스트(linked list) : 모든 자유 블록을 연결시키는 방법


           

     


    다음 포스팅에서는 파일이 저장되는 디스크는 어떤 하드웨어 장치인지 보겠다.

    '학교 수업 > OS' 카테고리의 다른 글

    OS의 second storage structure(disk)  (0) 2020.05.12
    OS의 메모리관리2  (0) 2020.05.09
    OS의 메모리 관리  (0) 2020.05.08
    Deadlock  (0) 2020.05.07
    OS의 process synchronization?  (0) 2020.05.05

    댓글

Designed by Tistory.