Uknow's Lab.
article thumbnail

 

 

 

혼자 공부하는 컴퓨터 구조 + 운영체제 6주차

혼자 공부하는 컴퓨터 구조, 드디어 마지막 주차네요.

 

 

 

가상메모리 : 연속 메모리 할당

스와핑

메모리에 적재된 프로세스 중에서는 현재 실행되지 않는 프로세스도 있죠.

스와핑(swaping)은 현재 실행되지 않는 프로세스를

임시로 보조 기억장치로 쫒아내고, 새로 생긴 빈 공간에 다른 프로세스를 적재해 실행하는 방식입니다.

 

프로세스들이 쫒겨나는 보조기억장치의 영역을 스왑 영역(swap space)라고 하며,

현재 실행되지 않는 프로세스가 스왑 영역으로 쫒겨나는 걸 스왑 아웃(swap-out),

스왑 영역에 있던 프로세스가 다시 메모리로 복귀하는 것을 스왑 인(swap-in)이라 합니다.

 

스와핑을 사용한다면, 프로세스들이 요구하는 메모리 주소 공간의 크기가

실제 메모리 크기보다 클 경우에도 프로세스들을 동시에 실행시킬 수 있습니다! ㄴ ㅇㅁㅇ ㄱ!

 

 

 

 

메모리 할당

메모리 내 빈 공간에 프로세스를 적재하는 데에는 여러 방식이 있습니다.

 

 

최초 적합(first fit)

최초 적합은 운영체제가 메모리 내 빈 공간을 탐색하다가

적재할 수 있는 공간을 발견했을 때, 바로 프로세스를 배치하는 방법입니다.

 

최초로 발견한 곳에 적재하므로 검색을 최소화할 수 있고 할당 자체가 빠르죠.

 

최적 적합(best fit)

최적 적합은 운영체제가 빈 공간을 모두 탐색해본 후,

적재할 수 있는 공간 중 가장 작은 공간에 적재하는 방식입니다.

20mb의 프로세스를 적재하는데

30mb 공간 A, 60mb 공간 b, 20mb 공간 c를 찾았을 때,

딱 들어맞는 20mb의 공간 c를 선택하는 방식입니다.

 

 

 

최악 적합(worst fit)

최악 적합은 최적 적합의 반대로,

빈 공간을 모두 탐색한 후 적재할 수 있는 공간 중 가장 큰 공간에 적재하는 방법입니다.

 

 

 

외부 단편화

연속 메모리 할당은 외부 단편화(external fragmentation) 문제를 발생시킬 수 있습니다.

 

 

사용자 영역의 크기가 200mb이고,

50mb 프로세스 A, 30mb 프로세스 B, 100mb 프로세스, 200mb 프로세스 D를 적재해야 할 때,

위와 같이 배치할 수 있을 것 같습니다.

 

그리고 여기서 B와 D의 실행이 끝났다고 해보죠.

 

당연하게도, 더 이상 메모리에 남길 필요가 없으므로,

메모리에 빈 공간이 생깁니다.

남은 메모리는 50mb가 되었습니다.

 

그럼, 남은 공간이 50mb라고 해서 50mb짜리 프로세스를 적재시킬 수 있을까요?

결론부터 말하자면, 어느 빈 공간에도 50mb가 들어갈 수 없어 불가능합니다.

 

이와 같이 프로세스들이 메모리에 연속적으로 할당되고, 실행 - 종료를 반복하면

메모리 사이 빈 공간이 생겨 프로세스를 적재하기 애매한 상황을 초래하고,

이는 메모리 낭비로 이어집니다. 이를 외부 단편화(external fragmentation)이라 합니다.

 

실제 상황에서는 위 예제보다 더 많은 프로세스가 실행되고 용량 또한 크고 작기에

외부 단편화는 심각한 메모리 낭비로 이어질 수도 있습니다.

 

이를 해결하기 위해서는 그냥 단순히 빈 공간만큼 앞으로 땡기면 안되나? 라는 생각을 가질 수 있습니다.

즉, 압축(compation) 하는 것이죠.

 

 

매우 간단하고 직관적입니다.

하지만 압축하는 동안 시스템은 하던 일을 잠시 멈춰야 합니다.

메모리에 있는 내용을 옮기는 동안 오버헤드를 일으킬 수도 있고요.

 

