System programs for Disk

Jin Hur·2021년 7월 1일
0

[Linux] File system

목록 보기
3/22

reference: https://pages.cs.wisc.edu/~remzi/OSTEP/, 시스템 프로그래밍, 운영체제 수업(최종무 교수님)

1. Disk device driver(디스크 관리 시스템 프로그램)

그림1. disk device driver
  • 물리적 디스크를 논리적 디스크(블록들의 집합)로 추상화(a collection of disk blocks)
  • 디스크 명령어를 통한 제어 (ATA command: type, start, size, device..)
  • 디스크 초기화, 스케줄링, 에러 handling ..

2. File system

그림2. file system
  • 파일 추상화 지원. (file = stream of bytes)
  • 파일과 디스크 블록 연결(inode 구조 or FAT 구조)
  • 파일 속성/접근제어, 계층구조(디렉터리) 지원

cf. 블록의 불연속 할당 vs 연속 할당

  • 불연속 할당: 성능은 비교적 나쁨. 할당과 반납이 유연.

  • 연속 할당: 성능은 좋음(디스크 접근 시간이 줄어듬). 그러나 할당과 반납이 유연하지 못함(예를 들어 파일 크기가 증가될 때 재배치가 필요할 수 있다).

  • 대부분의 파일 시스템은 불연속 할당을 더 많이 사용. 파일 크기 변경이 빈번하기 때문이다.
  • 한번 파일 사이즈가 정해진 상태에서 변경이 빈번하지 않은 멀티미디어 파일 시스템의 경우 연속 할당을 많이 사용.

inode concept

source: https://www.youtube.com/watch?v=tMVj22EWg6A

  • 파일 시스템에서 파일 생성 시 파일에 대한 정보를 담는 자료구조
  • 또는 파일 시스템에서 파일을 관리하기 위한 객체(metadata)
  • 파일 시스템에서 자체적으로 생성(사용자가 생성x)
  • UFS, FFS, Ext2/3/4, LFS 등 다양한 파일 시스템에서 사용
  • 마찬가지로 디스크에 저장됨

기본 구조

  • 파일 관련 속성 정보들(ex, "ls -l"을 통해 확인할 수 있는 것) 및 디스크 블록 위치를 저장할 수 있는 구조
    (1) 속성 정보 + (2) 디스크 블록 위치
    • file size
    • loactions of disk blocks for a file
    • file owner, access permission
    • time information
    • file type: regular, directory, device, pipe, socket ..
  • inode도 마찬가지로 디스크에 저장됨
(1) 속성
  • i_node_number
  • i_mode(접근 권한)
  • i_nlink, i_dev
  • i_uid, i_gid
  • i_op, i_size
  • i_atime, ctime, mtime
(2) 위치 정보(디스크 블록 위치)
  • 12 direct block(pointer) => data block(실제 데이터)
  • 3 indirect block(pointer) => index block(블록 포인터 저장)
    ※ 하나의 포인터의 크기는 약 4B, index block(약 4KB)에는 총 1000개 정도의 블록 포인터 존재.

3. System call

  • 인터페이스 지원(open(), read(), write(), close() ..)
// example
fd = open("Reports.doc", .. );
read(fd, buf, size); or write(fd, buf, size);
close(fd);

그림.

파일 디스크립터

  • 프로그램 상에서는 파일 이름 대신 파일 디스크립터(file descriptor)을 사용
  • open() 시스템 콜의 반환값으로 전달됨
  • read(), write(), .. close()와 같은 시스템 콜에서 인자로서 사용됨
  • 파일 디스크립터는 다양한 커널 객체를 통해 inode 객체와 연결됨

Appendix. Layered Architecture for Abstraction

Application program
=> library (ex, printf())
=> system call (ex, sys_write())
=> file system (ex, fs_write())
=> device driver (ex, request())
=> device itself

0개의 댓글