Unix File System 유인물
- 파일을 생성하면 그 파일에 대한 FCB(File Control Block)가 생긴다. UFS에서는 inode라고 한다.
- FCB 구성 요소
- Data block : 이용가능한 저장 공간
- inode blcok : 각 파일의 inode => 파일에 대한 정보를 담고 있는 고유한 식별자
- super block : 파일 시스템에 대한 정보를 가지고 있다. (메타 데이터)
- Boot block : File system에 있는 코드를 메모리에 올린다.
입출력 장치를 크게 둘로 나눴다.
- character device : 하나씩 읽고 씀
- block device : 읽거나 쓸 때 블록단위로 함
디렉토리들은 ufs에서 전부 file로 등록이 됨
C file directory
- inode 번호가 할당됨 inode 번호가 있어야 찾아갈 수 있다.
파일 시스템의 조상은? => root
root/directory/
directory file들은 전부 파일 타입2 => 유인물 B부분
파일 tree에서 non-leaf는 directory file들 leaf는 일반 file이다.
부모 : .. , 자기 자신 : .
D
12 - 14 : 파일 타입
나머지 9 bit는 rwx rwx rwx
디스크를 블락 단위로 쪼갬 : A에 100개 할당, 빈블락을 찾아서 할당 빈파일이 늘어났다
E
처음에 direct addressing 은 block을 직접 가리키고 12-14는 inderict로 간접적으로 가리킨다.
12는 찾아가면 256짜리 table 이있고
13은 double indirect 여서 256 x256
14는 트리플
F
파일을 하나 생성하게 되면 1.inode를 할당하고 2.dierctory에 등록을 한다.
그러면 PCB에 File descriptor table이 생기는데 여기에 stdin, stdout, stderr파일이 있다. 얘네는 사용자의 terminal과 연결 되어 있다. > 중요!
0,1,2는 std를 가리키고 3부터 file table을 가리킨다.
fd1 = open(f1) ; file descriptor 생성 => read(fd1)을 넣음
file table은 오픈할때마다 만들어짐 하지만 inode table은 여러번 오픈해도 하나밖에 없음
즉 open을 한번하면 A PCB에서 open mode와 offset을 확인하는 파일 테이블을 만듦 => 그러면 file table에서 inode table을 찾고 inode table에서 inode number를 index로 disk를 접근, 그 disk는 [Boot B,Super B,inode, Data B]로 구성되어 있어 offset/block size로 E 테이블에서 블록을 찾는다. 그 inode 번호를 갖고 있는 첫번째 블락을 갖고옴
file delete를 하면 inode table 회수, 블락들 회수, 파일 directory 회수
Disk Cache —> 디스크에 있는 내용을 메모리에 올려놓는다.
ㄴ> 디스크의 접근 시간이 많이 걸리니까 한번 읽어 놓은 것은 메모리에 올려놔서 접근시간을 줄인다.
close를 해도 파일 디스크립터 테이블과 open File Table은 사라지지만 inode table 부분은 안사라진다.
Fork 유인물
redirect
‘>’ 아웃풋을 바꿀때
fd1 = create(f1); => 없는 파일을 만듦 따라서 create!
close(stdout);
dup2(fd1,stdout);
close(fd1);
‘<‘ 인풋을 바꿀때
fd1 = open(f1); => 있는 파일을 연다 따라서 open!
close(stdout);
dup2(fd1,stdin);
close(fd1);
piping
%cat f1 | wc 라고 했을 때 pipe(fildes);라는 시스템 콜로 임시 pipe file(buffer)가 생성된다.
그리고 자식의 자식을 만들고 이게 생산자역할을 함
fildes[1]이 out 역할, fildes[0]이 in 역할
close(stdout);
dup2(fildes[1],stdout); => 자식의 out을 stdout에서 fildes[1]으로 바꿈
close(fildes[1]);
close(fildes[0]);
close(stdin);
dup2(fildes[0],stdin); => wc의 in을 fildes[0]으로 바꿈
close(fildes[0]);
close(fildes[1]);
'[운영체제 정리]' 카테고리의 다른 글
Operating System Concepts 9장 Main Memory (2) | 2024.12.17 |
---|---|
Operating System Concepts 15장 File-System Internals (1) | 2024.12.17 |
Operating System Concepts 8장 Deadlock (2) | 2024.12.17 |
Operating System Concepts 7장 Synchronization Example (2) | 2024.12.17 |
Operating System Concepts 6장 Synchronization Tools (4) | 2024.12.17 |