이에 또 다른 해결방안이 많이 제안되었고, 이 중 하나가 페이징(paging) 기법입니다.

 

 

 

페이징을 통한 가상 메모리 관리

페이징이란

 

외부 단편화가 생긴 이유는 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문입니다.

 

그럼, 메모리와 프로세스를 일정 단위로 자르고,

이를 메모리에 불연속적으로 할당한다면?

메모리 단편화는 발생하지 않습니다.

 

이를 페이징(Paiging)이라 하는데, 프로세스의 논리 주소 공간을 페이지(page)라는 일정 단위로 자르고

메모리의 물리 주소 공간을 프레임(frame)이라는 일정 단위(페이지와 동일 단위)로 자른 뒤,

페이지를 프레임에 할당합니다. 일종의 가상 메모리 관리 기법이죠.

 

 

때문에 프로세스가 통으로 스왑 아웃/인 되는 것이 아니느, 페이지 단위로 스왑 아웃/인 됩니다.

페이징 시스템에서 스왑 아웃, 스왑 인은 페이지 아웃, 페이지 인으로 부르기도 하죠.

 

그럼, 한 프로세스를 실행하기 위해

실행에 필요한 일부 페이지만을 메모리에 적재하고 남은 페이지는 보조기억장치에 납둔다면?

물리 메모리보다 더 큰 프로세스를 실행할 수도 있게 됩니다!

 

 

 

페이지 테이블

프로세스가 메모리에 불연속적으로 배치되어있다면,

연속적 배치에 비해 프로세스가 어디 어디에 적재되어 있는지 CPU는 찾기 힘들어집니다.

때문에 CPU 입장에서 논리 주소에는 연속적으로 배치되도록 페이지 테이블(page table)를 사용합니다.

현재 어떤 페이지가 어떤 프레임에 할당되었는지를 알려주죠.

 

실제로는 프로세스들이 메모리에 분산 저장되어 있다 하더라도,

CPU 입장에서는 논리 주소를 순차적으로 실행합니다.

 

 

 

외부 단편화가 있으면, 내부 단편화도 있나?

페이징 기법은 외부 단편화를 해결하는 대신, 내부 단편화(internal fragmentation)을 발생시킬 수도 있습니다.
프로세스 크기가 108kb인데, 페이징 단위가 10kb일때, 마지막 페이지는 2kb만큼 남습니다.

 

 

 

 

프로세스마다 각각의 테이블을 가지며, 각 테이블들은 메모리에 적재되어 있습니다.

그리고 CPU내 페이지 테이블 베이스 레지스터(PTBR: Page Table Base Register)는

각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있습니다.

 

CPU는 곁에 TLB(Translation Lookaside Buffer)라는 페이지 테이블 캐시 메모리를 두어,

테이블의 캐시로써 페이지 테이블의 일부 내용을 저장합니다. (참조 지역성, 주로 최근에 사용된 페이지 위주)

 

캐시 히트와 비슷하게, 발생한 논리 주소에 대해 TLB에 있다면 TLB 히트,

TLB에 없어 메모리 내 페이지 테이블에 접근한다면 TLB 미스라고 합니다.

 

 

 

페이징에서 주소 변환

페이지, 프레임은 여러 주소를 포괄하므로

어떤 페이지/테이블에 접근하고 싶은지,

접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져있는지에 관한 정보가 필요합니다.

 

그렇기에 페이징 시스템에서는 논리 주소가 페이지 번호(page number)와 변위(offset)으로 이뤄져 있죠.

 

 

CPU가 5번 페이지, 변위 2인 논리 주소(<5,2>)에 접근하고 싶다면,

5번 페이지는 1번 프레임에 있으므로 1번 프레임 변위 2에 접근하게 됩니다.

1번 프레임은 8번지부터 시작하므로 CPU는 10번지에 접근합니다.

 

 

 

페이지 테이블 엔트리

페이지 테이블에는 페이지 번호, 프레임 번호 뿐 아니라 다른 중요한 정보들도 있습니다.

 

 

유효 비트(valid bit)

유효 비트는 해당 페이지에 접근 가능한지 여부를 알려줍니다.

프로세스를 이루는 모든 페이지가 메모리에 있는 것은 아니며,

