운영체제 - 10장 파일시스템

CHO·2022년 12월 24일
0

OS(운영체제)

목록 보기
7/18

파일에 대해
파일시스템 논리적관점
파일시스템 물리적관점
파일에 대한 접근제어 - 패스워드, 접근행렬

10-1 파일에대해

물리적 : 바이트의 나열
파일연산 : 생성, 삭제, 열기, 닫기, 읽기, 쓰기
파일유형 : 프로그램파일, 데이터파일 / 텍스트파일, 이진파일(이진코드가 들어간 파일)

데이터파일 : field(단일값), record(관련 필드 모아놓은 것)
예) 학생레코드는 이름, 학번, 소속, 학과 등의 필드로 구성됨

파일의 모양
: 더미파일(가장 단순한 형태의 파일)
: 순차파일(가장 일반적인 형태, 같은 크기의 레코드들로 구성됨, 각 레코드는 알려진 순서로 나열된 같은 개수와 크기의 필드로 구성), 전체 레코드 들에 대한 접근이 요구되는 일괄처리에 적합한 구성, 순차탐색이라 비효율성이 존재
: 인덱스+순차파일(key+순서)
: 인덱스파일(인덱스된 순차파일에서는 키 필드가 아닌 필드값으로 임의 레코드에 접근해야함)
: 직접파일(해시파일)(특정필드를 키 피드로 잡는 것, 레코드들이 순차적으로 저장될 필요가 없다, 키 필드의 값은 해싱을 통해 임의 레코드에 접근할 수 있도록 해준다, 빠른 접근이 요구됨)

파일이 어떻게 구성되는지에 따라, 잘 효과적으로 적용될 수 있는 접근방식을 이용해야한다.

10-2 파일시스템의 구조-논리적 관점에서

논리적구조 : 사용자에게 파일시스템이 어떻게 보이는지에 대한 구조

1단계) 평면 디렉터리구조(=폴더) 구조 : 가장 간단한 구조, 파일시스템 전체에 한 개의 디렉터리가 존재??한다. 모든 파일들은 이 디렉터리 안에 저장된다. 다수의 사용자 동시 수용 hard. 말이 안됨

2단계) 2단계 디렉터리 구조 : 마스터파일디렉터리에 사용자마다 폴더를 생성해둠. 사용자에도 더이상 새로운 폴더 만들수가 없음. 제한점이 많다

3단계) 계층(트리) 디렉터리 구조 : 오늘날 제일 자주쓰는 구조. 파일 -> 폴더이름 -> 파일 이런식으로 저장되어있다.

+) 비순환 그래프 디렉터리구조 : 링크라는 포인터를 사용해 임의 디렉터리를 다른 디렉터리와 연결시켜 서로 같이 사용할 수 있도록 한 것. 각자 파일은 개별로 두고, 공통으로 참조하고 싶은 것을 참조할 수 있도록 파일을 만들어둬서 접근하는 것 (여기까지가 우리가 사용할 수 있는 파일구조!)

++) 일반그래프 디렉터리 구조 : 계층구조에 링크를 추가하다보면 탐색을 시작한 디렉토리로 다시 돌아오는 사이클이 발생할 수 있는데, 이렇게 되면 비순환 구조 가 아니고 일반그래프 구조가 된다. 파일의 탐색이 무한루프에 빠질 수 있고, 삭제되어야 할 파일이 계속 남아있을 수 있는 가능성이 존재한다.

10-3 파일시스템의 구조 - 물리적관점에서

파일을 디스크 공간에 어떻게 저장시킬 것인가에 관한 파일 할당방식 + 디스크 상의 빈 공간들을 어떻게 관리할 것인가!

<10-3 파일할당>
1.연속할당 : 디스크 상에서 연속된 많은 블록들을 동원해 파일을 저장하는 방법???. 파일할당테이블을 사용해서 하는 것! 간단하고 순차처리에서는 성능이 좋지만, 디스크 공간활용에서 매우 비효율적, 외부 단편화??? 때문에 시간이 흐를수록 충분한 크기의 연속된 블록찾기 힘들어...

