우선 컴퓨터네에서 데이터를 저장하는 계층 구조를 살펴보자
주 기억장치(메모리)는 RAM을 말한다.
보조 기억장치는 하드디스크와, SSD가 있다.
주기억장치의 용량보다 큰 프로그램을 실행하기 위해
주기억장치의 이용률과 다중 프로그래밍의 효율을 높이기 위해
단편화 해결 위해 아래와 같은 방법들이 있다.
가상 기억 장치(Virtual Memory)
• 보조 기억 장치의 일부를 주기억장치 처럼 사용
• 프로그램 크기의 제약을 극복(단, 실행 속도↓)
가상 디스크(Virtual Disk)
• 주기억장치의 일부를 보조기억장치처럼 사용
• 램드라이브(RAM Drive)
인터리빙(Interleaving)
• 기억 장치의 연속된 위치를 서로 다른 뱅크로 구성
• 동시에 여러 개의 위치에 접근이 가능(속도↑)
DMA(Direct Memory Access)
• CPU를 거치지 않고 주변장치가 직접 주기억 장치에 접근
• 입출력 속도가 향상 •
사이클 스틸링(Cycle Stealing, 사이클 훔치기) 기법이 사용됨
메모리 주소 관리 방법을 알기전 기초 개념
메모리 공간
- 운영체제내 각 프로세스는 분리된 메모리 공간을 가짐
- 프로세스 정보는 PCB(Process Control Block)로 관리 • 프로세스에 대한 주소정보는 base 주소와 limit값으로 영역이 정 의됨
- 다른 프로세스 공간의 접근(침입)을 차단 => 보안성 제공
메모리 주소 관리 방법 : 즉 메모리에서 프로세스 들 ("메모리에 적재되어 프로세서에 의해 실행중인 프로그램" )을 관리 하기 위해 사용 하는 방법을 알아보자
기억장치를 관리하고 사용하는 방식을 보면 아래와 같이 크게 두가지로 나뉜다
실기억 장치 (주기억 장치) RAM만을 활용하여 데이터를 저장 하는 방법과
위에서 설명한 가상 기억 장치를 활용하여 데이터를 저장 하는 방법이다.
우선 실기억 장치에 대햐여 알아보자
실 기억장치 RAM만 활용
실기억장치도 데이터를 분할 하는 방법에 따라 2가지 로 나뉘어 진다.
고정 분할(정적 분할)
• 고정된 크기를 갖는 블록으로 주기억 장치의 공간을 분할
• 블록의 남는 공간 발생 => 내부 단편화
가변 분할
• 프로그램에 따라 크기를 동적으로 분할
• = 가변 분할 기억 장치 배당 방식
• 적재&소멸 과정에서 단편화 발생 => 외부 단편화
• 차폐(Fence) 레지스터의 값을 매번 변경해야 함 => 고정 대비 복잡
다시 세부적으로 살펴보자
고정 분할(정적 분할)
= Fixed Partitions
- 프로세스를 위한 고정된 크기의 파티션으로 메모리 공간을 할당
- 장점: 메모리 관리 단순
- 단점
• 메모리 낭비 발생
• 내부 단편화(Internal Fragmentation) 발생
• 파티션보다 큰 프로세스에 대해서는 할당 불가
가변 분할
- 프로세스의 생성과 소멸의 잦은 발생 시 빈 공간이 발생 => HOLE
- 외부단편화(External Fragmentation) 발생
- 분산 holes에 대하여 새로운 프로세스가 생성될 때 점유하는 방식
- Holes에 대하여 배열(Array) 또는 연결리스트(Linked List)로 관리
아니 그래서 단편화가 뭐냐 aloe야!!!!!!!!!!!!!!
농담이고 다시 본론으로 넘어가겠다.
단편화(Fragmentation)
<정의>
- 주기억장치에 프로그램을 할당하고 반납하는 과정에서 발생하는 사용되지 않는 작은 조각 공간
- 주기억장치 상에서 빈번하게 기억장소가 할당되고 반납됨에 따라 기억장소들이 조각들로 나누어지는 현상
단편화는 내부 단편화 == Internal Fragmentation , 외부 단편화 == External Fragmentation 이렇게 두가지로 나뉜다.
이렇게 블록을 고정된 블록으로 나누어 사용하느냐 가변 크기로 나누어 동적으로 할당하여 운영하느냐에 따라
잉여공간, 홀 이 생기는데 그 현상에 대하여 잉여 공간이 생겼다 내부단편화가 발생했다.
홀이 생겼다 외부 단편화가 발생했다라고 하는 것이다.
가변분할 방법을 사용했을때 알아야할 개념들
배치 전략에 대하여 알아보자
어쨋든 가변분할 방법을 사용한다면 크고작은 각각의 크기의 hole들이 있을것이다.
선택 기법:
= 배치 전략(Placement Strategy)
First-Fit: 프로세스가 들어갈 수 있는 첫번째 hole를 선택
Best-Fit: 점유할 때 가장 작은 hole이 발생될 수 있는 공간을 선택
Worst-Fit: 가장 큰 hole을 선택
메모리 통합(Coalescing)
- 프로세스의 종료로 인해 반환된 hole들에 대한 통합이 필요
- Hole들이 인접해 있을 때, 하나의 홀로 통합
- 충분한 크기의 hole를 확보하여 다른 프로세스의 생성이 가능하도록 자원을 관리하는 목적
메모리 집약(압축, Compaction, Garbage-collection)
- 분산된 프로세스 영역을 이동
- 충분한 크기의 hole를 확보하여 다른 프로세스의 생성이 가능하도록 자원을 관리하는 목적
- 단점:
• 운영체제의 잦은 메모리 최적화작업에 따른 성능 저하 발생
• 실시간 시스템의 경우 대기시간이 길어짐
가상 기억장치
주기억장치의 용량보다 큰 프로그램을 실행하기 위해
주기억장치의 이용률과 다중 프로그래밍의 효율을 높이기 위해
실 기억장치 RAM 에서 고정 분할과 가변 분할을 했을때 생기는 단편화를 잡기 위해 등장!!
우리가 사용하는 윈도우 운영체제가 채택하여 사용하고 있다.
비연속 메모리 관리를 통해 단편화를 잡겠다!!!
(하지만 아래 소개할 두 방법 모두 단편화를 잡지 못함)
프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법이다.
앞서 봤던 단편화 문제를 해결하기 위해 제시된 기법으로,
외부 단편화 해소를 위한 페이징(외부 단편화 잡았지만 !!! 내부 단편화 생김 ),
내부 단편화 해소를 위한 세그멘테이션으로(내부를 잡았지만 외부가 생김) 로 나뉜다.
가상 기억장치의 고정 분할과 가변 분할
고정 분할(정적 분할) = 페이징, Page, Paging
- 비연속 메모리 할당 기법을 사용
- 프로세스 하나가 여러 개의 블록으로 나뉘어 메모리에 할당됨
• 페이지(page)의 크기는 모두 동일
쉽게 즉 하드 쪽에다가 하나의 프로세스에 필요한 부분들을 고정적으로 나누어서 (페이지 == 가상기억 장치의 고정분할 조각)으로 저장 하고
램에 올려 사용 하는 것임 이렇게 하면 메모리 안에 외부 단편화 즉 홀을 해결할수 있음 남는 공간이 없게
장점
- 논리 메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절히 배치되기 때문에 외부 단편화가 생기지 않는다.
단점
- 내부 단편화 문제가 발생할 수 있다. 페이지 단위를 작게하면 해결할 수 있지만, 페이지 매핑 과정이 복잡해져 오히려 비효율적이다.
+ 추가개념
공유 페이지
다중 태스크환경에서 공유되는 명령코드들에 대한 공간을 공유
공유 코드는 재 진입을 허용
• 재진입 코드(re-entrant code) 또는 순수 코드(pure code)라고 함 §
오직 읽을 수만 있음
명령코드에 대한 수정 불가
스래싱 = Thrashing
- 프로세스 동작 중 페이지 부재(page fault)가 발생되어 이를 해결하는 과정에서 성능 저하가 발생되는 현 상
- 페이지 교체작업이 많아지면 전반적으로 속도가 느려짐
- 스래싱이 많이 발생하면 페이지 오류율이 상승함
스래싱 방지
- 다중 프로그래밍의 정도를 낮춤
- 동시 실행 프로그램 수를 줄임
- CPU 이용률을 낮춤
- 페이지 부재율을 조절
- 자주 사용하는 페이지들을 주기억 장치에 미리 갖다 놓음 (Working Set, 작업 집합)
가변 분할 = 동적 분할, Segment, Segmentation
- 비연속 메모리 할당 방법
- 프로세스를 동적의 크기를 갖는 여러 개의 세그먼트(Segmentation)로 나눔
- 세그먼트를 나눌 때, 프로그램을 구성하는 서브루틴(subroutine), 프로시저(procedure), 함수 (function) 단위로 함
• 각 세그먼트는 기능을 수행하는 하나의 작은 프로그램으로 간주
세그먼트는 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것을 의미한다. (고정적인 페이지가 아니라)
세그멘테이션은 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식이다.
돼지를 도축할 때, 페이징은 돼지를 같은 크기로 잘라서 보관하는 것이라면 세그멘테이션은 부위 별로 잘라서 보관한다고 이해하면 된다. 이렇듯 세그먼트는 의미가 같지 않는 논리적 내용을 기준으로 프로그램을 분할하기 때문에 크기가 같지 않다.
쉽게 그래서 하드 쪽에 블럭으로 저장 하는게 아니라 함수단위로 저장해서 불러와 결론적으로는 위와 똑같은 구조를
가진다
결론 하드 == 보조 기억장치에 돼지고기를 일정크기로 토막내서(블럭) 저장해 가져오느냐 부위별로 토막내서 (함수)
가져오느냐 => 둘다 비연속 메모리 할당 됨
장점
- 내부 단편화 문제가 해소된다.
- 보호와 공유 기능을 수행할 수 있다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고, 같은 코드 영역은 한 번에 저장할 수 있다.
단점
- 외부 단편화 문제가 생길 수 있다.
참고 자료, 더 읽어보면 좋은 자료들
https://rollercoaster25.tistory.com/108
https://chelseashin.tistory.com/41
https://steady-coding.tistory.com/524
'자료구조, 운영체제, 네트워크, 시스템설계 > NCS' 카테고리의 다른 글
운영체제 기술면접 준비8: 파일 시스템, 디렉터리, 자원 보호 및 보안 (0) | 2022.10.11 |
---|---|
운영체제 기술면접 준비6: 가상 기억장치 구역성, 관리 전략, 교체 알고리즘 (0) | 2022.10.10 |
운영체제 기술면접 준비4: 임계구역, 교착상태 (0) | 2022.10.10 |
운영체제 기술면접 준비3: 스풀링, 버퍼링, 인터럽트, 문맥교환, 스케줄링 (0) | 2022.10.09 |
운영체제 기술면접 준비2: 운영체제의 발달 과정, 성능 평가 기준, 구성요소 , 프로세서와 프로세스 (0) | 2022.10.09 |