일부 페이지는 모저기억장치에 스왑되어있는 경우고 있기에,

현재 페이지가 메모리에 적재되었는가? 혹은 보조기억장치에 있는가(스왑되었는가)를 알려줍니다.

 

메모리에 적재됬다면 1, 그렇지 않다면 0이 됩니다.

만약 메모리에 적재되어 있지 않은 페이지에 접근하려 하면 페이지 폴트(page fault) 예외가 발생합니다.

 

 

보호 비트(protection bit)

보호 비트는 해당 페이지가 읽기/쓰기 모두 가능한지, 읽기 전용인지를 나타냅니다.

읽기 전용이면 0, 읽기/쓰기 모두 가능이면 1로 나타냅니다.

 

또한 보호 비트는 세 개의 비트로 조금 더 복잡하게 나타낼 수도 있는데요.

r(read), w(write), x(xexcute) 세 가지 조합으로

100 -> r 1, w 0, x 0 으로 읽기 전용

110 -> r 1, w 1, x 0 읽기, 쓰기 가능 실행 불가

111 -> r 1,  w 1, x 1 읽기 쓰기 실행 가능으로 나타낼 수 있습니다.

 

 

참조 비트(reference bit)

참조 비트는 CPU가 이 페이지에 접근한적이 있는지를 나타내며,

적재 이후 CPU가 읽거나 쓴 이력이 있다면 1, 없다면 0으로 나타냅니다.

 

수정 비트(modified bit)

수정 비트는 데이터를 쓴 적이 있는지의 여부로,

수정 이력이 있다면 1, 없다면 0으로 나타냅니다.

 

페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지 / 할 필요 없는지를 나타내기 위해 존재합니다.

 

 

 

페이징 교체와 프레임 할당

요구 페이징

요구 페이징(demand paging)은 프로세스를 메모리에 적재할 때 필요한 페이지만을 메모리에 적재하는 기법입니다.

 

요구 페이징의 양샹은 아래와 같습니다.

1. CPU가 특정 페이지에 접근하는 명령어 실행

2. 해당 페이지가 현재 메모리에 있다면(유효 비트 == 1) CPU는 페이지가 적재된 페이지에 접근

3. 해당 페이지가 메모리에 없다면(유효 비트 == 0) 페이지 폴트 발생

4. 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트 1로 설정

5. 1로 돌아가 다시 수행

 

요구 페이징 기법으로 페이지들을 적재하다 보면

언젠가 메모리가 가득 차겠죠?

 

때문에 실행에 필요한 페이지를 확보하려면? 메모리에 적재된 페이지들을 보조기억장치로 내쫒아야 해요!

이에 사용되는 많은 페이지중 어떤 페이지를 내쫒을것인지에 관한 방법을 페이지 교체 알고리즘이라 합니다.

 

 

 

페이지 교체 알고리즘

페이지 교체 알고리즘은 일반적으로는 페이지 폴트를 가장 적게 일으키는 것을 좋은 알고리즘이라 합니다.

페이지 폴트가 일어나면 보조기억장치로부터 페이지를 가져와야 하니까요. 메모리보다 속도가 느리겠죠?

 

위 순서대로 CPU가 페이지를 참조했다고 해봅시다.

여기서 연속된 페이지를 생략해봅시다.

 

위와 같은 수열을 얻을 수 있는데, 이를 페이지 참조열(page reference string)이라 합니다.

이제 이 페이지 참조열을 바탕으로 알고리즘들을 알아봅싲다.

 

 

FIFO 페이지 교체 알고리즘

각종 교체 알고리즘에서 항상 첫 빠다로 나오는 FIFO 알고리즘입니다.

스케쥴링 편에서도 나왔듯이, 오래 머무른 얘 부터 내쫒는 방식으로,

 

위와 같은 페이지 참조열을 FIFO 페이지 교체 알고리즘으로 진행한다 했을 때

4번의 페이지 폴트가 발생하게 됩니다.

(초기 적재될 때 발생되는 페이지 폴트는 고려하지 않았습니다)

 

 

당연하게도, 쉽고 간편하지만

프로그램 실행 내내 사용될 내용을 포함하는 페이지를 교체할 수도 있기 때문에

마냥 좋다고 볼 수는 없습니다.

 

 

최적 페이지 교체 알고리즘

