[운영체제 완전정복 링크 모음]
안녕하세요 양햄찌 블로그 입니당.
오늘은 드디어 운영체제에서 중요한 한 섹션을 차지하고 있는 페이징(paging)에 대해 살펴보려고 해요.
오늘 진행하려는 포스팅을 이해하기 위해서는, External Fragmentation이 어떤 상황을 의미하는지, 발생 원인이 무엇인지에 대한 흐름을 꼭 머릿속에 집어넣고 있어야 합니다!
해당 부분에 대해 잘 기억나시지 않은 분은 아래 포스팅을 참조해주세용
https://jhnyang.tistory.com/264
[운영체제 OS] Fragmentation 메모리 단편화란 무엇인가? External fragmentation(외부 단편화)이란? 초 쉬운
안녕하세요 주인장 양햄찌입니당. 운영체제가 의외로 조회수는 작은데, 특정 계층에 인기(?)가 있나봐요! (뿌듯) 요청이 있어서 또 이렇게 열심히 들고왔습니다. 사실 이번편은 그림을 좀 다 그��
jhnyang.tistory.com
◆ 책에는 어려운 전공용어로 되어있지만,, 내 포스팅을 읽고나면 이해될 문장들!
- 페이징이란 논리주소의 고정된 페이지(Page)라고 불리는 블록들로 분할 관리하는 기법이다.
- 각각의 페이지는 물리 메모리의 프레임과 맵핑한다.
- 페이지를 가리키는 논리주소에서 프레임을 카리키는 물리주소로 변환한다.
무슨말일까?! 뒤의 설명글을 읽어본 뒤 앞으로 와서 다시 읽어보도록 합시다;
PAGING이 무엇이냐~~너는 어쩌다 나오게 되었느냐~!
저번 시간에 외부단편화에 대해서 살펴봤어요. contiguous allocation, 프로세스를 연속할당 하면 외부단편화가 발생되고 그로 인해 값비싼 메모리 자원이 3분의 1까지 손실될 수 있는 현상에 처해진다고 했었죠!!
자투리 공간이 남아서 못 쓰는 부분이 있으면 안되겠다~~라고 개발자들이 이제 생각한거죠.
자 그럼 어떻게 하면 될까? 모든 새로운 기법은 항상 물음표에서 시작하는 법.
자 위의 외부단편화 발생 상황을 보면, 우리 생각에 들어가려는 검은 PROCESS가 HOLE보다 커서 못들어가는게 문제 같아요. 이 HOLE크기도 제각각이고 들어가려는 놈의 크기도 제각각~(HOLE보다 작을 수도 있고 클 수도 있고 딱 맞을 수도 있고!) 서로 매칭하려는 부분이 다르다는게 문제같다! 이거죠.
그래서 생각한거죠.
logical address를 동일한 크기로 잘라요, physical address도 이것과 동일한 크기로 자르는거죠. 그래서 얘가 어디에 배치되고 얘가 어디에 배치되고 쭈욱 배치를 하게 되면 자투리 공간이 안발생하지 않을까?
이렇게하면 연속적으로 배치를 안해도 되잖아요. 자 사진 속 그림의 오른쪽에 위치한 물리주소(physical memory)를 보세요. Process B의 조각(노란색) 다음에 Process A의 조각(주황)이 배치된것 보이나요?? 이렇게 하면 하나의 프로세스를 굳이 연속적으로 배치할 필요가 없어요. A가 붙어 있을 필요가 없죠. 그러니까 자투리 공간이 발생하지 않는다. External fragment(외부단편화)가 절대 발생하지 않는다. 이 방법이 바로 paging 기법입니다.
그리고 이렇게 모든 블록들의 사이즈가 같자나요. 이런걸 고정 분할이라고 해요. ㅎㅎ
반면에 전 시간에 배웠던 연속할당방법은 (맨 첫번째 사진 참고) 프로세스별 메모리에 할당하는데 이 프로세스들이 크기가 다 제각각이죠? 이런 경우 가변 분할이라고 합니다.
[책 발췌]
Another possible solution to the external-fragmentation problem is to permit the logical address space of the processes to be noncontigous, thus allowing a process to be allocated physical memory wherever such memory is available - 358p
외부 단편화 문제를 해결하는 또 다른 해결법은, 프로세스의 논리주소 공간을 연속적이지 않게 배치하는 거예요. 이렇게 함으로써 프로세스는 메모리 여유가 가능할때마다 물리공간에 할당될 수 있게 되죠.
요약~ 페이징(PAGING)은 프로세스를 일정 크기인 페이지(page)로 잘라서 메모리에 적재하는 방식을 말합니다.
PAGING은 중요해
paging은 지금 여러분이 쓰고 있는 인텔프로세서에서 지금도 쓰이고 있는 방법이예요. 그러니까 당연히 알고 있어야하는거죠~ 물론 현재 쓰이는 방법은 이렇게 단순한게 아니라, 뒷 포스팅에서 추가적으로 얘기할 것(힌트를 주자면 segmentation) 하고 혼합한 hybrid형태로 구현이 되어 있지만 어찌됐던 이 방법이 지금 현재 인텔 프로세서에서 쓰이고 있는 방법이라는거, 당연히 알고 있어야 합니다. 점점 갈수록 복잡해지기 때문에 초반을 잘 잡아놓는게 매우 중요해요 ㅎㅎ
내부 단편화란 무엇일까 - 내부 단편화 VS 외부 단편화
자 동일한 크기로 잘라서 이걸 굳이 연속적으로 배치하지 않아도 되기 때문에 external fragmentation는 이제 없어졌다. 하지만 그래도 자투리 공간은 남지 않겠니? 자투리 공간이 언제 남을까?
프로세스가 이 page 크기에 맞게끔 딱 동작하지 않겠죠. process A가 딱 6등분이 안될수도 있어요.
그니까 딱 page5까지 나눠지지 않을 수도 있어. 만약 프로세스 A가 페이지 한 블록의 크기보다 작은 추가적인 크기를 가지고 있다면 남는 공간이 있었겠죠! 이렇게 공간이 남을 경우 이를 내부단편화(internal fragmentation)이라고 합니다.
fragmentation은 external fragmentation 하고 internal fragmentation이 있어요. (외부 단편화와 내부 단편화)
External Fragmentation은 크기가 다른 것을 할당하고 반납하고 할당하고 반납하고 하다보면 구멍 즉, hole이 남는다고 했는데 이걸 External Fragmentation라고 하는거고 ~~
지금 현재 그 External Fragmentation를 해결하기 위해서 메모리를 동일한 크기로 잘라서 그 동일한 크기로 할당을 하게 되면 하나의 프로세스를 연속적인 공간에다가 할당할 필요 없이 아무 공간에다가 넣을 수 있었죠. 이러면 external fragmentation은 없어지지만 이 프로세스 같은 경우에는 요만큼의 자투리가 남는데 이걸 internal fragmentation라고 부릅니다. 둘 차이 이해되셨죠?
External fragmentation이 클까요 internal fragmentation이 클까요? 당연히 internal fragmentation은 얼마 안되겠지죠.
그렇기 때문에 paging이라고 하는 방법은 internal fragmentation이니까 메모리를 거의 100프로에 가깝게 다 쓸 수 있는 방법입니다. 이것보다 더 좋은 메모리를 낭비하지 않는 그런 방법은 있을 수가 없다~
PAGE와 FRAME
위에 그림 보면 Logical memory에는 나눠진 블럭에 page라고 써져있고 physical memory에는 프레임 Frame이라고 쓰여있어요. 그냥 모두 다 똑같은 크기로 나눈건데 어떤게 대상이냐에 따라 구별하기 위해 명칭만 다릅니다. Logical address space를 동일한 크기로 나눈 것을 페이지(page)라고 부르고 physical memory를 나눈 것을 프레임(frame)이라고 해요.
■ Physical address space of a process can be noncontiguous
프로세스의 물리적 주소 공간은 연속적이지 않을 수 있다.
■ Divide physical memory into fixed-sized blocks called frames
물리적 메모리를 고정크기의 블럭들로 나눕니다. 이 블럭들을 프레임이라고 불러요.
■ Divide logical memory into blocks of same size called pages
논리적 메모리 또한 같은 크기 사이즈의 블럭들로 나누는데 이를 page라고 불러요.
■ Keep track of all free frames
남는 프레임이 있으면 페이지를 넣어야하니까 당연히 남는 공간 트랙킹하는 방법이 잇겠죠~
마무리 & page table 예고
그런데 사람들이 왜 contiguous allocation을 했었냐 생각해보면, 프로세스는 연속적으로 할당되어야 한다는 관념때메 그랬던거였어요. 프로세스를 조각조각 잘라놓으면 실행이 제대로 안될테니 하나의 프로세스는 쭈우우욱 차례대로 읽어 수행되는 linear address를 필요로 했던거죠!
이렇게 paging기법으로 비싼 메모리 낭비를 최대한 줄일 수 있었지만, 이렇게 조각내면 어떻게 따로 놀고 있는 프로세스들이 실행될 수 있을까요??
이를 가능케하려면 중구난방 있는 page와 frame들을 매핑시키고 linear하게 실행될 수 있도록 연결시켜주고 관리해줄 테이블이 필요합니다. 이것이 바로 page mapping table이예요.
오늘은 아주 간략히 paging에 대한 맛만 보았는데요. 다음 포스팅에서는 page mapping table내용과 페이징 기법시 address translating 하는 흐름에 대해 살펴보도록 할게요.
공감과 광고보답 또는 댓글등의 관심은 지식을 전파하는데 하나의 큰 동기가 됩니다.
어느 누군가에게는 도움이 되는 포스팅이였길 바라면서 이만 줄이도록 할게요 빠잉! :)
최신 댓글