**본 글의 일부분은 서적 'Operating Systems: Three Easy Pieces by Remzi H.Arpaci-Dusseau, Andrea C.Arpaci-Dusseau', 'Operation System Concepts Abraham Silberschatz 외 2' 내의 이미지와 내용을 포함하고 있습니다
Address Space
Memory virtualization
물리적인 메모리는 한개이지만, 마치 프로세스들이 각자 하나씩 들고 있는 것처럼 함
여러 개의 프로세스를 구동하기 위해서는 프로세스에 대한 데이터가 Physical Memory에 올라가 있어야 함
따라서 프로세스 하나하나에 physical memory를 추상화한 모습을 가진 address space를 부여하고,
address space가 가진 가상 주소를 물리 주소로 바꿔주는 mapping 작업을 함
메모리 가상화의 목표
투명성: 서로 공유되고 있다는 사실을 모르게 하여 자신만의 공간을 가진 것처럼 함 -> 프로그래밍이 좀 더 쉬워짐
효율성: 필요한 메모리 공간이 제각각이여서 생기는 fragmentation을 최소화해야 함
보안성: 다른 프로세스로부터 사용하는 메모리 공간이 영향을 받지 않도록 보호해야 함
Address Translation
메모리 가상화를 통해 얻은 가상 주소를 실제로 데이터가 저장되어있는 실제 주소로 바꾸는 주소 변환
만약 address space를 위의 그림처럼 통채로 physical space에 적재하면 free space만큼 메모리 공간이 낭비되게 됨
따라서 논리적인 세그먼트를 기준으로 address space를 나눠 저장하는 segmentation 기법과
페이지 사이즈를 기준으로 address space를 나눠 저장하는 paging(페이징) 기법이 생겨남
Fragmentation (단편화)
단편화는 메모리에 연속된 영역을 할당할 경우, 사용되지 않아 낭비되는 홀을 말함
단편화의 특징에 따라서 외부 단편화와 내부 단편화로 나눌 수 있음
외부 단편화(External Fragmentation)
사용할 수는 있지만, 메모리 공간에 작은 크기로 흩어져있어서 연속적이지 않아 낭비되는 공간
이 작은 홀들을 합치는 작업으로 해결할 수 있음
내부 단편화(Internal Fragmentation)
정해준 파티션의 사이즈가 실제로 필요한 사이즈보다 좀 더 커서 낭비되는 공간
메모리의 크기만큼 할당은 했지만 그 안에서 사용되지는 않아 노는 공간
Segmentation 기법
address space를 code, stack, heap의 논리적 단위로 segment를 나눠서 저장
시작 주소와 사이즈 값을 기록해두고, 만약 시작 주소+사이즈 값을 넘어가는 곳을 참조하려고 하면 segmentation fault
만약 프로세스A,B,C의 코드 값이 동일하다면 하나의 code segment를 공유하는 것도 가능
장점
내부 단편화가 생기지 않음
빠르고 쉬우며, 하드웨어 친화적임
segment들을 공유하는 데에 용이 (ex. 프로세스끼리 공유하고 있는 라이브러리 ...)
단점
외부 단편화가 생김
메모리를 할당하면 잘 사용하지 않아도 계속 공간을 차지하고 있음
Paging 기법
정해진 사이즈의 page로 address space를 나눠 저장하는 방법
address space 뿐만 아니라 physical space 또한 page 단위로 나누어야 하는데, 이를 page frame이라고 부름
몇 번째 페이지가 몇 번째 page frame에 저장되어있는지 page table에 기록해야 함 -> 이걸로 가상 주소를 물리 주소로 변환
이 때, 항상 physical memory의 프레임에 항상 모든 페이지가 있는 것은 아님
장점
외부 단편화 해결
할당과 해제가 쉬움 (빈 공간을 합칠 필요도 없음)
필요하지 않으면 디스크로 페이지를 쫓아내는 것(page out)이 가능함
페이지를 공유하고 다른 프로세스의 간섭으로부터 보호하기 쉬움
단점
내부 단편화 발생
physical memory에서 바로 주소를 찾을 수 없기 때문에 page table 접근이 필수적임. 이로 인해 메모리 참조 오버헤드 발생
-> TLB라는 하드웨어의 도움을 통해 극복
page table을 저장할 공간이 필요하기 때문에 공간적 오버헤드가 생김
-> 유효한 페이지만 page table에 저장하도록 하여 극복
'한권떼기 > 운영체제(Operating System Concepts)' 카테고리의 다른 글
[한권떼기] 운영체제 08번째. Thread와 Lock, Semaphore (0) | 2022.03.29 |
---|---|
[한권떼기] 운영체제 08번째. 메모리 스와핑과 페이지 교체 알고리즘 (0) | 2022.03.29 |
[한권떼기] 운영체제 05번째. 멀티프로세서 스케쥴링 (0) | 2022.03.29 |
[한권떼기] 운영체제 04번째. CPU 스케쥴링 (0) | 2022.03.28 |
[한권떼기] 운영체제 02번째. 프로세스와 프로세스 API (0) | 2022.03.28 |