최적 페이지 교체 알고리즘은 CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘으로,

앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘입니다.

 

위와 같은 페이지 참조열이 있다고 했을 때,

아래와 같이 두 번의 페이지 폴트가 발생합니다.

 

 

최적 페이지 교체 알고리즘은 최고의 알고리즘인 것 처럼 보이지만,

'앞으로 사용되지 않을 페이지'를 예측하기란 쉽지 않습니다.

프로세스가 앞으로 참조할 메모리 부분을 알아야 하는데, 이는 불가능에 가깝기 때문이죠.

따라서 해당 알고리즘을 직접 사용하기 보다는 다른 알고리즘과의 이론상 성능을 평가하기 위해 쓰입니다.

 

 

LRU 페이지 교체 알고리즘

최적 페이지 교체 알고리즘이 앞으로 오랫동안 사용되지 않을 페이지를 교체했다면,

LRU 알고리즘은 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘입니다.

최적 페이지 교체 알고리즘에 비하면 비교적 구현이 수월한 편이죠.

 

LRU 페이지 교체 알고리즘은 최근에 실행이 되지 않았다면,

앞으로 실행되지 않을 것일 가능성이 높다는 아이디어에서 출발합니다.

 

 

이번에는 페이지 폴트가 3번이 발생되었네요.

 

 

 

스래싱과 프레임 할당

프레임 수가 적다면 페이지 폴트가 자주 발생될 수 밖에 없습니다.

반대로 프레임 수가 많다면? 일반적으로 페이지 폴트 수가 감소할 수 있죠.

 

프레임이 무한히 많은 컴퓨터와 프레임이 한 개 있는 컴퓨터. 두 개를 비교했을 때

전자는 페이지가 메모리에 적재도리 수 있는 공간이 넉넉해 페이지 폴트가 적지만,

후자는 새로운 페이지를 참조할 때 마다 페이지 폴트가 발생하죠.

 

프레임이 부족할 수록 페이지 폴트가 자주 일어납니다.

프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 쏟으며 성능이 악화되는 문제를

스래싱(thrashing)이라 합니다.

 

 

스래싱을 그래프로 나타내면 위와 같습니다.

메모리에서 동시 실행되는 프로세스의 수를 멀티프로그래밍의 정도(degree of multiprogramming)이라 하며,

높을 수록 많은 프로세스가 동시에 실행됨을 의미합니다.

 

위 그래프를 봤을 때, 멀티프로그래밍의 정도가 높다고 CPU 이용률이 높은 것은 아님을 알 수 있습니다.

초반에는 멀티프로그래밍 정도가 높아질수록 CPU 이용률도 증가하지만,

어느 기점을 기준으로 멀티프로그래밍의 정도가 증가해도 CPU 이용률이 낮아짐을 알 수 있습니다.

프레임 수가 적어지기 때문에 페이지 폴트가 빈번하게 발생하고, CPU 이용률도 따라 내려가는 것이죠.

 

그럼, 어떻게 프로세스들이 무리 없이 실행되기 위해

최소한의 프레임 개수를 파악하고, 적절한 수 만큼 프레임을 할당해줄 수 있을까요?

 

모든 프로세스에 균등하게 프레임을 할당하는 균등 할당(equal allocation)이 있습니다.

300개 프레임을 할당할 수 있고, 3개 프로세스가 있다면 각각 100개 프레임씩 할당해주는 방식이죠.

 

물론, 프로세스 크기는 각각 다르기에 그리 권장되진 않습니다.

따라서, 프로세스의 크기가 크면 프레임을 많이 할당하고,

적으면 적게 할당하는 비례 할당(proportional allocation)도 있습니다.

하지만 이 역시 막상 실행해보니 프로세스의 필요 프레임 개수가 많지 않은 경우도 있기에 완벽하진 않습니다.

 

또 다른 결정 방식에는 작업 집합 모델을 사용하는 방식과 페이지 폴트 빈도를 사용하는 방식이 있습니다.

 

 

 

작업 집합 방식

스래싱이 발생하는 이유는 빈번한 페이지 교체입니다.

작업 집합 모델은 '프로세스가 일정 기간 동안 참조한 페이지 집합'을 기억해 빈번한 페이지 교체를 방지합니다.

 

참조 지역성 원리는 CPU가 메모리를 참조할 때,

