Swapping 스와핑이란?
프로그래밍 언어에서 스왑(Swap)이라는 단어는 두 개의 값을 맞바꾼다는 뜻을 가지고 있습니다. 운영체제에서 의미하는 것은 이와 다르지만 결국 맞바꾼다는 개념은 유사해요.
A process must be in memory to be executed.
프로세스는 실행되려면 반드시 메모리에 올라가야해요.
A process, however, can be swapped temporarily out of memory to a backing store and then brought back into memory for continued execution.
근데 프로세스는 메모리에서 잠깐 뒤 저장공간(하드웨어나 SSD)로 빠졌다가 다시 메모리에 돌아왔다가 이런식으로 실행됨에 따라 교체될 수 있습니다. ==> Swapping!
Example
자 예시를 들어볼게요. example! 흐름을 잘 따라오세요!
Swapping이라고 하는 것은 현재 어떤 10개의 프로세스가 유저 공간에 있어요. (최대 메모리에 10개의 프로세스를 올릴 수 있다고 가정합시다.) 그래서 메모리를 다 차지하고 있습니다.
이 상황에서 11번째 프로세스가 실행되었어요. 앗 메모리가 꽉차서 더 올릴 수 없네요. 그래서 생각해낸 게 10개 프로세스가 있는데 그 중 어떤 걸 잠깐 내리고 그 사이에 11번째 프로세스를 실행시키는건 어떨까? 한겁니다. 어떤 하나의 프로세스가 이벤트가 발생하기까지 기다리고 있는데 기다린지가 1시간이 넘었어요. 그럼 얘는 앞으로도 쭉 기다릴 확률이 높겠죠? 그럼 얘를 쫒아내고 그 공간에다가 새로운 프로세스를 집어넣는 겁니다!
근데 이걸 쫒아낼 때 없애버리면 안될거 아니예요. 그 메모리 내용을 어딘가에다가 잠깐 저장을 해놔야겠죠? 당연히 하드디스크나 SSD같은 secondary storage에 저장을 하고 수행을 합니다.
이렇게 프로세스 단위로 쫒애내는 것을 Swap out한다라고 해요!
자, 30분을 더 기다렸더니 아까 그 쫒아낸 프로세스 이벤트 요청이 왔어요! 그럼 이 프로세스를 다시 수행시켜줘야겠죠? 아까 저장해놨던 것을 다시 메모리에 올려서 이 프로세스를 그 다음부터 수행시켜줍니다. 이렇게 다시 로딩하는 것을 swap in한다라고 해요. 이렇게 프로세스 단위로 swap in, swap out하는 것을 swapping이라고 합니다.
하드디스크에 있던 것을 메모리에 다시 로딩하고 시켜야하니까 조금 느립니다.
The context-switch time in such a swapping system is fairly high.
이러한 교체 시스템에서 나타나는 context switch 시간은 생각보다 꽤 높습니다.
하지만 부족한 메모리에 더 많은 프로세스를 실행할 수 있다는 큰 장점이 있어요!
Swapping과 VMM차이?
이 개념은 우리가 뒤에서 할 Virtual Memory Management와 유사해요. 애초에 가상 메모리라는 개념이, 메인 메모리는 8기가인데 10 기가짜리 프로그램을 돌리게 해주는 방안이니까요! 10기가 중에 8기가만 일단 메모리에 올려놓고 2기가는 하드디스크에 저장하고 있다가 필요하면 부분적으로 바꿔줘야 겠죠? 그걸 프로세스 단위로 하면 Swapping이지만 프로세스 단위로 하지 않고 어떤 다른 단위로 이 Swap in Swap out을 합니다. VMM은 프로세스 단위로 Swap in swap out을 하지 않아요. 이 차이입니다. (뒤에서 배우겠지만 VMM은 프로세스보다 더 작은 단위인 paging단위로 스와핑을 실행해요)
굳이 세분해서 나누면 이런 차이가 있지만, 교체 그 자체를 그냥 Swapping이라고 하기도 합니다. 그래서 VMM에서 페이지 단위로 swapping이 일어난다 하면 틀린말은 아니예요.ㅎㅎ
스와핑(Swapping): 주기억장치에 적재한 하나의 프로세스와 보조기억장치에 적재한 다른 프로세스의 메모리를 교체하는 기법
--> 가상 메모리 관리 방법인 페이징 기법으로 발전하였습니다. 다음 포스팅에서는 페이징에 대해 알아볼게요.
'별걸다하는 IT > 운영체제 OS' 카테고리의 다른 글
[운영체제]HDD 하드디스크 구조, magnetic disk 자기디스크 구조, 실린더 (5) | 2019.02.26 |
---|---|
[운영체제]디스크 스케줄링 FCFS(First Come First Served) 선입선처리 스케줄링 (0) | 2019.02.26 |
[운영체제]교착상태 회피-은행원 알고리즘(Banker's Algorithm) 쉬운 예시, 안전상태, 불안전상태 (12) | 2019.02.25 |
[운영체제]세마포어(semaphore) 완전 쉬운 이해! wait(), signal(), 이진, 계수형 (19) | 2019.02.25 |
[운영체제]Dynamic Loading 동적적재 & Overlays 오버레이 (paging VMM과 차이점) (1) | 2019.02.04 |
최신 댓글