2.체인할당 : 블록들이 연속적일 필요가 없는 비연속할당, 블록 크기만큼 나누어진 파일의 내용이 체인을 따라 차례로 저장된다. 블록단위로 할당해 체인으로 연결! 외부단편화 생기지 않아!! 공간활용도 우수! 그치만 파일이 들어있는 몇 개의 블록 연속으로 처리시 시간지연 존재 ㅠ...왜냐! 매번각 블록들에 대해 디스크의 다른 부분을 접근해야하기 때문임???

3.인덱스할당 : 파일할당 테이블 + 인덱스블록 / 파일에 대한 정보는 대응하는 해당 인덱스블록 안에 정보가 다 있다.

사진을 보면, a파일에 대한 정보는 인덱스블록 24에 정보가 싹 있는거. 블록 보면 3, 20, 14번부터 시작하는 블록에 각각 해당하는 길이가 있으니, a파일의 데이터 길이는 총 7이 된다.

<10-3 빈 블럭들 관리 방법>
-> 디스크의 빈 블럭들의 관리가 잘 되어야 할 것
:비트벡터 - 디스크 블록 당 하나의 비트가 대응된 벡터를 둔다. 블록에 대해 1이면 사용중 / 0이면 비어있다.
0과 1로 블록을 판단한다.
비트벡터는 파일시스템에서 관리, 빠른 검색을 위해 메모리에 두는 것이 일반적이다.

:리스트 - 디스크 상의 빈 블록들을 리스트로 연결한다. 첫번째 빈 블록에 대한 포인터를 커널이 가지도록 하는 방법??? (즉, 커널에 헤더포인터가 있다고 생각하면 편함!)

:그룹화 - 각 빈 블록은 n개의 빈 블록번호를 갖도록!
이 중 n-1개 = 블록의 번호, 나머지 하나는 다음 번 n개의 빈 블록 번호를 의미
기본적으론 리스트를 이용하는 방식, 그치만 연결되는 노드의 수는 1/n으로 줄어든다

: 인덱싱 - 파일 할당에서 설명한 인덱스 테이블을 사용해 디스크 상의 연속된 빈 블록들 당 하나의 인덱스 항목이 설정되어 관리되는 기법.
빈 공간 전체가 하나의 파일로 취급된다. 파일 할당 방법이 어떤 것이든 효과적으로 사용된다.

-> 그룹화, 인덱싱 위주로 주로 사용함

10.4 파일에 대한 접근제어

파일에 대한 접근을 제어한다 = 파일을 보호한다!!
파일 접근 종류 : 읽기, 쓰기, 실행, 첨부 등등이 있다~~

제어기법은 2가지 : 패스워드, 접근행렬!!!

10.4.2 접근행렬 : 대부분의 시스템에서 채택하고있는 제어기법

객체 : 파일을 의미
도메인 : 같은 접근 권한을 갖는 프로세스들의 집합
접근권한 : 지정된 객체에 대해 가능한 접근권한을 나타냄, <F,RE>로 표시하면 파일 F에 대해 읽기와 실행의 권한을 갖는다는 의미

->접근행렬은 비효율적이야.

좀 더 효율적일 수 없을까?

1.전역테이블 : 도메인, 파일들, 접근권한을 순서대로 세개의 쌍으로 표현해 전역 테이블에 저장하고 사용하는 기법, 단순한 나열로 도메인이나 파일 묶어 그룹화해서 표현하기 어려움
2. 접근리스트 : 접근행렬에서 각각의 열을 리스트로 표현 ex) FI = {<DI,R>, <D3,RW>} //파일을 하나의 리스트 형태로 쭉 꺼냈다고 보면 수월함(파일이 위주가 되는 리스트라 특정 도메인에 속한 프로세스들에 대한 파일들을 접근하는건 어렵다)
3.권한리스트 : 접근리스트와 반대로 접근 행렬의 각각의 행을 리스트로 표현함 ex) DI:(F1,R),(F2,W),(F4,WA)
4.럭키방식(Lock-Key): 각각의 행과 열이 가지는 정보를 비트패턴으로 표시해 접근권한 결정하는 방식

profile
매일 개념 익히고 적용합니다

0개의 댓글