주로 비슷한 구역을 집중적으로 참조하는 원리입니다.

그렇다면, CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼 프레임을 할당한다면

페이지 교체는 그리 빈번하게 발생하진 않을겁니다.

 

프로세스가 일정 시간 동안 참조한 페이지 집합을 작업 집합(working set)이라 하며,

작업 집합 장식은 이 크기 만큼만 프레임을 할당해줍니다.

 

 

페이지 폴트 빈도 기반 방식

1. 페이지 폴트가 너무 넢으면 그 르포레스는 너무 적은 프레임을 가지고 있다.

2. 페이지 폴트가 너무 낮으면 그 프로세스가 너무 많은 프레임을 가지고 있다.

어찌 보면 당연한 이야기죠.

페이지 폴트 빈도 기반 방식은 위 두 가지 가정에서 생겨난 아이디어입니다.

 

 

가로축은 할당된 프레임 수, 새로축은 페이지 폴트율입니다. 반비례 관계죠?

임의로 상한선과 하한선을 그리고,

 

페이지 폴트율이 상한선보다 높아지면 너무 많은 프레임을 갖고 있는 것으로,

하한선보다 낮다면 너무 적은 프레임을 가지고 있는 걸로 볼 수 있습니다.

이에 따라 프레임을 더 할당하거나 회수하며 해당 범위 안에서 프레임을 할당하는 방식이죠.

 

 

 

파일 시스템 : 파일과 디렉터리

파일

파일(File). 컴퓨터를 사용해본 사람들은 너무나도 많이 들었을 단어입니다.

보저기억장치에 저장된 정보의 집합이죠. 정보를 모은 논리적 단위로도 볼 수 있습니다.

 

모든 파일에는 이름이 있고, 부가 정보가 있습니다. 이를 속성 혹은 메타데이터라 합니다.

 

여기서 파일 유형은 운영체제가 인식하는 파일 종류로,

파일 이름이 텍스트, 음악, 실행 등 유형이 다르면 실행 양상도 달리합니다.

 

 

파일 유형을 알리는데 가장 흔한 방식은 확장자로, 우리에게도 꽤나 익숙한 확장자들이 여럿 보이죠?

 

 

디렉터리

파일을 효율적으로 관리하기 위해 디렉터리(directory)를 사용할 수 있습니다.

윈도우에서는 흔히 폴더(folder)라고 불리는 자료구조죠.

 

과거에는 하나의 디렉터리만 존재했으며, 이를 1단계 디렉터리라 했습니다.

하지만 현재는 1단계로만 사용하는 경우는 그리 없으며, 여러 계층을 가진 트리 구조 디렉터리가 사용됩니다.

 

 

 

최상위 디렉터리에서 여러개의 서브 디렉토리로 갈라지는 구조입니다.

트리에 관해서는 아래 포스팅을 참고해주세요.

https://uknowblog.tistory.com/357

 

[자료구조] 그래프(Graph)와 트리(Tree) - 점과 선의 예술

그래프(Graph) 그래프란 무엇일까요? 점과 선이요. 가장 간단하면서 가장 잘 나타낸 말인 것 같습니다. 이산 수학과 컴퓨터 공학에서 말하는 그래프는 각각의 정점(Node, Vertex)이 간선(Edge)으로 이어

uknowblog.tistory.com

 

 

계층이 여러개다 보니 자연스래 경로(path) 개념도 생겼습니다.

파일의 위치와 파일의 이름을 찾기 위한 정보죠.

 

 

절대 경로와 상대 경로

경로를 표현하는데에는 절대 경로와 상대 경로가 있습니다.

 

일반적으로 많이 쓰이는 방식은 루트 디렉토리(최상위 폴더)를 기준으로

위치를 표시한 절대 경로(absolute path) 인데요.

 

C 드라이브 안에 Program File 폴더가 있고,

Program File 폴더 안에 Java 폴더가 있고,

Java 폴더 안에 jdk 폴더를 나타내고자 하면

C:\Program Files\Java\jdk-17.0.4.1 등과 같이 표현할 수 있습니다.

( 운영체제에 따라 디렉터리 구분자로 \ 대신 /로 표현할 수도 있습니다.)

 

디렉터리 엔트리

