티스토리 뷰

File Structure & I/O

파일 구조체와 I/O

 

[ File ]

  File

    : Byte들의 Sequence.

    : 모든 I/O Device도 File로 취급.

    : File은 Position(Offset) 정보를 가지고 있음.

    · Regular File

      : 임의의 데이터가 포함된 파일.

      : Text FileBinary File로 구분한다.

         ( Binary File의 경우 Object File이나 Image File 등을 말한다. Kernel은 이 둘의 차이를 인지하지 못함 )      

    · Directory

      : 파일을 구분하기 위해 사용되는 이름공간(namespace).

      : File NameInode Number로 구성되어 있다.

         ( inode는 index node라는 뜻 )

      : .현재 디렉토리, ..부모 디렉토리를 표시한다.

      : opendir(), readdir(), closedir()로 이용 가능.

 

  File Metadata

    : 파일에 대한 모든 정보. → File Data에 대한 Data.

    : File Data에 대한 위치를 포인터로 저장.

    : Kernel Data Structure에 존재.

    : File Data는 Disk Sector에 비연속적으로 저장되어 있을 수 있음.

    : stat() 또는 fstat()으로 보고자 하는 Metadata를 불러올 수 있음.

 

[ Unix I/O ]

  Unix I/O

    : System-Level I/O

    : 사용하기에 편리하다는 장점이 있음.

    : System Call(Trap)이므로 Overhead 발생.

    : Kernel-Level.

    · open()

      : File Struct가 생성되고 Current File Position0으로 세팅됨. → 파일 내에 있는 위치. 

      : Main Memory에서 Metadata를 읽어오고, Location 정보를 받아와 원하는 위치에 접근.

      : File Contents는 크기가 클 수 있기 때문에 처음에 Open하지 않음.

      : Return값이 File Descriptor Number(fd값)인 Integer 값이다.

      : Open을 할 때 데이터의 전체 경로를 지정하는 Pathname을 인자로 하면 다 열어야 하므로 많은 Disk I/O 발생.

        → 이를 방지하기 위해 이후에는 fd값(File Descriptor Number)으로 간단히 접근.

      : 옵션으로 Read-Only, Write-Only, Read and Write를 줄 수 있음.

    · close()

      : fd값을 인자로 close.

      : 정상 종료는 0을 Return, 에러는 -1을 Return.

    · read()

      : fd, buf, buf_size를 인자로 갖는다.

      : Current File Position부터 시작해서 Read를 시작.

      : read의 결과가 음수 값이 나오면 에러가 발생한 것으로 본다.

      : fd값으로 0을 주면 stdin이 되므로, 키보드로부터 입력 받게 된다.

      : 이때 읽으려는 값의 크기보다 실제 값이 더 작은 경우를 read하는 경우는 에러로 처리하지 않는다.

    · write() 

      : fd, buf, buf_size를 인자로 갖는다.

      : Current File Position부터 시작해서 Write를 시작.

      : write의 결과가 음수 값이 나오게 되면 에러가 발생한 것으로 본다.

      : fd값을 1 또는 2로 주면 stdout, stderr이므로 해당 스크린에 출력이 되게 된다.

    · seek()

      : File의 Position 정보를 변경.

 

[ Split file struct & inode struct ]

  : 동일한 파일을 Open할 때 동일한 Metadata를 또 가져올 필요는 없으므로, 공용 부분과 아닌 부분을 나눔.

  file struct

    : Private한 부분. → 하지만 공유될 수 있음.

    : 프로세스마다 가짐.

    : Position, Pointer to Inode Structure, Counter

  inode struct

    : 기본적으로 공유되는 부분.

    : 대부분의 Metadata.

    : Disk에 존재하는 File Block의 Location 정보.

File Struct and Inode Struct

 

[ File System ]

  File System : 컴퓨터에서 파일이나 자료를 쉽게 접근할 수 있도록 보관하는 체제.

    · Bootblock : 부팅 관련 정보가 있는 Block.

    · Superblock : 메모리 사용 정보가 존재하는 Block. 

    · Inode list : Inode의 집합. Inode는 File에 상관 없이 크기가 같아 배열로 관리된다.

    · Data block : 실제 Data Content가 있는 Block.

File System

  File Descriptor Table

    : Open 될 때 마다 File Struct의 주소가 추가됨.

    : Process마다 존재.

    : 0, 1, 2번 인덱스는 stdin, stdout, stderr로 각각 매핑되며 사용되지 않음. → File이 Open되면 3번 인덱스부터 사용.

Relation of File descriptor table, File table, Inode table

 

[ Standard I/O & FILE structure ]

  Buffered I/O

    : 한 번 Unix I/O가 일어날 때 마다 Mode Switch가 발생해 Overhead가 발생하므로, 한 번에 여러 정보를 가져오는 방법.

    : 입력의 경우도 한 번에 입력할 내용 전부를, 출력의 경우에도 개행 문자(\n)가 나올 때까지 기다렸다가 한 번에 출력.

 

  Standard I/O

    : Bufferd I/O 방식을 채택.

    : Buffer Pointer를 Return.

    : Low-Level의 I/O System Call을 기반으로 만들어져 있다.

    : User-Level.

Standard I/O and Unix I/O

 

  FILE structure

    : File DescriptorBuffer를 가지고 있다.

    : User-Level Struct.

    : File마다 존재.

Relation about FILE Structure

 

[ I/O Redirection ]

  : 입력과 출력의 방향을 바꾸는 방법.

     ( stdout이었던 것을 file로 save하도록 하는 등. )

  : 대표적으로 Linux의 0<, 1>, 1>>, 2>, &>가 있다.

  : File Descriptor Table 내부의 값을 바꿔준다.

     ( dup2(old_fd, new_fd)로 수행 가능 )

$ls > foo.txt

 

[ Kernel Data Structure ]

  · No Sharing일 때 Kernel Data Structure

No Sharing

  · File Sharing 중일 때 Kernel Data Structure

File Sharing

  · Fork 수행 시 Kernel Data Structure

    : fork()의 경우 file structure도 공유하게 되기 때문에 서로 Position 정보에 영향을 줄 수 있다.

fork()

  · I/O Redirection 수행 시 Kernel Data Structure

I/O Redirection. Step 1, Step 2

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함