가장 간단한 구조로, 모든 파일이 하나의 디렉터리 내에 위치해 관리되는 구조이다. 하지만 모든 파일이 하나의 디렉터리에 존재하기 때문에 각각의 파일 이름이 달라야하고, 파일이나 사용자의 수가 증가하면 파일을 관리하는데에 어려움이 생긴다. 파일명은 보통 내용과 관련되어있고, 시스템에 따라 길이에 제한을 받는다.
2. 2단계 디렉터리
2단계 디렉터리 구조에서 루트는 마스터 파일 디렉터리(MFD)이고, 아래로 사용자 파일 디렉터리(UFD), 그 아래로 파일이 있다. 여기서 파일은 트리의 리프에 해당한다.
사용자 이름과 파일 이름은 루트 디렉터리로부터 리프까지의 경로로 정의되는데, 이를 경로명이라 한다. 원하는 파일의 경로명을 알아야 해당 파일을 지정할 수 있다.
마스터 파일 디렉터리는 각 사용자 이름, 계정 번호, 사용자 파일 디렉터리를 가리키는 포인터를 갖고 있으며, 사용자 파일 디렉터리를 관리한다.
사용자 파일 디렉터리는 한 사용자가 갖고 있는 파일들에 대한 정보를 가지고 있고, 해당 사용자의 파일을 관리한다.
두 파일이 서로 다른 사용자 파일 디럭터리에 속하는 경우, 동일한 파일 이름을 사용할 수 있다.
3. 트리 구조 디렉터리
말 그대로 트리의 형태를 띄는 디렉터리 구조다.
하나의 루트 디렉터리와 여러 개의 서브 디렉터리로 구성되어있다.
각 디렉터리에는 파일과 서브 디렉터리가 존재한다. 우리가 흔히 사용하는 폴더 안에 폴더나 파일이 들어있는것을 생각하면 이해가 편하다.
트리 구조 디렉터리는 디렉터리의 생성과 제거가 비교적 용이하다.
디렉터리 탐색은 포인터를 이용하고, 경로명은 절대 경로명과 상대 경로명이 있다.
절대 경로명은 루트에서부터 가리킨 파일까지 모든 경로를 지정하는것이고, 상대 경로명은 현재 디렉터리의 위치를 기준으로 목적하는 파일까지의 경로를 지정하는것이다.
4. 비순환 그래프 디렉터리
트리 구조 디렉터리를 확장한것이다.
트리 구조 디렉터리에서는 디렉터리간 파일이나 서브 디렉터리의 공유를 금지한 반면, 비순환 그래프 디렉터리에서는 디렉터리간에 파일이나 서브 디렉터리의 공유가 가능하다. 이는 한 폴더에 다른 폴더에 있는 파일이나 폴더의 바로가기를 생성한것을 생각하면 이해가 편하다.
여기서 일어나는 공유는 복사의 개념이 아니다. 한 디렉터리에서 공유한 파일이나 폴더에 수정이 일어나면 다른 디렉터리에서도 해당 파일이나 디렉터리의 변화를 볼 수 있다.
디렉터리 구조가 복잡하고, 공유된 하나의 파일에 대해 두번 이상 탐색될 수 있기 떄문에 시스템 성능이 저하될 수 있다.
그리고 한 디렉터리에서 공유된 파일을 삭제할 경우, 고아 포인터가 발생하는데, 이는 바로가기를 눌렀을 때 해당 파일이 없다는 문구가 뜨는것을 생각하면 이해가 쉽다.
5. 일반 그래프 디렉터리
트리 구조에 링크를 더해 순환을 허용하는 그래프 구조이다.
디렉터리와 파일 공유에 대해 융통성이 있고, 탐색 알고리즘이 간단해 파일과 디렉터리에 대한 엑세스가 쉽다.
일반 그래프 디렉터리는 마지막 참조가 끝났음에도 메모리를 재할당 할 수 있는지 결정하는 쓰레기 수집(Garbage Collection)이 필요하다. 쓰레기 수집은 전 파일 시스템을 탐색해 엑세스할 수 있는 파일에 표시하고, 두번째 탐색에서는 표시하지 않은 메모리를 사용 가능 메모리 리스트에 추가하는 것이다.
RAID(Redundant Array of Independent Disks)란 운영체제로 여러대의 물리적 디스크를 하나의 논리적 디스크로 인식하는 기술이다.
RAID 방법은 6계층으로 분류되며, 주로 사용되는 방식은 RAID 0, RAID1, RAID10 등이 있다.
RAID 0 (Striping 스트라이핑)
RAID 0은 여러 개의 하드디스크를 병렬로 배치해 하나의 디스크처럼 사용한다. 일련의 데이터를 이 디스크들에 일정한 크기로 나누어 분산 저장하는 방법이다. 그러나 RAID 0은 모든 디스크에 각 파일의 내용을 분산시키기 떄문에 하나의 디스크에 문제가 생기면 전체 파일이 손실된다. RAID 0의 장점은 여러 파일에 대한 읽기 및 쓰기 작업 처리량이 디스크 수를 곱한것만큼 빨라지는것이다.
RAID 1 (Mirroring 미러링)
RAID 1은 RAID 0처럼 데이터 스트라이핑을 사용하면서 배열 내의 모든 디스크에 동일한 데이터가 있는 미러 디스크를 가진다. 중복 저장된 데이터가 적어도 2개가 있는 드라이브로 구성된다. 읽기 요구는 요구 데이터가 있는 디스크 2개 중 어떤 디스크에서든 서비스 받을 수 있기 떄문에 성능이 향상될 수 있다. RAID 1은 드라이브에 장애가 발생하거나 데이터 손실이 발생해도 나머지 디스크로 액세스 가능하기떄문에 안정성이 높다. 그러나 디스크공간이 두 배 필요하다.
RAID 10 (1+0)
RAID 1로 미러링후, RAID 0으로 스트라이핑 한다.
RAID 0과 RAID 1을 응용한 방식으로, 디스크가 불량이 나면 미러링으로 묶인 하드를 통하여 손실된 데이터만 복원이 가능하다. 이 방법은 규모가 큰 DB영역을 다룰때 사용된다.
가상 메모리는 사용자와 논리적 주소를 물리적으로 분리한 후 사용자가 메인 메모리 용량을 초과한 프로세스에 주소를 지정하여 메모리를 제한 없이 사용할 수 있도록 하는 개념이다. 각 프로세스에 균일한 주소 공간을 제공하여 메모리 관리가 단순하며, 메인 메모리를 더 효율적으로 사용할 수 있다.
간단히 말하면, 가격이 비싼 RAM의 용량부족을 대체하기 위해 보조기억장치의 일부를 메인메모리처럼 사용하는것이다.
하지만 최근 메인메모리의 값이 내려간 만큼, 메인메모리의 용량을 충당하기 쉬워져 예전보다 가상메모리의 필요성이 낮은 편이다.
페이징과는 달리 세그먼테이션은 물리적인 크기의 단위가 아닌 논리적 내용의 단위로 분할하기때문에 각 크기가 일반적으로 같지 않다.
세그먼테이션은 프로세스를 자르는 방법을 제외하고 메모리에 할당하는 방법에 있어서 페이징과 유사하다.
세그먼테이션은 프로세스에 따라 세그먼트 크기가 다르기 때문에 메모리를 크기가 일정한 페이지 프레임으로 나누지 않고 가변 분할 방법으로 할당한다. 이 때문에 외부 단편화가 일어난다.
외부 단편화를 해결하기 위해 세그먼테이션은 충분한 공간이 생길때까지 기다리거나 압축을 해 큰 공간을 만든다. 세그먼테이션은 동적 대치 알고리즘이기 떄문에 원할 때마다 메모리를 압축할 수 있다. 외부 단편화의 정도는 세그먼트의 크기에 따라 결정된다. 세그먼트의 크기가 클 수록 단편화가 심해지고, 작을 수록 완화된다.
페이징
세그먼테이션
프로그래머의 기술 인식
아니오
예
선형 주소 공간
1
많음
물리적 주소를 초과하는 총 주소 공간
예
예
프로시저와 데이터 분리, 보호 여부
아니오
예
수용할 수 있는 테이블 크기가 심하게 변화
아니오
예
사용자 공유가 용이
아니오
예
페이지화된 세그먼테이션
페이징은 내부 단편화가 발생할 수 있지만, 메모리를 효율적으로 사용할 수 있다.
반면에 세그먼테이션은 외부 단편화가 발생할 수 있지만, 가변적인 데이터 구조와 모듈 처리, 공유와 보호의 지원이 편리하다.
이러한 장단점을 취합한 방법이 페이지화된 세그먼테이션이다.
프로세스를 일단 세그먼트 단위로 분할한다. 이는 보호와 공유를 하는 측면에 이점을 가진다. 하지만 외부 단편화가 발생할 수 있기 때문에 분할한 세그먼트를 다시 고정된 간격인 페이지 단위로 자르는 페이징을 한다. 그래서 메모리에 적재하면 페이징의 일정 단위로 다시 분할되었기 때문에 외부 단편화가 발생하지 않는다. 하지만 이 경우에는 두 가지 테이블을 거쳐야 하므로 속도가 비교적 느리다.
프로세서는 논리적 주소의 세그먼트 번호와 STBR(세그먼트 테이블 기준 레지스터)을 이용해 세그먼트 테이블을 확인한다. 그리고 해당 세그먼트 페이지 테이블에서 페이지 번호를 찾아 이에 대응하는 페이지 프레임을 찾는다. 그런 다음 페이지 프레임을 오프셋과 결합하여 메모리 주소를 생성한다.
각 프로세스에는 세그먼트 테이블이 하나 있고, 세그먼트에는 자신의 페이지 테이블이 있다. 그러므로 특정 프로세스가 실행중일 때 레지스터 하나는 프로세스 세크먼트 테이블의 시작 주소를 갖는다. 특히 각 세그먼트의 마지막 페이지는 완전히 차지 않아서 내부 단편화를 가져올 수 있다.
페이지화된 세그멘테이션은 세그먼트와 페이지를 함께 사용해 복잡하지만, 세그먼트를 페이징하여 외부 단편화 문제를 제거하면서 할당 과정을 쉽게 해결한다는 장점이 있다.