파일과 디렉터리는 엄연히 다른 개념이라고 생각할 수 있으나,

많은 운영체제에서 디렉터리는 그저 특별한 형태의 파일로 간주하곤 합니다.

즉, 디렉터리도 파일로 볼 수 있습니다.

 

디렉터리는 내부에 해당 디렉터리가 담겨있는 대상과 관련된 정보를 담고 있으며,

보통 테이블(표)로 구성됩니다. 부모 디렉토리의 정보 또한 담고있어,

 

현재 디렉토리를 기준으로 상대적인 경로로써 다른 디렉토리/파일의 위치를 표시할 수도 있습니다.

 

 

 

파일 시스템

파티셔닝과 포매팅

공장에서 막 생산한 SSD 혹은 HDD를 사용하려면

보조기억장치의 파티션을 나누는 작업과 포맷 작업을 거쳐야 합니다.

 

파티셔닝(paritioning)이란 저장 장치의 논리적인 영역을 구획하는 작업입니다.

서랍 안에 칸막이를 설치하여 영역을 나눈 것으로 볼 수 있습니다.

칸막지를 설치해 나뉜 각 공간을 파티션(partition)이라 합니다.

 

포매팅(formatting)은 포맷을 하는 작업으로써,

파일 시스템을 설정하여 파일을 어떤 방식으로 저장하고 관리할 것인지 결정하고,

새로운 데이터를 쓸 준비를 하는 작업을 의미합니다.

 

 

 

파일 할당 방법

운영체제는 파일과 디렉터리를 블록(block) 단위로 읽고 씁니다.

하나의 파일이 보조기억장치에 저장될 때 한 개 이상의 블록에 걸쳐 저장됩니다.

 

파일을 보조기억장치에 할당하는 방법에는 연속 할당과 불연속 할당이 있는데,

불연속 할당은 또 다시 연결 할당과 색인 할당으로 나눠집니다.

 

 

연속 할당(contiguous allocation)

가장 단순한 방식으로써, 연속적으로 파일을 할당하는 방법입니다.

외부 단편화를 일으킬 수 있다는 치명적인 단점이 있습니다.

 

연결 할당(linked allocation)

연결 할당은 연속 할당의 문제를 해결할 수 있는 방식으로,

각 블록의 일부에 다음 블록의 주소를 저장해 각 블록이 다음 블록을 가르키는 형태로 할당합니다.

즉, 파일을 연결 리스트로 관리하는 방식이며,

불연속 할당의 일종이므로, 여러 블록에 흩어져있어도 무방합니다.

 

외부 단편화를 해결 가능하나,

첫 번째 블럭부터 접근하므로 접근 속도가 느립니다.

또한, 블록 안에 파일 데이터와 다음 블록 주소가 포함되므로

하드웨어 고장이 났을 때, 블록에 문제가 발생한다면 그 이후의 블록 모두 접근이 불가능합니다.

 

 

색인 할당(indexed allocation)

색인 할당은 파일의 모든 블록 주소를 색인 블록에 모아 관리하는 방식입니다.

 

 

예를 들어 파일 a의 색인 블록은 4번, 파일 a의 데이터는 7번, ,13, 11번 블록에 저장되어있다고 했을 때,

4번 블록에는 파일 a의 구성 블록 주소인 7, 13, 11이 있습니다.

파일 a에 접근하고 싶다면 색인 블록에 저장된 주소에 접근하면 됩니다.

 

 

 

파일 시스템 살펴보기

파일 시스템에는 다양한 종류가 있지만,

대표적으로 USB, SD 카드 등의 저용량 저장 장치에서 사용하는 FAT 파일 시스템,

유닉스 계열 운영체제에서 사용하는 유닉스 파일 시스템이 있습니다

 

 

FAT 파일 시스템

각 블록에 포함된 다음 블록의 주소를 모아 테이블로 관리하면 효울적으로 관리할 수 있습니다.

이 테이블을 파일 할당 테이블(FAT: File Allocation Table)이라 합니다.

 

 

파일의 첫 번째 블록 주소(4번 블록)만 알면

파일의 데이터가 담긴 모든 블록에 접근할 수 있습니다.

따라서 디렉터리 엔트리에는 파일 이름과 파일의 첫 번째 블록 주소가 명시됩니다.

 

 

유닉스 파일 시스템

유닉스 파일 시스템은 색인 블럭을 사용하는데, 이를 i-node(index-node)라 부릅니다.

 

 

i-node에 파일 속성 정보와 열다섯 개의 블록 주소가 저장될 수 있습니다.

파일마다 이러한 i-node가 존재하며 i-node마다 번호가 부여되어 있습니다.

 

i-node의 크기는 유한하기에, 열다섯 개의 블록을 차지하는 파일까지만 가르킬 수 있습니다.

 

이를 해결하기 위해 다음과 같은 방법이 있습니다.

 

첫째, 블록 주소 중 열두 개에는 직접 블록 주소를 저장한다

i-node가 가르킬 수 있는 열다섯 개의 블록 주소 중

처음 12개에는 파일 데이터가 저장된 블록 주소가 직접 명시됩니다.

이를 직접블록(direct block)이라 합니다.

 

 

 

둘째, '첫째' 내용으로 충분하지 않다면 열세 번째 주소에 단일 간접 블록 주소를 저장한다

13번째 블록 주소는 단일 간접 블록의 주소를 저장합니다.

단일 간접 블록(single indirect block)이란, 파일의 데이터가 저장된 블록이 아닌

파일 데이터를 저장한 블록 주소가 저장된 블록입니다.

 

 

셋째, '둘째' 내용으로 충분하지 않다면 열네 번째 주소에 이중 간접 블록 주소를 저장한다.

13개의 블록 주소로 파일의 모든 블록을 가르킬 수 없다면,

14번째 블록에 이중 간접 블록 주소를 저장합니다.

이중 간접 블록(double indirect block)이란, 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록입니다.

즉, 단일 간접 블록들의 주소를 저장하는 블록이죠.

 

 

넷째, '셋째'  내용으로 충분하지 않다면 열다섯 번째 주소에 삼중 간접 블록 주소를 저장한다.

14개 블록 주소로 파일 블록을 가르킬 수 없다면 15번째 블록 주소에 삼중 간접 블록 주소를 저장합니다.

삼중 간접 블록(triple indirect block)이란 이중 간접 블록 주소가 저장된 블록으로,

웬만한 크기의 파일은 모두 표현할 수 있습니다.

 

 

 

 

 

이외에도 윈도우에서 사용하는 NT 파일 시스템, 리눅스에서 사용하는 ext 파일 시스템 등

여러 파일 시스템이 존재합니다.

 

 

 

숙제

p. 400의 확인 문제 1번 풀고 인증하기

(1) 최초 적합 (2) 최악 적합 (3) 최적 적합

 

Ch.14(14-3) 프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지 풀어보기

3번 발생

2 3 1 3 5 2 3 4 2 3
2 3 1 3 5 2 3 4 2 3
  2 3 1 3 5 2 3 4 2
    2 2 1 3 5 2 3 4
        페이지 폴트 페이지 폴트   페이지 폴트    

 

 

 

 

마치며

길다면 길고, 짧다면 짧은 6주간의 컴퓨터구조 + 운영체제 스터디가 끝났습니다.

혼자였으면 어려웠을 것 같은데, 다른 러닝메이트와 함께 한다는 느낌이 들어 으쌰으쌰 달려왔던 것 같네요.

 

최근 기술 면접을 응시해보며 컴퓨터 구조와 운영체제 지식을 다시 복습해봐야겠다는 마음으로

혼공학습단에 참여하였는데, 생각보다 얻어가는게 꽤나 많은 것 같습니다.

 

너무 자세히 쓰면 혼공학습단 회고때 쓸게 없을지도 모르니 6주차 후기는 여기까지 😘

 

https://hongong.hanbit.co.kr/%ED%98%BC%EA%B3%B5-%EA%B2%8C%EC%8B%9C%ED%8C%90/?uid=142&mod=document&pageid=1

 

[혼공학습단 11기] 스터디 활동과 도서별 커리큘럼 안내

  안녕하세요, 한빛미디어 혼공학습단의 🧙‍♀️혼공족장🧙‍♀️입니다. 혼공학습단 활동과 도서별 커리큘럼 안내 드립니다.   11기 활동 기간 1주차: 1월 2일 ~ 1월 7일 2주차: 1월 8일 ~ 1월 14

hongong.hanbit.co.kr

 

 

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.